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 1pPqgk-0001wu-Dk for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Feb 2023 20:05:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pPqgj-0005NT-8C for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Feb 2023 20:05:05 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pPqgh-0005Mt-TV for pgsql-hackers@lists.postgresql.org; Wed, 08 Feb 2023 20:05:04 +0000 Received: from smtp-fw-80006.amazon.com ([99.78.197.217]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pPqgd-0001Rc-6G for pgsql-hackers@postgresql.org; Wed, 08 Feb 2023 20:05:02 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1675886699; x=1707422699; h=from:to:cc:date:message-id:references:in-reply-to: mime-version:subject; bh=RQxGrmWbZv1pqNp/vlC4RaD7L+zLcthC7GSwrEZMIJs=; b=iMOlFz8/xSgKUf3INYtW+CyzTF4ymBJ14mc3Duyd3/ti7AwIeRSeePh1 zKB3xEthY45F36xkvugPtnc/r9hqxxWy6VNOMDnW38rO8zEZs863kcJg3 jqfwyN3cGil2jk2C9OElg6FGbGviDVNlfUrqP2ITsPbb27OKR+YbfOiPO A=; X-Amazon-filename: slru_to_buffer_cache_with_page_headers_v6.patch X-IronPort-AV: E=Sophos;i="5.97,281,1669075200"; d="scan'208,223";a="179847971" Subject: Re: SLRUs in the main buffer pool - Page Header definitions Thread-Topic: SLRUs in the main buffer pool - Page Header definitions Received: from pdx4-co-svc-p1-lb2-vlan2.amazon.com (HELO email-inbound-relay-pdx-2b-m6i4x-0ec33b60.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; 08 Feb 2023 20:04:56 +0000 Received: from EX13MTAUWC002.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan2.pdx.amazon.com [10.236.137.194]) by email-inbound-relay-pdx-2b-m6i4x-0ec33b60.us-west-2.amazon.com (Postfix) with ESMTPS id 00FFEA2C8C; Wed, 8 Feb 2023 20:04:55 +0000 (UTC) Received: from EX19D005UWC001.ant.amazon.com (10.13.138.164) by EX13MTAUWC002.ant.amazon.com (10.43.162.240) with Microsoft SMTP Server (TLS) id 15.0.1497.45; Wed, 8 Feb 2023 20:04:54 +0000 Received: from EX19D035UEA003.ant.amazon.com (10.252.134.113) by EX19D005UWC001.ant.amazon.com (10.13.138.164) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.24; Wed, 8 Feb 2023 20:04:53 +0000 Received: from EX19D035UEA003.ant.amazon.com ([fe80::b768:c926:7fea:2016]) by EX19D035UEA003.ant.amazon.com ([fe80::b768:c926:7fea:2016%3]) with mapi id 15.02.1118.024; Wed, 8 Feb 2023 20:04:53 +0000 From: "Bagga, Rishu" To: Andres Freund CC: pgsql-hackers , Heikki Linnakangas , Thomas Munro , "Debnath, Shawn" , vignesh C Thread-Index: AQHYhnvxezKTgPNs7k2tXj3iuMBOO630OQiAgDqHS4CAHByDAIAlRqyAgB23l4CACt7JgIAqcQcAgAIrUYCAAQfmgA== Date: Wed, 8 Feb 2023 20:04:52 +0000 Message-ID: References: <7C4D53F1-A156-4ABC-9B89-B2C253D5FF74@amazon.com> <7BAF384A-654C-4877-BB4D-EDE4E44A9326@amazon.com> <20230207202019.mhovw7aopjy3bile@awork3.anarazel.de> In-Reply-To: <20230207202019.mhovw7aopjy3bile@awork3.anarazel.de> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [10.119.224.243] Content-Type: multipart/mixed; boundary="_002_BBA4E674ABCC4788AE1C8EB295B217FEamazoncom_" MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_BBA4E674ABCC4788AE1C8EB295B217FEamazoncom_ Content-Type: text/plain; charset="utf-8" Content-ID: <88859EC0C1C6224AB5ECC4669E323A4F@amazon.com> Content-Transfer-Encoding: base64 PiBVbmZvcnR1bmF0ZWx5IGEgcXVpdGUgbGFyZ2UgcGF0Y2gsIHdpdGggdGhpcyBsaXR0bGUgZXhw bGFuYXRpb24sIGlzDQo+IGhhcmQgdG8gcmV2aWV3LiBJIGNvdWxkIHJlYWQgdGhyb3VnaCB0aGUg ZW50aXJlIHRocmVhZCB0byB0cnkgdG8gDQo+IGZpZ3VyZSBvdXQgd2hhdCB0aGlzIGlzIGRvaW5n LCBidXQgSSByZWFsbHkgc2hvdWxkbid0IGhhdmUgdG8uDQogDQo+IFlvdSdyZSBjaGFuZ2luZyBx dWl0ZSBmdW5kYW1lbnRhbCBBUElzIGFjcm9zcyB0aGUgdHJlZS4gV2h5IGlzIHRoYXQgDQo+IHJl cXVpcmVkIGZvciB0aGUgdG9waWMgYXQgaGFuZD8gV2h5IGlzIGl0IHdvcnRoIGRvaW5nIHRoYXQs IGdpdmVuIA0KPiBpdCdsbCBicmVhayBsb2FkcyBvZiBleHRlbnNpb25zPw0KIA0KSGkgQW5kcmVz LCANCg0KVGhhbmtzIGZvciB5b3VyIHJlc3BvbnNlLg0KDQpUbyBzdW1tYXJpemUsIG91ciB1bmRl cmx5aW5nIGVmZm9ydCBpcyB0byBtb3ZlIHRoZSBTTFJVcyB0byB0aGUgYnVmZmVyIA0KY2FjaGUu IFdlIHdlcmUgd29ya2luZyB3aXRoIFRob21hcyBNdW5ybyBvZmYgYSBwYXRjaCBoZSBpbnRyb2R1 Y2VkIGhlcmUNClsxXS4gTXVucm/igJlzIHBhdGNoIG1vdmVzIFNMUlVzIHRvIHRoZSBidWZmZXIg Y2FjaGUgYnkgaW50cm9kdWNpbmcgdGhlDQpwc2V1ZG8gZGIgaWQgOSB0byBkZW5vdGUgU0xSVSBw YWdlcywgYnV0IG1haW50YWlucyB0aGUgY3VycmVudCDigJxyYXfigJ0NCmRhdGEgZm9ybWF0IG9m IFNMUlUgcGFnZXMuIFRoZSBhZGRpdGlvbiBvZiBwYWdlIGhlYWRlcnMgaW4gb3VyIHBhdGNoDQpy ZXNvbHZlcyB0aGlzIGlzc3VlIFsyXSBNdW5ybyBtZW50aW9ucyBpbiB0aGlzIGVtYWlsIFszXS4g DQoNCkhlaWtraSBMaW5uYWthbmdhcyB0aGVuIGludHJvZHVjZWQgIHBhdGNoIG9uIHRvcCBvZiBN dW5yb+KAmXMgcGF0Y2ggdGhhdCANCm1vZHVsYXJpemVzIHRoZSBzdG9yYWdlIG1hbmFnZXIsIGFs bG93aW5nIFNMUlVzIHRvIHVzZSBpdCBbNF0uIEluc3RlYWQNCm9mIHVzaW5nIGRiIGlkIDksIFNM UlVzIHVzZSBzcGNPaWQgOSwgYW5kIGVhY2ggU0xSVSBpcyBpdHMgb3duIHJlbGF0aW9uLg0KSGVy ZSwgSGVpa2tpIHNpbXBsaWZpZXMgdGhlIHN0b3JhZ2UgbWFuYWdlciBieSBoYXZpbmcgZWFjaCBz dHJ1Y3QgYmUgDQpyZXNwb25zaWJsZSBmb3IganVzdCBvbmUgZm9yayBvZiBhIHJlbGF0aW9uOyB0 aHVzIGluY3JlYXNpbmcNCmV4dGVuc2liaWxpdHkgb2YgdGhlIHNtZ3IgQVBJLCBpbmNsdWRpbmcg Zm9yIFNMUlVzLiBbNV0gV2UgaW50ZWdyYXRlZA0Kb3VyIGNoYW5nZXMgaW50cm9kdWNpbmcgcGFn ZSBoZWFkZXJzIGZvciBTTFJVIHBhZ2VzLCBhbmQgdXBncmFkZSBsb2dpYw0KdG8gSGVpa2tp4oCZ cyBsYXRlc3QgcGF0Y2guIA0KIA0KPiA+IFJlYmFzZWQgcGF0Y2ggYXMgcGVyIGxhdGVzdCBjb21t dW5pdHkgY2hhbmdlcyBzaW5jZSBsYXN0IGVtYWlsLg0KDQo+IFRoaXMgdmVyc2lvbiBkb2Vzbid0 IGFjdHVhbGx5IGJ1aWxkLg0KPiBodHRwczovL2NpcnJ1cy1jaS5jb20vdGFzay80NTEyMzEwMTkw OTMxOTY4DQo+IFsxOTo0MzoyMC4xMzFdIEZBSUxFRDogDQo+IHNyYy90ZXN0L21vZHVsZXMvdGVz dF9zbHJ1L3Rlc3Rfc2xydS5zby5wL3Rlc3Rfc2xydS5jLm8NCg0KDQpBcyBmb3IgdGhlIGJ1aWxk IGZhaWx1cmVzLCBJIHdhcyB1c2luZyBtYWtlIGluc3RhbGwgdG8gYnVpbGQsIGFuZCBtYWtlDQpj aGVjayBmb3IgcmVncmVzc2lvbiB0ZXN0cy4gVGhlIGJ1aWxkIGZhaWx1cmVzIGluIHRoaXMgbGlu ayAgYXJlIGZyb20NCnVuaXQgdGVzdHMgZGVwZW5kZW50IG9uIGN1c3RvbSBTTFJVcywgd2hpY2gg d291bGQgbm8gbG9uZ2VyIGFwcGx5LiBJ4oCZdmUNCmF0dGFjaGVkIGFub3RoZXIgcGF0Y2ggdGhh dCByZW1vdmVzIHRoZXNlIHRlc3RzLg0KDQpbMV0gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcv bWVzc2FnZQ0KLWlkL0NBJTJCaFVLR0tDa2J0T3V0Y3o1TThaJTNEMHBnQWt3ZGlSNTdMeGs3ODAz ckdzZ2lCTlNUNnclNDBtYWlsLmdtYWlsDQouY29tDQoNClsyXSDigJxJIG5lZWRlZCB0byBkaXNh YmxlIGNoZWNrc3VtcyBhbmQgaW4tcGFnZSBMU05zLCBzaW5jZSBTTFJVIHBhZ2VzDQpob2xkIHJh dyBkYXRhIHdpdGggbm8gaGVhZGVyLiBXZSdkIHByb2JhYmx5IGV2ZW50dWFsbHkgd2FudCByZWd1 bGFyDQooc3RhbmRhcmQ/IGZvcm1hdHRlZD8pIHBhZ2VzICh0aGUgcmVhbCB3b3JrIGhlcmUgbWF5 IGJlIGltcGxlbWVudGluZw0KRlBJIGZvciBTTFJVcyBzbyB0aGF0IGNoZWNrc3VtcyBkb24ndCBi cmVhayB5b3VyIGRhdGFiYXNlIG9uIHRvcm4NCndyaXRlcykuIOKAnSANCg0KWzNdIGh0dHBzOi8v d3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvQ0ElMkJoVUtHS0FZemU5OUItams5Tm9NcC0N CjJCRHFBZ2lSQzRvSnYlMkJiRnhnaE5nZGllcThRJTQwbWFpbC5nbWFpbC5jb20NCg0KWzRdIGh0 dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvZmxhdC8xMjg3MDliYy05OTJjLWI1 N2EtNzE3NC0NCjA5ODQzM2I3ZmFhNCU0MGlraS5maSNhNzhkNjI1MDMyNzc5NWU5NWIwMmU5MzA1 ZTJkMTUzZQ0KDQpbNV0g4oCcSSB0aGluayB0aGluZ3Mgd291bGQgYmUgbW9yZSBjbGVhciBpZiB3 ZSANCnVuYnVuZGxlZCB0aGUgZm9ya3MgYXQgdGhlIFNNR1IgbGV2ZWwsIHNvIHRoYXQgd2Ugd291 bGQgaGF2ZSBhIHNlcGFyYXRlIA0KU01nclJlbGF0aW9uIHN0cnVjdCBmb3IgZWFjaCBmb3JrLiBB bmQgbGV0J3MgcmVuYW1lIGl0IHRvIFNNZ3JGaWxlIHRvIA0KbWFrZSB0aGUgcm9sZSBtb3JlIGNs ZWFyLiBJIHRoaW5rIHRoYXQgd291bGQgcmVkdWNlIHRoZSBjb25mdXNpb24gd2hlbiANCndlIHN0 YXJ0IHVzaW5nIGl0IGZvciBTTFJVczsgYW4gU0xSVSBpcyBub3QgYSByZWxhdGlvbiwgYWZ0ZXIg YWxsLiBtZC5jIA0Kd291bGQgc3RpbGwgc2VnbWVudCBlYWNoIGxvZ2ljYWwgZmlsZSBpbnRvIDEg R0Igc2VnbWVudHMsIGJ1dCBpdCB3b3VsZCANCm5vdCBuZWVkIHRvIGRlYWwgd2l0aCBmb3Jrcy7i gJ0NCg0KDQoNCg0KDQo= --_002_BBA4E674ABCC4788AE1C8EB295B217FEamazoncom_ Content-Type: application/octet-stream; name="slru_to_buffer_cache_with_page_headers_v6.patch" Content-Description: slru_to_buffer_cache_with_page_headers_v6.patch Content-Disposition: attachment; filename="slru_to_buffer_cache_with_page_headers_v6.patch"; size=381931; creation-date="Wed, 08 Feb 2023 20:04:52 GMT"; modification-date="Wed, 08 Feb 2023 20:04:52 GMT" Content-ID: <76B8C910A331334FB287ACB4744219D3@amazon.com> Content-Transfer-Encoding: base64 RnJvbSAwMzUzMDNlMTE4ZWYyMTIxMWVmYmVlY2UwYzk3YTcyNWRmMDVlMTJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaXNodSBCYWdnYSA8YmFncmlzaHVAYW1hem9uLmNvbT4KRGF0 ZTogVGh1LCAxNSBTZXAgMjAyMiAwMDo1NToyNSArMDAwMApTdWJqZWN0OiBbUEFUQ0hdIHNscnUg dG8gYnVmZmVyY2FjaGUgKyBwYWdlIGhlYWRlcnMgKyB1cGdyYWRlCgotLS0KIGNvbnRyaWIvYW1j aGVjay92ZXJpZnlfbmJ0cmVlLmMgICAgICAgICAgICAgfCAgICAyICstCiBjb250cmliL2Jsb29t L2JsaW5zZXJ0LmMgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogY29udHJpYi9wZ19wcmV3 YXJtL2F1dG9wcmV3YXJtLmMgICAgICAgICAgICB8ICAgIDIgKy0KIGNvbnRyaWIvcGdfcHJld2Fy bS9wZ19wcmV3YXJtLmMgICAgICAgICAgICAgfCAgICA0ICstCiBjb250cmliL3BnX3Zpc2liaWxp dHkvcGdfdmlzaWJpbGl0eS5jICAgICAgIHwgICAgNSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dp c3QvZ2lzdGJ1aWxkLmMgICAgICAgICB8ICAgMTEgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hwYWdlLmMgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jICAgIHwgICAzMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcmV3 cml0ZWhlYXAuYyAgICAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2li aWxpdHltYXAuYyAgICAgfCAgIDQxICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJl ZS5jICAgICAgICAgIHwgICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0 LmMgICAgICAgICB8ICAgIDggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BnaW5zZXJ0 LmMgICAgICAgfCAgIDE3ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jICAg ICAgICAgIHwgICAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jICAgICAg ICAgICB8ICAyMjcgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYyAg ICAgIHwgIDE5OSArLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jICAg ICAgfCAgNTA4ICsrKy0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYyAgICAg ICAgICAgfCAxNDg0ICsrLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3N1YnRyYW5zLmMgICAgICAgfCAgMTE0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94YWN0LmMgICAgICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nLmMgICAgICAgICAgIHwgICAxNSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z3ByZWZldGNoZXIuYyB8ICAgMjggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1 dGlscy5jICAgICAgfCAgIDE3ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL2NhdGFsb2cuYyAgICAg ICAgICAgICAgIHwgICA1MyArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jICAgICAgICAg ICAgICAgICB8ICAgIDQgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3RvcmFnZS5jICAgICAgICAg ICAgICAgfCAgMjA1ICsrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyAgICAgICAgICAg ICAgICB8ICAgOTcgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYyAgICAgICAg ICAgfCAgICA4ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgICAgICAgICAg IHwgICAgOCArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICB8 ICAgMTkgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgICAgICAgfCAg IDE3ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAgIHwgIDM4 MCArKy0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYuYyAgICAgICB8ICAg MjUgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvZnJlZXNwYWNlL2ZyZWVzcGFjZS5jICAgfCAgIDQx ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgICAgICAgICAgICAgIHwgICAgNCAt CiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgICAgICAgIHwgICA3MiArLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYyAgICAgICAgICB8ICAgMjMgKy0KIHNy Yy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jICAgICAgICAgICAgICAgfCAgMzY2ICsrLS0tCiBz cmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jICAgICAgICAgICAgIHwgIDQwMiArKystLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMuYyAgICAgICAgICAgICB8ICAgMjAgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMgICAgICAgICAgICAgfCAgIDE3ICstCiBzcmMv YmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgIHwgICAyNyArLQogc3JjL2Jh Y2tlbmQvdXRpbHMvbW1nci9tY3h0LmMgICAgICAgICAgICAgICB8ICAgMTMgKy0KIHNyYy9iaW4v cGdfdXBncmFkZS9maWxlLmMgICAgICAgICAgICAgICAgICAgfCAgMTc1ICsrLQogc3JjL2Jpbi9w Z191cGdyYWRlL2Z1bmN0aW9uLmMgICAgICAgICAgICAgICB8ICAgNjYgKwogc3JjL2Jpbi9wZ191 cGdyYWRlL3BnX3VwZ3JhZGUuYyAgICAgICAgICAgICB8ICAgNzQgKy0KIHNyYy9iaW4vcGdfdXBn cmFkZS9wZ191cGdyYWRlLmggICAgICAgICAgICAgfCAgIDE5ICstCiBzcmMvY29tbW9uL3JlbHBh dGguYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMSArLQogc3JjL2luY2x1ZGUvYWNjZXNz L2Nsb2cuaCAgICAgICAgICAgICAgICAgICB8ICAgIDYgLQogc3JjL2luY2x1ZGUvYWNjZXNzL2Nv bW1pdF90cy5oICAgICAgICAgICAgICB8ICAgIDMgLQogc3JjL2luY2x1ZGUvYWNjZXNzL211bHRp eGFjdC5oICAgICAgICAgICAgICB8ICAgIDMgLQogc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaCAg ICAgICAgICAgICAgICAgICB8ICAxODEgKy0tCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWRlZnMu aCAgICAgICAgICAgICAgIHwgICAxOSArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWxpc3QuaCAg ICAgICAgICAgICAgIHwgICAzMCArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJhbnMuaCAgICAg ICAgICAgICAgIHwgICAgMyAtCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3N0b3JhZ2UuaCAgICAgICAg ICAgICAgIHwgICAxMSArLQogc3JjL2luY2x1ZGUvY29tbW9uL3JlbHBhdGguaCAgICAgICAgICAg ICAgICB8ICAgMTUgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oICAgICAg ICAgfCAgIDExICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oICAgICAgICAgICAgICAg IHwgICAzOCArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdlLmggICAgICAgICAgICAgICB8 ICAgMTcgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oICAgICAgICAgICAgICAgICAgICB8ICAg MjggKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCAgICAgICAgfCAgIDI5 ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaCAgICAgICAgICAgICAgICAgIHwgICA5OSAr LQogc3JjL2luY2x1ZGUvdXRpbHMvaW52YWwuaCAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0K IHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDMzICstCiBz cmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvc3RhdHMub3V0ICAgICAgIHwgIDM1NiArLS0tLQog c3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL3N0YXRzLnNwZWMgICAgICAgICB8ICAgNjAgKy0KIHNy Yy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAgICAxIC0KIHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHMub3V0ICAgICAgICAgfCAgIDM4IC0KIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAgICAgfCAgICA3IC0KIHNyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3N0YXRzLnNxbCAgICAgICAgICAgICAgfCAgIDE1IC0KIHNyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3N5c3ZpZXdzLnNxbCAgICAgICAgICAgfCAgICAzIC0KIDcyIGZpbGVzIGNoYW5nZWQs IDIxOTggaW5zZXJ0aW9ucygrKSwgMzcxNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWRlZnMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9p bmNsdWRlL2FjY2Vzcy9zbHJ1bGlzdC5oCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL3Zl cmlmeV9uYnRyZWUuYyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKaW5kZXggMjU3 Y2ZmNjcxYmQuLjJhYjgzN2MzMDYyIDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2svdmVyaWZ5 X25idHJlZS5jCisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKQEAgLTMyNCw3 ICszMjQsNyBAQCBidF9pbmRleF9jaGVja19pbnRlcm5hbChPaWQgaW5kcmVsaWQsIGJvb2wgcGFy ZW50Y2hlY2ssIGJvb2wgaGVhcGFsbGluZGV4ZWQsCiAJCWJvb2wJCWhlYXBrZXlzcGFjZSwKIAkJ CQkJYWxsZXF1YWxpbWFnZTsKIAotCQlpZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKGlu ZHJlbCksIE1BSU5fRk9SS05VTSkpCisJCWlmICghc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3Io aW5kcmVsLCBNQUlOX0ZPUktOVU0pKSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5ERVhfQ09SUlVQVEVEKSwKIAkJCQkJIGVycm1zZygiaW5kZXggXCIlc1wiIGxh Y2tzIGEgbWFpbiByZWxhdGlvbiBmb3JrIiwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxvb20vYmxp bnNlcnQuYyBiL2NvbnRyaWIvYmxvb20vYmxpbnNlcnQuYwppbmRleCBmODE0NDJlZmIzZi4uNDli OTUyZjNjM2IgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmxpbnNlcnQuYworKysgYi9jb250 cmliL2Jsb29tL2JsaW5zZXJ0LmMKQEAgLTE3Nyw5ICsxNzcsOSBAQCBibGJ1aWxkZW1wdHkoUmVs YXRpb24gaW5kZXgpCiAJICogdGhpcyBldmVuIHdoZW4gd2FsX2xldmVsPW1pbmltYWwuCiAJICov CiAJUGFnZVNldENoZWNrc3VtSW5wbGFjZShtZXRhcGFnZSwgQkxPT01fTUVUQVBBR0VfQkxLTk8p OwotCXNtZ3J3cml0ZShSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLCBJTklUX0ZPUktOVU0sIEJMT09N X01FVEFQQUdFX0JMS05PLAorCXNtZ3J3cml0ZShSZWxhdGlvbkdldFNtZ3IoaW5kZXgsIElOSVRf Rk9SS05VTSksIEJMT09NX01FVEFQQUdFX0JMS05PLAogCQkJICAoY2hhciAqKSBtZXRhcGFnZSwg dHJ1ZSk7Ci0JbG9nX25ld3BhZ2UoJihSZWxhdGlvbkdldFNtZ3IoaW5kZXgpKS0+c21ncl9ybG9j YXRvci5sb2NhdG9yLCBJTklUX0ZPUktOVU0sCisJbG9nX25ld3BhZ2UoJmluZGV4LT5yZF9sb2Nh dG9yLCBJTklUX0ZPUktOVU0sCiAJCQkJQkxPT01fTUVUQVBBR0VfQkxLTk8sIG1ldGFwYWdlLCB0 cnVlKTsKIAogCS8qCkBAIC0xODcsNyArMTg3LDcgQEAgYmxidWlsZGVtcHR5KFJlbGF0aW9uIGlu ZGV4KQogCSAqIHdyaXRlIGRpZCBub3QgZ28gdGhyb3VnaCBzaGFyZWRfYnVmZmVycyBhbmQgdGhl cmVmb3JlIGEgY29uY3VycmVudAogCSAqIGNoZWNrcG9pbnQgbWF5IGhhdmUgbW92ZWQgdGhlIHJl ZG8gcG9pbnRlciBwYXN0IG91ciB4bG9nIHJlY29yZC4KIAkgKi8KLQlzbWdyaW1tZWRzeW5jKFJl bGF0aW9uR2V0U21ncihpbmRleCksIElOSVRfRk9SS05VTSk7CisJc21ncmltbWVkc3luYyhSZWxh dGlvbkdldFNtZ3IoaW5kZXgsIElOSVRfRk9SS05VTSkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wcmV3YXJtL2F1dG9wcmV3YXJtLmMgYi9jb250cmliL3BnX3ByZXdhcm0vYXV0 b3ByZXdhcm0uYwppbmRleCA5MzgzNTQ0OWMwZS4uNzRjYzhkZjY0ODEgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcGdfcHJld2FybS9hdXRvcHJld2FybS5jCisrKyBiL2NvbnRyaWIvcGdfcHJld2FybS9h dXRvcHJld2FybS5jCkBAIC01MzUsNyArNTM1LDcgQEAgYXV0b3ByZXdhcm1fZGF0YWJhc2VfbWFp bihEYXR1bSBtYWluX2FyZykKIAkJCSAqLwogCQkJaWYgKGJsay0+Zm9ya251bSA+IEludmFsaWRG b3JrTnVtYmVyICYmCiAJCQkJYmxrLT5mb3JrbnVtIDw9IE1BWF9GT1JLTlVNICYmCi0JCQkJc21n cmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgYmxrLT5mb3JrbnVtKSkKKwkJCQlzbWdyZXhp c3RzKFJlbGF0aW9uR2V0U21ncihyZWwsIGJsay0+Zm9ya251bSkpKQogCQkJCW5ibG9ja3MgPSBS ZWxhdGlvbkdldE51bWJlck9mQmxvY2tzSW5Gb3JrKHJlbCwgYmxrLT5mb3JrbnVtKTsKIAkJCWVs c2UKIAkJCQluYmxvY2tzID0gMDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcHJld2FybS9wZ19w cmV3YXJtLmMgYi9jb250cmliL3BnX3ByZXdhcm0vcGdfcHJld2FybS5jCmluZGV4IDU0MjA5OTI0 YWVkLi40NzliYmFmYjc0NSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19wcmV3YXJtL3BnX3ByZXdh cm0uYworKysgYi9jb250cmliL3BnX3ByZXdhcm0vcGdfcHJld2FybS5jCkBAIC0xMDksNyArMTA5 LDcgQEAgcGdfcHJld2FybShQR19GVU5DVElPTl9BUkdTKQogCQlhY2xjaGVja19lcnJvcihhY2xy ZXN1bHQsIGdldF9yZWxraW5kX29ianR5cGUocmVsLT5yZF9yZWwtPnJlbGtpbmQpLCBnZXRfcmVs X25hbWUocmVsT2lkKSk7CiAKIAkvKiBDaGVjayB0aGF0IHRoZSBmb3JrIGV4aXN0cy4gKi8KLQlp ZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIGZvcmtOdW1iZXIpKQorCWlmICgh c21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsLCBmb3JrTnVtYmVyKSkpCiAJCWVyZXBvcnQo RVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJ CQkJIGVycm1zZygiZm9yayBcIiVzXCIgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgcmVsYXRpb24i LApAQCAtMTc3LDcgKzE3Nyw3IEBAIHBnX3ByZXdhcm0oUEdfRlVOQ1RJT05fQVJHUykKIAkJZm9y IChibG9jayA9IGZpcnN0X2Jsb2NrOyBibG9jayA8PSBsYXN0X2Jsb2NrOyArK2Jsb2NrKQogCQl7 CiAJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQkJc21ncnJlYWQoUmVsYXRpb25HZXRTbWdy KHJlbCksIGZvcmtOdW1iZXIsIGJsb2NrLCBibG9ja2J1ZmZlci5kYXRhKTsKKwkJCXNtZ3JyZWFk KFJlbGF0aW9uR2V0U21ncihyZWwsIGZvcmtOdW1iZXIpLCBibG9jaywgYmxvY2tidWZmZXIuZGF0 YSk7CiAJCQkrK2Jsb2Nrc19kb25lOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ192 aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYyBiL2NvbnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNp YmlsaXR5LmMKaW5kZXggMmE0YWNmZDFlZWUuLmJiN2NkOGVjNDNkIDEwMDY0NAotLS0gYS9jb250 cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jCisrKyBiL2NvbnRyaWIvcGdfdmlzaWJp bGl0eS9wZ192aXNpYmlsaXR5LmMKQEAgLTM4NiwxMyArMzg2LDE0IEBAIHBnX3RydW5jYXRlX3Zp c2liaWxpdHlfbWFwKFBHX0ZVTkNUSU9OX0FSR1MpCiAJY2hlY2tfcmVsYXRpb25fcmVsa2luZChy ZWwpOwogCiAJLyogRm9yY2libHkgcmVzZXQgY2FjaGVkIGZpbGUgc2l6ZSAqLwotCVJlbGF0aW9u R2V0U21ncihyZWwpLT5zbWdyX2NhY2hlZF9uYmxvY2tzW1ZJU0lCSUxJVFlNQVBfRk9SS05VTV0g PSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJUmVsYXRpb25HZXRTbWdyKHJlbCwgVklTSUJJTElUWU1B UF9GT1JLTlVNKS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJlcjsKIAog CWJsb2NrID0gdmlzaWJpbGl0eW1hcF9wcmVwYXJlX3RydW5jYXRlKHJlbCwgMCk7CiAJaWYgKEJs b2NrTnVtYmVySXNWYWxpZChibG9jaykpCiAJewogCQlmb3JrID0gVklTSUJJTElUWU1BUF9GT1JL TlVNOwotCQlzbWdydHJ1bmNhdGUoUmVsYXRpb25HZXRTbWdyKHJlbCksICZmb3JrLCAxLCAmYmxv Y2spOworCQlEcm9wUmVsYXRpb25CdWZmZXJzKHJlbC0+cmRfbG9jYXRvciwgcmVsLT5yZF9iYWNr ZW5kLCAmZm9yaywgMSwgJmJsb2NrKTsKKwkJc21ncnRydW5jYXRlX211bHRpKHJlbC0+cmRfbG9j YXRvciwgcmVsLT5yZF9iYWNrZW5kLCAmZm9yaywgMSwgJmJsb2NrKTsKIAl9CiAKIAlpZiAoUmVs YXRpb25OZWVkc1dBTChyZWwpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3Qv Z2lzdGJ1aWxkLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGQuYwppbmRleCA3 YTZkOTNiYjg3OS4uN2FlNTYxODM3N2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aXN0L2dpc3RidWlsZC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RidWlsZC5j CkBAIC00MTYsNyArNDE2LDcgQEAgZ2lzdF9pbmRleHNvcnRidWlsZChHSVNUQnVpbGRTdGF0ZSAq c3RhdGUpCiAJICogcmVwbGFjZWQgd2l0aCB0aGUgcmVhbCByb290IHBhZ2UgYXQgdGhlIGVuZC4K IAkgKi8KIAlwYWdlID0gcGFsbG9jMChCTENLU1opOwotCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRT bWdyKHN0YXRlLT5pbmRleHJlbCksIE1BSU5fRk9SS05VTSwgR0lTVF9ST09UX0JMS05PLAorCXNt Z3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5pbmRleHJlbCwgTUFJTl9GT1JLTlVNKSwg R0lTVF9ST09UX0JMS05PLAogCQkJICAgcGFnZSwgdHJ1ZSk7CiAJc3RhdGUtPnBhZ2VzX2FsbG9j YXRlZCsrOwogCXN0YXRlLT5wYWdlc193cml0dGVuKys7CkBAIC00NjAsNyArNDYwLDcgQEAgZ2lz dF9pbmRleHNvcnRidWlsZChHSVNUQnVpbGRTdGF0ZSAqc3RhdGUpCiAJLyogV3JpdGUgb3V0IHRo ZSByb290ICovCiAJUGFnZVNldExTTihsZXZlbHN0YXRlLT5wYWdlc1swXSwgR2lzdEJ1aWxkTFNO KTsKIAlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKGxldmVsc3RhdGUtPnBhZ2VzWzBdLCBHSVNUX1JP T1RfQkxLTk8pOwotCXNtZ3J3cml0ZShSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsKSwg TUFJTl9GT1JLTlVNLCBHSVNUX1JPT1RfQkxLTk8sCisJc21ncndyaXRlKFJlbGF0aW9uR2V0U21n cihzdGF0ZS0+aW5kZXhyZWwsIE1BSU5fRk9SS05VTSksIEdJU1RfUk9PVF9CTEtOTywKIAkJCSAg bGV2ZWxzdGF0ZS0+cGFnZXNbMF0sIHRydWUpOwogCWlmIChSZWxhdGlvbk5lZWRzV0FMKHN0YXRl LT5pbmRleHJlbCkpCiAJCWxvZ19uZXdwYWdlKCZzdGF0ZS0+aW5kZXhyZWwtPnJkX2xvY2F0b3Is IE1BSU5fRk9SS05VTSwgR0lTVF9ST09UX0JMS05PLApAQCAtNDc5LDcgKzQ3OSw3IEBAIGdpc3Rf aW5kZXhzb3J0YnVpbGQoR0lTVEJ1aWxkU3RhdGUgKnN0YXRlKQogCSAqIHN0aWxsIG5vdCBiZSBv biBkaXNrIHdoZW4gdGhlIGNyYXNoIG9jY3Vycy4KIAkgKi8KIAlpZiAoUmVsYXRpb25OZWVkc1dB TChzdGF0ZS0+aW5kZXhyZWwpKQotCQlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0U21ncihzdGF0 ZS0+aW5kZXhyZWwpLCBNQUlOX0ZPUktOVU0pOworCQlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0 U21ncihzdGF0ZS0+aW5kZXhyZWwsIE1BSU5fRk9SS05VTSkpOwogfQogCiAvKgpAQCAtNjU3LDcg KzY1Nyw3IEBAIGdpc3RfaW5kZXhzb3J0YnVpbGRfZmx1c2hfcmVhZHlfcGFnZXMoR0lTVEJ1aWxk U3RhdGUgKnN0YXRlKQogCiAJCVBhZ2VTZXRMU04ocGFnZSwgR2lzdEJ1aWxkTFNOKTsKIAkJUGFn ZVNldENoZWNrc3VtSW5wbGFjZShwYWdlLCBibGtubyk7Ci0JCXNtZ3JleHRlbmQoUmVsYXRpb25H ZXRTbWdyKHN0YXRlLT5pbmRleHJlbCksIE1BSU5fRk9SS05VTSwgYmxrbm8sIHBhZ2UsCisJCXNt Z3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5pbmRleHJlbCwgTUFJTl9GT1JLTlVNKSwg Ymxrbm8sIHBhZ2UsCiAJCQkJICAgdHJ1ZSk7CiAKIAkJc3RhdGUtPnBhZ2VzX3dyaXR0ZW4rKzsK QEAgLTk0Myw4ICs5NDMsNyBAQCBnaXN0QnVpbGRDYWxsYmFjayhSZWxhdGlvbiBpbmRleCwKIAkg Ki8KIAlpZiAoKGJ1aWxkc3RhdGUtPmJ1aWxkTW9kZSA9PSBHSVNUX0JVRkZFUklOR19BVVRPICYm CiAJCSBidWlsZHN0YXRlLT5pbmR0dXBsZXMgJSBCVUZGRVJJTkdfTU9ERV9TV0lUQ0hfQ0hFQ0tf U1RFUCA9PSAwICYmCi0JCSBlZmZlY3RpdmVfY2FjaGVfc2l6ZSA8IHNtZ3JuYmxvY2tzKFJlbGF0 aW9uR2V0U21ncihpbmRleCksCi0JCQkJCQkJCQkJCU1BSU5fRk9SS05VTSkpIHx8CisJCSBlZmZl Y3RpdmVfY2FjaGVfc2l6ZSA8IHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0U21ncihpbmRleCwgTUFJ Tl9GT1JLTlVNKSkpIHx8CiAJCShidWlsZHN0YXRlLT5idWlsZE1vZGUgPT0gR0lTVF9CVUZGRVJJ TkdfU1RBVFMgJiYKIAkJIGJ1aWxkc3RhdGUtPmluZHR1cGxlcyA+PSBCVUZGRVJJTkdfTU9ERV9U VVBMRV9TSVpFX1NUQVRTX1RBUkdFVCkpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMK aW5kZXggMmQ4ZmRlYzk4ZWQuLjE2NmJmODFlMDI4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hw YWdlLmMKQEAgLTEwMzAsNyArMTAzMCw3IEBAIF9oYXNoX2FsbG9jX2J1Y2tldHMoUmVsYXRpb24g cmVsLCBCbG9ja051bWJlciBmaXJzdGJsb2NrLCB1aW50MzIgbmJsb2NrcykKIAkJCQkJdHJ1ZSk7 CiAKIAlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHBhZ2UsIGxhc3RibG9jayk7Ci0Jc21ncmV4dGVu ZChSZWxhdGlvbkdldFNtZ3IocmVsKSwgTUFJTl9GT1JLTlVNLCBsYXN0YmxvY2ssIHplcm9idWYu ZGF0YSwKKwlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihyZWwsIE1BSU5fRk9SS05VTSksIGxh c3RibG9jaywgemVyb2J1Zi5kYXRhLAogCQkJICAgZmFsc2UpOwogCiAJcmV0dXJuIHRydWU7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBjNGIxOTE2ZDM2ZS4u OGFmMjI1NTAyY2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9o YW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpA QCAtNTcyLDcgKzU3Miw3IEBAIGhlYXBhbV9yZWxhdGlvbl9zZXRfbmV3X2ZpbGVsb2NhdG9yKFJl bGF0aW9uIHJlbCwKIAkJCQkJCQkJCVRyYW5zYWN0aW9uSWQgKmZyZWV6ZVhpZCwKIAkJCQkJCQkJ CU11bHRpWGFjdElkICptaW5tdWx0aSkKIHsKLQlTTWdyUmVsYXRpb24gc3JlbDsKKwlTTWdyRmls ZUhhbmRsZSBzZmlsZTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0byB0aGUgbWluaW11bSBYSUQg dGhhdCBjb3VsZCBwdXQgdHVwbGVzIGluIHRoZSB0YWJsZS4gV2UKQEAgLTU5MSw3ICs1OTEsNyBA QCBoZWFwYW1fcmVsYXRpb25fc2V0X25ld19maWxlbG9jYXRvcihSZWxhdGlvbiByZWwsCiAJICov CiAJKm1pbm11bHRpID0gR2V0T2xkZXN0TXVsdGlYYWN0SWQoKTsKIAotCXNyZWwgPSBSZWxhdGlv bkNyZWF0ZVN0b3JhZ2UoKm5ld3Jsb2NhdG9yLCBwZXJzaXN0ZW5jZSwgdHJ1ZSk7CisJc2ZpbGUg PSBSZWxhdGlvbkNyZWF0ZVN0b3JhZ2UoKm5ld3Jsb2NhdG9yLCBwZXJzaXN0ZW5jZSwgdHJ1ZSk7 CiAKIAkvKgogCSAqIElmIHJlcXVpcmVkLCBzZXQgdXAgYW4gaW5pdCBmb3JrIGZvciBhbiB1bmxv Z2dlZCB0YWJsZSBzbyB0aGF0IGl0IGNhbgpAQCAtNjA0LDE1ICs2MDQsMTggQEAgaGVhcGFtX3Jl bGF0aW9uX3NldF9uZXdfZmlsZWxvY2F0b3IoUmVsYXRpb24gcmVsLAogCSAqLwogCWlmIChwZXJz aXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRCkKIAl7CisJCVNNZ3JGaWxlSGFuZGxl IHNmaWxlX2luaXQ7CisKIAkJQXNzZXJ0KHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRf UkVMQVRJT04gfHwKIAkJCSAgIHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfTUFUVklF VyB8fAogCQkJICAgcmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9UT0FTVFZBTFVFKTsK LQkJc21ncmNyZWF0ZShzcmVsLCBJTklUX0ZPUktOVU0sIGZhbHNlKTsKKwkJc2ZpbGVfaW5pdCA9 IHNtZ3JvcGVuKCpuZXdybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgSU5JVF9GT1JLTlVNKTsK KwkJc21ncmNyZWF0ZShzZmlsZV9pbml0LCBmYWxzZSk7CiAJCWxvZ19zbWdyY3JlYXRlKG5ld3Js b2NhdG9yLCBJTklUX0ZPUktOVU0pOwotCQlzbWdyaW1tZWRzeW5jKHNyZWwsIElOSVRfRk9SS05V TSk7CisJCXNtZ3JpbW1lZHN5bmMoc2ZpbGUpOwogCX0KIAotCXNtZ3JjbG9zZShzcmVsKTsKKwlz bWdyY2xvc2Uoc2ZpbGUpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNjI0LDkgKzYyNyw3IEBAIGhl YXBhbV9yZWxhdGlvbl9ub250cmFuc2FjdGlvbmFsX3RydW5jYXRlKFJlbGF0aW9uIHJlbCkKIHN0 YXRpYyB2b2lkCiBoZWFwYW1fcmVsYXRpb25fY29weV9kYXRhKFJlbGF0aW9uIHJlbCwgY29uc3Qg UmVsRmlsZUxvY2F0b3IgKm5ld3Jsb2NhdG9yKQogewotCVNNZ3JSZWxhdGlvbiBkc3RyZWw7Ci0K LQlkc3RyZWwgPSBzbWdyb3BlbigqbmV3cmxvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCk7CisJU01n ckZpbGVIYW5kbGUgZHN0bWFpbjsKIAogCS8qCiAJICogU2luY2Ugd2UgY29weSB0aGUgZmlsZSBk aXJlY3RseSB3aXRob3V0IGxvb2tpbmcgYXQgdGhlIHNoYXJlZCBidWZmZXJzLApAQCAtNjQ2LDE2 ICs2NDcsMjEgQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZGF0YShSZWxhdGlvbiByZWwsIGNvbnN0 IFJlbEZpbGVMb2NhdG9yICpuZXdybG9jYXRvcikKIAlSZWxhdGlvbkNyZWF0ZVN0b3JhZ2UoKm5l d3Jsb2NhdG9yLCByZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UsIHRydWUpOwogCiAJLyogY29w eSBtYWluIGZvcmsgKi8KLQlSZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihyZWwp LCBkc3RyZWwsIE1BSU5fRk9SS05VTSwKKwlkc3RtYWluID0gc21ncm9wZW4oKm5ld3Jsb2NhdG9y LCByZWwtPnJkX2JhY2tlbmQsIE1BSU5fRk9SS05VTSk7CisJUmVsYXRpb25Db3B5U3RvcmFnZShS ZWxhdGlvbkdldFNtZ3IocmVsLCBNQUlOX0ZPUktOVU0pLCBkc3RtYWluLAogCQkJCQkJcmVsLT5y ZF9yZWwtPnJlbHBlcnNpc3RlbmNlKTsKIAogCS8qIGNvcHkgdGhvc2UgZXh0cmEgZm9ya3MgdGhh dCBleGlzdCAqLwogCWZvciAoRm9ya051bWJlciBmb3JrTnVtID0gTUFJTl9GT1JLTlVNICsgMTsK IAkJIGZvcmtOdW0gPD0gTUFYX0ZPUktOVU07IGZvcmtOdW0rKykKIAl7Ci0JCWlmIChzbWdyZXhp c3RzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBmb3JrTnVtKSkKKwkJU01nckZpbGVIYW5kbGUgc3Jj X2ZvcmsgPSBSZWxhdGlvbkdldFNtZ3IocmVsLCBmb3JrTnVtKTsKKworCQlpZiAoc21ncmV4aXN0 cyhzcmNfZm9yaykpCiAJCXsKLQkJCXNtZ3JjcmVhdGUoZHN0cmVsLCBmb3JrTnVtLCBmYWxzZSk7 CisJCQlTTWdyRmlsZUhhbmRsZSBkc3RfZm9yayA9IHNtZ3JvcGVuKCpuZXdybG9jYXRvciwgcmVs LT5yZF9iYWNrZW5kLCBmb3JrTnVtKTsKKworCQkJc21ncmNyZWF0ZShkc3RfZm9yaywgZmFsc2Up OwogCiAJCQkvKgogCQkJICogV0FMIGxvZyBjcmVhdGlvbiBpZiB0aGUgcmVsYXRpb24gaXMgcGVy c2lzdGVudCwgb3IgdGhpcyBpcyB0aGUKQEAgLTY2NSw3ICs2NzEsNyBAQCBoZWFwYW1fcmVsYXRp b25fY29weV9kYXRhKFJlbGF0aW9uIHJlbCwgY29uc3QgUmVsRmlsZUxvY2F0b3IgKm5ld3Jsb2Nh dG9yKQogCQkJCShyZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0Vf VU5MT0dHRUQgJiYKIAkJCQkgZm9ya051bSA9PSBJTklUX0ZPUktOVU0pKQogCQkJCWxvZ19zbWdy Y3JlYXRlKG5ld3Jsb2NhdG9yLCBmb3JrTnVtKTsKLQkJCVJlbGF0aW9uQ29weVN0b3JhZ2UoUmVs YXRpb25HZXRTbWdyKHJlbCksIGRzdHJlbCwgZm9ya051bSwKKwkJCVJlbGF0aW9uQ29weVN0b3Jh Z2UoUmVsYXRpb25HZXRTbWdyKHJlbCwgZm9ya051bSksIGRzdF9mb3JrLAogCQkJCQkJCQlyZWwt PnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpOwogCQl9CiAJfQpAQCAtNjczLDcgKzY3OSw3IEBAIGhl YXBhbV9yZWxhdGlvbl9jb3B5X2RhdGEoUmVsYXRpb24gcmVsLCBjb25zdCBSZWxGaWxlTG9jYXRv ciAqbmV3cmxvY2F0b3IpCiAKIAkvKiBkcm9wIG9sZCByZWxhdGlvbiwgYW5kIGNsb3NlIG5ldyBv bmUgKi8KIAlSZWxhdGlvbkRyb3BTdG9yYWdlKHJlbCk7Ci0Jc21ncmNsb3NlKGRzdHJlbCk7CisJ c21ncmNsb3NlKGRzdG1haW4pOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvcmV3cml0ZWhlYXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L3Jld3JpdGVoZWFwLmMKaW5kZXggODk5M2MxZWQ1YTkuLmQ5OTFlNzc2NWYzIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9yZXdyaXRlaGVhcC5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL3Jld3JpdGVoZWFwLmMKQEAgLTMyNSw3ICszMjUsNyBAQCBlbmRfaGVhcF9y ZXdyaXRlKFJld3JpdGVTdGF0ZSBzdGF0ZSkKIAogCQlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHN0 YXRlLT5yc19idWZmZXIsIHN0YXRlLT5yc19ibG9ja25vKTsKIAotCQlzbWdyZXh0ZW5kKFJlbGF0 aW9uR2V0U21ncihzdGF0ZS0+cnNfbmV3X3JlbCksIE1BSU5fRk9SS05VTSwKKwkJc21ncmV4dGVu ZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPnJzX25ld19yZWwsIE1BSU5fRk9SS05VTSksCiAJCQkJ ICAgc3RhdGUtPnJzX2Jsb2Nrbm8sIChjaGFyICopIHN0YXRlLT5yc19idWZmZXIsIHRydWUpOwog CX0KIApAQCAtMzM3LDcgKzMzNyw3IEBAIGVuZF9oZWFwX3Jld3JpdGUoUmV3cml0ZVN0YXRlIHN0 YXRlKQogCSAqIHdyb3RlIGJlZm9yZSB0aGUgY2hlY2twb2ludC4KIAkgKi8KIAlpZiAoUmVsYXRp b25OZWVkc1dBTChzdGF0ZS0+cnNfbmV3X3JlbCkpCi0JCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25H ZXRTbWdyKHN0YXRlLT5yc19uZXdfcmVsKSwgTUFJTl9GT1JLTlVNKTsKKwkJc21ncmltbWVkc3lu YyhSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPnJzX25ld19yZWwsIE1BSU5fRk9SS05VTSkpOwogCiAJ bG9naWNhbF9lbmRfaGVhcF9yZXdyaXRlKHN0YXRlKTsKIApAQCAtNjkxLDcgKzY5MSw3IEBAIHJh d19oZWFwX2luc2VydChSZXdyaXRlU3RhdGUgc3RhdGUsIEhlYXBUdXBsZSB0dXApCiAJCQkgKi8K IAkJCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UocGFnZSwgc3RhdGUtPnJzX2Jsb2Nrbm8pOwogCi0J CQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+cnNfbmV3X3JlbCksIE1BSU5fRk9S S05VTSwKKwkJCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5yc19uZXdfcmVsLCBN QUlOX0ZPUktOVU0pLAogCQkJCQkgICBzdGF0ZS0+cnNfYmxvY2tubywgKGNoYXIgKikgcGFnZSwg dHJ1ZSk7CiAKIAkJCXN0YXRlLT5yc19ibG9ja25vKys7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92 aXNpYmlsaXR5bWFwLmMKaW5kZXggNzRmZjAxYmIxNzIuLjk2Y2EzYjBjYzcxIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCkBAIC00NjgsNyArNDY4LDcgQEAgdmlzaWJp bGl0eW1hcF9wcmVwYXJlX3RydW5jYXRlKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgbmhlYXBi bG9ja3MpCiAJICogSWYgbm8gdmlzaWJpbGl0eSBtYXAgaGFzIGJlZW4gY3JlYXRlZCB5ZXQgZm9y IHRoaXMgcmVsYXRpb24sIHRoZXJlJ3MKIAkgKiBub3RoaW5nIHRvIHRydW5jYXRlLgogCSAqLwot CWlmICghc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgVklTSUJJTElUWU1BUF9GT1JL TlVNKSkKKwlpZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCwgVklTSUJJTElUWU1B UF9GT1JLTlVNKSkpCiAJCXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7CiAKIAkvKgpAQCAtNTM1 LDcgKzUzNSw3IEBAIHZpc2liaWxpdHltYXBfcHJlcGFyZV90cnVuY2F0ZShSZWxhdGlvbiByZWws IEJsb2NrTnVtYmVyIG5oZWFwYmxvY2tzKQogCWVsc2UKIAkJbmV3bmJsb2NrcyA9IHRydW5jQmxv Y2s7CiAKLQlpZiAoc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdyKHJlbCksIFZJU0lCSUxJVFlN QVBfRk9SS05VTSkgPD0gbmV3bmJsb2NrcykKKwlpZiAoc21ncm5ibG9ja3MoUmVsYXRpb25HZXRT bWdyKHJlbCwgVklTSUJJTElUWU1BUF9GT1JLTlVNKSkgPD0gbmV3bmJsb2NrcykKIAl7CiAJCS8q IG5vdGhpbmcgdG8gZG8sIHRoZSBmaWxlIHdhcyBhbHJlYWR5IHNtYWxsZXIgdGhhbiByZXF1ZXN0 ZWQgc2l6ZSAqLwogCQlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOwpAQCAtNTU0LDI5ICs1NTQs MjkgQEAgc3RhdGljIEJ1ZmZlcgogdm1fcmVhZGJ1ZihSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVy IGJsa25vLCBib29sIGV4dGVuZCkKIHsKIAlCdWZmZXIJCWJ1ZjsKLQlTTWdyUmVsYXRpb24gcmVs bjsKKwlTTWdyRmlsZUhhbmRsZSB2bV9zZmlsZTsKIAogCS8qCiAJICogQ2F1dGlvbjogcmUtdXNp bmcgdGhpcyBzbWdyIHBvaW50ZXIgY291bGQgZmFpbCBpZiB0aGUgcmVsY2FjaGUgZW50cnkKIAkg KiBnZXRzIGNsb3NlZC4gIEl0J3Mgc2FmZSBhcyBsb25nIGFzIHdlIG9ubHkgZG8gc21nci1sZXZl bCBvcGVyYXRpb25zCiAJICogYmV0d2VlbiBoZXJlIGFuZCB0aGUgbGFzdCB1c2Ugb2YgdGhlIHBv aW50ZXIuCiAJICovCi0JcmVsbiA9IFJlbGF0aW9uR2V0U21ncihyZWwpOworCXZtX3NmaWxlID0g UmVsYXRpb25HZXRTbWdyKHJlbCwgVklTSUJJTElUWU1BUF9GT1JLTlVNKTsKIAogCS8qCiAJICog SWYgd2UgaGF2ZW4ndCBjYWNoZWQgdGhlIHNpemUgb2YgdGhlIHZpc2liaWxpdHkgbWFwIGZvcmsg eWV0LCBjaGVjayBpdAogCSAqIGZpcnN0LgogCSAqLwotCWlmIChyZWxuLT5zbWdyX2NhY2hlZF9u YmxvY2tzW1ZJU0lCSUxJVFlNQVBfRk9SS05VTV0gPT0gSW52YWxpZEJsb2NrTnVtYmVyKQorCWlm ICh2bV9zZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCiAJ ewotCQlpZiAoc21ncmV4aXN0cyhyZWxuLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pKQotCQkJc21n cm5ibG9ja3MocmVsbiwgVklTSUJJTElUWU1BUF9GT1JLTlVNKTsKKwkJaWYgKHNtZ3JleGlzdHMo dm1fc2ZpbGUpKQorCQkJc21ncm5ibG9ja3Modm1fc2ZpbGUpOwogCQllbHNlCi0JCQlyZWxuLT5z bWdyX2NhY2hlZF9uYmxvY2tzW1ZJU0lCSUxJVFlNQVBfRk9SS05VTV0gPSAwOworCQkJdm1fc2Zp bGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSAwOwogCX0KIAogCS8qIEhhbmRsZSByZXF1ZXN0cyBi ZXlvbmQgRU9GICovCi0JaWYgKGJsa25vID49IHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbVklT SUJJTElUWU1BUF9GT1JLTlVNXSkKKwlpZiAoYmxrbm8gPj0gdm1fc2ZpbGUtPnNtZ3JfY2FjaGVk X25ibG9ja3MpCiAJewogCQlpZiAoZXh0ZW5kKQogCQkJdm1fZXh0ZW5kKHJlbCwgYmxrbm8gKyAx KTsKQEAgLTYwMyw4ICs2MDMsNyBAQCB2bV9yZWFkYnVmKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1i ZXIgYmxrbm8sIGJvb2wgZXh0ZW5kKQogCSAqIGxvbmcgYXMgaXQgZG9lc24ndCBkZXBlbmQgb24g dGhlIHBhZ2UgaGVhZGVyIGhhdmluZyBjb3JyZWN0IGNvbnRlbnRzLgogCSAqIEN1cnJlbnQgdXNh Z2UgaXMgc2FmZSBiZWNhdXNlIFBhZ2VHZXRDb250ZW50cygpIGRvZXMgbm90IHJlcXVpcmUgdGhh dC4KIAkgKi8KLQlidWYgPSBSZWFkQnVmZmVyRXh0ZW5kZWQocmVsLCBWSVNJQklMSVRZTUFQX0ZP UktOVU0sIGJsa25vLAotCQkJCQkJCSBSQk1fWkVST19PTl9FUlJPUiwgTlVMTCk7CisJYnVmID0g UmVhZEJ1ZmZlckV4dGVuZGVkKHJlbCwgVklTSUJJTElUWU1BUF9GT1JLTlVNLCBibGtubywgUkJN X1pFUk9fT05fRVJST1IsIE5VTEwpOwogCWlmIChQYWdlSXNOZXcoQnVmZmVyR2V0UGFnZShidWYp KSkKIAl7CiAJCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOwpAQCAtNjI0 LDcgKzYyMyw3IEBAIHZtX2V4dGVuZChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIHZtX25ibG9j a3MpCiB7CiAJQmxvY2tOdW1iZXIgdm1fbmJsb2Nrc19ub3c7CiAJUEdBbGlnbmVkQmxvY2sgcGc7 Ci0JU01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgdm1fc2ZpbGU7CiAKIAlQYWdl SW5pdCgoUGFnZSkgcGcuZGF0YSwgQkxDS1NaLCAwKTsKIApAQCAtNjQ1LDI3ICs2NDQsMjcgQEAg dm1fZXh0ZW5kKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgdm1fbmJsb2NrcykKIAkgKiBnZXRz IGNsb3NlZC4gIEl0J3Mgc2FmZSBhcyBsb25nIGFzIHdlIG9ubHkgZG8gc21nci1sZXZlbCBvcGVy YXRpb25zCiAJICogYmV0d2VlbiBoZXJlIGFuZCB0aGUgbGFzdCB1c2Ugb2YgdGhlIHBvaW50ZXIu CiAJICovCi0JcmVsbiA9IFJlbGF0aW9uR2V0U21ncihyZWwpOworCXZtX3NmaWxlID0gUmVsYXRp b25HZXRTbWdyKHJlbCwgVklTSUJJTElUWU1BUF9GT1JLTlVNKTsKIAogCS8qCiAJICogQ3JlYXRl IHRoZSBmaWxlIGZpcnN0IGlmIGl0IGRvZXNuJ3QgZXhpc3QuICBJZiBzbWdyX3ZtX25ibG9ja3Mg aXMKIAkgKiBwb3NpdGl2ZSB0aGVuIGl0IG11c3QgZXhpc3QsIG5vIG5lZWQgZm9yIGFuIHNtZ3Jl eGlzdHMgY2FsbC4KIAkgKi8KLQlpZiAoKHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbVklTSUJJ TElUWU1BUF9GT1JLTlVNXSA9PSAwIHx8Ci0JCSByZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW1ZJ U0lCSUxJVFlNQVBfRk9SS05VTV0gPT0gSW52YWxpZEJsb2NrTnVtYmVyKSAmJgotCQkhc21ncmV4 aXN0cyhyZWxuLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pKQotCQlzbWdyY3JlYXRlKHJlbG4sIFZJ U0lCSUxJVFlNQVBfRk9SS05VTSwgZmFsc2UpOworCWlmICgodm1fc2ZpbGUtPnNtZ3JfY2FjaGVk X25ibG9ja3MgPT0gMCB8fAorCQkgdm1fc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPT0gSW52 YWxpZEJsb2NrTnVtYmVyKSAmJgorCQkhc21ncmV4aXN0cyh2bV9zZmlsZSkpCisJCXNtZ3JjcmVh dGUodm1fc2ZpbGUsIGZhbHNlKTsKIAogCS8qIEludmFsaWRhdGUgY2FjaGUgc28gdGhhdCBzbWdy bmJsb2NrcygpIGFza3MgdGhlIGtlcm5lbC4gKi8KLQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tz W1ZJU0lCSUxJVFlNQVBfRk9SS05VTV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0Jdm1fbmJsb2Nr c19ub3cgPSBzbWdybmJsb2NrcyhyZWxuLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pOworCXZtX3Nm aWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0gSW52YWxpZEJsb2NrTnVtYmVyOworCXZtX25ibG9j a3Nfbm93ID0gc21ncm5ibG9ja3Modm1fc2ZpbGUpOwogCiAJLyogTm93IGV4dGVuZCB0aGUgZmls ZSAqLwogCXdoaWxlICh2bV9uYmxvY2tzX25vdyA8IHZtX25ibG9ja3MpCiAJewogCQlQYWdlU2V0 Q2hlY2tzdW1JbnBsYWNlKChQYWdlKSBwZy5kYXRhLCB2bV9uYmxvY2tzX25vdyk7CiAKLQkJc21n cmV4dGVuZChyZWxuLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0sIHZtX25ibG9ja3Nfbm93LCBwZy5k YXRhLCBmYWxzZSk7CisJCXNtZ3JleHRlbmQodm1fc2ZpbGUsIHZtX25ibG9ja3Nfbm93LCBwZy5k YXRhLCBmYWxzZSk7CiAJCXZtX25ibG9ja3Nfbm93Kys7CiAJfQogCkBAIC02NzYsNyArNjc1LDcg QEAgdm1fZXh0ZW5kKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgdm1fbmJsb2NrcykKIAkgKiB0 byBrZWVwIGNoZWNraW5nIGZvciBjcmVhdGlvbiBvciBleHRlbnNpb24gb2YgdGhlIGZpbGUsIHdo aWNoIGhhcHBlbnMKIAkgKiBpbmZyZXF1ZW50bHkuCiAJICovCi0JQ2FjaGVJbnZhbGlkYXRlU21n cihyZWxuLT5zbWdyX3Jsb2NhdG9yKTsKKwlDYWNoZUludmFsaWRhdGVTbWdyKHJlbC0+cmRfbG9j YXRvciwgcmVsLT5yZF9iYWNrZW5kKTsKIAogCVVubG9ja1JlbGF0aW9uRm9yRXh0ZW5zaW9uKHJl bCwgRXhjbHVzaXZlTG9jayk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwppbmRleCAx Y2M4OGRhMDMyZC4uN2Q5OTY4ZDI0MWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwpA QCAtMTY0LDkgKzE2NCw5IEBAIGJ0YnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCkKIAkgKiB0aGlz IGV2ZW4gd2hlbiB3YWxfbGV2ZWw9bWluaW1hbC4KIAkgKi8KIAlQYWdlU2V0Q2hlY2tzdW1JbnBs YWNlKG1ldGFwYWdlLCBCVFJFRV9NRVRBUEFHRSk7Ci0Jc21ncndyaXRlKFJlbGF0aW9uR2V0U21n cihpbmRleCksIElOSVRfRk9SS05VTSwgQlRSRUVfTUVUQVBBR0UsCisJc21ncndyaXRlKFJlbGF0 aW9uR2V0U21ncihpbmRleCwgSU5JVF9GT1JLTlVNKSwgQlRSRUVfTUVUQVBBR0UsCiAJCQkgIChj aGFyICopIG1ldGFwYWdlLCB0cnVlKTsKLQlsb2dfbmV3cGFnZSgmUmVsYXRpb25HZXRTbWdyKGlu ZGV4KS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLCBJTklUX0ZPUktOVU0sCisJbG9nX25ld3BhZ2Uo JmluZGV4LT5yZF9sb2NhdG9yLCBJTklUX0ZPUktOVU0sCiAJCQkJQlRSRUVfTUVUQVBBR0UsIG1l dGFwYWdlLCB0cnVlKTsKIAogCS8qCkBAIC0xNzQsNyArMTc0LDcgQEAgYnRidWlsZGVtcHR5KFJl bGF0aW9uIGluZGV4KQogCSAqIHdyaXRlIGRpZCBub3QgZ28gdGhyb3VnaCBzaGFyZWRfYnVmZmVy cyBhbmQgdGhlcmVmb3JlIGEgY29uY3VycmVudAogCSAqIGNoZWNrcG9pbnQgbWF5IGhhdmUgbW92 ZWQgdGhlIHJlZG8gcG9pbnRlciBwYXN0IG91ciB4bG9nIHJlY29yZC4KIAkgKi8KLQlzbWdyaW1t ZWRzeW5jKFJlbGF0aW9uR2V0U21ncihpbmRleCksIElOSVRfRk9SS05VTSk7CisJc21ncmltbWVk c3luYyhSZWxhdGlvbkdldFNtZ3IoaW5kZXgsIElOSVRfRk9SS05VTSkpOwogfQogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYwppbmRleCA2N2I3YjE3MTBjNi4uMjE2YzI2Y2FkMTcg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29ydC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29ydC5jCkBAIC02NjIsNyArNjYyLDcgQEAgX2J0 X2Jsd3JpdGVwYWdlKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBQYWdlIHBhZ2UsIEJsb2NrTnVtYmVy IGJsa25vKQogCQlpZiAoIXdzdGF0ZS0+YnR3c196ZXJvcGFnZSkKIAkJCXdzdGF0ZS0+YnR3c196 ZXJvcGFnZSA9IChQYWdlKSBwYWxsb2MwKEJMQ0tTWik7CiAJCS8qIGRvbid0IHNldCBjaGVja3N1 bSBmb3IgYWxsLXplcm8gcGFnZSAqLwotCQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncih3c3Rh dGUtPmluZGV4KSwgTUFJTl9GT1JLTlVNLAorCQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncih3 c3RhdGUtPmluZGV4LCBNQUlOX0ZPUktOVU0pLAogCQkJCSAgIHdzdGF0ZS0+YnR3c19wYWdlc193 cml0dGVuKyssCiAJCQkJICAgKGNoYXIgKikgd3N0YXRlLT5idHdzX3plcm9wYWdlLAogCQkJCSAg IHRydWUpOwpAQCAtNjc3LDE0ICs2NzcsMTQgQEAgX2J0X2Jsd3JpdGVwYWdlKEJUV3JpdGVTdGF0 ZSAqd3N0YXRlLCBQYWdlIHBhZ2UsIEJsb2NrTnVtYmVyIGJsa25vKQogCWlmIChibGtubyA9PSB3 c3RhdGUtPmJ0d3NfcGFnZXNfd3JpdHRlbikKIAl7CiAJCS8qIGV4dGVuZGluZyB0aGUgZmlsZS4u LiAqLwotCQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncih3c3RhdGUtPmluZGV4KSwgTUFJTl9G T1JLTlVNLCBibGtubywKKwkJc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRl eCwgTUFJTl9GT1JLTlVNKSwgYmxrbm8sCiAJCQkJICAgKGNoYXIgKikgcGFnZSwgdHJ1ZSk7CiAJ CXdzdGF0ZS0+YnR3c19wYWdlc193cml0dGVuKys7CiAJfQogCWVsc2UKIAl7CiAJCS8qIG92ZXJ3 cml0aW5nIGEgYmxvY2sgd2UgemVyby1maWxsZWQgYmVmb3JlICovCi0JCXNtZ3J3cml0ZShSZWxh dGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRleCksIE1BSU5fRk9SS05VTSwgYmxrbm8sCisJCXNtZ3J3 cml0ZShSZWxhdGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRleCwgTUFJTl9GT1JLTlVNKSwgYmxrbm8s CiAJCQkJICAoY2hhciAqKSBwYWdlLCB0cnVlKTsKIAl9CiAKQEAgLTE0MzEsNyArMTQzMSw3IEBA IF9idF9sb2FkKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFNwb29sICpidHNwb29sLCBCVFNwb29s ICpidHNwb29sMikKIAkgKiBzdGlsbCBub3QgYmUgb24gZGlzayB3aGVuIHRoZSBjcmFzaCBvY2N1 cnMuCiAJICovCiAJaWYgKHdzdGF0ZS0+YnR3c191c2Vfd2FsKQotCQlzbWdyaW1tZWRzeW5jKFJl bGF0aW9uR2V0U21ncih3c3RhdGUtPmluZGV4KSwgTUFJTl9GT1JLTlVNKTsKKwkJc21ncmltbWVk c3luYyhSZWxhdGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRleCwgTUFJTl9GT1JLTlVNKSk7CiB9CiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ2luc2VydC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdpbnNlcnQuYwppbmRleCA0ZWQwNjdmMGQ5My4u N2ZmMjZkZTk3OTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BnaW5z ZXJ0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdpbnNlcnQuYwpAQCAtMTU1 LDggKzE1NSwxMSBAQCBzcGdidWlsZChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwgSW5k ZXhJbmZvICppbmRleEluZm8pCiB2b2lkCiBzcGdidWlsZGVtcHR5KFJlbGF0aW9uIGluZGV4KQog eworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCVBhZ2UJCXBhZ2U7CiAKKwlzZmlsZSA9IFJlbGF0 aW9uR2V0U21ncihpbmRleCwgSU5JVF9GT1JLTlVNKTsKKwogCS8qIENvbnN0cnVjdCBtZXRhcGFn ZS4gKi8KIAlwYWdlID0gKFBhZ2UpIHBhbGxvYyhCTENLU1opOwogCVNwR2lzdEluaXRNZXRhcGFn ZShwYWdlKTsKQEAgLTE2OSwyNyArMTcyLDI3IEBAIHNwZ2J1aWxkZW1wdHkoUmVsYXRpb24gaW5k ZXgpCiAJICogcmVwbGF5ZWQuCiAJICovCiAJUGFnZVNldENoZWNrc3VtSW5wbGFjZShwYWdlLCBT UEdJU1RfTUVUQVBBR0VfQkxLTk8pOwotCXNtZ3J3cml0ZShSZWxhdGlvbkdldFNtZ3IoaW5kZXgp LCBJTklUX0ZPUktOVU0sIFNQR0lTVF9NRVRBUEFHRV9CTEtOTywKKwlzbWdyd3JpdGUoc2ZpbGUs IFNQR0lTVF9NRVRBUEFHRV9CTEtOTywKIAkJCSAgKGNoYXIgKikgcGFnZSwgdHJ1ZSk7Ci0JbG9n X25ld3BhZ2UoJihSZWxhdGlvbkdldFNtZ3IoaW5kZXgpKS0+c21ncl9ybG9jYXRvci5sb2NhdG9y LCBJTklUX0ZPUktOVU0sCisJbG9nX25ld3BhZ2UoJmluZGV4LT5yZF9sb2NhdG9yLCBJTklUX0ZP UktOVU0sCiAJCQkJU1BHSVNUX01FVEFQQUdFX0JMS05PLCBwYWdlLCB0cnVlKTsKIAogCS8qIExp a2V3aXNlIGZvciB0aGUgcm9vdCBwYWdlLiAqLwogCVNwR2lzdEluaXRQYWdlKHBhZ2UsIFNQR0lT VF9MRUFGKTsKIAogCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UocGFnZSwgU1BHSVNUX1JPT1RfQkxL Tk8pOwotCXNtZ3J3cml0ZShSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLCBJTklUX0ZPUktOVU0sIFNQ R0lTVF9ST09UX0JMS05PLAorCXNtZ3J3cml0ZShzZmlsZSwgU1BHSVNUX1JPT1RfQkxLTk8sCiAJ CQkgIChjaGFyICopIHBhZ2UsIHRydWUpOwotCWxvZ19uZXdwYWdlKCYoUmVsYXRpb25HZXRTbWdy KGluZGV4KSktPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgSU5JVF9GT1JLTlVNLAorCWxvZ19uZXdw YWdlKCZpbmRleC0+cmRfbG9jYXRvciwgSU5JVF9GT1JLTlVNLAogCQkJCVNQR0lTVF9ST09UX0JM S05PLCBwYWdlLCB0cnVlKTsKIAogCS8qIExpa2V3aXNlIGZvciB0aGUgbnVsbC10dXBsZXMgcm9v dCBwYWdlLiAqLwogCVNwR2lzdEluaXRQYWdlKHBhZ2UsIFNQR0lTVF9MRUFGIHwgU1BHSVNUX05V TExTKTsKIAogCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UocGFnZSwgU1BHSVNUX05VTExfQkxLTk8p OwotCXNtZ3J3cml0ZShSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLCBJTklUX0ZPUktOVU0sIFNQR0lT VF9OVUxMX0JMS05PLAorCXNtZ3J3cml0ZShzZmlsZSwgU1BHSVNUX05VTExfQkxLTk8sCiAJCQkg IChjaGFyICopIHBhZ2UsIHRydWUpOwotCWxvZ19uZXdwYWdlKCYoUmVsYXRpb25HZXRTbWdyKGlu ZGV4KSktPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgSU5JVF9GT1JLTlVNLAorCWxvZ19uZXdwYWdl KCZpbmRleC0+cmRfbG9jYXRvciwgSU5JVF9GT1JLTlVNLAogCQkJCVNQR0lTVF9OVUxMX0JMS05P LCBwYWdlLCB0cnVlKTsKIAogCS8qCkBAIC0xOTcsNyArMjAwLDcgQEAgc3BnYnVpbGRlbXB0eShS ZWxhdGlvbiBpbmRleCkKIAkgKiB3cml0ZXMgZGlkIG5vdCBnbyB0aHJvdWdoIHNoYXJlZCBidWZm ZXJzIGFuZCB0aGVyZWZvcmUgYSBjb25jdXJyZW50CiAJICogY2hlY2twb2ludCBtYXkgaGF2ZSBt b3ZlZCB0aGUgcmVkbyBwb2ludGVyIHBhc3Qgb3VyIHhsb2cgcmVjb3JkLgogCSAqLwotCXNtZ3Jp bW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKGluZGV4KSwgSU5JVF9GT1JLTlVNKTsKKwlzbWdyaW1t ZWRzeW5jKHNmaWxlKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 YWJsZS90YWJsZWFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCmluZGV4 IGVmMGQzNGZjZWVlLi45ZWJmMTc0YjE4OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RhYmxlL3RhYmxlYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5j CkBAIC02MzEsMTAgKzYzMSwxMCBAQCB0YWJsZV9ibG9ja19yZWxhdGlvbl9zaXplKFJlbGF0aW9u IHJlbCwgRm9ya051bWJlciBmb3JrTnVtYmVyKQogCWlmIChmb3JrTnVtYmVyID09IEludmFsaWRG b3JrTnVtYmVyKQogCXsKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfRk9SS05VTTsgaSsrKQot CQkJbmJsb2NrcyArPSBzbWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgaSk7CisJCQlu YmxvY2tzICs9IHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0U21ncihyZWwsIGkpKTsKIAl9CiAJZWxz ZQotCQluYmxvY2tzID0gc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdyKHJlbCksIGZvcmtOdW1i ZXIpOworCQluYmxvY2tzID0gc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdyKHJlbCwgZm9ya051 bWJlcikpOwogCiAJcmV0dXJuIG5ibG9ja3MgKiBCTENLU1o7CiB9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9jbG9nLmMKaW5kZXggNGE0MzFkNTg3NjcuLmMwOGYwMTBjZjE1IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vY2xvZy5jCkBAIC00MSw2ICs0MSw4IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAj aW5jbHVkZSAicGdfdHJhY2UuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJzdG9y YWdlL2J1Zm1nci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3luYy5oIgogCkBAIC01OSw3 ICs2MSw3IEBACiAvKiBXZSBuZWVkIHR3byBiaXRzIHBlciB4YWN0LCBzbyBmb3VyIHhhY3RzIGZp dCBpbiBhIGJ5dGUgKi8KICNkZWZpbmUgQ0xPR19CSVRTX1BFUl9YQUNUCTIKICNkZWZpbmUgQ0xP R19YQUNUU19QRVJfQllURSA0Ci0jZGVmaW5lIENMT0dfWEFDVFNfUEVSX1BBR0UgKEJMQ0tTWiAq IENMT0dfWEFDVFNfUEVSX0JZVEUpCisjZGVmaW5lIENMT0dfWEFDVFNfUEVSX1BBR0UgKChCTENL U1ogLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSkgKiBDTE9HX1hBQ1RTX1BFUl9CWVRFKQogI2RlZmlu ZSBDTE9HX1hBQ1RfQklUTUFTSwkoKDEgPDwgQ0xPR19CSVRTX1BFUl9YQUNUKSAtIDEpCiAKICNk ZWZpbmUgVHJhbnNhY3Rpb25JZFRvUGFnZSh4aWQpCSgoeGlkKSAvIChUcmFuc2FjdGlvbklkKSBD TE9HX1hBQ1RTX1BFUl9QQUdFKQpAQCAtODEsMTcgKzgzLDEwIEBACiAgKi8KICNkZWZpbmUgVEhS RVNIT0xEX1NVQlRSQU5TX0NMT0dfT1BUCTUKIAotLyoKLSAqIExpbmsgdG8gc2hhcmVkLW1lbW9y eSBkYXRhIHN0cnVjdHVyZXMgZm9yIENMT0cgY29udHJvbAotICovCi1zdGF0aWMgU2xydUN0bERh dGEgWGFjdEN0bERhdGE7Ci0KLSNkZWZpbmUgWGFjdEN0bCAoJlhhY3RDdGxEYXRhKQogCi0KLXN0 YXRpYyBpbnQJWmVyb0NMT0dQYWdlKGludCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9nKTsKK3N0YXRp YyBCdWZmZXIgWmVyb0NMT0dQYWdlKGludCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9nKTsKIHN0YXRp YyBib29sIENMT0dQYWdlUHJlY2VkZXMoaW50IHBhZ2UxLCBpbnQgcGFnZTIpOwotc3RhdGljIHZv aWQgV3JpdGVaZXJvUGFnZVhsb2dSZWMoaW50IHBhZ2Vubyk7CitzdGF0aWMgWExvZ1JlY1B0ciBX cml0ZVplcm9QYWdlWGxvZ1JlYyhpbnQgcGFnZW5vKTsKIHN0YXRpYyB2b2lkIFdyaXRlVHJ1bmNh dGVYbG9nUmVjKGludCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCwKIAkJCQkJCQkJ IE9pZCBvbGRlc3RYYWN0RGIpOwogc3RhdGljIHZvaWQgVHJhbnNhY3Rpb25JZFNldFBhZ2VTdGF0 dXMoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKQEAgLTk5LDcgKzk0LDcgQEAgc3Rh dGljIHZvaWQgVHJhbnNhY3Rpb25JZFNldFBhZ2VTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIGlu dCBuc3VieGlkcywKIAkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbHNuLCBpbnQgcGFnZW5vLAogCQkJ CQkJCQkJICAgYm9vbCBhbGxfeGFjdF9zYW1lX3BhZ2UpOwogc3RhdGljIHZvaWQgVHJhbnNhY3Rp b25JZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0YXR1cywKLQkJ CQkJCQkJCSAgWExvZ1JlY1B0ciBsc24sIGludCBzbG90bm8pOworCQkJCQkJCQkJICBYTG9nUmVj UHRyIGxzbiwgQnVmZmVyIGJ1ZmZlcik7CiBzdGF0aWMgdm9pZCBzZXRfc3RhdHVzX2J5X3BhZ2Vz KGludCBuc3VieGlkcywgVHJhbnNhY3Rpb25JZCAqc3VieGlkcywKIAkJCQkJCQkJWGlkU3RhdHVz IHN0YXR1cywgWExvZ1JlY1B0ciBsc24pOwogc3RhdGljIGJvb2wgVHJhbnNhY3Rpb25Hcm91cFVw ZGF0ZVhpZFN0YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwKQEAgLTMzOSwxMyArMzM0LDEyIEBAIFRy YW5zYWN0aW9uSWRTZXRQYWdlU3RhdHVzSW50ZXJuYWwoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBu c3VieGlkcywKIAkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCAqc3VieGlkcywgWGlkU3RhdHVzIHN0 YXR1cywKIAkJCQkJCQkJICAgWExvZ1JlY1B0ciBsc24sIGludCBwYWdlbm8pCiB7Ci0JaW50CQkJ c2xvdG5vOworCUJ1ZmZlcgkJYnVmZmVyOwogCWludAkJCWk7CiAKIAlBc3NlcnQoc3RhdHVzID09 IFRSQU5TQUNUSU9OX1NUQVRVU19DT01NSVRURUQgfHwKIAkJICAgc3RhdHVzID09IFRSQU5TQUNU SU9OX1NUQVRVU19BQk9SVEVEIHx8CiAJCSAgIChzdGF0dXMgPT0gVFJBTlNBQ1RJT05fU1RBVFVT X1NVQl9DT01NSVRURUQgJiYgIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpKTsKLQlBc3NlcnQo TFdMb2NrSGVsZEJ5TWVJbk1vZGUoWGFjdFNMUlVMb2NrLCBMV19FWENMVVNJVkUpKTsKIAogCS8q CiAJICogSWYgd2UncmUgZG9pbmcgYW4gYXN5bmMgY29tbWl0IChpZSwgbHNuIGlzIHZhbGlkKSwg dGhlbiB3ZSBtdXN0IHdhaXQKQEAgLTM1Niw3ICszNTAsOCBAQCBUcmFuc2FjdGlvbklkU2V0UGFn ZVN0YXR1c0ludGVybmFsKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCiAJICogd3Jp dGUtYnVzeSwgc2luY2Ugd2UgZG9uJ3QgY2FyZSBpZiB0aGUgdXBkYXRlIHJlYWNoZXMgZGlzayBz b29uZXIgdGhhbgogCSAqIHdlIHRoaW5rLgogCSAqLwotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQ YWdlKFhhY3RDdGwsIHBhZ2VubywgWExvZ1JlY1B0cklzSW52YWxpZChsc24pLCB4aWQpOworCWJ1 ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ0xPR19JRCwgcGFnZW5vLCBSQk1fTk9STUFMKTsK KwlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKIAogCS8qCiAJICog U2V0IHRoZSBtYWluIHRyYW5zYWN0aW9uIGlkLCBpZiBhbnkuCkBAIC0zNzQsMjUgKzM2OSwyNyBA QCBUcmFuc2FjdGlvbklkU2V0UGFnZVN0YXR1c0ludGVybmFsKFRyYW5zYWN0aW9uSWQgeGlkLCBp bnQgbnN1YnhpZHMsCiAJCXsKIAkJCWZvciAoaSA9IDA7IGkgPCBuc3VieGlkczsgaSsrKQogCQkJ ewotCQkJCUFzc2VydChYYWN0Q3RsLT5zaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gVHJh bnNhY3Rpb25JZFRvUGFnZShzdWJ4aWRzW2ldKSk7CisJCQkJQXNzZXJ0KHBhZ2VubyA9PSBUcmFu c2FjdGlvbklkVG9QYWdlKHN1YnhpZHNbaV0pKTsKIAkJCQlUcmFuc2FjdGlvbklkU2V0U3RhdHVz Qml0KHN1YnhpZHNbaV0sCiAJCQkJCQkJCQkJICBUUkFOU0FDVElPTl9TVEFUVVNfU1VCX0NPTU1J VFRFRCwKLQkJCQkJCQkJCQkgIGxzbiwgc2xvdG5vKTsKKwkJCQkJCQkJCQkgIGxzbiwgYnVmZmVy KTsKIAkJCX0KIAkJfQogCiAJCS8qIC4uLiB0aGVuIHRoZSBtYWluIHRyYW5zYWN0aW9uICovCi0J CVRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoeGlkLCBzdGF0dXMsIGxzbiwgc2xvdG5vKTsKKwkJ VHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdCh4aWQsIHN0YXR1cywgbHNuLCBidWZmZXIpOwogCX0K IAogCS8qIFNldCB0aGUgc3VidHJhbnNhY3Rpb25zICovCiAJZm9yIChpID0gMDsgaSA8IG5zdWJ4 aWRzOyBpKyspCiAJewotCQlBc3NlcnQoWGFjdEN0bC0+c2hhcmVkLT5wYWdlX251bWJlcltzbG90 bm9dID09IFRyYW5zYWN0aW9uSWRUb1BhZ2Uoc3VieGlkc1tpXSkpOwotCQlUcmFuc2FjdGlvbklk U2V0U3RhdHVzQml0KHN1YnhpZHNbaV0sIHN0YXR1cywgbHNuLCBzbG90bm8pOworCQlBc3NlcnQo cGFnZW5vID09IFRyYW5zYWN0aW9uSWRUb1BhZ2Uoc3VieGlkc1tpXSkpOworCQlUcmFuc2FjdGlv bklkU2V0U3RhdHVzQml0KHN1YnhpZHNbaV0sIHN0YXR1cywgbHNuLCBidWZmZXIpOwogCX0KIAot CVhhY3RDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKKwkKKwlNYXJrQnVm ZmVyRGlydHkoYnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIC8q CkBAIC01NjYsNyArNTYzLDcgQEAgVHJhbnNhY3Rpb25Hcm91cFVwZGF0ZVhpZFN0YXR1cyhUcmFu c2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0YXR1cywKICAqIE11c3QgYmUgY2FsbGVkIHdpdGgg WGFjdFNMUlVMb2NrIGhlbGQKICAqLwogc3RhdGljIHZvaWQKLVRyYW5zYWN0aW9uSWRTZXRTdGF0 dXNCaXQoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNu LCBpbnQgc2xvdG5vKQorVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklkIHhp ZCwgWGlkU3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24sIEJ1ZmZlciBidWZmZXIpCiB7CiAJ aW50CQkJYnl0ZW5vID0gVHJhbnNhY3Rpb25JZFRvQnl0ZSh4aWQpOwogCWludAkJCWJzaGlmdCA9 IFRyYW5zYWN0aW9uSWRUb0JJbmRleCh4aWQpICogQ0xPR19CSVRTX1BFUl9YQUNUOwpAQCAtNTc0 LDcgKzU3MSwxMCBAQCBUcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KFRyYW5zYWN0aW9uSWQgeGlk LCBYaWRTdGF0dXMgc3RhdHVzLCBYTG9nUmVjUHRyIGxzbiwgaQogCWNoYXIJCWJ5dGV2YWw7CiAJ Y2hhcgkJY3VydmFsOwogCi0JYnl0ZXB0ciA9IFhhY3RDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJb c2xvdG5vXSArIGJ5dGVubzsKKwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUoQnVmZmVyRGVz Y3JpcHRvckdldENvbnRlbnRMb2NrKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSkpLAor CQkJCQkJCQlMV19FWENMVVNJVkUpKTsKKworCWJ5dGVwdHIgPSBQYWdlR2V0Q29udGVudHMoQnVm ZmVyR2V0UGFnZShidWZmZXIpKSArIGJ5dGVubzsKIAljdXJ2YWwgPSAoKmJ5dGVwdHIgPj4gYnNo aWZ0KSAmIENMT0dfWEFDVF9CSVRNQVNLOwogCiAJLyoKQEAgLTYwMiw4ICs2MDIsOSBAQCBUcmFu c2FjdGlvbklkU2V0U3RhdHVzQml0KFRyYW5zYWN0aW9uSWQgeGlkLCBYaWRTdGF0dXMgc3RhdHVz LCBYTG9nUmVjUHRyIGxzbiwgaQogCWJ5dGV2YWwgfD0gKHN0YXR1cyA8PCBic2hpZnQpOwogCSpi eXRlcHRyID0gYnl0ZXZhbDsKIAorCiAJLyoKLQkgKiBVcGRhdGUgdGhlIGdyb3VwIExTTiBpZiB0 aGUgdHJhbnNhY3Rpb24gY29tcGxldGlvbiBMU04gaXMgaGlnaGVyLgorCSAqIFVwZGF0ZSB0aGUg YnVmZmVyIExTTiBpZiB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGlvbiBMU04gaXMgaGlnaGVyLgog CSAqCiAJICogTm90ZTogbHNuIHdpbGwgYmUgaW52YWxpZCB3aGVuIHN1cHBsaWVkIGR1cmluZyBJ blJlY292ZXJ5IHByb2Nlc3NpbmcsCiAJICogc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGlu ZyBzcGVjaWFsIHRvIGF2b2lkIExTTiB1cGRhdGVzIGR1cmluZwpAQCAtNjEyLDEwICs2MTMsOCBA QCBUcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KFRyYW5zYWN0aW9uSWQgeGlkLCBYaWRTdGF0dXMg c3RhdHVzLCBYTG9nUmVjUHRyIGxzbiwgaQogCSAqLwogCWlmICghWExvZ1JlY1B0cklzSW52YWxp ZChsc24pKQogCXsKLQkJaW50CQkJbHNuaW5kZXggPSBHZXRMU05JbmRleChzbG90bm8sIHhpZCk7 Ci0KLQkJaWYgKFhhY3RDdGwtPnNoYXJlZC0+Z3JvdXBfbHNuW2xzbmluZGV4XSA8IGxzbikKLQkJ CVhhY3RDdGwtPnNoYXJlZC0+Z3JvdXBfbHNuW2xzbmluZGV4XSA9IGxzbjsKKwkJaWYgKFBhZ2VH ZXRMU04oQnVmZmVyR2V0UGFnZShidWZmZXIpKSA8IGxzbikKKwkJCVBhZ2VTZXRMU04oQnVmZmVy R2V0UGFnZShidWZmZXIpLCBsc24pOwogCX0KIH0KIApAQCAtNjQwLDY3ICs2MzksMjEgQEAgVHJh bnNhY3Rpb25JZEdldFN0YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciAqbHNuKQog CWludAkJCXBhZ2VubyA9IFRyYW5zYWN0aW9uSWRUb1BhZ2UoeGlkKTsKIAlpbnQJCQlieXRlbm8g PSBUcmFuc2FjdGlvbklkVG9CeXRlKHhpZCk7CiAJaW50CQkJYnNoaWZ0ID0gVHJhbnNhY3Rpb25J ZFRvQkluZGV4KHhpZCkgKiBDTE9HX0JJVFNfUEVSX1hBQ1Q7Ci0JaW50CQkJc2xvdG5vOwotCWlu dAkJCWxzbmluZGV4OwogCWNoYXIJICAgKmJ5dGVwdHI7CiAJWGlkU3RhdHVzCXN0YXR1czsKKwlC dWZmZXIJCWJ1ZmZlcjsKIAotCS8qIGxvY2sgaXMgYWNxdWlyZWQgYnkgU2ltcGxlTHJ1UmVhZFBh Z2VfUmVhZE9ubHkgKi8KLQotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KFhh Y3RDdGwsIHBhZ2VubywgeGlkKTsKLQlieXRlcHRyID0gWGFjdEN0bC0+c2hhcmVkLT5wYWdlX2J1 ZmZlcltzbG90bm9dICsgYnl0ZW5vOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ0xP R19JRCwgcGFnZW5vLCBSQk1fTk9STUFMKTsKKwlieXRlcHRyID0gUGFnZUdldENvbnRlbnRzKEJ1 ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBieXRlbm87CiAKIAlzdGF0dXMgPSAoKmJ5dGVwdHIgPj4g YnNoaWZ0KSAmIENMT0dfWEFDVF9CSVRNQVNLOworCSpsc24gICA9IFBhZ2VHZXRMU04oQnVmZmVy R2V0UGFnZShidWZmZXIpKTsKIAotCWxzbmluZGV4ID0gR2V0TFNOSW5kZXgoc2xvdG5vLCB4aWQp OwotCSpsc24gPSBYYWN0Q3RsLT5zaGFyZWQtPmdyb3VwX2xzbltsc25pbmRleF07Ci0KLQlMV0xv Y2tSZWxlYXNlKFhhY3RTTFJVTG9jayk7CisJUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCiAJcmV0 dXJuIHN0YXR1czsKIH0KIAotLyoKLSAqIE51bWJlciBvZiBzaGFyZWQgQ0xPRyBidWZmZXJzLgot ICoKLSAqIE9uIGxhcmdlciBtdWx0aS1wcm9jZXNzb3Igc3lzdGVtcywgaXQgaXMgcG9zc2libGUg dG8gaGF2ZSBtYW55IENMT0cgcGFnZQotICogcmVxdWVzdHMgaW4gZmxpZ2h0IGF0IG9uZSB0aW1l IHdoaWNoIGNvdWxkIGxlYWQgdG8gZGlzayBhY2Nlc3MgZm9yIENMT0cKLSAqIHBhZ2UgaWYgdGhl IHJlcXVpcmVkIHBhZ2UgaXMgbm90IGZvdW5kIGluIG1lbW9yeS4gIFRlc3RpbmcgcmV2ZWFsZWQg dGhhdCB3ZQotICogY2FuIGdldCB0aGUgYmVzdCBwZXJmb3JtYW5jZSBieSBoYXZpbmcgMTI4IENM T0cgYnVmZmVycywgbW9yZSB0aGFuIHRoYXQgaXQKLSAqIGRvZXNuJ3QgaW1wcm92ZSBwZXJmb3Jt YW5jZS4KLSAqCi0gKiBVbmNvbmRpdGlvbmFsbHkga2VlcGluZyB0aGUgbnVtYmVyIG9mIENMT0cg YnVmZmVycyB0byAxMjggZGlkIG5vdCBzZWVtIGxpa2UKLSAqIGEgZ29vZCBpZGVhLCBiZWNhdXNl IGl0IHdvdWxkIGluY3JlYXNlIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5Ci0g KiByZXF1aXJlZCB0byBzdGFydCwgd2hpY2ggY291bGQgYmUgYSBwcm9ibGVtIGZvciBwZW9wbGUg cnVubmluZyB2ZXJ5IHNtYWxsCi0gKiBjb25maWd1cmF0aW9ucy4gIFRoZSBmb2xsb3dpbmcgZm9y bXVsYSBzZWVtcyB0byByZXByZXNlbnQgYSByZWFzb25hYmxlCi0gKiBjb21wcm9taXNlOiBwZW9w bGUgd2l0aCB2ZXJ5IGxvdyB2YWx1ZXMgZm9yIHNoYXJlZF9idWZmZXJzIHdpbGwgZ2V0IGZld2Vy Ci0gKiBDTE9HIGJ1ZmZlcnMgYXMgd2VsbCwgYW5kIGV2ZXJ5b25lIGVsc2Ugd2lsbCBnZXQgMTI4 LgotICovCi1TaXplCi1DTE9HU2htZW1CdWZmZXJzKHZvaWQpCi17Ci0JcmV0dXJuIE1pbigxMjgs IE1heCg0LCBOQnVmZmVycyAvIDUxMikpOwotfQotCi0vKgotICogSW5pdGlhbGl6YXRpb24gb2Yg c2hhcmVkIG1lbW9yeSBmb3IgQ0xPRwotICovCi1TaXplCi1DTE9HU2htZW1TaXplKHZvaWQpCi17 Ci0JcmV0dXJuIFNpbXBsZUxydVNobWVtU2l6ZShDTE9HU2htZW1CdWZmZXJzKCksIENMT0dfTFNO U19QRVJfUEFHRSk7Ci19Ci0KLXZvaWQKLUNMT0dTaG1lbUluaXQodm9pZCkKLXsKLQlYYWN0Q3Rs LT5QYWdlUHJlY2VkZXMgPSBDTE9HUGFnZVByZWNlZGVzOwotCVNpbXBsZUxydUluaXQoWGFjdEN0 bCwgIlhhY3QiLCBDTE9HU2htZW1CdWZmZXJzKCksIENMT0dfTFNOU19QRVJfUEFHRSwKLQkJCQkg IFhhY3RTTFJVTG9jaywgInBnX3hhY3QiLCBMV1RSQU5DSEVfWEFDVF9CVUZGRVIsCi0JCQkJICBT WU5DX0hBTkRMRVJfQ0xPRyk7Ci0JU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhYYWN0Q3RsLCBD TE9HX1hBQ1RTX1BFUl9QQUdFKTsKLX0KLQogLyoKICAqIFRoaXMgZnVuYyBtdXN0IGJlIGNhbGxl ZCBPTkNFIG9uIHN5c3RlbSBpbnN0YWxsLiAgSXQgY3JlYXRlcwogICogdGhlIGluaXRpYWwgQ0xP RyBzZWdtZW50LiAgKFRoZSBDTE9HIGRpcmVjdG9yeSBpcyBhc3N1bWVkIHRvCkBAIC03MTAsMTgg KzY2MywxNSBAQCBDTE9HU2htZW1Jbml0KHZvaWQpCiB2b2lkCiBCb290U3RyYXBDTE9HKHZvaWQp CiB7Ci0JaW50CQkJc2xvdG5vOwotCi0JTFdMb2NrQWNxdWlyZShYYWN0U0xSVUxvY2ssIExXX0VY Q0xVU0lWRSk7CisJQnVmZmVyCQlidWZmZXI7CiAKIAkvKiBDcmVhdGUgYW5kIHplcm8gdGhlIGZp cnN0IHBhZ2Ugb2YgdGhlIGNvbW1pdCBsb2cgKi8KLQlzbG90bm8gPSBaZXJvQ0xPR1BhZ2UoMCwg ZmFsc2UpOworCWJ1ZmZlciA9IFplcm9DTE9HUGFnZSgwLCBmYWxzZSk7CiAKIAkvKiBNYWtlIHN1 cmUgaXQncyB3cml0dGVuIG91dCAqLwotCVNpbXBsZUxydVdyaXRlUGFnZShYYWN0Q3RsLCBzbG90 bm8pOwotCUFzc2VydCghWGFjdEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pOworCUZs dXNoT25lQnVmZmVyKGJ1ZmZlcik7CiAKLQlMV0xvY2tSZWxlYXNlKFhhY3RTTFJVTG9jayk7CisJ VW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogfQogCiAvKgpAQCAtNzMzLDE3ICs2ODMsMjkg QEAgQm9vdFN0cmFwQ0xPRyh2b2lkKQogICoKICAqIENvbnRyb2wgbG9jayBtdXN0IGJlIGhlbGQg YXQgZW50cnksIGFuZCB3aWxsIGJlIGhlbGQgYXQgZXhpdC4KICAqLwotc3RhdGljIGludAorc3Rh dGljIEJ1ZmZlcgogWmVyb0NMT0dQYWdlKGludCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9nKQogewot CWludAkJCXNsb3RubzsKKwlCdWZmZXIJCWJ1ZmZlcjsKKwlQYWdlIAkJcGFnZTsKKwlYTG9nUmVj UHRyICBsc247CisKKwlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX0NMT0dfSUQsIHBhZ2Vu byk7CisJCisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKIAotCXNsb3RubyA9IFNpbXBs ZUxydVplcm9QYWdlKFhhY3RDdGwsIHBhZ2Vubyk7CisJUGFnZUluaXRTTFJVKHBhZ2UsIEJMQ0tT WiwgMCk7CiAKKwlsc24gPSAwOwogCWlmICh3cml0ZVhsb2cpCi0JCVdyaXRlWmVyb1BhZ2VYbG9n UmVjKHBhZ2Vubyk7CisJeworCQlsc24gPSBXcml0ZVplcm9QYWdlWGxvZ1JlYyhwYWdlbm8pOwor CX0KKwkKKwlQYWdlU2V0SGVhZGVyRGF0YU5vblJlbChwYWdlLCBwYWdlbm8sIGxzbiwgQkxDS1Na LCBQR19NRVRBUEFHRV9MQVlPVVRfVkVSU0lPTik7CisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7 CiAKLQlyZXR1cm4gc2xvdG5vOworCXJldHVybiBidWZmZXI7CiB9CiAKIC8qCkBAIC03NTMsMTcg KzcxNSw2IEBAIFplcm9DTE9HUGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZykKIHZvaWQK IFN0YXJ0dXBDTE9HKHZvaWQpCiB7Ci0JVHJhbnNhY3Rpb25JZCB4aWQgPSBYaWRGcm9tRnVsbFRy YW5zYWN0aW9uSWQoU2htZW1WYXJpYWJsZUNhY2hlLT5uZXh0WGlkKTsKLQlpbnQJCQlwYWdlbm8g PSBUcmFuc2FjdGlvbklkVG9QYWdlKHhpZCk7Ci0KLQlMV0xvY2tBY3F1aXJlKFhhY3RTTFJVTG9j aywgTFdfRVhDTFVTSVZFKTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSBvdXIgaWRlYSBvZiB0aGUg bGF0ZXN0IHBhZ2UgbnVtYmVyLgotCSAqLwotCVhhY3RDdGwtPnNoYXJlZC0+bGF0ZXN0X3BhZ2Vf bnVtYmVyID0gcGFnZW5vOwotCi0JTFdMb2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOwogfQogCiAv KgpAQCAtNzc1LDggKzcyNiw2IEBAIFRyaW1DTE9HKHZvaWQpCiAJVHJhbnNhY3Rpb25JZCB4aWQg PSBYaWRGcm9tRnVsbFRyYW5zYWN0aW9uSWQoU2htZW1WYXJpYWJsZUNhY2hlLT5uZXh0WGlkKTsK IAlpbnQJCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKHhpZCk7CiAKLQlMV0xvY2tBY3F1 aXJlKFhhY3RTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCS8qCiAJICogWmVybyBvdXQgdGhl IHJlbWFpbmRlciBvZiB0aGUgY3VycmVudCBjbG9nIHBhZ2UuICBVbmRlciBub3JtYWwKIAkgKiBj aXJjdW1zdGFuY2VzIGl0IHNob3VsZCBiZSB6ZXJvZXMgYWxyZWFkeSwgYnV0IGl0IHNlZW1zIGF0 IGxlYXN0CkBAIC03OTMsNDAgKzc0MiwyNSBAQCBUcmltQ0xPRyh2b2lkKQogCXsKIAkJaW50CQkJ Ynl0ZW5vID0gVHJhbnNhY3Rpb25JZFRvQnl0ZSh4aWQpOwogCQlpbnQJCQlic2hpZnQgPSBUcmFu c2FjdGlvbklkVG9CSW5kZXgoeGlkKSAqIENMT0dfQklUU19QRVJfWEFDVDsKLQkJaW50CQkJc2xv dG5vOwogCQljaGFyCSAgICpieXRlcHRyOworCQlCdWZmZXIJCWJ1ZmZlcjsKIAotCQlzbG90bm8g PSBTaW1wbGVMcnVSZWFkUGFnZShYYWN0Q3RsLCBwYWdlbm8sIGZhbHNlLCB4aWQpOwotCQlieXRl cHRyID0gWGFjdEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgYnl0ZW5vOworCQli dWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX0NMT0dfSUQsIHBhZ2VubywgUkJNX1RSSU0pOwor CQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwkJYnl0ZXB0ciA9 IFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpICsgYnl0ZW5vOwogCiAJCS8q IFplcm8gc28tZmFyLXVudXNlZCBwb3NpdGlvbnMgaW4gdGhlIGN1cnJlbnQgYnl0ZSAqLwogCQkq Ynl0ZXB0ciAmPSAoMSA8PCBic2hpZnQpIC0gMTsKIAkJLyogWmVybyB0aGUgcmVzdCBvZiB0aGUg cGFnZSAqLwotCQlNZW1TZXQoYnl0ZXB0ciArIDEsIDAsIEJMQ0tTWiAtIGJ5dGVubyAtIDEpOwor CQlNZW1TZXQoYnl0ZXB0ciArIDEsIDAsIEJMQ0tTWiAtIGJ5dGVubyAtIE1BWEFMSUdOKFNpemVP ZlBhZ2VIZWFkZXJEYXRhKSAtIDEpOwogCi0JCVhhY3RDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtz bG90bm9dID0gdHJ1ZTsKLQl9CiAKLQlMV0xvY2tSZWxlYXNlKFhhY3RTTFJVTG9jayk7Ci19CisJ CU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCi0vKgotICogUGVyZm9ybSBhIGNoZWNrcG9pbnQg LS0tIGVpdGhlciBkdXJpbmcgc2h1dGRvd24sIG9yIG9uLXRoZS1mbHkKLSAqLwotdm9pZAotQ2hl Y2tQb2ludENMT0codm9pZCkKLXsKLQkvKgotCSAqIFdyaXRlIGRpcnR5IENMT0cgcGFnZXMgdG8g ZGlzay4gIFRoaXMgbWF5IHJlc3VsdCBpbiBzeW5jIHJlcXVlc3RzCi0JICogcXVldWVkIGZvciBs YXRlciBoYW5kbGluZyBieSBQcm9jZXNzU3luY1JlcXVlc3RzKCksIGFzIHBhcnQgb2YgdGhlCi0J ICogY2hlY2twb2ludC4KLQkgKi8KLQlUUkFDRV9QT1NUR1JFU1FMX0NMT0dfQ0hFQ0tQT0lOVF9T VEFSVCh0cnVlKTsKLQlTaW1wbGVMcnVXcml0ZUFsbChYYWN0Q3RsLCB0cnVlKTsKLQlUUkFDRV9Q T1NUR1JFU1FMX0NMT0dfQ0hFQ0tQT0lOVF9ET05FKHRydWUpOworCQlVbmxvY2tSZWxlYXNlQnVm ZmVyKGJ1ZmZlcik7CisJfQogfQogCi0KIC8qCiAgKiBNYWtlIHN1cmUgdGhhdCBDTE9HIGhhcyBy b29tIGZvciBhIG5ld2x5LWFsbG9jYXRlZCBYSUQuCiAgKgpAQCAtODUwLDEyICs3ODQsOCBAQCBF eHRlbmRDTE9HKFRyYW5zYWN0aW9uSWQgbmV3ZXN0WGFjdCkKIAogCXBhZ2VubyA9IFRyYW5zYWN0 aW9uSWRUb1BhZ2UobmV3ZXN0WGFjdCk7CiAKLQlMV0xvY2tBY3F1aXJlKFhhY3RTTFJVTG9jaywg TFdfRVhDTFVTSVZFKTsKLQogCS8qIFplcm8gdGhlIHBhZ2UgYW5kIG1ha2UgYW4gWExPRyBlbnRy eSBhYm91dCBpdCAqLwotCVplcm9DTE9HUGFnZShwYWdlbm8sIHRydWUpOwotCi0JTFdMb2NrUmVs ZWFzZShYYWN0U0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb0NMT0dQYWdlKHBh Z2VubywgdHJ1ZSkpOwogfQogCiAKQEAgLTg4Niw3ICs4MTYsOCBAQCBUcnVuY2F0ZUNMT0coVHJh bnNhY3Rpb25JZCBvbGRlc3RYYWN0LCBPaWQgb2xkZXN0eGlkX2RhdG9pZCkKIAljdXRvZmZQYWdl ID0gVHJhbnNhY3Rpb25JZFRvUGFnZShvbGRlc3RYYWN0KTsKIAogCS8qIENoZWNrIHRvIHNlZSBp ZiB0aGVyZSdzIGFueSBmaWxlcyB0aGF0IGNvdWxkIGJlIHJlbW92ZWQgKi8KLQlpZiAoIVNscnVT Y2FuRGlyZWN0b3J5KFhhY3RDdGwsIFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZSwgJmN1dG9m ZlBhZ2UpKQorCWlmICghU2xydVNjYW5EaXJlY3RvcnkoU0xSVV9DTE9HX0lELCBDTE9HUGFnZVBy ZWNlZGVzLAorCQkJCQkJICAgU2xydVNjYW5EaXJDYlJlcG9ydFByZXNlbmNlLCAmY3V0b2ZmUGFn ZSkpCiAJCXJldHVybjsJCQkJCS8qIG5vdGhpbmcgdG8gcmVtb3ZlICovCiAKIAkvKgpAQCAtOTA3 LDcgKzgzOCw3IEBAIFRydW5jYXRlQ0xPRyhUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3QsIE9pZCBv bGRlc3R4aWRfZGF0b2lkKQogCVdyaXRlVHJ1bmNhdGVYbG9nUmVjKGN1dG9mZlBhZ2UsIG9sZGVz dFhhY3QsIG9sZGVzdHhpZF9kYXRvaWQpOwogCiAJLyogTm93IHdlIGNhbiByZW1vdmUgdGhlIG9s ZCBDTE9HIHNlZ21lbnQocykgKi8KLQlTaW1wbGVMcnVUcnVuY2F0ZShYYWN0Q3RsLCBjdXRvZmZQ YWdlKTsKKwlTaW1wbGVMcnVUcnVuY2F0ZShTTFJVX0NMT0dfSUQsIENMT0dQYWdlUHJlY2VkZXMs IGN1dG9mZlBhZ2UpOwogfQogCiAKQEAgLTk0OCwxMiArODc5LDE1IEBAIENMT0dQYWdlUHJlY2Vk ZXMoaW50IHBhZ2UxLCBpbnQgcGFnZTIpCiAvKgogICogV3JpdGUgYSBaRVJPUEFHRSB4bG9nIHJl Y29yZAogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIFhMb2dSZWNQdHIgCiBXcml0ZVplcm9QYWdl WGxvZ1JlYyhpbnQgcGFnZW5vKQogeworCVhMb2dSZWNQdHIgbHNuOwogCVhMb2dCZWdpbkluc2Vy dCgpOwogCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgKCZwYWdlbm8pLCBzaXplb2YoaW50KSk7 Ci0JKHZvaWQpIFhMb2dJbnNlcnQoUk1fQ0xPR19JRCwgQ0xPR19aRVJPUEFHRSk7CisJbHNuID0g WExvZ0luc2VydChSTV9DTE9HX0lELCBDTE9HX1pFUk9QQUdFKTsKKworCXJldHVybiBsc247CiB9 CiAKIC8qCkBAIC05OTIsMTcgKzkyNiwxMyBAQCBjbG9nX3JlZG8oWExvZ1JlYWRlclN0YXRlICpy ZWNvcmQpCiAJaWYgKGluZm8gPT0gQ0xPR19aRVJPUEFHRSkKIAl7CiAJCWludAkJCXBhZ2VubzsK LQkJaW50CQkJc2xvdG5vOworCQlCdWZmZXIJCWJ1ZmZlcjsKIAogCQltZW1jcHkoJnBhZ2Vubywg WExvZ1JlY0dldERhdGEocmVjb3JkKSwgc2l6ZW9mKGludCkpOwogCi0JCUxXTG9ja0FjcXVpcmUo WGFjdFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JCXNsb3RubyA9IFplcm9DTE9HUGFnZShw YWdlbm8sIGZhbHNlKTsKLQkJU2ltcGxlTHJ1V3JpdGVQYWdlKFhhY3RDdGwsIHNsb3Rubyk7Ci0J CUFzc2VydCghWGFjdEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pOwotCi0JCUxXTG9j a1JlbGVhc2UoWGFjdFNMUlVMb2NrKTsKKwkJYnVmZmVyID0gWmVyb0NMT0dQYWdlKHBhZ2Vubywg ZmFsc2UpOworCQlGbHVzaE9uZUJ1ZmZlcihidWZmZXIpOworCQlVbmxvY2tSZWxlYXNlQnVmZmVy KGJ1ZmZlcik7CiAJfQogCWVsc2UgaWYgKGluZm8gPT0gQ0xPR19UUlVOQ0FURSkKIAl7CkBAIC0x MDEyLDE3ICs5NDIsOCBAQCBjbG9nX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAKIAkJ QWR2YW5jZU9sZGVzdENsb2dYaWQoeGxyZWMub2xkZXN0WGFjdCk7CiAKLQkJU2ltcGxlTHJ1VHJ1 bmNhdGUoWGFjdEN0bCwgeGxyZWMucGFnZW5vKTsKKwkJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9D TE9HX0lELCBDTE9HUGFnZVByZWNlZGVzLCB4bHJlYy5wYWdlbm8pOwogCX0KIAllbHNlCiAJCWVs b2coUEFOSUMsICJjbG9nX3JlZG86IHVua25vd24gb3AgY29kZSAldSIsIGluZm8pOwogfQotCi0v KgotICogRW50cnlwb2ludCBmb3Igc3luYy5jIHRvIHN5bmMgY2xvZyBmaWxlcy4KLSAqLwotaW50 Ci1jbG9nc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkKLXsKLQly ZXR1cm4gU2xydVN5bmNGaWxlVGFnKFhhY3RDdGwsIGZ0YWcsIHBhdGgpOwotfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYwppbmRleCBiODk3ZmFiYzcwMi4uNDk1Y2ZhZWQwM2Yg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCkBAIC02MywxOSArNjMsMTQg QEAgdHlwZWRlZiBzdHJ1Y3QgQ29tbWl0VGltZXN0YW1wRW50cnkKIAkJCQkJCQkJCXNpemVvZihS ZXBPcmlnaW5JZCkpCiAKICNkZWZpbmUgQ09NTUlUX1RTX1hBQ1RTX1BFUl9QQUdFIFwKLQkoQkxD S1NaIC8gU2l6ZU9mQ29tbWl0VGltZXN0YW1wRW50cnkpCisJKChCTENLU1ogLSBTaXplT2ZQYWdl SGVhZGVyRGF0YSkgLyBTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSkKIAogI2RlZmluZSBUcmFu c2FjdGlvbklkVG9DVHNQYWdlKHhpZCkgXAogCSgoeGlkKSAvIChUcmFuc2FjdGlvbklkKSBDT01N SVRfVFNfWEFDVFNfUEVSX1BBR0UpCiAjZGVmaW5lIFRyYW5zYWN0aW9uSWRUb0NUc0VudHJ5KHhp ZCkJXAogCSgoeGlkKSAlIChUcmFuc2FjdGlvbklkKSBDT01NSVRfVFNfWEFDVFNfUEVSX1BBR0Up CiAKLS8qCi0gKiBMaW5rIHRvIHNoYXJlZC1tZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBDb21t aXRUcyBjb250cm9sCi0gKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBDb21taXRUc0N0bERhdGE7CiAK LSNkZWZpbmUgQ29tbWl0VHNDdGwgKCZDb21taXRUc0N0bERhdGEpCiAKIC8qCiAgKiBXZSBrZWVw IGEgY2FjaGUgb2YgdGhlIGxhc3QgdmFsdWUgc2V0IGluIHNoYXJlZCBtZW1vcnkuCkBAIC0xMDcs MTEgKzEwMiwxMiBAQCBzdGF0aWMgdm9pZCBTZXRYaWRDb21taXRUc0luUGFnZShUcmFuc2FjdGlv bklkIHhpZCwgaW50IG5zdWJ4aWRzLAogc3RhdGljIHZvaWQgVHJhbnNhY3Rpb25JZFNldENvbW1p dFRzKFRyYW5zYWN0aW9uSWQgeGlkLCBUaW1lc3RhbXBUeiB0cywKIAkJCQkJCQkJCSBSZXBPcmln aW5JZCBub2RlaWQsIGludCBzbG90bm8pOwogc3RhdGljIHZvaWQgZXJyb3JfY29tbWl0X3RzX2Rp c2FibGVkKHZvaWQpOwotc3RhdGljIGludAlaZXJvQ29tbWl0VHNQYWdlKGludCBwYWdlbm8sIGJv b2wgd3JpdGVYbG9nKTsKK3N0YXRpYyBCdWZmZXIgWmVyb0NvbW1pdFRzUGFnZShpbnQgcGFnZW5v LCBib29sIHdyaXRlWGxvZyk7CiBzdGF0aWMgYm9vbCBDb21taXRUc1BhZ2VQcmVjZWRlcyhpbnQg cGFnZTEsIGludCBwYWdlMik7CiBzdGF0aWMgdm9pZCBBY3RpdmF0ZUNvbW1pdFRzKHZvaWQpOwog c3RhdGljIHZvaWQgRGVhY3RpdmF0ZUNvbW1pdFRzKHZvaWQpOwotc3RhdGljIHZvaWQgV3JpdGVa ZXJvUGFnZVhsb2dSZWMoaW50IHBhZ2Vubyk7CitzdGF0aWMgWExvZ1JlY1B0ciBXcml0ZVplcm9Q YWdlWGxvZ1JlYyhpbnQgcGFnZW5vKTsKKwogc3RhdGljIHZvaWQgV3JpdGVUcnVuY2F0ZVhsb2dS ZWMoaW50IHBhZ2VubywgVHJhbnNhY3Rpb25JZCBvbGRlc3RYaWQpOwogCiAvKgpAQCAtMjE2LDMy ICsyMTIsMzEgQEAgU2V0WGlkQ29tbWl0VHNJblBhZ2UoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBu c3VieGlkcywKIAkJCQkJIFRyYW5zYWN0aW9uSWQgKnN1YnhpZHMsIFRpbWVzdGFtcFR6IHRzLAog CQkJCQkgUmVwT3JpZ2luSWQgbm9kZWlkLCBpbnQgcGFnZW5vKQogewotCWludAkJCXNsb3RubzsK IAlpbnQJCQlpOworCUJ1ZmZlcgkJYnVmZmVyOwogCi0JTFdMb2NrQWNxdWlyZShDb21taXRUc1NM UlVMb2NrLCBMV19FWENMVVNJVkUpOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ09N TUlUX1RTX0lELCBwYWdlbm8sIFJCTV9OT1JNQUwpOworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZG RVJfTE9DS19FWENMVVNJVkUpOwogCi0Jc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoQ29tbWl0 VHNDdGwsIHBhZ2VubywgdHJ1ZSwgeGlkKTsKLQotCVRyYW5zYWN0aW9uSWRTZXRDb21taXRUcyh4 aWQsIHRzLCBub2RlaWQsIHNsb3Rubyk7CisJVHJhbnNhY3Rpb25JZFNldENvbW1pdFRzKHhpZCwg dHMsIG5vZGVpZCwgYnVmZmVyKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnN1YnhpZHM7IGkrKykKLQkJ VHJhbnNhY3Rpb25JZFNldENvbW1pdFRzKHN1YnhpZHNbaV0sIHRzLCBub2RlaWQsIHNsb3Rubyk7 CisJCVRyYW5zYWN0aW9uSWRTZXRDb21taXRUcyhzdWJ4aWRzW2ldLCB0cywgbm9kZWlkLCBidWZm ZXIpOwogCi0JQ29tbWl0VHNDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsK KwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAotCUxXTG9ja1JlbGVhc2UoQ29tbWl0VHNTTFJV TG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogfQogCiAvKgogICogU2V0cyB0 aGUgY29tbWl0IHRpbWVzdGFtcCBvZiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4KLSAqCi0gKiBNdXN0 IGJlIGNhbGxlZCB3aXRoIENvbW1pdFRzU0xSVUxvY2sgaGVsZAogICovCiBzdGF0aWMgdm9pZAog VHJhbnNhY3Rpb25JZFNldENvbW1pdFRzKFRyYW5zYWN0aW9uSWQgeGlkLCBUaW1lc3RhbXBUeiB0 cywKLQkJCQkJCSBSZXBPcmlnaW5JZCBub2RlaWQsIGludCBzbG90bm8pCisJCQkJCQkgUmVwT3Jp Z2luSWQgbm9kZWlkLCBCdWZmZXIgYnVmZmVyKQogewogCWludAkJCWVudHJ5bm8gPSBUcmFuc2Fj dGlvbklkVG9DVHNFbnRyeSh4aWQpOworCWludCAJCXBhZ2VubyAgPSBUcmFuc2FjdGlvbklkVG9D VHNQYWdlKHhpZCk7CisJCiAJQ29tbWl0VGltZXN0YW1wRW50cnkgZW50cnk7CiAKIAlBc3NlcnQo VHJhbnNhY3Rpb25JZElzTm9ybWFsKHhpZCkpOwpAQCAtMjQ5LDkgKzI0NCwxMiBAQCBUcmFuc2Fj dGlvbklkU2V0Q29tbWl0VHMoVHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVzdGFtcFR6IHRzLAogCWVu dHJ5LnRpbWUgPSB0czsKIAllbnRyeS5ub2RlaWQgPSBub2RlaWQ7CiAKLQltZW1jcHkoQ29tbWl0 VHNDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArCisJQXNzZXJ0KHhpZCA9PSBwYWdl bm8gKiBDT01NSVRfVFNfWEFDVFNfUEVSX1BBR0UgKyBlbnRyeW5vKTsKKworCW1lbWNweShQYWdl R2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIFwKIAkJICAgU2l6ZU9mQ29tbWl0 VGltZXN0YW1wRW50cnkgKiBlbnRyeW5vLAogCQkgICAmZW50cnksIFNpemVPZkNvbW1pdFRpbWVz dGFtcEVudHJ5KTsKKwogfQogCiAvKgpAQCAtMjY4LDEwICsyNjYsMTAgQEAgVHJhbnNhY3Rpb25J ZEdldENvbW1pdFRzRGF0YShUcmFuc2FjdGlvbklkIHhpZCwgVGltZXN0YW1wVHogKnRzLAogewog CWludAkJCXBhZ2VubyA9IFRyYW5zYWN0aW9uSWRUb0NUc1BhZ2UoeGlkKTsKIAlpbnQJCQllbnRy eW5vID0gVHJhbnNhY3Rpb25JZFRvQ1RzRW50cnkoeGlkKTsKLQlpbnQJCQlzbG90bm87CiAJQ29t bWl0VGltZXN0YW1wRW50cnkgZW50cnk7CiAJVHJhbnNhY3Rpb25JZCBvbGRlc3RDb21taXRUc1hp ZDsKIAlUcmFuc2FjdGlvbklkIG5ld2VzdENvbW1pdFRzWGlkOworCUJ1ZmZlcgkJYnVmZmVyOwog CiAJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKQogCQllcmVwb3J0KEVSUk9SLApAQCAt MzI1LDE4ICszMjMsMTkgQEAgVHJhbnNhY3Rpb25JZEdldENvbW1pdFRzRGF0YShUcmFuc2FjdGlv bklkIHhpZCwgVGltZXN0YW1wVHogKnRzLAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JLyogbG9j ayBpcyBhY3F1aXJlZCBieSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSAqLwotCXNsb3RubyA9 IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KENvbW1pdFRzQ3RsLCBwYWdlbm8sIHhpZCk7CisJ YnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9DT01NSVRfVFNfSUQsIHBhZ2VubywgUkJNX05P Uk1BTCk7CisJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwogCW1lbWNw eSgmZW50cnksCi0JCSAgIENvbW1pdFRzQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10g KwotCQkgICBTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSAqIGVudHJ5bm8sCi0JCSAgIFNpemVP ZkNvbW1pdFRpbWVzdGFtcEVudHJ5KTsKKwkJCVBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdl KGJ1ZmZlcikpICsgXAorCQkJU2l6ZU9mQ29tbWl0VGltZXN0YW1wRW50cnkgKiBlbnRyeW5vLAor CQkJU2l6ZU9mQ29tbWl0VGltZXN0YW1wRW50cnkpOwogCiAJKnRzID0gZW50cnkudGltZTsKIAlp ZiAobm9kZWlkKQogCQkqbm9kZWlkID0gZW50cnkubm9kZWlkOwogCi0JTFdMb2NrUmVsZWFzZShD b21taXRUc1NMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJcmV0dXJu ICp0cyAhPSAwOwogfQogCkBAIC00ODcsMjcgKzQ4NiwxMyBAQCBwZ194YWN0X2NvbW1pdF90aW1l c3RhbXBfb3JpZ2luKFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX0RBVFVNKEhlYXBUdXBs ZUdldERhdHVtKGh0dXApKTsKIH0KIAotLyoKLSAqIE51bWJlciBvZiBzaGFyZWQgQ29tbWl0VFMg YnVmZmVycy4KLSAqCi0gKiBXZSB1c2UgYSB2ZXJ5IHNpbWlsYXIgbG9naWMgYXMgZm9yIHRoZSBu dW1iZXIgb2YgQ0xPRyBidWZmZXJzIChleGNlcHQgd2UKLSAqIHNjYWxlIHVwIHR3aWNlIGFzIGZh c3Qgd2l0aCBzaGFyZWQgYnVmZmVycywgYW5kIHRoZSBtYXhpbXVtIGlzIHR3aWNlIGFzCi0gKiBo aWdoKTsgc2VlIGNvbW1lbnRzIGluIENMT0dTaG1lbUJ1ZmZlcnMuCi0gKi8KLVNpemUKLUNvbW1p dFRzU2htZW1CdWZmZXJzKHZvaWQpCi17Ci0JcmV0dXJuIE1pbigyNTYsIE1heCg0LCBOQnVmZmVy cyAvIDI1NikpOwotfQotCiAvKgogICogU2hhcmVkIG1lbW9yeSBzaXppbmcgZm9yIENvbW1pdFRz CiAgKi8KIFNpemUKIENvbW1pdFRzU2htZW1TaXplKHZvaWQpCiB7Ci0JcmV0dXJuIFNpbXBsZUxy dVNobWVtU2l6ZShDb21taXRUc1NobWVtQnVmZmVycygpLCAwKSArCi0JCXNpemVvZihDb21taXRU aW1lc3RhbXBTaGFyZWQpOworCXJldHVybiBzaXplb2YoQ29tbWl0VGltZXN0YW1wU2hhcmVkKTsK IH0KIAogLyoKQEAgLTUxOSwxMiArNTA0LDcgQEAgQ29tbWl0VHNTaG1lbUluaXQodm9pZCkKIHsK IAlib29sCQlmb3VuZDsKIAotCUNvbW1pdFRzQ3RsLT5QYWdlUHJlY2VkZXMgPSBDb21taXRUc1Bh Z2VQcmVjZWRlczsKLQlTaW1wbGVMcnVJbml0KENvbW1pdFRzQ3RsLCAiQ29tbWl0VHMiLCBDb21t aXRUc1NobWVtQnVmZmVycygpLCAwLAotCQkJCSAgQ29tbWl0VHNTTFJVTG9jaywgInBnX2NvbW1p dF90cyIsCi0JCQkJICBMV1RSQU5DSEVfQ09NTUlUVFNfQlVGRkVSLAotCQkJCSAgU1lOQ19IQU5E TEVSX0NPTU1JVF9UUyk7Ci0JU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhDb21taXRUc0N0bCwg Q09NTUlUX1RTX1hBQ1RTX1BFUl9QQUdFKTsKKwlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKENv bW1pdFRzUGFnZVByZWNlZGVzLCBDT01NSVRfVFNfWEFDVFNfUEVSX1BBR0UpOwogCiAJY29tbWl0 VHNTaGFyZWQgPSBTaG1lbUluaXRTdHJ1Y3QoIkNvbW1pdFRzIHNoYXJlZCIsCiAJCQkJCQkJCQkg c2l6ZW9mKENvbW1pdFRpbWVzdGFtcFNoYXJlZCksCkBAIC01NjgsMTcgKzU0OCwyNiBAQCBCb290 U3RyYXBDb21taXRUcyh2b2lkKQogICoKICAqIENvbnRyb2wgbG9jayBtdXN0IGJlIGhlbGQgYXQg ZW50cnksIGFuZCB3aWxsIGJlIGhlbGQgYXQgZXhpdC4KICAqLwotc3RhdGljIGludAorc3RhdGlj IEJ1ZmZlcgogWmVyb0NvbW1pdFRzUGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZykKIHsK LQlpbnQJCQlzbG90bm87Ci0KLQlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFnZShDb21taXRUc0N0 bCwgcGFnZW5vKTsKLQorCUJ1ZmZlcgkJYnVmZmVyOworCVBhZ2UgCQlwYWdlOworCVhMb2dSZWNQ dHIgIGxzbjsKKworCWJ1ZmZlciA9IFplcm9TbHJ1QnVmZmVyKFNMUlVfQ09NTUlUX1RTX0lELCBw YWdlbm8pOworCQorCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisJUGFnZUluaXRTTFJV KHBhZ2UsIEJMQ0tTWiwgMCk7CisJCiAJaWYgKHdyaXRlWGxvZykKLQkJV3JpdGVaZXJvUGFnZVhs b2dSZWMocGFnZW5vKTsKKwl7CisJCWxzbiA9IFdyaXRlWmVyb1BhZ2VYbG9nUmVjKHBhZ2Vubyk7 CisJCVBhZ2VTZXRIZWFkZXJEYXRhTm9uUmVsKHBhZ2UsIHBhZ2VubywgbHNuLCBCTENLU1osIFBH X01FVEFQQUdFX0xBWU9VVF9WRVJTSU9OKTsKKwl9CisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7 CiAKLQlyZXR1cm4gc2xvdG5vOworCXJldHVybiBidWZmZXI7CiB9CiAKIC8qCkBAIC02NzYsMTMg KzY2NSw2IEBAIEFjdGl2YXRlQ29tbWl0VHModm9pZCkKIAl4aWQgPSBYaWRGcm9tRnVsbFRyYW5z YWN0aW9uSWQoU2htZW1WYXJpYWJsZUNhY2hlLT5uZXh0WGlkKTsKIAlwYWdlbm8gPSBUcmFuc2Fj dGlvbklkVG9DVHNQYWdlKHhpZCk7CiAKLQkvKgotCSAqIFJlLUluaXRpYWxpemUgb3VyIGlkZWEg b2YgdGhlIGxhdGVzdCBwYWdlIG51bWJlci4KLQkgKi8KLQlMV0xvY2tBY3F1aXJlKENvbW1pdFRz U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JQ29tbWl0VHNDdGwtPnNoYXJlZC0+bGF0ZXN0X3Bh Z2VfbnVtYmVyID0gcGFnZW5vOwotCUxXTG9ja1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7Ci0K IAkvKgogCSAqIElmIENvbW1pdFRzIGlzIGVuYWJsZWQsIGJ1dCBpdCB3YXNuJ3QgaW4gdGhlIHBy ZXZpb3VzIHNlcnZlciBydW4sIHdlCiAJICogbmVlZCB0byBzZXQgdGhlIG9sZGVzdCBhbmQgbmV3 ZXN0IHZhbHVlcyB0byB0aGUgbmV4dCBYaWQ7IHRoYXQgd2F5LCB3ZQpAQCAtNzA1LDE1ICs2ODcs MTkgQEAgQWN0aXZhdGVDb21taXRUcyh2b2lkKQogCUxXTG9ja1JlbGVhc2UoQ29tbWl0VHNMb2Nr KTsKIAogCS8qIENyZWF0ZSB0aGUgY3VycmVudCBzZWdtZW50IGZpbGUsIGlmIG5lY2Vzc2FyeSAq LwotCWlmICghU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KENvbW1pdFRzQ3RsLCBwYWdl bm8pKQorCWlmICghU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KFNMUlVfQ09NTUlUX1RT X0lELCBwYWdlbm8pKQogCXsKLQkJaW50CQkJc2xvdG5vOworCQlCdWZmZXIJCWJ1ZmZlcjsKKwkJ UGFnZSAJCXBhZ2U7CiAKLQkJTFdMb2NrQWNxdWlyZShDb21taXRUc1NMUlVMb2NrLCBMV19FWENM VVNJVkUpOwotCQlzbG90bm8gPSBaZXJvQ29tbWl0VHNQYWdlKHBhZ2VubywgZmFsc2UpOwotCQlT aW1wbGVMcnVXcml0ZVBhZ2UoQ29tbWl0VHNDdGwsIHNsb3Rubyk7Ci0JCUFzc2VydCghQ29tbWl0 VHNDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKTsKLQkJTFdMb2NrUmVsZWFzZShDb21t aXRUc1NMUlVMb2NrKTsKKwkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9DT01NSVRfVFNf SUQsIHBhZ2Vubyk7CisJCQorCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOworCQlQYWdl SW5pdFNMUlUocGFnZSwgQkxDS1NaLCAwKTsKKworCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsK KwkJRmx1c2hPbmVCdWZmZXIoYnVmZmVyKTsKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIp OwogCX0KIAogCS8qIENoYW5nZSB0aGUgYWN0aXZhdGlvbiBzdGF0dXMgaW4gc2hhcmVkIG1lbW9y eS4gKi8KQEAgLTc2MiwyMyArNzQ4LDkgQEAgRGVhY3RpdmF0ZUNvbW1pdFRzKHZvaWQpCiAJICog YmUgb3ZlcndyaXR0ZW4gYW55d2F5IHdoZW4gd2Ugd3JhcCBhcm91bmQsIGJ1dCBpdCBzZWVtcyBi ZXR0ZXIgdG8gYmUKIAkgKiB0aWR5LikKIAkgKi8KLQlMV0xvY2tBY3F1aXJlKENvbW1pdFRzU0xS VUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JKHZvaWQpIFNscnVTY2FuRGlyZWN0b3J5KENvbW1pdFRz Q3RsLCBTbHJ1U2NhbkRpckNiRGVsZXRlQWxsLCBOVUxMKTsKLQlMV0xvY2tSZWxlYXNlKENvbW1p dFRzU0xSVUxvY2spOwotfQotCi0vKgotICogUGVyZm9ybSBhIGNoZWNrcG9pbnQgLS0tIGVpdGhl ciBkdXJpbmcgc2h1dGRvd24sIG9yIG9uLXRoZS1mbHkKLSAqLwotdm9pZAotQ2hlY2tQb2ludENv bW1pdFRzKHZvaWQpCi17Ci0JLyoKLQkgKiBXcml0ZSBkaXJ0eSBDb21taXRUcyBwYWdlcyB0byBk aXNrLiAgVGhpcyBtYXkgcmVzdWx0IGluIHN5bmMgcmVxdWVzdHMKLQkgKiBxdWV1ZWQgZm9yIGxh dGVyIGhhbmRsaW5nIGJ5IFByb2Nlc3NTeW5jUmVxdWVzdHMoKSwgYXMgcGFydCBvZiB0aGUKLQkg KiBjaGVja3BvaW50LgotCSAqLwotCVNpbXBsZUxydVdyaXRlQWxsKENvbW1pdFRzQ3RsLCB0cnVl KTsKKwkodm9pZCkgU2xydVNjYW5EaXJlY3RvcnkoU0xSVV9DT01NSVRfVFNfSUQsCisJCQkJCQkJ IENvbW1pdFRzUGFnZVByZWNlZGVzLAorCQkJCQkJCSBTbHJ1U2NhbkRpckNiRGVsZXRlQWxsLCBO VUxMKTsKIH0KIAogLyoKQEAgLTgxNiwxMiArNzg4LDggQEAgRXh0ZW5kQ29tbWl0VHMoVHJhbnNh Y3Rpb25JZCBuZXdlc3RYYWN0KQogCiAJcGFnZW5vID0gVHJhbnNhY3Rpb25JZFRvQ1RzUGFnZShu ZXdlc3RYYWN0KTsKIAotCUxXTG9ja0FjcXVpcmUoQ29tbWl0VHNTTFJVTG9jaywgTFdfRVhDTFVT SVZFKTsKLQogCS8qIFplcm8gdGhlIHBhZ2UgYW5kIG1ha2UgYW4gWExPRyBlbnRyeSBhYm91dCBp dCAqLwotCVplcm9Db21taXRUc1BhZ2UocGFnZW5vLCAhSW5SZWNvdmVyeSk7Ci0KLQlMV0xvY2tS ZWxlYXNlKENvbW1pdFRzU0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb0NvbW1p dFRzUGFnZShwYWdlbm8sICFJblJlY292ZXJ5KSk7CiB9CiAKIC8qCkBAIC04NDIsNyArODEwLDkg QEAgVHJ1bmNhdGVDb21taXRUcyhUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3QpCiAJY3V0b2ZmUGFn ZSA9IFRyYW5zYWN0aW9uSWRUb0NUc1BhZ2Uob2xkZXN0WGFjdCk7CiAKIAkvKiBDaGVjayB0byBz ZWUgaWYgdGhlcmUncyBhbnkgZmlsZXMgdGhhdCBjb3VsZCBiZSByZW1vdmVkICovCi0JaWYgKCFT bHJ1U2NhbkRpcmVjdG9yeShDb21taXRUc0N0bCwgU2xydVNjYW5EaXJDYlJlcG9ydFByZXNlbmNl LAorCWlmICghU2xydVNjYW5EaXJlY3RvcnkoU0xSVV9DT01NSVRfVFNfSUQsCisJCQkJCQkgICBD b21taXRUc1BhZ2VQcmVjZWRlcywKKwkJCQkJCSAgIFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5j ZSwKIAkJCQkJCSAgICZjdXRvZmZQYWdlKSkKIAkJcmV0dXJuOwkJCQkJLyogbm90aGluZyB0byBy ZW1vdmUgKi8KIApAQCAtODUwLDcgKzgyMCw3IEBAIFRydW5jYXRlQ29tbWl0VHMoVHJhbnNhY3Rp b25JZCBvbGRlc3RYYWN0KQogCVdyaXRlVHJ1bmNhdGVYbG9nUmVjKGN1dG9mZlBhZ2UsIG9sZGVz dFhhY3QpOwogCiAJLyogTm93IHdlIGNhbiByZW1vdmUgdGhlIG9sZCBDb21taXRUcyBzZWdtZW50 KHMpICovCi0JU2ltcGxlTHJ1VHJ1bmNhdGUoQ29tbWl0VHNDdGwsIGN1dG9mZlBhZ2UpOworCVNp bXBsZUxydVRydW5jYXRlKFNMUlVfQ09NTUlUX1RTX0lELCBDb21taXRUc1BhZ2VQcmVjZWRlcywg Y3V0b2ZmUGFnZSk7CiB9CiAKIC8qCkBAIC05MzYsMTIgKzkwNiwxNiBAQCBDb21taXRUc1BhZ2VQ cmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMikKIC8qCiAgKiBXcml0ZSBhIFpFUk9QQUdFIHhs b2cgcmVjb3JkCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgWExvZ1JlY1B0ciAKIFdyaXRlWmVy b1BhZ2VYbG9nUmVjKGludCBwYWdlbm8pCiB7CisJWExvZ1JlY1B0ciBsc247CisJCiAJWExvZ0Jl Z2luSW5zZXJ0KCk7CiAJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAoJnBhZ2VubyksIHNpemVv ZihpbnQpKTsKLQkodm9pZCkgWExvZ0luc2VydChSTV9DT01NSVRfVFNfSUQsIENPTU1JVF9UU19a RVJPUEFHRSk7CisJbHNuID0gWExvZ0luc2VydChSTV9DT01NSVRfVFNfSUQsIENPTU1JVF9UU19a RVJPUEFHRSk7CisJCisJcmV0dXJuIGxzbjsKIH0KIAogLyoKQEAgLTk3NCwxNyArOTQ4LDE5IEBA IGNvbW1pdF90c19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCWlmIChpbmZvID09IENP TU1JVF9UU19aRVJPUEFHRSkKIAl7CiAJCWludAkJCXBhZ2VubzsKLQkJaW50CQkJc2xvdG5vOwor CQlCdWZmZXIJCWJ1ZmZlcjsKKwkJUGFnZQkJcGFnZTsKIAogCQltZW1jcHkoJnBhZ2VubywgWExv Z1JlY0dldERhdGEocmVjb3JkKSwgc2l6ZW9mKGludCkpOwogCi0JCUxXTG9ja0FjcXVpcmUoQ29t bWl0VHNTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCQlzbG90bm8gPSBaZXJvQ29tbWl0VHNQ YWdlKHBhZ2VubywgZmFsc2UpOwotCQlTaW1wbGVMcnVXcml0ZVBhZ2UoQ29tbWl0VHNDdGwsIHNs b3Rubyk7Ci0JCUFzc2VydCghQ29tbWl0VHNDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9d KTsKLQotCQlMV0xvY2tSZWxlYXNlKENvbW1pdFRzU0xSVUxvY2spOworCQlidWZmZXIgPSBaZXJv U2xydUJ1ZmZlcihTTFJVX0NPTU1JVF9UU19JRCwgcGFnZW5vKTsKKwkJCisJCXBhZ2UgPSBCdWZm ZXJHZXRQYWdlKGJ1ZmZlcik7CisJCVBhZ2VJbml0U0xSVShwYWdlLCBCTENLU1osIDApOworCQkK KwkJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CisJCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJ CVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAl9CiAJZWxzZSBpZiAoaW5mbyA9PSBDT01N SVRfVFNfVFJVTkNBVEUpCiAJewpAQCAtOTkyLDIzICs5NjgsOCBAQCBjb21taXRfdHNfcmVkbyhY TG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAogCQlBZHZhbmNlT2xkZXN0Q29tbWl0VHNYaWQodHJ1 bmMtPm9sZGVzdFhpZCk7CiAKLQkJLyoKLQkJICogRHVyaW5nIFhMT0cgcmVwbGF5LCBsYXRlc3Rf cGFnZV9udW1iZXIgaXNuJ3Qgc2V0IHVwIHlldDsgaW5zZXJ0IGEKLQkJICogc3VpdGFibGUgdmFs dWUgdG8gYnlwYXNzIHRoZSBzYW5pdHkgdGVzdCBpbiBTaW1wbGVMcnVUcnVuY2F0ZS4KLQkJICov Ci0JCUNvbW1pdFRzQ3RsLT5zaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHRydW5jLT5wYWdl bm87Ci0KLQkJU2ltcGxlTHJ1VHJ1bmNhdGUoQ29tbWl0VHNDdGwsIHRydW5jLT5wYWdlbm8pOwor CQlTaW1wbGVMcnVUcnVuY2F0ZShTTFJVX0NPTU1JVF9UU19JRCwgQ29tbWl0VHNQYWdlUHJlY2Vk ZXMsIHRydW5jLT5wYWdlbm8pOwogCX0KIAllbHNlCiAJCWVsb2coUEFOSUMsICJjb21taXRfdHNf cmVkbzogdW5rbm93biBvcCBjb2RlICV1IiwgaW5mbyk7CiB9Ci0KLS8qCi0gKiBFbnRyeXBvaW50 IGZvciBzeW5jLmMgdG8gc3luYyBjb21taXRfdHMgZmlsZXMuCi0gKi8KLWludAotY29tbWl0dHNz eW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKQotewotCXJldHVybiBT bHJ1U3luY0ZpbGVUYWcoQ29tbWl0VHNDdGwsIGZ0YWcsIHBhdGgpOwotfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9tdWx0aXhhY3QuYwppbmRleCBmZTY2OThkNWZmYS4uNTUyZmU4NjA0MzQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCkBAIC0xMDYsNyArMTA2LDcgQEAK ICAqLwogCiAvKiBXZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIG9mZnNldCAqLwotI2RlZmluZSBNVUxU SVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSAoQkxDS1NaIC8gc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkp CisjZGVmaW5lIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFICgoQkxDS1NaIC0gU2l6ZU9mUGFn ZUhlYWRlckRhdGEpLyBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0KSkKIAogI2RlZmluZSBNdWx0aVhh Y3RJZFRvT2Zmc2V0UGFnZSh4aWQpIFwKIAkoKHhpZCkgLyAoTXVsdGlYYWN0T2Zmc2V0KSBNVUxU SVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSkKQEAgLTEzOCw3ICsxMzgsNyBAQAogLyogc2l6ZSBpbiBi eXRlcyBvZiBhIGNvbXBsZXRlIGdyb3VwICovCiAjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9V UF9TSVpFIFwKIAkoc2l6ZW9mKFRyYW5zYWN0aW9uSWQpICogTVVMVElYQUNUX01FTUJFUlNfUEVS X01FTUJFUkdST1VQICsgTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVApCi0jZGVmaW5lIE1V TFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKEJMQ0tTWiAvIE1VTFRJWEFDVF9NRU1CRVJH Uk9VUF9TSVpFKQorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFICgoQkxD S1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpIC8gTVVMVElYQUNUX01FTUJFUkdST1VQX1NJWkUp CiAjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFCVwKIAkoTVVMVElYQUNUX01FTUJF UkdST1VQU19QRVJfUEFHRSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCkKIApA QCAtMTYxLDkgKzE2MSw5IEBACiAKIC8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRoaW4gcGFn ZSkgb2YgZmxhZyB3b3JkIGZvciBhIGdpdmVuIG1lbWJlciAqLwogI2RlZmluZSBNWE9mZnNldFRv RmxhZ3NPZmZzZXQoeGlkKSBcCi0JKCgoKHhpZCkgLyAoVHJhbnNhY3Rpb25JZCkgTVVMVElYQUNU X01FTUJFUlNfUEVSX01FTUJFUkdST1VQKSAlIFwKKwkoKCgoKHhpZCkgLyAoVHJhbnNhY3Rpb25J ZCkgTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQKSAlIFwKIAkgIChUcmFuc2FjdGlv bklkKSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFKSAqIFwKLQkgKFRyYW5zYWN0aW9u SWQpIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFKQorCSAoVHJhbnNhY3Rpb25JZCkgTVVMVElY QUNUX01FTUJFUkdST1VQX1NJWkUpKQogI2RlZmluZSBNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdCh4 aWQpIFwKIAkoKCh4aWQpICUgKFRyYW5zYWN0aW9uSWQpIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9N RU1CRVJHUk9VUCkgKiBcCiAJIE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUKQpAQCAtMTgxLDE1 ICsxODEsNiBAQAogI2RlZmluZSBQcmV2aW91c011bHRpWGFjdElkKHhpZCkgXAogCSgoeGlkKSA9 PSBGaXJzdE11bHRpWGFjdElkID8gTWF4TXVsdGlYYWN0SWQgOiAoeGlkKSAtIDEpCiAKLS8qCi0g KiBMaW5rcyB0byBzaGFyZWQtbWVtb3J5IGRhdGEgc3RydWN0dXJlcyBmb3IgTXVsdGlYYWN0IGNv bnRyb2wKLSAqLwotc3RhdGljIFNscnVDdGxEYXRhIE11bHRpWGFjdE9mZnNldEN0bERhdGE7Ci1z dGF0aWMgU2xydUN0bERhdGEgTXVsdGlYYWN0TWVtYmVyQ3RsRGF0YTsKLQotI2RlZmluZSBNdWx0 aVhhY3RPZmZzZXRDdGwJKCZNdWx0aVhhY3RPZmZzZXRDdGxEYXRhKQotI2RlZmluZSBNdWx0aVhh Y3RNZW1iZXJDdGwJKCZNdWx0aVhhY3RNZW1iZXJDdGxEYXRhKQotCiAvKgogICogTXVsdGlYYWN0 IHN0YXRlIHNoYXJlZCBhY3Jvc3MgYWxsIGJhY2tlbmRzLiAgQWxsIHRoaXMgc3RhdGUgaXMgcHJv dGVjdGVkCiAgKiBieSBNdWx0aVhhY3RHZW5Mb2NrLiAgKFdlIGFsc28gdXNlIE11bHRpWGFjdE9m ZnNldFNMUlVMb2NrIGFuZApAQCAtMzQxLDggKzMzMiw4IEBAIHN0YXRpYyBNZW1vcnlDb250ZXh0 IE1YYWN0Q29udGV4dCA9IE5VTEw7CiAvKiBpbnRlcm5hbCBNdWx0aVhhY3RJZCBtYW5hZ2VtZW50 ICovCiBzdGF0aWMgdm9pZCBNdWx0aVhhY3RJZFNldE9sZGVzdFZpc2libGUodm9pZCk7CiBzdGF0 aWMgdm9pZCBSZWNvcmROZXdNdWx0aVhhY3QoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9m ZnNldCBvZmZzZXQsCi0JCQkJCQkJICAgaW50IG5tZW1iZXJzLCBNdWx0aVhhY3RNZW1iZXIgKm1l bWJlcnMpOwotc3RhdGljIE11bHRpWGFjdElkIEdldE5ld011bHRpWGFjdElkKGludCBubWVtYmVy cywgTXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQpOworCQkJCQkJCSAgIGludCBubWVtYmVycywgTXVs dGlYYWN0TWVtYmVyICptZW1iZXJzLCBCdWZmZXIgKiBvZmZzZXRfYnVmX3B0ciwgQnVmZmVyICog bWVtYmVyX2J1ZnMpOworc3RhdGljIE11bHRpWGFjdElkIEdldE5ld011bHRpWGFjdElkKGludCBu bWVtYmVycywgTXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQsIEJ1ZmZlciAqIG9mZnNldF9idWYsIEJ1 ZmZlciAqKiBtZW1iZXJfYnVmcyk7CiAKIC8qIE11bHRpWGFjdCBjYWNoZSBtYW5hZ2VtZW50ICov CiBzdGF0aWMgaW50CW14YWN0TWVtYmVyQ29tcGFyYXRvcihjb25zdCB2b2lkICphcmcxLCBjb25z dCB2b2lkICphcmcyKTsKQEAgLTM1NCwxOSArMzQ1LDE4IEBAIHN0YXRpYyB2b2lkIG1YYWN0Q2Fj aGVQdXQoTXVsdGlYYWN0SWQgbXVsdGksIGludCBubWVtYmVycywKIHN0YXRpYyBjaGFyICpteHN0 YXR1c190b19zdHJpbmcoTXVsdGlYYWN0U3RhdHVzIHN0YXR1cyk7CiAKIC8qIG1hbmFnZW1lbnQg b2YgU0xSVSBpbmZyYXN0cnVjdHVyZSAqLwotc3RhdGljIGludAlaZXJvTXVsdGlYYWN0T2Zmc2V0 UGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZyk7Ci1zdGF0aWMgaW50CVplcm9NdWx0aVhh Y3RNZW1iZXJQYWdlKGludCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9nKTsKK3N0YXRpYyBCdWZmZXIg WmVyb011bHRpWGFjdE9mZnNldFBhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOworc3Rh dGljIEJ1ZmZlciBaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRl WGxvZyk7CiBzdGF0aWMgYm9vbCBNdWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMoaW50IHBhZ2Ux LCBpbnQgcGFnZTIpOwotc3RhdGljIGJvb2wgTXVsdGlYYWN0TWVtYmVyUGFnZVByZWNlZGVzKGlu dCBwYWdlMSwgaW50IHBhZ2UyKTsKIHN0YXRpYyBib29sIE11bHRpWGFjdE9mZnNldFByZWNlZGVz KE11bHRpWGFjdE9mZnNldCBvZmZzZXQxLAogCQkJCQkJCQkJTXVsdGlYYWN0T2Zmc2V0IG9mZnNl dDIpOwotc3RhdGljIHZvaWQgRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11bHRpWGFjdElkIG11bHRp KTsKLXN0YXRpYyB2b2lkIEV4dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zm c2V0LCBpbnQgbm1lbWJlcnMpOworc3RhdGljIHZvaWQgRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11 bHRpWGFjdElkIG11bHRpLCBCdWZmZXIgKiBidWZmZXIpOworc3RhdGljIHZvaWQgRXh0ZW5kTXVs dGlYYWN0TWVtYmVyKE11bHRpWGFjdE9mZnNldCBvZmZzZXQsIGludCBubWVtYmVycywgQnVmZmVy ICoqIG1lbWJlcl9idWZmZXJzKTsKIHN0YXRpYyBib29sIE11bHRpWGFjdE9mZnNldFdvdWxkV3Jh cChNdWx0aVhhY3RPZmZzZXQgYm91bmRhcnksCiAJCQkJCQkJCQkgTXVsdGlYYWN0T2Zmc2V0IHN0 YXJ0LCB1aW50MzIgZGlzdGFuY2UpOwogc3RhdGljIGJvb2wgU2V0T2Zmc2V0VmFjdXVtTGltaXQo Ym9vbCBpc19zdGFydHVwKTsKIHN0YXRpYyBib29sIGZpbmRfbXVsdGl4YWN0X3N0YXJ0KE11bHRp WGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgKnJlc3VsdCk7Ci1zdGF0aWMgdm9pZCBXcml0 ZU1aZXJvUGFnZVhsb2dSZWMoaW50IHBhZ2VubywgdWludDggaW5mbyk7CitzdGF0aWMgWExvZ1Jl Y1B0ciBXcml0ZU1aZXJvUGFnZVhsb2dSZWMoaW50IHBhZ2VubywgdWludDggaW5mbyk7CiBzdGF0 aWMgdm9pZCBXcml0ZU1UcnVuY2F0ZVhsb2dSZWMoT2lkIG9sZGVzdE11bHRpREIsCiAJCQkJCQkJ CSAgTXVsdGlYYWN0SWQgc3RhcnRUcnVuY09mZiwKIAkJCQkJCQkJICBNdWx0aVhhY3RJZCBlbmRU cnVuY09mZiwKQEAgLTc2Nyw2ICs3NTcsOSBAQCBSZWFkTXVsdGlYYWN0SWRSYW5nZShNdWx0aVhh Y3RJZCAqb2xkZXN0LCBNdWx0aVhhY3RJZCAqbmV4dCkKIE11bHRpWGFjdElkCiBNdWx0aVhhY3RJ ZENyZWF0ZUZyb21NZW1iZXJzKGludCBubWVtYmVycywgTXVsdGlYYWN0TWVtYmVyICptZW1iZXJz KQogeworCUJ1ZmZlciAqIG1lbWJlcl9idWZzOworCUJ1ZmZlciBvZmZzZXRfYnVmZjsKKwogCU11 bHRpWGFjdElkIG11bHRpOwogCU11bHRpWGFjdE9mZnNldCBvZmZzZXQ7CiAJeGxfbXVsdGl4YWN0 X2NyZWF0ZSB4bHJlYzsKQEAgLTgyMCw3ICs4MTMsOCBAQCBNdWx0aVhhY3RJZENyZWF0ZUZyb21N ZW1iZXJzKGludCBubWVtYmVycywgTXVsdGlYYWN0TWVtYmVyICptZW1iZXJzKQogCSAqIGluIHZh Y3V1bS4gIER1cmluZyB2YWN1dW0sIGluIHBhcnRpY3VsYXIsIGl0IHdvdWxkIGJlIHVuYWNjZXB0 YWJsZSB0bwogCSAqIGtlZXAgT2xkZXN0TXVsdGkgc2V0LCBpbiBjYXNlIGl0IHJ1bnMgZm9yIGxv bmcuCiAJICovCi0JbXVsdGkgPSBHZXROZXdNdWx0aVhhY3RJZChubWVtYmVycywgJm9mZnNldCk7 CisKKwltdWx0aSA9IEdldE5ld011bHRpWGFjdElkKG5tZW1iZXJzLCAmb2Zmc2V0LCAmb2Zmc2V0 X2J1ZmYsICZtZW1iZXJfYnVmcyk7CiAKIAkvKiBNYWtlIGFuIFhMT0cgZW50cnkgZGVzY3JpYmlu ZyB0aGUgbmV3IE1YSUQuICovCiAJeGxyZWMubWlkID0gbXVsdGk7CkBAIC04NDAsOCArODM0LDgg QEAgTXVsdGlYYWN0SWRDcmVhdGVGcm9tTWVtYmVycyhpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE1l bWJlciAqbWVtYmVycykKIAkodm9pZCkgWExvZ0luc2VydChSTV9NVUxUSVhBQ1RfSUQsIFhMT0df TVVMVElYQUNUX0NSRUFURV9JRCk7CiAKIAkvKiBOb3cgZW50ZXIgdGhlIGluZm9ybWF0aW9uIGlu dG8gdGhlIE9GRlNFVHMgYW5kIE1FTUJFUnMgbG9ncyAqLwotCVJlY29yZE5ld011bHRpWGFjdCht dWx0aSwgb2Zmc2V0LCBubWVtYmVycywgbWVtYmVycyk7Ci0KKwlSZWNvcmROZXdNdWx0aVhhY3Qo bXVsdGksIG9mZnNldCwgbm1lbWJlcnMsIG1lbWJlcnMsICZvZmZzZXRfYnVmZiwgbWVtYmVyX2J1 ZnMpOworCQogCS8qIERvbmUgd2l0aCBjcml0aWNhbCBzZWN0aW9uICovCiAJRU5EX0NSSVRfU0VD VElPTigpOwogCkBAIC04NjIsNDAgKzg1NiwzOCBAQCBNdWx0aVhhY3RJZENyZWF0ZUZyb21NZW1i ZXJzKGludCBubWVtYmVycywgTXVsdGlYYWN0TWVtYmVyICptZW1iZXJzKQogICovCiBzdGF0aWMg dm9pZAogUmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZz ZXQgb2Zmc2V0LAotCQkJCSAgIGludCBubWVtYmVycywgTXVsdGlYYWN0TWVtYmVyICptZW1iZXJz KQorCQkJCSAgIGludCBubWVtYmVycywgTXVsdGlYYWN0TWVtYmVyICptZW1iZXJzLCBCdWZmZXIg KiBvZmZzZXRfYnVmX3B0ciwgQnVmZmVyICogbWVtYmVyX2J1ZnMpCiB7CiAJaW50CQkJcGFnZW5v OwogCWludAkJCXByZXZfcGFnZW5vOworCWludCAJCW1pbl9wYWdlbm87CiAJaW50CQkJZW50cnlu bzsKLQlpbnQJCQlzbG90bm87CiAJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CiAJaW50CQkJaTsK LQotCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7 CisJQnVmZmVyCQlidWZmZXI7CisJQnVmZmVyCQlvZmZzZXRfYnVmOwogCiAJcGFnZW5vID0gTXVs dGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpOwogCWVudHJ5bm8gPSBNdWx0aVhhY3RJZFRvT2Zm c2V0RW50cnkobXVsdGkpOwogCi0JLyoKLQkgKiBOb3RlOiB3ZSBwYXNzIHRoZSBNdWx0aVhhY3RJ ZCB0byBTaW1wbGVMcnVSZWFkUGFnZSBhcyB0aGUgInRyYW5zYWN0aW9uIgotCSAqIHRvIGNvbXBs YWluIGFib3V0IGlmIHRoZXJlJ3MgYW55IEkvTyBlcnJvci4gIFRoaXMgaXMga2luZGEgYm9ndXMs IGJ1dAotCSAqIHNpbmNlIHRoZSBlcnJvcnMgd2lsbCBhbHdheXMgZ2l2ZSB0aGUgZnVsbCBwYXRo bmFtZSwgaXQgc2hvdWxkIGJlIGNsZWFyCi0JICogZW5vdWdoIHRoYXQgYSBNdWx0aVhhY3RJZCBp cyByZWFsbHkgaW52b2x2ZWQuICBQZXJoYXBzIHNvbWVkYXkgd2UnbGwKLQkgKiB0YWtlIHRoZSB0 cm91YmxlIHRvIGdlbmVyYWxpemUgdGhlIHNscnUuYyBlcnJvciByZXBvcnRpbmcgY29kZS4KLQkg Ki8KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2Vu bywgdHJ1ZSwgbXVsdGkpOwotCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0 T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107Ci0Jb2ZmcHRyICs9IGVudHJ5 bm87CisJaWYgKG9mZnNldF9idWZfcHRyKQorCQlvZmZzZXRfYnVmID0gKm9mZnNldF9idWZfcHRy OworCWVsc2UgCisJCW9mZnNldF9idWYgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9P RkZTRVRfSUQsIHBhZ2VubywgUkJNX05PUk1BTCk7CiAKLQkqb2ZmcHRyID0gb2Zmc2V0OworCUxv Y2tCdWZmZXIob2Zmc2V0X2J1ZiwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwkJCQkJCQogCi0J TXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRydWU7CisJ b2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFn ZShvZmZzZXRfYnVmKSk7CisJb2ZmcHRyICs9IGVudHJ5bm87CiAKLQkvKiBFeGNoYW5nZSBvdXIg bG9jayAqLwotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOworCSpvZmZw dHIgPSBvZmZzZXQ7CiAKLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrLCBM V19FWENMVVNJVkUpOworCU1hcmtCdWZmZXJEaXJ0eShvZmZzZXRfYnVmKTsKKwlVbmxvY2tSZWxl YXNlQnVmZmVyKG9mZnNldF9idWYpOworCWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAKKwltaW5f cGFnZW5vID0gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0KTsKIAlwcmV2X3BhZ2VubyA9IC0x OwogCiAJZm9yIChpID0gMDsgaSA8IG5tZW1iZXJzOyBpKyssIG9mZnNldCsrKQpAQCAtOTE2LDI3 ICs5MDgsMzUgQEAgUmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhh Y3RPZmZzZXQgb2Zmc2V0LAogCiAJCWlmIChwYWdlbm8gIT0gcHJldl9wYWdlbm8pCiAJCXsKLQkJ CXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE1lbWJlckN0bCwgcGFnZW5vLCB0 cnVlLCBtdWx0aSk7CisJCQlpZiAoQnVmZmVySXNWYWxpZChidWZmZXIpKQorCQkJCVVubG9ja1Jl bGVhc2VCdWZmZXIoYnVmZmVyKTsKKworCQkJaWYgKG1lbWJlcl9idWZzKQorCQkJCWJ1ZmZlciA9 IG1lbWJlcl9idWZzW3BhZ2VubyAtIG1pbl9wYWdlbm9dOworCQkJZWxzZQorCQkJCWJ1ZmZlciA9 IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwgcGFnZW5vLCBSQk1fTk9S TUFMKTsKKworCQkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CiAJ CQlwcmV2X3BhZ2VubyA9IHBhZ2VubzsKIAkJfQogCi0JCW1lbWJlcnB0ciA9IChUcmFuc2FjdGlv bklkICopCi0JCQkoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Ru b10gKyBtZW1iZXJvZmYpOworCQltZW1iZXJwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSAoUGFnZUdl dENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBtZW1iZXJvZmYpOwogCiAJCSptZW1i ZXJwdHIgPSBtZW1iZXJzW2ldLnhpZDsKIAotCQlmbGFnc3B0ciA9ICh1aW50MzIgKikKLQkJCShN dWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGZsYWdzb2Zm KTsKKwkJZmxhZ3NwdHIgPSAodWludDMyICopIChQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFn ZShidWZmZXIpKSArIGZsYWdzb2ZmKTsKIAogCQlmbGFnc3ZhbCA9ICpmbGFnc3B0cjsKIAkJZmxh Z3N2YWwgJj0gfigoKDEgPDwgTVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1QpIC0gMSkgPDwgYnNo aWZ0KTsKIAkJZmxhZ3N2YWwgfD0gKG1lbWJlcnNbaV0uc3RhdHVzIDw8IGJzaGlmdCk7CiAJCSpm bGFnc3B0ciA9IGZsYWdzdmFsOwogCi0JCU11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdl X2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAl9CiAK LQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNl QnVmZmVyKGJ1ZmZlcik7CisJaWYgKG1lbWJlcl9idWZzICE9IE5VTEwpCisJCXBmcmVlKG1lbWJl cl9idWZzKTsKIH0KIAogLyoKQEAgLTk1NSw4ICs5NTUsMTEgQEAgUmVjb3JkTmV3TXVsdGlYYWN0 KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LAogICogY2FsbGVyIG11 c3QgZW5kIHRoZSBjcml0aWNhbCBzZWN0aW9uIGFmdGVyIHdyaXRpbmcgU0xSVSBkYXRhLgogICov CiBzdGF0aWMgTXVsdGlYYWN0SWQKLUdldE5ld011bHRpWGFjdElkKGludCBubWVtYmVycywgTXVs dGlYYWN0T2Zmc2V0ICpvZmZzZXQpCitHZXROZXdNdWx0aVhhY3RJZChpbnQgbm1lbWJlcnMsIE11 bHRpWGFjdE9mZnNldCAqb2Zmc2V0LCBCdWZmZXIgKiBvZmZzZXRfYnVmLCBCdWZmZXIgKiogbWVt YmVyX2J1ZnMpCiB7CisJaW50IG1pbl9wYWdlbm87CisJaW50IG1heF9wYWdlbm87CisKIAlNdWx0 aVhhY3RJZCByZXN1bHQ7CiAJTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQ7CiAKQEAgLTEwNzQs NyArMTA3Nyw3IEBAIEdldE5ld011bHRpWGFjdElkKGludCBubWVtYmVycywgTXVsdGlYYWN0T2Zm c2V0ICpvZmZzZXQpCiAJfQogCiAJLyogTWFrZSBzdXJlIHRoZXJlIGlzIHJvb20gZm9yIHRoZSBN WElEIGluIHRoZSBmaWxlLiAgKi8KLQlFeHRlbmRNdWx0aVhhY3RPZmZzZXQocmVzdWx0KTsKKwlF eHRlbmRNdWx0aVhhY3RPZmZzZXQocmVzdWx0LCBvZmZzZXRfYnVmKTsKIAogCS8qCiAJICogUmVz ZXJ2ZSB0aGUgbWVtYmVycyBzcGFjZSwgc2ltaWxhcmx5IHRvIGFib3ZlLiAgQWxzbywgYmUgY2Fy ZWZ1bCBub3QgdG8KQEAgLTExNjIsNyArMTE2NSwxMiBAQCBHZXROZXdNdWx0aVhhY3RJZChpbnQg bm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KQogCQkJCQkJCSAgIE11bHRpWGFjdFN0 YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBuZXh0T2Zmc2V0ICsgbm1lbWJlcnMpLAogCQkJCSBlcnJo aW50KCJFeGVjdXRlIGEgZGF0YWJhc2Utd2lkZSBWQUNVVU0gaW4gdGhhdCBkYXRhYmFzZSB3aXRo IHJlZHVjZWQgdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWluX2FnZSBhbmQgdmFjdXVtX211bHRp eGFjdF9mcmVlemVfdGFibGVfYWdlIHNldHRpbmdzLiIpKSk7CiAKLQlFeHRlbmRNdWx0aVhhY3RN ZW1iZXIobmV4dE9mZnNldCwgbm1lbWJlcnMpOworCW1pbl9wYWdlbm8gPSBNWE9mZnNldFRvTWVt YmVyUGFnZShuZXh0T2Zmc2V0KTsKKwltYXhfcGFnZW5vID0gTVhPZmZzZXRUb01lbWJlclBhZ2Uo bmV4dE9mZnNldCArIG5tZW1iZXJzIC0gMSk7CisKKwkqbWVtYmVyX2J1ZnMgPSAoQnVmZmVyICop IHBhbGxvYyhzaXplb2YoQnVmZmVyKSAqIChtYXhfcGFnZW5vIC0gbWluX3BhZ2VubyArIDEpKTsK KworCUV4dGVuZE11bHRpWGFjdE1lbWJlcihuZXh0T2Zmc2V0LCBubWVtYmVycywgbWVtYmVyX2J1 ZnMpOwogCiAJLyoKIAkgKiBDcml0aWNhbCBzZWN0aW9uIGZyb20gaGVyZSB1bnRpbCBjYWxsZXIg aGFzIHdyaXR0ZW4gdGhlIGRhdGEgaW50byB0aGUKQEAgLTEyMjgsNyArMTIzNiw2IEBAIEdldE11 bHRpWGFjdElkTWVtYmVycyhNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVt YmVycywKIAlpbnQJCQlwYWdlbm87CiAJaW50CQkJcHJldl9wYWdlbm87CiAJaW50CQkJZW50cnlu bzsKLQlpbnQJCQlzbG90bm87CiAJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CiAJTXVsdGlYYWN0 T2Zmc2V0IG9mZnNldDsKIAlpbnQJCQlsZW5ndGg7CkBAIC0xMjM5LDYgKzEyNDYsNyBAQCBHZXRN dWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE1lbWJlciAqKm1l bWJlcnMsCiAJTXVsdGlYYWN0SWQgdG1wTVhhY3Q7CiAJTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZz ZXQ7CiAJTXVsdGlYYWN0TWVtYmVyICpwdHI7CisJQnVmZmVyCQlidWZmZXI7CiAKIAlkZWJ1Z19l bG9nMyhERUJVRzIsICJHZXRNZW1iZXJzOiBhc2tlZCBmb3IgJXUiLCBtdWx0aSk7CiAKQEAgLTEz NDIsMTMgKzEzNTAsMTIgQEAgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRp LCBNdWx0aVhhY3RNZW1iZXIgKiptZW1iZXJzLAogCSAqIHRpbWUgb24gZXZlcnkgbXVsdGl4YWN0 IGNyZWF0aW9uLgogCSAqLwogcmV0cnk6Ci0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RPZmZzZXRT TFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQ YWdlKG11bHRpKTsKIAllbnRyeW5vID0gTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KG11bHRpKTsK IAotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5v LCB0cnVlLCBtdWx0aSk7Ci0Jb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RP ZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKwlidWZmZXIgPSBSZWFkU2xy dUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2VubywgUkJNX05PUk1BTCk7CisJ TG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwlvZmZwdHIgPSAoTXVsdGlY YWN0T2Zmc2V0ICopIChQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSk7CiAJ b2ZmcHRyICs9IGVudHJ5bm87CiAJb2Zmc2V0ID0gKm9mZnB0cjsKIApAQCAtMTM3OSwxNiArMTM4 NiwyMCBAQCByZXRyeToKIAkJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeSh0bXBN WGFjdCk7CiAKIAkJaWYgKHBhZ2VubyAhPSBwcmV2X3BhZ2VubykKLQkJCXNsb3RubyA9IFNpbXBs ZUxydVJlYWRQYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vLCB0cnVlLCB0bXBNWGFjdCk7 CisJCXsKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCWJ1ZmZlciA9IFJlYWRT bHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vLCBSQk1fTk9STUFMKTsK KwkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCX0KIAotCQlvZmZw dHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdl X2J1ZmZlcltzbG90bm9dOworCQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIChQYWdlR2V0 Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSk7CiAJCW9mZnB0ciArPSBlbnRyeW5vOwog CQluZXh0TVhPZmZzZXQgPSAqb2ZmcHRyOwogCiAJCWlmIChuZXh0TVhPZmZzZXQgPT0gMCkKIAkJ ewogCQkJLyogQ29ybmVyIGNhc2UgMjogbmV4dCBtdWx0aXhhY3QgaXMgc3RpbGwgYmVpbmcgZmls bGVkIGluICovCi0JCQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrKTsKKwkJ CVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7 CiAJCQlwZ191c2xlZXAoMTAwMEwpOwogCQkJZ290byByZXRyeTsKQEAgLTEzOTYsMTQgKzE0MDcs MTEgQEAgcmV0cnk6CiAKIAkJbGVuZ3RoID0gbmV4dE1YT2Zmc2V0IC0gb2Zmc2V0OwogCX0KLQot CUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VC dWZmZXIoYnVmZmVyKTsKKwlidWZmZXIgPSBJbnZhbGlkQnVmZmVyOwogCiAJcHRyID0gKE11bHRp WGFjdE1lbWJlciAqKSBwYWxsb2MobGVuZ3RoICogc2l6ZW9mKE11bHRpWGFjdE1lbWJlcikpOwog Ci0JLyogTm93IGdldCB0aGUgbWVtYmVycyB0aGVtc2VsdmVzLiAqLwotCUxXTG9ja0FjcXVpcmUo TXVsdGlYYWN0TWVtYmVyU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAl0cnVlbGVuZ3RoID0g MDsKIAlwcmV2X3BhZ2VubyA9IC0xOwogCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKywgb2Zm c2V0KyspCkBAIC0xNDE5LDEyICsxNDI3LDE0IEBAIHJldHJ5OgogCiAJCWlmIChwYWdlbm8gIT0g cHJldl9wYWdlbm8pCiAJCXsKLQkJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFj dE1lbWJlckN0bCwgcGFnZW5vLCB0cnVlLCBtdWx0aSk7CisJCQlpZiAoQnVmZmVySXNWYWxpZChi dWZmZXIpKQorCQkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCWJ1ZmZlciA9IFJl YWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwgcGFnZW5vLCBSQk1fTk9STUFM KTsKKwkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJCQlwcmV2X3Bh Z2VubyA9IHBhZ2VubzsKIAkJfQogCi0JCXhhY3RwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKQotCQkJ KE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgbWVtYmVy b2ZmKTsKKwkJeGFjdHB0ciA9IChUcmFuc2FjdGlvbklkICopIChQYWdlR2V0Q29udGVudHMoKEJ1 ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBtZW1iZXJvZmYpKTsKIAogCQlpZiAoIVRyYW5zYWN0aW9u SWRJc1ZhbGlkKCp4YWN0cHRyKSkKIAkJewpAQCAtMTQzNSwxNCArMTQ0NSwxMyBAQCByZXRyeToK IAogCQlmbGFnc29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpOwogCQlic2hpZnQg PSBNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdChvZmZzZXQpOwotCQlmbGFnc3B0ciA9ICh1aW50MzIg KikgKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgZmxh Z3NvZmYpOworCQlmbGFnc3B0ciA9ICh1aW50MzIgKikgKFBhZ2VHZXRDb250ZW50cyhCdWZmZXJH ZXRQYWdlKGJ1ZmZlcikpICsgZmxhZ3NvZmYpOwogCiAJCXB0clt0cnVlbGVuZ3RoXS54aWQgPSAq eGFjdHB0cjsKIAkJcHRyW3RydWVsZW5ndGhdLnN0YXR1cyA9ICgqZmxhZ3NwdHIgPj4gYnNoaWZ0 KSAmIE1YQUNUX01FTUJFUl9YQUNUX0JJVE1BU0s7CiAJCXRydWVsZW5ndGgrKzsKIAl9Ci0KLQlM V0xvY2tSZWxlYXNlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVm ZmVyKGJ1ZmZlcik7CiAKIAkvKiBBIG11bHRpeGlkIHdpdGggemVybyBtZW1iZXJzIHNob3VsZCBu b3QgaGFwcGVuICovCiAJQXNzZXJ0KHRydWVsZW5ndGggPiAwKTsKQEAgLTE4MzQsOCArMTg0Myw2 IEBAIE11bHRpWGFjdFNobWVtU2l6ZSh2b2lkKQogCQkJIG11bF9zaXplKHNpemVvZihNdWx0aVhh Y3RJZCkgKiAyLCBNYXhPbGRlc3RTbG90KSkKIAogCXNpemUgPSBTSEFSRURfTVVMVElYQUNUX1NU QVRFX1NJWkU7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNpbXBsZUxydVNobWVtU2l6ZShOVU1f TVVMVElYQUNUT0ZGU0VUX0JVRkZFUlMsIDApKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2lt cGxlTHJ1U2htZW1TaXplKE5VTV9NVUxUSVhBQ1RNRU1CRVJfQlVGRkVSUywgMCkpOwogCiAJcmV0 dXJuIHNpemU7CiB9CkBAIC0xODQ3LDIyICsxODU0LDYgQEAgTXVsdGlYYWN0U2htZW1Jbml0KHZv aWQpCiAKIAlkZWJ1Z19lbG9nMihERUJVRzIsICJTaGFyZWQgTWVtb3J5IEluaXQgZm9yIE11bHRp WGFjdCIpOwogCi0JTXVsdGlYYWN0T2Zmc2V0Q3RsLT5QYWdlUHJlY2VkZXMgPSBNdWx0aVhhY3RP ZmZzZXRQYWdlUHJlY2VkZXM7Ci0JTXVsdGlYYWN0TWVtYmVyQ3RsLT5QYWdlUHJlY2VkZXMgPSBN dWx0aVhhY3RNZW1iZXJQYWdlUHJlY2VkZXM7Ci0KLQlTaW1wbGVMcnVJbml0KE11bHRpWGFjdE9m ZnNldEN0bCwKLQkJCQkgICJNdWx0aVhhY3RPZmZzZXQiLCBOVU1fTVVMVElYQUNUT0ZGU0VUX0JV RkZFUlMsIDAsCi0JCQkJICBNdWx0aVhhY3RPZmZzZXRTTFJVTG9jaywgInBnX211bHRpeGFjdC9v ZmZzZXRzIiwKLQkJCQkgIExXVFJBTkNIRV9NVUxUSVhBQ1RPRkZTRVRfQlVGRkVSLAotCQkJCSAg U1lOQ19IQU5ETEVSX01VTFRJWEFDVF9PRkZTRVQpOwotCVNscnVQYWdlUHJlY2VkZXNVbml0VGVz dHMoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSk7Ci0JU2lt cGxlTHJ1SW5pdChNdWx0aVhhY3RNZW1iZXJDdGwsCi0JCQkJICAiTXVsdGlYYWN0TWVtYmVyIiwg TlVNX01VTFRJWEFDVE1FTUJFUl9CVUZGRVJTLCAwLAotCQkJCSAgTXVsdGlYYWN0TWVtYmVyU0xS VUxvY2ssICJwZ19tdWx0aXhhY3QvbWVtYmVycyIsCi0JCQkJICBMV1RSQU5DSEVfTVVMVElYQUNU TUVNQkVSX0JVRkZFUiwKLQkJCQkgIFNZTkNfSEFORExFUl9NVUxUSVhBQ1RfTUVNQkVSKTsKLQkv KiBkb2Vzbid0IGNhbGwgU2ltcGxlTHJ1VHJ1bmNhdGUoKSBvciBtZWV0IGNyaXRlcmlhIGZvciB1 bml0IHRlc3RzICovCi0KIAkvKiBJbml0aWFsaXplIG91ciBzaGFyZWQgc3RhdGUgc3RydWN0ICov CiAJTXVsdGlYYWN0U3RhdGUgPSBTaG1lbUluaXRTdHJ1Y3QoIlNoYXJlZCBNdWx0aVhhY3QgU3Rh dGUiLAogCQkJCQkJCQkJIFNIQVJFRF9NVUxUSVhBQ1RfU1RBVEVfU0laRSwKQEAgLTE4OTMsMjkg KzE4ODQsMTcgQEAgTXVsdGlYYWN0U2htZW1Jbml0KHZvaWQpCiB2b2lkCiBCb290U3RyYXBNdWx0 aVhhY3Qodm9pZCkKIHsKLQlpbnQJCQlzbG90bm87Ci0KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFj dE9mZnNldFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOworCUJ1ZmZlcgkJYnVmZmVyOwogCiAJLyog Q3JlYXRlIGFuZCB6ZXJvIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBvZmZzZXRzIGxvZyAqLwotCXNs b3RubyA9IFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKDAsIGZhbHNlKTsKLQotCS8qIE1ha2Ugc3Vy ZSBpdCdzIHdyaXR0ZW4gb3V0ICovCi0JU2ltcGxlTHJ1V3JpdGVQYWdlKE11bHRpWGFjdE9mZnNl dEN0bCwgc2xvdG5vKTsKLQlBc3NlcnQoIU11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdl X2RpcnR5W3Nsb3Rub10pOwotCi0JTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9j ayk7Ci0KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrLCBMV19FWENMVVNJ VkUpOworCWJ1ZmZlciA9IFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKDAsIGZhbHNlKTsKKwlGbHVz aE9uZUJ1ZmZlcihidWZmZXIpOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAogCS8q IENyZWF0ZSBhbmQgemVybyB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgbWVtYmVycyBsb2cgKi8KLQlz bG90bm8gPSBaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZSgwLCBmYWxzZSk7Ci0KLQkvKiBNYWtlIHN1 cmUgaXQncyB3cml0dGVuIG91dCAqLwotCVNpbXBsZUxydVdyaXRlUGFnZShNdWx0aVhhY3RNZW1i ZXJDdGwsIHNsb3Rubyk7Ci0JQXNzZXJ0KCFNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFn ZV9kaXJ0eVtzbG90bm9dKTsKLQotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0TWVtYmVyU0xSVUxv Y2spOworCWJ1ZmZlciA9IFplcm9NdWx0aVhhY3RNZW1iZXJQYWdlKDAsIGZhbHNlKTsKKwlGbHVz aE9uZUJ1ZmZlcihidWZmZXIpOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0KIAog LyoKQEAgLTE5MjcsMzMgKzE5MDYsNTQgQEAgQm9vdFN0cmFwTXVsdGlYYWN0KHZvaWQpCiAgKgog ICogQ29udHJvbCBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBh dCBleGl0LgogICovCi1zdGF0aWMgaW50CitzdGF0aWMgQnVmZmVyCiBaZXJvTXVsdGlYYWN0T2Zm c2V0UGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZykKIHsKLQlpbnQJCQlzbG90bm87CisJ QnVmZmVyCQlidWZmZXI7CisJUGFnZQkJcGFnZTsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAotCXNs b3RubyA9IFNpbXBsZUxydVplcm9QYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vKTsKKwli dWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2Vubyk7 CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwlQYWdlSW5pdFNMUlUocGFnZSwgQkxD S1NaLCAwKTsKIAorCXJlY3B0ciA9IDA7CisJCiAJaWYgKHdyaXRlWGxvZykKLQkJV3JpdGVNWmVy b1BhZ2VYbG9nUmVjKHBhZ2VubywgWExPR19NVUxUSVhBQ1RfWkVST19PRkZfUEFHRSk7CisJewor CQlyZWNwdHIgPSBXcml0ZU1aZXJvUGFnZVhsb2dSZWMocGFnZW5vLCBYTE9HX01VTFRJWEFDVF9a RVJPX09GRl9QQUdFKTsKKwl9CisKKwlQYWdlU2V0SGVhZGVyRGF0YU5vblJlbChwYWdlLCBwYWdl bm8sIHJlY3B0ciwgQkxDS1NaLCBQR19NRVRBUEFHRV9MQVlPVVRfVkVSU0lPTik7CisJTWFya0J1 ZmZlckRpcnR5KGJ1ZmZlcik7CiAKLQlyZXR1cm4gc2xvdG5vOworCXJldHVybiBidWZmZXI7CiB9 CiAKIC8qCiAgKiBEaXR0bywgZm9yIE11bHRpWGFjdE1lbWJlcgogICovCi1zdGF0aWMgaW50Citz dGF0aWMgQnVmZmVyCiBaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZShpbnQgcGFnZW5vLCBib29sIHdy aXRlWGxvZykKIHsKLQlpbnQJCQlzbG90bm87Ci0KLQlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFn ZShNdWx0aVhhY3RNZW1iZXJDdGwsIHBhZ2Vubyk7Ci0KKwlCdWZmZXIJCWJ1ZmZlcjsKKwlQYWdl IAkJcGFnZTsKKwlYTG9nUmVjUHRyIAlyZWNwdHI7CisKKwlidWZmZXIgPSBaZXJvU2xydUJ1ZmZl cihTTFJVX01VTFRJWEFDVF9NRU1CRVJfSUQsIHBhZ2Vubyk7CisJcGFnZSA9IEJ1ZmZlckdldFBh Z2UoYnVmZmVyKTsKKwlQYWdlSW5pdFNMUlUocGFnZSwgQkxDS1NaLCAwKTsKKwkJCisJcmVjcHRy ID0gMDsKIAlpZiAod3JpdGVYbG9nKQotCQlXcml0ZU1aZXJvUGFnZVhsb2dSZWMocGFnZW5vLCBY TE9HX01VTFRJWEFDVF9aRVJPX01FTV9QQUdFKTsKLQotCXJldHVybiBzbG90bm87CisJeworCQly ZWNwdHIgPSBXcml0ZU1aZXJvUGFnZVhsb2dSZWMocGFnZW5vLCBYTE9HX01VTFRJWEFDVF9aRVJP X01FTV9QQUdFKTsKKwl9CisJCisJUGFnZVNldEhlYWRlckRhdGFOb25SZWwocGFnZSwgcGFnZW5v LCByZWNwdHIsIEJMQ0tTWiwgUEdfTUVUQVBBR0VfTEFZT1VUX1ZFUlNJT04pOworCU1hcmtCdWZm ZXJEaXJ0eShidWZmZXIpOworCQorCXJldHVybiBidWZmZXI7CiB9CiAKIC8qCkBAIC0xOTc4LDIy ICsxOTc4LDE0IEBAIE1heWJlRXh0ZW5kT2Zmc2V0U2xydSh2b2lkKQogCiAJcGFnZW5vID0gTXVs dGlYYWN0SWRUb09mZnNldFBhZ2UoTXVsdGlYYWN0U3RhdGUtPm5leHRNWGFjdCk7CiAKLQlMV0xv Y2tBY3F1aXJlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JaWYg KCFTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3QoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdl bm8pKQorCWlmICghU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KFNMUlVfTVVMVElYQUNU X09GRlNFVF9JRCwgcGFnZW5vKSkKIAl7Ci0JCWludAkJCXNsb3RubzsKKwkJQnVmZmVyCQkJYnVm ZmVyOwogCi0JCS8qCi0JCSAqIEZvcnR1bmF0ZWx5IGZvciB1cywgU2ltcGxlTHJ1V3JpdGVQYWdl IGlzIGFscmVhZHkgcHJlcGFyZWQgdG8gZGVhbAotCQkgKiB3aXRoIGNyZWF0aW5nIGEgbmV3IHNl Z21lbnQgZmlsZSBldmVuIGlmIHRoZSBwYWdlIHdlJ3JlIHdyaXRpbmcgaXMKLQkJICogbm90IHRo ZSBmaXJzdCBpbiBpdCwgc28gdGhpcyBpcyBlbm91Z2guCi0JCSAqLwotCQlzbG90bm8gPSBaZXJv TXVsdGlYYWN0T2Zmc2V0UGFnZShwYWdlbm8sIGZhbHNlKTsKLQkJU2ltcGxlTHJ1V3JpdGVQYWdl KE11bHRpWGFjdE9mZnNldEN0bCwgc2xvdG5vKTsKKwkJYnVmZmVyID0gWmVyb011bHRpWGFjdE9m ZnNldFBhZ2UocGFnZW5vLCBmYWxzZSk7CisJCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJCVVu bG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAl9Ci0KLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFj dE9mZnNldFNMUlVMb2NrKTsKIH0KIAogLyoKQEAgLTIwMDcsMjEgKzE5OTksNiBAQCBNYXliZUV4 dGVuZE9mZnNldFNscnUodm9pZCkKIHZvaWQKIFN0YXJ0dXBNdWx0aVhhY3Qodm9pZCkKIHsKLQlN dWx0aVhhY3RJZCBtdWx0aSA9IE11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3Q7Ci0JTXVsdGlYYWN0 T2Zmc2V0IG9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0OwotCWludAkJCXBhZ2Vu bzsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSBvZmZzZXQncyBpZGVhIG9mIHRoZSBsYXRlc3QgcGFn ZSBudW1iZXIuCi0JICovCi0JcGFnZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkp OwotCU11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIgPSBwYWdl bm87Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgbWVtYmVyJ3MgaWRlYSBvZiB0aGUgbGF0ZXN0IHBh Z2UgbnVtYmVyLgotCSAqLwotCXBhZ2VubyA9IE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNldCk7 Ci0JTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2Vu bzsKIH0KIAogLyoKQEAgLTIwNDUsMTQgKzIwMjIsOCBAQCBUcmltTXVsdGlYYWN0KHZvaWQpCiAJ b2xkZXN0TVhhY3REQiA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3REQjsKIAlMV0xv Y2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwogCi0JLyogQ2xlYW4gdXAgb2Zmc2V0cyBzdGF0 ZSAqLwotCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VYQ0xVU0lW RSk7Ci0KLQkvKgotCSAqIChSZS0pSW5pdGlhbGl6ZSBvdXIgaWRlYSBvZiB0aGUgbGF0ZXN0IHBh Z2UgbnVtYmVyIGZvciBvZmZzZXRzLgotCSAqLwogCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZz ZXRQYWdlKG5leHRNWGFjdCk7Ci0JTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPmxhdGVzdF9w YWdlX251bWJlciA9IHBhZ2VubzsKKwkKIAogCS8qCiAJICogWmVybyBvdXQgdGhlIHJlbWFpbmRl ciBvZiB0aGUgY3VycmVudCBvZmZzZXRzIHBhZ2UuICBTZWUgbm90ZXMgaW4KQEAgLTIwNjUsNDYg KzIwMzYsMzkgQEAgVHJpbU11bHRpWGFjdCh2b2lkKQogCWVudHJ5bm8gPSBNdWx0aVhhY3RJZFRv T2Zmc2V0RW50cnkobmV4dE1YYWN0KTsKIAlpZiAoZW50cnlubyAhPSAwKQogCXsKLQkJaW50CQkJ c2xvdG5vOwogCQlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0cjsKKwkJQnVmZmVyCQlidWZmZXI7CiAK LQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8s IHRydWUsIG5leHRNWGFjdCk7Ci0JCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlY YWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJCWJ1ZmZlciA9IFJl YWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vLCBSQk1fVFJJTSk7 CisJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCQlvZmZwdHIg PSAoTXVsdGlYYWN0T2Zmc2V0ICopIChQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZm ZXIpKSk7CiAJCW9mZnB0ciArPSBlbnRyeW5vOwogCi0JCU1lbVNldChvZmZwdHIsIDAsIEJMQ0tT WiAtIChlbnRyeW5vICogc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpKTsKKwkJTWVtU2V0KG9mZnB0 ciwgMCwgQkxDS1NaIC0gTUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRlckRhdGEpIC0gKGVudHJ5bm8g KiBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0KSkpOwogCi0JCU11bHRpWGFjdE9mZnNldEN0bC0+c2hh cmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVy KTsKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCX0KIAotCUxXTG9ja1JlbGVhc2Uo TXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOwotCi0JLyogQW5kIHRoZSBzYW1lIGZvciBtZW1iZXJz ICovCi0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jaywgTFdfRVhDTFVTSVZF KTsKLQotCS8qCi0JICogKFJlLSlJbml0aWFsaXplIG91ciBpZGVhIG9mIHRoZSBsYXRlc3QgcGFn ZSBudW1iZXIgZm9yIG1lbWJlcnMuCi0JICovCi0JcGFnZW5vID0gTVhPZmZzZXRUb01lbWJlclBh Z2Uob2Zmc2V0KTsKLQlNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVt YmVyID0gcGFnZW5vOwotCiAJLyoKIAkgKiBaZXJvIG91dCB0aGUgcmVtYWluZGVyIG9mIHRoZSBj dXJyZW50IG1lbWJlcnMgcGFnZS4gIFNlZSBub3RlcyBpbgogCSAqIFRyaW1DTE9HKCkgZm9yIG1v dGl2YXRpb24uCiAJICovCisKKwlwYWdlbm8gPSBNWE9mZnNldFRvTWVtYmVyUGFnZShvZmZzZXQp OwogCWZsYWdzb2ZmID0gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCk7CiAJaWYgKGZsYWdz b2ZmICE9IDApCiAJewotCQlpbnQJCQlzbG90bm87CiAJCVRyYW5zYWN0aW9uSWQgKnhpZHB0cjsK IAkJaW50CQkJbWVtYmVyb2ZmOworCQlCdWZmZXIJCWJ1ZmZlcjsKIAogCQltZW1iZXJvZmYgPSBN WE9mZnNldFRvTWVtYmVyT2Zmc2V0KG9mZnNldCk7Ci0JCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQ YWdlKE11bHRpWGFjdE1lbWJlckN0bCwgcGFnZW5vLCB0cnVlLCBvZmZzZXQpOwotCQl4aWRwdHIg PSAoVHJhbnNhY3Rpb25JZCAqKQotCQkJKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdl X2J1ZmZlcltzbG90bm9dICsgbWVtYmVyb2ZmKTsKKwkJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIo U0xSVV9NVUxUSVhBQ1RfTUVNQkVSX0lELCBwYWdlbm8sIFJCTV9UUklNKTsKKwkJTG9ja0J1ZmZl cihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisJCXhpZHB0ciA9IChUcmFuc2FjdGlv bklkICopIChQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIG1lbWJlcm9m Zik7CiAKLQkJTWVtU2V0KHhpZHB0ciwgMCwgQkxDS1NaIC0gbWVtYmVyb2ZmKTsKKwkJTWVtU2V0 KHhpZHB0ciwgMCwgQkxDS1NaIC0gbWVtYmVyb2ZmIC0gTUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRl ckRhdGEpKTsKIAogCQkvKgogCQkgKiBOb3RlOiB3ZSBkb24ndCBuZWVkIHRvIHplcm8gb3V0IHRo ZSBmbGFnIGJpdHMgaW4gdGhlIHJlbWFpbmluZwpAQCAtMjExMiwxMSArMjA3NiwxMCBAQCBUcmlt TXVsdGlYYWN0KHZvaWQpCiAJCSAqIHdyaXRpbmcuCiAJCSAqLwogCi0JCU11bHRpWGFjdE1lbWJl ckN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCQlNYXJrQnVmZmVyRGly dHkoYnVmZmVyKTsKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCX0KIAotCUxXTG9j a1JlbGVhc2UoTXVsdGlYYWN0TWVtYmVyU0xSVUxvY2spOwotCiAJLyogc2lnbmFsIHRoYXQgd2Un cmUgb2ZmaWNpYWxseSB1cCAqLwogCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0R2VuTG9jaywgTFdf RVhDTFVTSVZFKTsKIAlNdWx0aVhhY3RTdGF0ZS0+ZmluaXNoZWRTdGFydHVwID0gdHJ1ZTsKQEAg LTIxNDgsMjUgKzIxMTEsNiBAQCBNdWx0aVhhY3RHZXRDaGVja3B0TXVsdGkoYm9vbCBpc19zaHV0 ZG93biwKIAkJCQkqbmV4dE11bHRpLCAqbmV4dE11bHRpT2Zmc2V0LCAqb2xkZXN0TXVsdGksICpv bGRlc3RNdWx0aURCKTsKIH0KIAotLyoKLSAqIFBlcmZvcm0gYSBjaGVja3BvaW50IC0tLSBlaXRo ZXIgZHVyaW5nIHNodXRkb3duLCBvciBvbi10aGUtZmx5Ci0gKi8KLXZvaWQKLUNoZWNrUG9pbnRN dWx0aVhhY3Qodm9pZCkKLXsKLQlUUkFDRV9QT1NUR1JFU1FMX01VTFRJWEFDVF9DSEVDS1BPSU5U X1NUQVJUKHRydWUpOwotCi0JLyoKLQkgKiBXcml0ZSBkaXJ0eSBNdWx0aVhhY3QgcGFnZXMgdG8g ZGlzay4gIFRoaXMgbWF5IHJlc3VsdCBpbiBzeW5jIHJlcXVlc3RzCi0JICogcXVldWVkIGZvciBs YXRlciBoYW5kbGluZyBieSBQcm9jZXNzU3luY1JlcXVlc3RzKCksIGFzIHBhcnQgb2YgdGhlCi0J ICogY2hlY2twb2ludC4KLQkgKi8KLQlTaW1wbGVMcnVXcml0ZUFsbChNdWx0aVhhY3RPZmZzZXRD dGwsIHRydWUpOwotCVNpbXBsZUxydVdyaXRlQWxsKE11bHRpWGFjdE1lbWJlckN0bCwgdHJ1ZSk7 Ci0KLQlUUkFDRV9QT1NUR1JFU1FMX01VTFRJWEFDVF9DSEVDS1BPSU5UX0RPTkUodHJ1ZSk7Ci19 Ci0KIC8qCiAgKiBTZXQgdGhlIG5leHQtdG8tYmUtYXNzaWduZWQgTXVsdGlYYWN0SWQgYW5kIG9m ZnNldAogICoKQEAgLTI0MDEsMjYgKzIzNDUsMzAgQEAgTXVsdGlYYWN0QWR2YW5jZU9sZGVzdChN dWx0aVhhY3RJZCBvbGRlc3RNdWx0aSwgT2lkIG9sZGVzdE11bHRpREIpCiAgKiByb29tIGluIHNo YXJlZCBtZW1vcnkuCiAgKi8KIHN0YXRpYyB2b2lkCi1FeHRlbmRNdWx0aVhhY3RPZmZzZXQoTXVs dGlYYWN0SWQgbXVsdGkpCitFeHRlbmRNdWx0aVhhY3RPZmZzZXQoTXVsdGlYYWN0SWQgbXVsdGks IEJ1ZmZlciAqIGJ1ZmZlcikKIHsKIAlpbnQJCQlwYWdlbm87CiAKKwogCS8qCi0JICogTm8gd29y ayBleGNlcHQgYXQgZmlyc3QgTXVsdGlYYWN0SWQgb2YgYSBwYWdlLiAgQnV0IGJld2FyZToganVz dCBhZnRlcgotCSAqIHdyYXBhcm91bmQsIHRoZSBmaXJzdCBNdWx0aVhhY3RJZCBvZiBwYWdlIHpl cm8gaXMgRmlyc3RNdWx0aVhhY3RJZC4KKwkgKiBNYWtlIGEgUmVhZEJ1ZmZlciBjYWxsIGZvciB0 aGUgcGFnZSB3ZSBuZWVkIGJlZm9yZWhhbmQgc28gdGhhdCB3ZSBkb24ndCBuZWVkCisJICogdG8g bWFsbG9jIGxhdGVyLgorCSAqIElmIHdlJ3JlIGF0IHRoZSBmaXJzdCBNdWx0aVhhY3RJZCBvZiBh IHBhZ2UsIG1ha2Ugc3VyZSB3ZSBhbHNvIHplcm8gdGhlIHBhZ2UKIAkgKi8KKworCXBhZ2VubyA9 IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKTsKIAlpZiAoTXVsdGlYYWN0SWRUb09mZnNl dEVudHJ5KG11bHRpKSAhPSAwICYmCiAJCW11bHRpICE9IEZpcnN0TXVsdGlYYWN0SWQpCisJewor CQkvKiBtYWtlIGEgcmVhZCBidWZmZXIgY2FsbCB0byBlbmxhcmdlIHRoZSByZXNvdXJjZSBvd25l ciAqLworCQkqYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lE LCBwYWdlbm8sIFJCTV9OT1JNQUwpOwogCQlyZXR1cm47Ci0KLQlwYWdlbm8gPSBNdWx0aVhhY3RJ ZFRvT2Zmc2V0UGFnZShtdWx0aSk7Ci0KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE9mZnNldFNM UlVMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JLyogWmVybyB0aGUgcGFnZSBhbmQgbWFrZSBhbiBY TE9HIGVudHJ5IGFib3V0IGl0ICovCi0JWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFnZW5vLCB0 cnVlKTsKLQotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOworCX0gZWxz ZQorCXsKKwkJLyogWmVybyB0aGUgcGFnZSBhbmQgbWFrZSBhbiBYTE9HIGVudHJ5IGFib3V0IGl0 ICovCisJCSpidWZmZXIgPSBaZXJvTXVsdGlYYWN0T2Zmc2V0UGFnZShwYWdlbm8sIHRydWUpOwor CQlMb2NrQnVmZmVyKCpidWZmZXIsIEJVRkZFUl9MT0NLX1VOTE9DSyk7IC8qIHJlbGVhc2UgbG9j ayBidXQgZG9uJ3QgdW5waW4gKi8KKwl9CiB9CiAKIC8qCkBAIC0yNDMxLDcgKzIzNzksNyBAQCBF eHRlbmRNdWx0aVhhY3RPZmZzZXQoTXVsdGlYYWN0SWQgbXVsdGkpCiAgKiBzYW1lIGNvbW1lbnRz IGFwcGx5LgogICovCiBzdGF0aWMgdm9pZAotRXh0ZW5kTXVsdGlYYWN0TWVtYmVyKE11bHRpWGFj dE9mZnNldCBvZmZzZXQsIGludCBubWVtYmVycykKK0V4dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0 aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMsIEJ1ZmZlciAqKiBidWZmZXJzKQogewog CS8qCiAJICogSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBtZW1iZXJzIHNwYW4gbW9yZSB0aGFuIG9u ZSBwYWdlIG9mIHRoZSBtZW1iZXJzCkBAIC0yNDM5LDEwICsyMzg3LDE3IEBAIEV4dGVuZE11bHRp WGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMpCiAJICogb3B0 aW1hbCBpZiB0aGUgbWVtYmVycyBzcGFuIHNldmVyYWwgcGFnZXMsIGJ1dCB0aGF0IHNlZW1zIHVu dXN1YWwKIAkgKiBlbm91Z2ggdG8gbm90IHdvcnJ5IG11Y2ggYWJvdXQuCiAJICovCisJaW50IG1p bl9wYWdlbm87CisKKwltaW5fcGFnZW5vID0gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0KTsK IAl3aGlsZSAobm1lbWJlcnMgPiAwKQogCXsKKwkJQnVmZmVyIGJ1ZjsKKwogCQlpbnQJCQlmbGFn c29mZjsKIAkJaW50CQkJZmxhZ3NiaXQ7CisJCWludAkJCXBhZ2VubzsKKwogCQl1aW50MzIJCWRp ZmZlcmVuY2U7CiAKIAkJLyoKQEAgLTI0NTAsMjAgKzI0MDUsMjQgQEAgRXh0ZW5kTXVsdGlYYWN0 TWVtYmVyKE11bHRpWGFjdE9mZnNldCBvZmZzZXQsIGludCBubWVtYmVycykKIAkJICovCiAJCWZs YWdzb2ZmID0gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCk7CiAJCWZsYWdzYml0ID0gTVhP ZmZzZXRUb0ZsYWdzQml0U2hpZnQob2Zmc2V0KTsKKwkJcGFnZW5vID0gTVhPZmZzZXRUb01lbWJl clBhZ2Uob2Zmc2V0KTsKKwkJCisJCQorCQkKIAkJaWYgKGZsYWdzb2ZmID09IDAgJiYgZmxhZ3Ni aXQgPT0gMCkKIAkJewotCQkJaW50CQkJcGFnZW5vOwotCi0JCQlwYWdlbm8gPSBNWE9mZnNldFRv TWVtYmVyUGFnZShvZmZzZXQpOwotCi0JCQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE1lbWJlclNM UlVMb2NrLCBMV19FWENMVVNJVkUpOwotCiAJCQkvKiBaZXJvIHRoZSBwYWdlIGFuZCBtYWtlIGFu IFhMT0cgZW50cnkgYWJvdXQgaXQgKi8KLQkJCVplcm9NdWx0aVhhY3RNZW1iZXJQYWdlKHBhZ2Vu bywgdHJ1ZSk7Ci0KLQkJCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0TWVtYmVyU0xSVUxvY2spOwor CQkJYnVmID0gWmVyb011bHRpWGFjdE1lbWJlclBhZ2UocGFnZW5vLCB0cnVlKTsKKwkJCUxvY2tC dWZmZXIoYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQl9IGVsc2UKKwkJeworCQkJLyogZG8g YSByZWFkIGJ1ZmZlciBjYWxsIHRvIGFsbG9jYXRlIHNwYWNlIGJlZm9yZWhhbmQgKi8KKwkJCWJ1 ZiA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwgcGFnZW5vLCBSQk1f Tk9STUFMKTsKIAkJfQogCisJCWlmIChidWZmZXJzKQorCQkJKCpidWZmZXJzKVtwYWdlbm8gLSBt aW5fcGFnZW5vXSA9IGJ1ZjsKKwogCQkvKgogCQkgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgaXRl bXMgdGlsbCBlbmQgb2YgY3VycmVudCBwYWdlLiAgQ2FyZWZ1bDogaWYKIAkJICogYWRkaXRpb24g b2YgdW5zaWduZWQgaW50cyB3cmFwcyBhcm91bmQsIHdlJ3JlIGF0IHRoZSBsYXN0IHBhZ2Ugb2YK QEAgLTI3MzcsOCArMjY5Niw4IEBAIGZpbmRfbXVsdGl4YWN0X3N0YXJ0KE11bHRpWGFjdElkIG11 bHRpLCBNdWx0aVhhY3RPZmZzZXQgKnJlc3VsdCkKIAlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0Owog CWludAkJCXBhZ2VubzsKIAlpbnQJCQllbnRyeW5vOwotCWludAkJCXNsb3RubzsKIAlNdWx0aVhh Y3RPZmZzZXQgKm9mZnB0cjsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCUFzc2VydChNdWx0aVhhY3RT dGF0ZS0+ZmluaXNoZWRTdGFydHVwKTsKIApAQCAtMjc0NiwyMCArMjcwNSwxOSBAQCBmaW5kX211 bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQp CiAJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeShtdWx0aSk7CiAKIAkvKgotCSAq IFdyaXRlIG91dCBkaXJ0eSBkYXRhLCBzbyBQaHlzaWNhbFBhZ2VFeGlzdHMgY2FuIHdvcmsgY29y cmVjdGx5LgorCSAqIENvcGUgd2l0aCBtaXNzaW5nL2JvZ3VzIG9sZGVzdCBNdWx0aVhhY3QgaW4g aW5jb25zaXN0ZW50IHN0YXRlcyAoc2VlCisJICogY29tbWl0IDA2OGNmYWRmOSkuCiAJICovCi0J U2ltcGxlTHJ1V3JpdGVBbGwoTXVsdGlYYWN0T2Zmc2V0Q3RsLCB0cnVlKTsKLQlTaW1wbGVMcnVX cml0ZUFsbChNdWx0aVhhY3RNZW1iZXJDdGwsIHRydWUpOwotCi0JaWYgKCFTaW1wbGVMcnVEb2Vz UGh5c2ljYWxQYWdlRXhpc3QoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pKQorCWlmICghUHJv YmVTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKSAmJgorCQkhU2lt cGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFn ZW5vKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JLyogbG9jayBpcyBhY3F1aXJlZCBieSBTaW1wbGVM cnVSZWFkUGFnZV9SZWFkT25seSAqLwotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRP bmx5KE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vLCBtdWx0aSk7Ci0Jb2ZmcHRyID0gKE11bHRp WGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xv dG5vXTsKKwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQs IHBhZ2VubywgUkJNX05PUk1BTCk7CisJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX1NI QVJFKTsKKwlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIChQYWdlR2V0Q29udGVudHMoQnVm ZmVyR2V0UGFnZShidWZmZXIpKSk7CiAJb2ZmcHRyICs9IGVudHJ5bm87CiAJb2Zmc2V0ID0gKm9m ZnB0cjsKLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrKTsKKwlVbmxvY2tS ZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAKIAkqcmVzdWx0ID0gb2Zmc2V0OwogCXJldHVybiB0cnVl OwpAQCAtMjg2MiwxMiArMjgyMCwxMyBAQCB0eXBlZGVmIHN0cnVjdCBteHRydW5jaW5mbwogICoJ CVRoaXMgY2FsbGJhY2sgZGV0ZXJtaW5lcyB0aGUgZWFybGllc3QgZXhpc3RpbmcgcGFnZSBudW1i ZXIuCiAgKi8KIHN0YXRpYyBib29sCi1TbHJ1U2NhbkRpckNiRmluZEVhcmxpZXN0KFNscnVDdGwg Y3RsLCBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCitTbHJ1U2NhbkRp ckNiRmluZEVhcmxpZXN0KGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFn ZVByZWNlZGVzLAorCQkJCQkJICBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZvaWQgKmRh dGEpCiB7CiAJbXh0cnVuY2luZm8gKnRydW5jID0gKG14dHJ1bmNpbmZvICopIGRhdGE7CiAKIAlp ZiAodHJ1bmMtPmVhcmxpZXN0RXhpc3RpbmdQYWdlID09IC0xIHx8Ci0JCWN0bC0+UGFnZVByZWNl ZGVzKHNlZ3BhZ2UsIHRydW5jLT5lYXJsaWVzdEV4aXN0aW5nUGFnZSkpCisJCVBhZ2VQcmVjZWRl cyhzZWdwYWdlLCB0cnVuYy0+ZWFybGllc3RFeGlzdGluZ1BhZ2UpKQogCXsKIAkJdHJ1bmMtPmVh cmxpZXN0RXhpc3RpbmdQYWdlID0gc2VncGFnZTsKIAl9CkBAIC0yODk5LDcgKzI4NTgsNyBAQCBQ ZXJmb3JtTWVtYmVyc1RydW5jYXRpb24oTXVsdGlYYWN0T2Zmc2V0IG9sZGVzdE9mZnNldCwgTXVs dGlYYWN0T2Zmc2V0IG5ld09sZGVzdAogCXdoaWxlIChzZWdtZW50ICE9IGVuZHNlZ21lbnQpCiAJ ewogCQllbG9nKERFQlVHMiwgInRydW5jYXRpbmcgbXVsdGl4YWN0IG1lbWJlcnMgc2VnbWVudCAl eCIsIHNlZ21lbnQpOwotCQlTbHJ1RGVsZXRlU2VnbWVudChNdWx0aVhhY3RNZW1iZXJDdGwsIHNl Z21lbnQpOworCQlTbHJ1RGVsZXRlU2VnbWVudChTTFJVX01VTFRJWEFDVF9NRU1CRVJfSUQsIHNl Z21lbnQpOwogCiAJCS8qIG1vdmUgdG8gbmV4dCBzZWdtZW50LCBoYW5kbGluZyB3cmFwYXJvdW5k IGNvcnJlY3RseSAqLwogCQlpZiAoc2VnbWVudCA9PSBtYXhzZWdtZW50KQpAQCAtMjkyMiw3ICsy ODgxLDggQEAgUGVyZm9ybU9mZnNldHNUcnVuY2F0aW9uKE11bHRpWGFjdElkIG9sZGVzdE11bHRp LCBNdWx0aVhhY3RJZCBuZXdPbGRlc3RNdWx0aSkKIAkgKiBkaWRuJ3Qgc3VidHJhY3Qgb25lLCB3 ZSdkIHRyaWdnZXIgU2ltcGxlTHJ1VHJ1bmNhdGUncyB3cmFwYXJvdW5kCiAJICogZGV0ZWN0aW9u LgogCSAqLwotCVNpbXBsZUxydVRydW5jYXRlKE11bHRpWGFjdE9mZnNldEN0bCwKKwlTaW1wbGVM cnVUcnVuY2F0ZShTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsCisJCQkJCSAgTXVsdGlYYWN0T2Zm c2V0UGFnZVByZWNlZGVzLAogCQkJCQkgIE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKFByZXZpb3Vz TXVsdGlYYWN0SWQobmV3T2xkZXN0TXVsdGkpKSk7CiB9CiAKQEAgLTI5OTYsNyArMjk1Niw5IEBA IFRydW5jYXRlTXVsdGlYYWN0KE11bHRpWGFjdElkIG5ld09sZGVzdE11bHRpLCBPaWQgbmV3T2xk ZXN0TXVsdGlEQikKIAkgKiBiZWVuIHRydW5jYXRlZCBhd2F5LCBhbmQgd2UgY3Jhc2hlZCBiZWZv cmUgdXBkYXRpbmcgb2xkZXN0TXVsdGkuCiAJICovCiAJdHJ1bmMuZWFybGllc3RFeGlzdGluZ1Bh Z2UgPSAtMTsKLQlTbHJ1U2NhbkRpcmVjdG9yeShNdWx0aVhhY3RPZmZzZXRDdGwsIFNscnVTY2Fu RGlyQ2JGaW5kRWFybGllc3QsICZ0cnVuYyk7CisJU2xydVNjYW5EaXJlY3RvcnkoU0xSVV9NVUxU SVhBQ1RfT0ZGU0VUX0lELAorCQkJCQkgIE11bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlcywKKwkJ CQkJICBTbHJ1U2NhbkRpckNiRmluZEVhcmxpZXN0LCAmdHJ1bmMpOwogCWVhcmxpZXN0ID0gdHJ1 bmMuZWFybGllc3RFeGlzdGluZ1BhZ2UgKiBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKIAlp ZiAoZWFybGllc3QgPCBGaXJzdE11bHRpWGFjdElkKQogCQllYXJsaWVzdCA9IEZpcnN0TXVsdGlY YWN0SWQ7CkBAIC0zMTI4LDI0ICszMDkwLDYgQEAgTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVz KGludCBwYWdlMSwgaW50IHBhZ2UyKQogCQkJCQkJCQltdWx0aTIgKyBNVUxUSVhBQ1RfT0ZGU0VU U19QRVJfUEFHRSAtIDEpKTsKIH0KIAotLyoKLSAqIERlY2lkZSB3aGV0aGVyIGEgTXVsdGlYYWN0 TWVtYmVyIHBhZ2UgbnVtYmVyIGlzICJvbGRlciIgZm9yIHRydW5jYXRpb24KLSAqIHB1cnBvc2Vz LiAgVGhlcmUgaXMgbm8gImludmFsaWQgb2Zmc2V0IG51bWJlciIgc28gdXNlIHRoZSBudW1iZXJz IHZlcmJhdGltLgotICovCi1zdGF0aWMgYm9vbAotTXVsdGlYYWN0TWVtYmVyUGFnZVByZWNlZGVz KGludCBwYWdlMSwgaW50IHBhZ2UyKQotewotCU11bHRpWGFjdE9mZnNldCBvZmZzZXQxOwotCU11 bHRpWGFjdE9mZnNldCBvZmZzZXQyOwotCi0Jb2Zmc2V0MSA9ICgoTXVsdGlYYWN0T2Zmc2V0KSBw YWdlMSkgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRTsKLQlvZmZzZXQyID0gKChNdWx0aVhh Y3RPZmZzZXQpIHBhZ2UyKSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFOwotCi0JcmV0dXJu IChNdWx0aVhhY3RPZmZzZXRQcmVjZWRlcyhvZmZzZXQxLCBvZmZzZXQyKSAmJgotCQkJTXVsdGlY YWN0T2Zmc2V0UHJlY2VkZXMob2Zmc2V0MSwKLQkJCQkJCQkJCW9mZnNldDIgKyBNVUxUSVhBQ1Rf TUVNQkVSU19QRVJfUEFHRSAtIDEpKTsKLX0KLQogLyoKICAqIERlY2lkZSB3aGljaCBvZiB0d28g TXVsdGlYYWN0SWRzIGlzIGVhcmxpZXIuCiAgKgpAQCAtMzE5MCwxMiArMzEzNCwxNiBAQCBNdWx0 aVhhY3RPZmZzZXRQcmVjZWRlcyhNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MSwgTXVsdGlYYWN0T2Zm c2V0IG9mZnNldDIpCiAgKiBXcml0ZSBhbiB4bG9nIHJlY29yZCByZWZsZWN0aW5nIHRoZSB6ZXJv aW5nIG9mIGVpdGhlciBhIE1FTUJFUnMgb3IKICAqIE9GRlNFVHMgcGFnZSAoaW5mbyBzaG93cyB3 aGljaCkKICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBYTG9nUmVjUHRyIAogV3JpdGVNWmVyb1Bh Z2VYbG9nUmVjKGludCBwYWdlbm8sIHVpbnQ4IGluZm8pCiB7CisJWExvZ1JlY1B0ciByZWNwdHI7 CisJCiAJWExvZ0JlZ2luSW5zZXJ0KCk7CiAJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAoJnBh Z2VubyksIHNpemVvZihpbnQpKTsKLQkodm9pZCkgWExvZ0luc2VydChSTV9NVUxUSVhBQ1RfSUQs IGluZm8pOworCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fTVVMVElYQUNUX0lELCBpbmZvKTsKKwor CXJldHVybiByZWNwdHI7CiB9CiAKIC8qCkBAIC0zMjQwLDMyICszMTg4LDE4IEBAIG11bHRpeGFj dF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCWlmIChpbmZvID09IFhMT0dfTVVMVElY QUNUX1pFUk9fT0ZGX1BBR0UpCiAJewogCQlpbnQJCQlwYWdlbm87Ci0JCWludAkJCXNsb3RubzsK IAogCQltZW1jcHkoJnBhZ2VubywgWExvZ1JlY0dldERhdGEocmVjb3JkKSwgc2l6ZW9mKGludCkp OwogCi0JCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VYQ0xVU0lW RSk7Ci0KLQkJc2xvdG5vID0gWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFnZW5vLCBmYWxzZSk7 Ci0JCVNpbXBsZUxydVdyaXRlUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHNsb3Rubyk7Ci0JCUFz c2VydCghTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0K LQkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jayk7CisJCVVubG9ja1JlbGVh c2VCdWZmZXIoWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFnZW5vLCBmYWxzZSkpOwogCX0KIAll bHNlIGlmIChpbmZvID09IFhMT0dfTVVMVElYQUNUX1pFUk9fTUVNX1BBR0UpCiAJewogCQlpbnQJ CQlwYWdlbm87Ci0JCWludAkJCXNsb3RubzsKIAogCQltZW1jcHkoJnBhZ2VubywgWExvZ1JlY0dl dERhdGEocmVjb3JkKSwgc2l6ZW9mKGludCkpOwogCi0JCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0 TWVtYmVyU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkJc2xvdG5vID0gWmVyb011bHRpWGFj dE1lbWJlclBhZ2UocGFnZW5vLCBmYWxzZSk7Ci0JCVNpbXBsZUxydVdyaXRlUGFnZShNdWx0aVhh Y3RNZW1iZXJDdGwsIHNsb3Rubyk7Ci0JCUFzc2VydCghTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFy ZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0KLQkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RNZW1i ZXJTTFJVTG9jayk7CisJCVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb011bHRpWGFjdE1lbWJlclBh Z2UocGFnZW5vLCBmYWxzZSkpOwogCX0KIAllbHNlIGlmIChpbmZvID09IFhMT0dfTVVMVElYQUNU X0NSRUFURV9JRCkKIAl7CkBAIC0zMjc2LDcgKzMyMTAsNyBAQCBtdWx0aXhhY3RfcmVkbyhYTG9n UmVhZGVyU3RhdGUgKnJlY29yZCkKIAogCQkvKiBTdG9yZSB0aGUgZGF0YSBiYWNrIGludG8gdGhl IFNMUlUgZmlsZXMgKi8KIAkJUmVjb3JkTmV3TXVsdGlYYWN0KHhscmVjLT5taWQsIHhscmVjLT5t b2ZmLCB4bHJlYy0+bm1lbWJlcnMsCi0JCQkJCQkgICB4bHJlYy0+bWVtYmVycyk7CisJCQkJCQkg ICB4bHJlYy0+bWVtYmVycywgTlVMTCwgTlVMTCk7CiAKIAkJLyogTWFrZSBzdXJlIG5leHRNWGFj dC9uZXh0T2Zmc2V0IGFyZSBiZXlvbmQgd2hhdCB0aGlzIHJlY29yZCBoYXMgKi8KIAkJTXVsdGlY YWN0QWR2YW5jZU5leHRNWGFjdCh4bHJlYy0+bWlkICsgMSwKQEAgLTMyOTksNyArMzIzMyw2IEBA IG11bHRpeGFjdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCWVsc2UgaWYgKGluZm8g PT0gWExPR19NVUxUSVhBQ1RfVFJVTkNBVEVfSUQpCiAJewogCQl4bF9tdWx0aXhhY3RfdHJ1bmNh dGUgeGxyZWM7Ci0JCWludAkJCXBhZ2VubzsKIAogCQltZW1jcHkoJnhscmVjLCBYTG9nUmVjR2V0 RGF0YShyZWNvcmQpLAogCQkJICAgU2l6ZU9mTXVsdGlYYWN0VHJ1bmNhdGUpOwpAQCAtMzMyNSwx MyArMzI1OCw2IEBAIG11bHRpeGFjdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCiAJ CVBlcmZvcm1NZW1iZXJzVHJ1bmNhdGlvbih4bHJlYy5zdGFydFRydW5jTWVtYiwgeGxyZWMuZW5k VHJ1bmNNZW1iKTsKIAotCQkvKgotCQkgKiBEdXJpbmcgWExPRyByZXBsYXksIGxhdGVzdF9wYWdl X251bWJlciBpc24ndCBuZWNlc3NhcmlseSBzZXQgdXAKLQkJICogeWV0OyBpbnNlcnQgYSBzdWl0 YWJsZSB2YWx1ZSB0byBieXBhc3MgdGhlIHNhbml0eSB0ZXN0IGluCi0JCSAqIFNpbXBsZUxydVRy dW5jYXRlLgotCQkgKi8KLQkJcGFnZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoeGxyZWMu ZW5kVHJ1bmNPZmYpOwotCQlNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+bGF0ZXN0X3BhZ2Vf bnVtYmVyID0gcGFnZW5vOwogCQlQZXJmb3JtT2Zmc2V0c1RydW5jYXRpb24oeGxyZWMuc3RhcnRU cnVuY09mZiwgeGxyZWMuZW5kVHJ1bmNPZmYpOwogCiAJCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0 VHJ1bmNhdGlvbkxvY2spOwpAQCAtMzQwMSwyMSArMzMyNywzIEBAIHBnX2dldF9tdWx0aXhhY3Rf bWVtYmVycyhQR19GVU5DVElPTl9BUkdTKQogCiAJU1JGX1JFVFVSTl9ET05FKGZ1bmNjeHQpOwog fQotCi0vKgotICogRW50cnlwb2ludCBmb3Igc3luYy5jIHRvIHN5bmMgb2Zmc2V0cyBmaWxlcy4K LSAqLwotaW50Ci1tdWx0aXhhY3RvZmZzZXRzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRh ZywgY2hhciAqcGF0aCkKLXsKLQlyZXR1cm4gU2xydVN5bmNGaWxlVGFnKE11bHRpWGFjdE9mZnNl dEN0bCwgZnRhZywgcGF0aCk7Ci19Ci0KLS8qCi0gKiBFbnRyeXBvaW50IGZvciBzeW5jLmMgdG8g c3luYyBtZW1iZXJzIGZpbGVzLgotICovCi1pbnQKLW11bHRpeGFjdG1lbWJlcnNzeW5jZmlsZXRh Zyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKQotewotCXJldHVybiBTbHJ1U3luY0Zp bGVUYWcoTXVsdGlYYWN0TWVtYmVyQ3RsLCBmdGFnLCBwYXRoKTsKLX0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3NscnUuYwppbmRleCA1YWI4NjIzOGE5Mi4uMDBmMTc4YzQyOTMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS9zbHJ1LmMKQEAgLTEsNDEgKzEsOSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgog ICogc2xydS5jCi0gKgkJU2ltcGxlIExSVSBidWZmZXJpbmcgZm9yIHRyYW5zYWN0aW9uIHN0YXR1 cyBsb2dmaWxlcworICoJCVNpbXBsZSBidWZmZXJpbmcgZm9yIHRyYW5zYWN0aW9uIHN0YXR1cyBs b2dmaWxlcwogICoKLSAqIFdlIHVzZSBhIHNpbXBsZSBsZWFzdC1yZWNlbnRseS11c2VkIHNjaGVt ZSB0byBtYW5hZ2UgYSBwb29sIG9mIHBhZ2UKLSAqIGJ1ZmZlcnMuICBVbmRlciBvcmRpbmFyeSBj aXJjdW1zdGFuY2VzIHdlIGV4cGVjdCB0aGF0IHdyaXRlCi0gKiB0cmFmZmljIHdpbGwgb2NjdXIg bW9zdGx5IHRvIHRoZSBsYXRlc3QgcGFnZSAoYW5kIHRvIHRoZSBqdXN0LXByaW9yCi0gKiBwYWdl LCBzb29uIGFmdGVyIGEgcGFnZSB0cmFuc2l0aW9uKS4gIFJlYWQgdHJhZmZpYyB3aWxsIHByb2Jh Ymx5IHRvdWNoCi0gKiBhIGxhcmdlciBzcGFuIG9mIHBhZ2VzLCBidXQgaW4gYW55IGNhc2UgYSBm YWlybHkgc21hbGwgbnVtYmVyIG9mIHBhZ2UKLSAqIGJ1ZmZlcnMgc2hvdWxkIGJlIHN1ZmZpY2ll bnQuICBTbywgd2UganVzdCBzZWFyY2ggdGhlIGJ1ZmZlcnMgdXNpbmcgcGxhaW4KLSAqIGxpbmVh ciBzZWFyY2g7IHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYSBoYXNodGFibGUgb3IgYW55dGhpbmcgZmFu Y3kuCi0gKiBUaGUgbWFuYWdlbWVudCBhbGdvcml0aG0gaXMgc3RyYWlnaHQgTFJVIGV4Y2VwdCB0 aGF0IHdlIHdpbGwgbmV2ZXIgc3dhcAotICogb3V0IHRoZSBsYXRlc3QgcGFnZSAoc2luY2Ugd2Ug a25vdyBpdCdzIGdvaW5nIHRvIGJlIGhpdCBhZ2FpbiBldmVudHVhbGx5KS4KLSAqCi0gKiBXZSB1 c2UgYSBjb250cm9sIExXTG9jayB0byBwcm90ZWN0IHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVz LCBwbHVzCi0gKiBwZXItYnVmZmVyIExXTG9ja3MgdGhhdCBzeW5jaHJvbml6ZSBJL08gZm9yIGVh Y2ggYnVmZmVyLiAgVGhlIGNvbnRyb2wgbG9jawotICogbXVzdCBiZSBoZWxkIHRvIGV4YW1pbmUg b3IgbW9kaWZ5IGFueSBzaGFyZWQgc3RhdGUuICBBIHByb2Nlc3MgdGhhdCBpcwotICogcmVhZGlu ZyBpbiBvciB3cml0aW5nIG91dCBhIHBhZ2UgYnVmZmVyIGRvZXMgbm90IGhvbGQgdGhlIGNvbnRy b2wgbG9jaywKLSAqIG9ubHkgdGhlIHBlci1idWZmZXIgbG9jayBmb3IgdGhlIGJ1ZmZlciBpdCBp cyB3b3JraW5nIG9uLgotICoKLSAqICJIb2xkaW5nIHRoZSBjb250cm9sIGxvY2siIG1lYW5zIGV4 Y2x1c2l2ZSBsb2NrIGluIGFsbCBjYXNlcyBleGNlcHQgZm9yCi0gKiBTaW1wbGVMcnVSZWFkUGFn ZV9SZWFkT25seSgpOyBzZWUgY29tbWVudHMgZm9yIFNscnVSZWNlbnRseVVzZWQoKSBmb3IKLSAq IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdC4KLSAqCi0gKiBXaGVuIGluaXRpYXRpbmcgSS9PIG9u IGEgYnVmZmVyLCB3ZSBhY3F1aXJlIHRoZSBwZXItYnVmZmVyIGxvY2sgZXhjbHVzaXZlbHkKLSAq IGJlZm9yZSByZWxlYXNpbmcgdGhlIGNvbnRyb2wgbG9jay4gIFRoZSBwZXItYnVmZmVyIGxvY2sg aXMgcmVsZWFzZWQgYWZ0ZXIKLSAqIGNvbXBsZXRpbmcgdGhlIEkvTywgcmUtYWNxdWlyaW5nIHRo ZSBjb250cm9sIGxvY2ssIGFuZCB1cGRhdGluZyB0aGUgc2hhcmVkCi0gKiBzdGF0ZS4gIChEZWFk bG9jayBpcyBub3QgcG9zc2libGUgaGVyZSwgYmVjYXVzZSB3ZSBuZXZlciB0cnkgdG8gaW5pdGlh dGUKLSAqIEkvTyB3aGVuIHNvbWVvbmUgZWxzZSBpcyBhbHJlYWR5IGRvaW5nIEkvTyBvbiB0aGUg c2FtZSBidWZmZXIuKQotICogVG8gd2FpdCBmb3IgSS9PIHRvIGNvbXBsZXRlLCByZWxlYXNlIHRo ZSBjb250cm9sIGxvY2ssIGFjcXVpcmUgdGhlCi0gKiBwZXItYnVmZmVyIGxvY2sgaW4gc2hhcmVk IG1vZGUsIGltbWVkaWF0ZWx5IHJlbGVhc2UgdGhlIHBlci1idWZmZXIgbG9jaywKLSAqIHJlYWNx dWlyZSB0aGUgY29udHJvbCBsb2NrLCBhbmQgdGhlbiByZWNoZWNrIHN0YXRlIChzaW5jZSBhcmJp dHJhcnkgdGhpbmdzCi0gKiBjb3VsZCBoYXZlIGhhcHBlbmVkIHdoaWxlIHdlIGRpZG4ndCBoYXZl IHRoZSBsb2NrKS4KLSAqCi0gKiBBcyB3aXRoIHRoZSByZWd1bGFyIGJ1ZmZlciBtYW5hZ2VyLCBp dCBpcyBwb3NzaWJsZSBmb3IgYW5vdGhlciBwcm9jZXNzCi0gKiB0byByZS1kaXJ0eSBhIHBhZ2Ug dGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgd3JpdHRlbiBvdXQuICBUaGlzIGlzIGhhbmRsZWQKLSAq IGJ5IHJlLXNldHRpbmcgdGhlIHBhZ2UncyBwYWdlX2RpcnR5IGZsYWcuCisgKiBYWFggd3JpdGUg bWUKICAqCiAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCkBAIC02MCw1NjIgKzI4LDM0IEBACiAjaW5jbHVk ZSAic3RvcmFnZS9mZC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKIAotI2RlZmluZSBT bHJ1RmlsZU5hbWUoY3RsLCBwYXRoLCBzZWcpIFwKLQlzbnByaW50ZihwYXRoLCBNQVhQR1BBVEgs ICIlcy8lMDRYIiwgKGN0bCktPkRpciwgc2VnKQotCiAvKgotICogRHVyaW5nIFNpbXBsZUxydVdy aXRlQWxsKCksIHdlIHdpbGwgdXN1YWxseSBub3QgbmVlZCB0byB3cml0ZSBtb3JlIHRoYW4gb25l Ci0gKiBvciB0d28gcGh5c2ljYWwgZmlsZXMsIGJ1dCB3ZSBtYXkgbmVlZCB0byB3cml0ZSBzZXZl cmFsIHBhZ2VzIHBlciBmaWxlLiAgV2UKLSAqIGNhbiBjb25zb2xpZGF0ZSB0aGUgSS9PIHJlcXVl c3RzIGJ5IGxlYXZpbmcgZmlsZXMgb3BlbiB1bnRpbCBjb250cm9sIHJldHVybnMKLSAqIHRvIFNp bXBsZUxydVdyaXRlQWxsKCkuICBUaGlzIGRhdGEgc3RydWN0dXJlIHJlbWVtYmVycyB3aGljaCBm aWxlcyBhcmUgb3Blbi4KKyAqIFNMUlUgSUQgdG8gcGF0aCBtYXBwaW5nCiAgKi8KLSNkZWZpbmUg TUFYX1dSSVRFQUxMX0JVRkZFUlMJMTYKKyNkZWZpbmUgUEdfU0xSVShzeW1uYW1lLG5hbWUscGF0 aCxzeW5jaHJvbml6ZSkgXAorCXBhdGgsCiAKLXR5cGVkZWYgc3RydWN0IFNscnVXcml0ZUFsbERh dGEKK3N0YXRpYyBjaGFyICpzbHJ1X2RpcnNbXSA9CiB7Ci0JaW50CQkJbnVtX2ZpbGVzOwkJLyog IyBmaWxlcyBhY3R1YWxseSBvcGVuICovCi0JaW50CQkJZmRbTUFYX1dSSVRFQUxMX0JVRkZFUlNd OwkvKiB0aGVpciBGRCdzICovCi0JaW50CQkJc2Vnbm9bTUFYX1dSSVRFQUxMX0JVRkZFUlNdOwkv KiB0aGVpciBsb2cgc2VnI3MgKi8KLX0gU2xydVdyaXRlQWxsRGF0YTsKLQotdHlwZWRlZiBzdHJ1 Y3QgU2xydVdyaXRlQWxsRGF0YSAqU2xydVdyaXRlQWxsOworI2luY2x1ZGUgImFjY2Vzcy9zbHJ1 bGlzdC5oIgorfTsKIAogLyoKLSAqIFBvcHVsYXRlIGEgZmlsZSB0YWcgZGVzY3JpYmluZyBhIHNl Z21lbnQgZmlsZS4gIFdlIG9ubHkgdXNlIHRoZSBzZWdtZW50Ci0gKiBudW1iZXIsIHNpbmNlIHdl IGNhbiBkZXJpdmUgZXZlcnl0aGluZyBlbHNlIHdlIG5lZWQgYnkgaGF2aW5nIHNlcGFyYXRlCi0g KiBzeW5jIGhhbmRsZXIgZnVuY3Rpb25zIGZvciBjbG9nLCBtdWx0aXhhY3QgZXRjLgorICogV2Un bGwgbWFpbnRhaW4gYSBsaXR0bGUgY2FjaGUgb2YgcmVjZW50bHkgc2VlbiBidWZmZXJzLCB0byB0 cnkgdG8gYXZvaWQgdGhlCisgKiBidWZmZXIgbWFwcGluZyB0YWJsZSBvbiByZXBlYXQgYWNjZXNz IChpZSB0aGUgYnVzeSBlbmQgb2YgdGhlIENMT0cpLiAgT25lCisgKiBlbnRyeSBwZXIgU0xSVS4K ICAqLwotI2RlZmluZSBJTklUX1NMUlVGSUxFVEFHKGEseHhfaGFuZGxlcix4eF9zZWdubykgXAot KCBcCi0JbWVtc2V0KCYoYSksIDAsIHNpemVvZihGaWxlVGFnKSksIFwKLQkoYSkuaGFuZGxlciA9 ICh4eF9oYW5kbGVyKSwgXAotCShhKS5zZWdubyA9ICh4eF9zZWdubykgXAotKQotCi0vKgotICog TWFjcm8gdG8gbWFyayBhIGJ1ZmZlciBzbG90ICJtb3N0IHJlY2VudGx5IHVzZWQiLiAgTm90ZSBt dWx0aXBsZSBldmFsdWF0aW9uCi0gKiBvZiBhcmd1bWVudHMhCi0gKgotICogVGhlIHJlYXNvbiBm b3IgdGhlIGlmLXRlc3QgaXMgdGhhdCB0aGVyZSBhcmUgb2Z0ZW4gbWFueSBjb25zZWN1dGl2ZQot ICogYWNjZXNzZXMgdG8gdGhlIHNhbWUgcGFnZSAocGFydGljdWxhcmx5IHRoZSBsYXRlc3QgcGFn ZSkuICBCeSBzdXBwcmVzc2luZwotICogdXNlbGVzcyBpbmNyZW1lbnRzIG9mIGN1cl9scnVfY291 bnQsIHdlIHJlZHVjZSB0aGUgcHJvYmFiaWxpdHkgdGhhdCBvbGQKLSAqIHBhZ2VzJyBjb3VudHMg d2lsbCAid3JhcCBhcm91bmQiIGFuZCBtYWtlIHRoZW0gYXBwZWFyIHJlY2VudGx5IHVzZWQuCi0g KgotICogV2UgYWxsb3cgdGhpcyBjb2RlIHRvIGJlIGV4ZWN1dGVkIGNvbmN1cnJlbnRseSBieSBt dWx0aXBsZSBwcm9jZXNzZXMgd2l0aGluCi0gKiBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSgp LiAgQXMgbG9uZyBhcyBpbnQgcmVhZHMgYW5kIHdyaXRlcyBhcmUgYXRvbWljLAotICogdGhpcyBz aG91bGQgbm90IGNhdXNlIGFueSBjb21wbGV0ZWx5LWJvZ3VzIHZhbHVlcyB0byBlbnRlciB0aGUg Y29tcHV0YXRpb24uCi0gKiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSBmb3IgZWl0aGVyIGN1cl9s cnVfY291bnQgb3IgaW5kaXZpZHVhbAotICogcGFnZV9scnVfY291bnQgZW50cmllcyB0byBiZSAi cmVzZXQiIHRvIGxvd2VyIHZhbHVlcyB0aGFuIHRoZXkgc2hvdWxkIGhhdmUsCi0gKiBpbiBjYXNl IGEgcHJvY2VzcyBpcyBkZWxheWVkIHdoaWxlIGl0IGV4ZWN1dGVzIHRoaXMgbWFjcm8uICBXaXRo IGNhcmUgaW4KLSAqIFNscnVTZWxlY3RMUlVQYWdlKCksIHRoaXMgZG9lcyBsaXR0bGUgaGFybSwg YW5kIGluIGFueSBjYXNlIHRoZSBhYnNvbHV0ZQotICogd29yc3QgcG9zc2libGUgY29uc2VxdWVu Y2UgaXMgYSBub25vcHRpbWFsIGNob2ljZSBvZiBwYWdlIHRvIGV2aWN0LiAgVGhlCi0gKiBnYWlu IGZyb20gYWxsb3dpbmcgY29uY3VycmVudCByZWFkcyBvZiBTTFJVIHBhZ2VzIHNlZW1zIHdvcnRo IGl0LgotICovCi0jZGVmaW5lIFNscnVSZWNlbnRseVVzZWQoc2hhcmVkLCBzbG90bm8pCVwKLQlk byB7IFwKLQkJaW50CQluZXdfbHJ1X2NvdW50ID0gKHNoYXJlZCktPmN1cl9scnVfY291bnQ7IFwK LQkJaWYgKG5ld19scnVfY291bnQgIT0gKHNoYXJlZCktPnBhZ2VfbHJ1X2NvdW50W3Nsb3Rub10p IHsgXAotCQkJKHNoYXJlZCktPmN1cl9scnVfY291bnQgPSArK25ld19scnVfY291bnQ7IFwKLQkJ CShzaGFyZWQpLT5wYWdlX2xydV9jb3VudFtzbG90bm9dID0gbmV3X2xydV9jb3VudDsgXAotCQl9 IFwKLQl9IHdoaWxlICgwKQotCi0vKiBTYXZlZCBpbmZvIGZvciBTbHJ1UmVwb3J0SU9FcnJvciAq LwotdHlwZWRlZiBlbnVtCi17Ci0JU0xSVV9PUEVOX0ZBSUxFRCwKLQlTTFJVX1NFRUtfRkFJTEVE LAotCVNMUlVfUkVBRF9GQUlMRUQsCi0JU0xSVV9XUklURV9GQUlMRUQsCi0JU0xSVV9GU1lOQ19G QUlMRUQsCi0JU0xSVV9DTE9TRV9GQUlMRUQKLX0gU2xydUVycm9yQ2F1c2U7CitzdHJ1Y3QgU2xy dVJlY2VudEJ1ZmZlciB7CisJaW50CQkJcGFnZW5vOworCUJ1ZmZlcgkJcmVjZW50X2J1ZmZlcjsK K307CiAKLXN0YXRpYyBTbHJ1RXJyb3JDYXVzZSBzbHJ1X2VycmNhdXNlOwotc3RhdGljIGludAlz bHJ1X2Vycm5vOworc3RhdGljIHN0cnVjdCBTbHJ1UmVjZW50QnVmZmVyIHNscnVfcmVjZW50X2J1 ZmZlcnNbU0xSVV9ORVhUX0lEXTsKIAotCi1zdGF0aWMgdm9pZCBTaW1wbGVMcnVaZXJvTFNOcyhT bHJ1Q3RsIGN0bCwgaW50IHNsb3Rubyk7Ci1zdGF0aWMgdm9pZCBTaW1wbGVMcnVXYWl0SU8oU2xy dUN0bCBjdGwsIGludCBzbG90bm8pOwotc3RhdGljIHZvaWQgU2xydUludGVybmFsV3JpdGVQYWdl KFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpOwotc3RhdGljIGJv b2wgU2xydVBoeXNpY2FsUmVhZFBhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sIGludCBzbG90 bm8pOwotc3RhdGljIGJvb2wgU2xydVBoeXNpY2FsV3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQg cGFnZW5vLCBpbnQgc2xvdG5vLAotCQkJCQkJCQkgIFNscnVXcml0ZUFsbCBmZGF0YSk7Ci1zdGF0 aWMgdm9pZCBTbHJ1UmVwb3J0SU9FcnJvcihTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgVHJhbnNh Y3Rpb25JZCB4aWQpOwotc3RhdGljIGludAlTbHJ1U2VsZWN0TFJVUGFnZShTbHJ1Q3RsIGN0bCwg aW50IHBhZ2Vubyk7Ci0KLXN0YXRpYyBib29sIFNscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoU2xy dUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLAorc3RhdGljIGJvb2wgU2xydVNjYW5EaXJDYkRlbGV0 ZUN1dG9mZihpbnQgc2xydV9pZCwKKwkJCQkJCQkJCSAgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9u IFBhZ2VQcmVjZWRlcywKKwkJCQkJCQkJCSAgY2hhciAqZmlsZW5hbWUsCiAJCQkJCQkJCQkgIGlu dCBzZWdwYWdlLCB2b2lkICpkYXRhKTsKLXN0YXRpYyB2b2lkIFNscnVJbnRlcm5hbERlbGV0ZVNl Z21lbnQoU2xydUN0bCBjdGwsIGludCBzZWdubyk7Ci0KLS8qCi0gKiBJbml0aWFsaXphdGlvbiBv ZiBzaGFyZWQgbWVtb3J5Ci0gKi8KLQotU2l6ZQotU2ltcGxlTHJ1U2htZW1TaXplKGludCBuc2xv dHMsIGludCBubHNucykKLXsKLQlTaXplCQlzejsKLQotCS8qIHdlIGFzc3VtZSBuc2xvdHMgaXNu J3Qgc28gbGFyZ2UgYXMgdG8gcmlzayBvdmVyZmxvdyAqLwotCXN6ID0gTUFYQUxJR04oc2l6ZW9m KFNscnVTaGFyZWREYXRhKSk7Ci0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGNoYXIg KikpOwkvKiBwYWdlX2J1ZmZlcltdICovCi0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9m KFNscnVQYWdlU3RhdHVzKSk7CS8qIHBhZ2Vfc3RhdHVzW10gKi8KLQlzeiArPSBNQVhBTElHTihu c2xvdHMgKiBzaXplb2YoYm9vbCkpOwkvKiBwYWdlX2RpcnR5W10gKi8KLQlzeiArPSBNQVhBTElH Tihuc2xvdHMgKiBzaXplb2YoaW50KSk7CS8qIHBhZ2VfbnVtYmVyW10gKi8KLQlzeiArPSBNQVhB TElHTihuc2xvdHMgKiBzaXplb2YoaW50KSk7CS8qIHBhZ2VfbHJ1X2NvdW50W10gKi8KLQlzeiAr PSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoTFdMb2NrUGFkZGVkKSk7CS8qIGJ1ZmZlcl9sb2Nr c1tdICovCi0KLQlpZiAobmxzbnMgPiAwKQotCQlzeiArPSBNQVhBTElHTihuc2xvdHMgKiBubHNu cyAqIHNpemVvZihYTG9nUmVjUHRyKSk7CS8qIGdyb3VwX2xzbltdICovCi0KLQlyZXR1cm4gQlVG RkVSQUxJR04oc3opICsgQkxDS1NaICogbnNsb3RzOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSwg b3IgYXR0YWNoIHRvLCBhIHNpbXBsZSBMUlUgY2FjaGUgaW4gc2hhcmVkIG1lbW9yeS4KLSAqCi0g KiBjdGw6IGFkZHJlc3Mgb2YgbG9jYWwgKHVuc2hhcmVkKSBjb250cm9sIHN0cnVjdHVyZS4KLSAq IG5hbWU6IG5hbWUgb2YgU0xSVS4gIChUaGlzIGlzIHVzZXItdmlzaWJsZSwgcGljayB3aXRoIGNh cmUhKQotICogbnNsb3RzOiBudW1iZXIgb2YgcGFnZSBzbG90cyB0byB1c2UuCi0gKiBubHNuczog bnVtYmVyIG9mIExTTiBncm91cHMgcGVyIHBhZ2UgKHNldCB0byB6ZXJvIGlmIG5vdCByZWxldmFu dCkuCi0gKiBjdGxsb2NrOiBMV0xvY2sgdG8gdXNlIHRvIGNvbnRyb2wgYWNjZXNzIHRvIHRoZSBz aGFyZWQgY29udHJvbCBzdHJ1Y3R1cmUuCi0gKiBzdWJkaXI6IFBHREFUQS1yZWxhdGl2ZSBzdWJk aXJlY3RvcnkgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGZpbGVzLgotICogdHJhbmNoZV9pZDogTFdM b2NrIHRyYW5jaGUgSUQgdG8gdXNlIGZvciB0aGUgU0xSVSdzIHBlci1idWZmZXIgTFdMb2Nrcy4K LSAqIHN5bmNfaGFuZGxlcjogd2hpY2ggc2V0IG9mIGZ1bmN0aW9ucyB0byB1c2UgdG8gaGFuZGxl IHN5bmMgcmVxdWVzdHMKLSAqLwotdm9pZAotU2ltcGxlTHJ1SW5pdChTbHJ1Q3RsIGN0bCwgY29u c3QgY2hhciAqbmFtZSwgaW50IG5zbG90cywgaW50IG5sc25zLAotCQkJICBMV0xvY2sgKmN0bGxv Y2ssIGNvbnN0IGNoYXIgKnN1YmRpciwgaW50IHRyYW5jaGVfaWQsCi0JCQkgIFN5bmNSZXF1ZXN0 SGFuZGxlciBzeW5jX2hhbmRsZXIpCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQ7Ci0JYm9vbAkJZm91 bmQ7Ci0KLQlzaGFyZWQgPSAoU2xydVNoYXJlZCkgU2htZW1Jbml0U3RydWN0KG5hbWUsCi0JCQkJ CQkJCQkJICBTaW1wbGVMcnVTaG1lbVNpemUobnNsb3RzLCBubHNucyksCi0JCQkJCQkJCQkJICAm Zm91bmQpOwotCi0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQl7Ci0JCS8qIEluaXRpYWxpemUg bG9ja3MgYW5kIHNoYXJlZCBtZW1vcnkgYXJlYSAqLwotCQljaGFyCSAgICpwdHI7Ci0JCVNpemUJ CW9mZnNldDsKLQkJaW50CQkJc2xvdG5vOwotCi0JCUFzc2VydCghZm91bmQpOwotCi0JCW1lbXNl dChzaGFyZWQsIDAsIHNpemVvZihTbHJ1U2hhcmVkRGF0YSkpOwotCi0JCXNoYXJlZC0+Q29udHJv bExvY2sgPSBjdGxsb2NrOwotCi0JCXNoYXJlZC0+bnVtX3Nsb3RzID0gbnNsb3RzOwotCQlzaGFy ZWQtPmxzbl9ncm91cHNfcGVyX3BhZ2UgPSBubHNuczsKLQotCQlzaGFyZWQtPmN1cl9scnVfY291 bnQgPSAwOwotCi0JCS8qIHNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyIHdpbGwgYmUgc2V0IGxh dGVyICovCi0KLQkJc2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCA9IHBnc3RhdF9nZXRfc2xydV9pbmRl eChuYW1lKTsKLQotCQlwdHIgPSAoY2hhciAqKSBzaGFyZWQ7Ci0JCW9mZnNldCA9IE1BWEFMSUdO KHNpemVvZihTbHJ1U2hhcmVkRGF0YSkpOwotCQlzaGFyZWQtPnBhZ2VfYnVmZmVyID0gKGNoYXIg KiopIChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9m KGNoYXIgKikpOwotCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzID0gKFNscnVQYWdlU3RhdHVzICopIChw dHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKFNscnVQ YWdlU3RhdHVzKSk7Ci0JCXNoYXJlZC0+cGFnZV9kaXJ0eSA9IChib29sICopIChwdHIgKyBvZmZz ZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGJvb2wpKTsKLQkJc2hh cmVkLT5wYWdlX251bWJlciA9IChpbnQgKikgKHB0ciArIG9mZnNldCk7Ci0JCW9mZnNldCArPSBN QVhBTElHTihuc2xvdHMgKiBzaXplb2YoaW50KSk7Ci0JCXNoYXJlZC0+cGFnZV9scnVfY291bnQg PSAoaW50ICopIChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICog c2l6ZW9mKGludCkpOwotCi0JCS8qIEluaXRpYWxpemUgTFdMb2NrcyAqLwotCQlzaGFyZWQtPmJ1 ZmZlcl9sb2NrcyA9IChMV0xvY2tQYWRkZWQgKikgKHB0ciArIG9mZnNldCk7Ci0JCW9mZnNldCAr PSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoTFdMb2NrUGFkZGVkKSk7Ci0KLQkJaWYgKG5sc25z ID4gMCkKLQkJewotCQkJc2hhcmVkLT5ncm91cF9sc24gPSAoWExvZ1JlY1B0ciAqKSAocHRyICsg b2Zmc2V0KTsKLQkJCW9mZnNldCArPSBNQVhBTElHTihuc2xvdHMgKiBubHNucyAqIHNpemVvZihY TG9nUmVjUHRyKSk7Ci0JCX0KLQotCQlwdHIgKz0gQlVGRkVSQUxJR04ob2Zmc2V0KTsKLQkJZm9y IChzbG90bm8gPSAwOyBzbG90bm8gPCBuc2xvdHM7IHNsb3RubysrKQotCQl7Ci0JCQlMV0xvY2tJ bml0aWFsaXplKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2ssCi0JCQkJCQkJIHRy YW5jaGVfaWQpOwotCi0JCQlzaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gPSBwdHI7Ci0JCQlz aGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPSBTTFJVX1BBR0VfRU1QVFk7Ci0JCQlzaGFyZWQt PnBhZ2VfZGlydHlbc2xvdG5vXSA9IGZhbHNlOwotCQkJc2hhcmVkLT5wYWdlX2xydV9jb3VudFtz bG90bm9dID0gMDsKLQkJCXB0ciArPSBCTENLU1o7Ci0JCX0KLQotCQkvKiBTaG91bGQgZml0IHRv IGVzdGltYXRlZCBzaG1lbSBzaXplICovCi0JCUFzc2VydChwdHIgLSAoY2hhciAqKSBzaGFyZWQg PD0gU2ltcGxlTHJ1U2htZW1TaXplKG5zbG90cywgbmxzbnMpKTsKLQl9Ci0JZWxzZQotCQlBc3Nl cnQoZm91bmQpOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSB1bnNoYXJlZCBjb250cm9sIHN0 cnVjdCwgaW5jbHVkaW5nIGRpcmVjdG9yeSBwYXRoLiBXZQotCSAqIGFzc3VtZSBjYWxsZXIgc2V0 IFBhZ2VQcmVjZWRlcy4KLQkgKi8KLQljdGwtPnNoYXJlZCA9IHNoYXJlZDsKLQljdGwtPnN5bmNf aGFuZGxlciA9IHN5bmNfaGFuZGxlcjsKLQlzdHJsY3B5KGN0bC0+RGlyLCBzdWJkaXIsIHNpemVv ZihjdGwtPkRpcikpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSAob3IgcmVpbml0aWFsaXplKSBh IHBhZ2UgdG8gemVyb2VzLgotICoKLSAqIFRoZSBwYWdlIGlzIG5vdCBhY3R1YWxseSB3cml0dGVu LCBqdXN0IHNldCB1cCBpbiBzaGFyZWQgbWVtb3J5LgotICogVGhlIHNsb3QgbnVtYmVyIG9mIHRo ZSBuZXcgcGFnZSBpcyByZXR1cm5lZC4KLSAqCi0gKiBDb250cm9sIGxvY2sgbXVzdCBiZSBoZWxk IGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCi0gKi8KLWludAotU2ltcGxlTHJ1 WmVyb1BhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8pCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQg PSBjdGwtPnNoYXJlZDsKLQlpbnQJCQlzbG90bm87Ci0KLQkvKiBGaW5kIGEgc3VpdGFibGUgYnVm ZmVyIHNsb3QgZm9yIHRoZSBwYWdlICovCi0Jc2xvdG5vID0gU2xydVNlbGVjdExSVVBhZ2UoY3Rs LCBwYWdlbm8pOwotCUFzc2VydChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9Q QUdFX0VNUFRZIHx8Ci0JCSAgIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9Q QUdFX1ZBTElEICYmCi0JCQkhc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pIHx8Ci0JCSAgIHNo YXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSA9PSBwYWdlbm8pOwotCi0JLyogTWFyayB0aGUgc2xv dCBhcyBjb250YWluaW5nIHRoaXMgcGFnZSAqLwotCXNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5v XSA9IHBhZ2VubzsKLQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPSBTTFJVX1BBR0VfVkFM SUQ7Ci0Jc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOwotCVNscnVSZWNlbnRseVVz ZWQoc2hhcmVkLCBzbG90bm8pOwotCi0JLyogU2V0IHRoZSBidWZmZXIgdG8gemVyb2VzICovCi0J TWVtU2V0KHNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSwgMCwgQkxDS1NaKTsKLQotCS8qIFNl dCB0aGUgTFNOcyBmb3IgdGhpcyBuZXcgcGFnZSB0byB6ZXJvICovCi0JU2ltcGxlTHJ1WmVyb0xT TnMoY3RsLCBzbG90bm8pOwotCi0JLyogQXNzdW1lIHRoaXMgcGFnZSBpcyBub3cgdGhlIGxhdGVz dCBhY3RpdmUgcGFnZSAqLwotCXNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyID0gcGFnZW5vOwot Ci0JLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIHplcm9lZCBwYWdlcyAqLwotCXBnc3Rh dF9jb3VudF9zbHJ1X3BhZ2VfemVyb2VkKHNoYXJlZC0+c2xydV9zdGF0c19pZHgpOwotCi0JcmV0 dXJuIHNsb3RubzsKLX0KLQotLyoKLSAqIFplcm8gYWxsIHRoZSBMU05zIHdlIHN0b3JlIGZvciB0 aGlzIHNscnUgcGFnZS4KLSAqCi0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgZWFjaCB0aW1lIHdl IGNyZWF0ZSBhIG5ldyBwYWdlLCBhbmQgZWFjaCB0aW1lIHdlIHJlYWQKLSAqIGluIGEgcGFnZSBm cm9tIGRpc2sgaW50byBhbiBleGlzdGluZyBidWZmZXIuICAoU3VjaCBhbiBvbGQgcGFnZSBjYW5u b3QKLSAqIGhhdmUgYW55IGludGVyZXN0aW5nIExTTnMsIHNpbmNlIHdlJ2QgaGF2ZSBmbHVzaGVk IHRoZW0gYmVmb3JlIHdyaXRpbmcKLSAqIHRoZSBwYWdlIGluIHRoZSBmaXJzdCBwbGFjZS4pCi0g KgotICogVGhpcyBhc3N1bWVzIHRoYXQgSW52YWxpZFhMb2dSZWNQdHIgaXMgYml0d2lzZS1hbGwt MC4KLSAqLwotc3RhdGljIHZvaWQKLVNpbXBsZUxydVplcm9MU05zKFNscnVDdGwgY3RsLCBpbnQg c2xvdG5vKQotewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0KLQlpZiAoc2hh cmVkLT5sc25fZ3JvdXBzX3Blcl9wYWdlID4gMCkKLQkJTWVtU2V0KCZzaGFyZWQtPmdyb3VwX2xz bltzbG90bm8gKiBzaGFyZWQtPmxzbl9ncm91cHNfcGVyX3BhZ2VdLCAwLAotCQkJICAgc2hhcmVk LT5sc25fZ3JvdXBzX3Blcl9wYWdlICogc2l6ZW9mKFhMb2dSZWNQdHIpKTsKLX0KLQotLyoKLSAq IFdhaXQgZm9yIGFueSBhY3RpdmUgSS9PIG9uIGEgcGFnZSBzbG90IHRvIGZpbmlzaC4gIChUaGlz IGRvZXMgbm90Ci0gKiBndWFyYW50ZWUgdGhhdCBuZXcgSS9PIGhhc24ndCBiZWVuIHN0YXJ0ZWQg YmVmb3JlIHdlIHJldHVybiwgdGhvdWdoLgotICogSW4gZmFjdCB0aGUgc2xvdCBtaWdodCBub3Qg ZXZlbiBjb250YWluIHRoZSBzYW1lIHBhZ2UgYW55bW9yZS4pCi0gKgotICogQ29udHJvbCBsb2Nr IG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0LgotICovCi1z dGF0aWMgdm9pZAotU2ltcGxlTHJ1V2FpdElPKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKQotewot CVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0KLQkvKiBTZWUgbm90ZXMgYXQgdG9w IG9mIGZpbGUgKi8KLQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOwotCUxXTG9j a0FjcXVpcmUoJnNoYXJlZC0+YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9jaywgTFdfU0hBUkVEKTsK LQlMV0xvY2tSZWxlYXNlKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2spOwotCUxX TG9ja0FjcXVpcmUoc2hhcmVkLT5Db250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8qCi0J ICogSWYgdGhlIHNsb3QgaXMgc3RpbGwgaW4gYW4gaW8taW4tcHJvZ3Jlc3Mgc3RhdGUsIHRoZW4g ZWl0aGVyIHNvbWVvbmUKLQkgKiBhbHJlYWR5IHN0YXJ0ZWQgYSBuZXcgSS9PIG9uIHRoZSBzbG90 LCBvciBhIHByZXZpb3VzIEkvTyBmYWlsZWQgYW5kCi0JICogbmVnbGVjdGVkIHRvIHJlc2V0IHRo ZSBwYWdlIHN0YXRlLiAgVGhhdCBzaG91bGRuJ3QgaGFwcGVuLCByZWFsbHksIGJ1dAotCSAqIGl0 IHNlZW1zIHdvcnRoIGEgZmV3IGV4dHJhIGN5Y2xlcyB0byBjaGVjayBhbmQgcmVjb3ZlciBmcm9t IGl0LiBXZSBjYW4KLQkgKiBjaGVhcGx5IHRlc3QgZm9yIGZhaWx1cmUgYnkgc2VlaW5nIGlmIHRo ZSBidWZmZXIgbG9jayBpcyBzdGlsbCBoZWxkICh3ZQotCSAqIGFzc3VtZSB0aGF0IHRyYW5zYWN0 aW9uIGFib3J0IHdvdWxkIHJlbGVhc2UgdGhlIGxvY2spLgotCSAqLwotCWlmIChzaGFyZWQtPnBh Z2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1JFQURfSU5fUFJPR1JFU1MgfHwKLQkJc2hh cmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9XUklURV9JTl9QUk9HUkVTUykK LQl7Ci0JCWlmIChMV0xvY2tDb25kaXRpb25hbEFjcXVpcmUoJnNoYXJlZC0+YnVmZmVyX2xvY2tz W3Nsb3Rub10ubG9jaywgTFdfU0hBUkVEKSkKLQkJewotCQkJLyogaW5kZWVkLCB0aGUgSS9PIG11 c3QgaGF2ZSBmYWlsZWQgKi8KLQkJCWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0g U0xSVV9QQUdFX1JFQURfSU5fUFJPR1JFU1MpCi0JCQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90 bm9dID0gU0xSVV9QQUdFX0VNUFRZOwotCQkJZWxzZQkJCQkvKiB3cml0ZV9pbl9wcm9ncmVzcyAq LwotCQkJewotCQkJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9WQUxJ RDsKLQkJCQlzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRydWU7Ci0JCQl9Ci0JCQlMV0xv Y2tSZWxlYXNlKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2spOwotCQl9Ci0JfQot fQotCi0vKgotICogRmluZCBhIHBhZ2UgaW4gYSBzaGFyZWQgYnVmZmVyLCByZWFkaW5nIGl0IGlu IGlmIG5lY2Vzc2FyeS4KLSAqIFRoZSBwYWdlIG51bWJlciBtdXN0IGNvcnJlc3BvbmQgdG8gYW4g YWxyZWFkeS1pbml0aWFsaXplZCBwYWdlLgotICoKLSAqIElmIHdyaXRlX29rIGlzIHRydWUgdGhl biBpdCBpcyBPSyB0byByZXR1cm4gYSBwYWdlIHRoYXQgaXMgaW4KLSAqIFdSSVRFX0lOX1BST0dS RVNTIHN0YXRlOyBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gYmUgc3VyZQot ICogdGhhdCBtb2RpZmljYXRpb24gb2YgdGhlIHBhZ2UgaXMgc2FmZS4gIElmIHdyaXRlX29rIGlz IGZhbHNlIHRoZW4gd2UKLSAqIHdpbGwgbm90IHJldHVybiB0aGUgcGFnZSB1bnRpbCBpdCBpcyBu b3QgdW5kZXJnb2luZyBhY3RpdmUgSS9PLgotICoKLSAqIFRoZSBwYXNzZWQtaW4geGlkIGlzIHVz ZWQgb25seSBmb3IgZXJyb3IgcmVwb3J0aW5nLCBhbmQgbWF5IGJlCi0gKiBJbnZhbGlkVHJhbnNh Y3Rpb25JZCBpZiBubyBzcGVjaWZpYyB4aWQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhY3Rpb24u Ci0gKgotICogUmV0dXJuIHZhbHVlIGlzIHRoZSBzaGFyZWQtYnVmZmVyIHNsb3QgbnVtYmVyIG5v dyBob2xkaW5nIHRoZSBwYWdlLgotICogVGhlIGJ1ZmZlcidzIExSVSBhY2Nlc3MgaW5mbyBpcyB1 cGRhdGVkLgotICoKLSAqIENvbnRyb2wgbG9jayBtdXN0IGJlIGhlbGQgYXQgZW50cnksIGFuZCB3 aWxsIGJlIGhlbGQgYXQgZXhpdC4KLSAqLwotaW50Ci1TaW1wbGVMcnVSZWFkUGFnZShTbHJ1Q3Rs IGN0bCwgaW50IHBhZ2VubywgYm9vbCB3cml0ZV9vaywKLQkJCQkgIFRyYW5zYWN0aW9uSWQgeGlk KQotewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0KLQkvKiBPdXRlciBsb29w IGhhbmRsZXMgcmVzdGFydCBpZiB3ZSBtdXN0IHdhaXQgZm9yIHNvbWVvbmUgZWxzZSdzIEkvTyAq LwotCWZvciAoOzspCi0JewotCQlpbnQJCQlzbG90bm87Ci0JCWJvb2wJCW9rOwotCi0JCS8qIFNl ZSBpZiBwYWdlIGFscmVhZHkgaXMgaW4gbWVtb3J5OyBpZiBub3QsIHBpY2sgdmljdGltIHNsb3Qg Ki8KLQkJc2xvdG5vID0gU2xydVNlbGVjdExSVVBhZ2UoY3RsLCBwYWdlbm8pOwotCi0JCS8qIERp ZCB3ZSBmaW5kIHRoZSBwYWdlIGluIG1lbW9yeT8gKi8KLQkJaWYgKHNoYXJlZC0+cGFnZV9udW1i ZXJbc2xvdG5vXSA9PSBwYWdlbm8gJiYKLQkJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSAh PSBTTFJVX1BBR0VfRU1QVFkpCi0JCXsKLQkJCS8qCi0JCQkgKiBJZiBwYWdlIGlzIHN0aWxsIGJl aW5nIHJlYWQgaW4sIHdlIG11c3Qgd2FpdCBmb3IgSS9PLiAgTGlrZXdpc2UKLQkJCSAqIGlmIHRo ZSBwYWdlIGlzIGJlaW5nIHdyaXR0ZW4gYW5kIHRoZSBjYWxsZXIgc2FpZCB0aGF0J3Mgbm90IE9L LgotCQkJICovCi0JCQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFH RV9SRUFEX0lOX1BST0dSRVNTIHx8Ci0JCQkJKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9 PSBTTFJVX1BBR0VfV1JJVEVfSU5fUFJPR1JFU1MgJiYKLQkJCQkgIXdyaXRlX29rKSkKLQkJCXsK LQkJCQlTaW1wbGVMcnVXYWl0SU8oY3RsLCBzbG90bm8pOwotCQkJCS8qIE5vdyB3ZSBtdXN0IHJl Y2hlY2sgc3RhdGUgZnJvbSB0aGUgdG9wICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBP dGhlcndpc2UsIGl0J3MgcmVhZHkgdG8gdXNlICovCi0JCQlTbHJ1UmVjZW50bHlVc2VkKHNoYXJl ZCwgc2xvdG5vKTsKLQotCQkJLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIHBhZ2VzIGZv dW5kIGluIHRoZSBTTFJVICovCi0JCQlwZ3N0YXRfY291bnRfc2xydV9wYWdlX2hpdChzaGFyZWQt PnNscnVfc3RhdHNfaWR4KTsKLQotCQkJcmV0dXJuIHNsb3RubzsKLQkJfQotCi0JCS8qIFdlIGZv dW5kIG5vIG1hdGNoOyBhc3NlcnQgd2Ugc2VsZWN0ZWQgYSBmcmVlYWJsZSBzbG90ICovCi0JCUFz c2VydChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX0VNUFRZIHx8Ci0J CQkgICAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9WQUxJRCAmJgot CQkJCSFzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSkpOwotCi0JCS8qIE1hcmsgdGhlIHNsb3Qg cmVhZC1idXN5ICovCi0JCXNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSA9IHBhZ2VubzsKLQkJ c2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX1JFQURfSU5fUFJPR1JFU1M7 Ci0JCXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gZmFsc2U7Ci0KLQkJLyogQWNxdWlyZSBw ZXItYnVmZmVyIGxvY2sgKGNhbm5vdCBkZWFkbG9jaywgc2VlIG5vdGVzIGF0IHRvcCkgKi8KLQkJ TFdMb2NrQWNxdWlyZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2NrLCBMV19FWENM VVNJVkUpOwotCi0JCS8qIFJlbGVhc2UgY29udHJvbCBsb2NrIHdoaWxlIGRvaW5nIEkvTyAqLwot CQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOwotCi0JCS8qIERvIHRoZSByZWFk ICovCi0JCW9rID0gU2xydVBoeXNpY2FsUmVhZFBhZ2UoY3RsLCBwYWdlbm8sIHNsb3Rubyk7Ci0K LQkJLyogU2V0IHRoZSBMU05zIGZvciB0aGlzIG5ld2x5IHJlYWQtaW4gcGFnZSB0byB6ZXJvICov Ci0JCVNpbXBsZUxydVplcm9MU05zKGN0bCwgc2xvdG5vKTsKLQotCQkvKiBSZS1hY3F1aXJlIGNv bnRyb2wgbG9jayBhbmQgdXBkYXRlIHBhZ2Ugc3RhdGUgKi8KLQkJTFdMb2NrQWNxdWlyZShzaGFy ZWQtPkNvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JCUFzc2VydChzaGFyZWQtPnBhZ2Vf bnVtYmVyW3Nsb3Rub10gPT0gcGFnZW5vICYmCi0JCQkgICBzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Ns b3Rub10gPT0gU0xSVV9QQUdFX1JFQURfSU5fUFJPR1JFU1MgJiYKLQkJCSAgICFzaGFyZWQtPnBh Z2VfZGlydHlbc2xvdG5vXSk7Ci0KLQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gb2sg PyBTTFJVX1BBR0VfVkFMSUQgOiBTTFJVX1BBR0VfRU1QVFk7Ci0KLQkJTFdMb2NrUmVsZWFzZSgm c2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2NrKTsKLQotCQkvKiBOb3cgaXQncyBva2F5 IHRvIGVyZXBvcnQgaWYgd2UgZmFpbGVkICovCi0JCWlmICghb2spCi0JCQlTbHJ1UmVwb3J0SU9F cnJvcihjdGwsIHBhZ2VubywgeGlkKTsKLQotCQlTbHJ1UmVjZW50bHlVc2VkKHNoYXJlZCwgc2xv dG5vKTsKLQotCQkvKiB1cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2YgcGFnZXMgbm90IGZvdW5k IGluIFNMUlUgKi8KLQkJcGdzdGF0X2NvdW50X3NscnVfcGFnZV9yZWFkKHNoYXJlZC0+c2xydV9z dGF0c19pZHgpOwotCi0JCXJldHVybiBzbG90bm87Ci0JfQotfQotCi0vKgotICogRmluZCBhIHBh Z2UgaW4gYSBzaGFyZWQgYnVmZmVyLCByZWFkaW5nIGl0IGluIGlmIG5lY2Vzc2FyeS4KLSAqIFRo ZSBwYWdlIG51bWJlciBtdXN0IGNvcnJlc3BvbmQgdG8gYW4gYWxyZWFkeS1pbml0aWFsaXplZCBw YWdlLgotICogVGhlIGNhbGxlciBtdXN0IGludGVuZCBvbmx5IHJlYWQtb25seSBhY2Nlc3MgdG8g dGhlIHBhZ2UuCi0gKgotICogVGhlIHBhc3NlZC1pbiB4aWQgaXMgdXNlZCBvbmx5IGZvciBlcnJv ciByZXBvcnRpbmcsIGFuZCBtYXkgYmUKLSAqIEludmFsaWRUcmFuc2FjdGlvbklkIGlmIG5vIHNw ZWNpZmljIHhpZCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGFjdGlvbi4KLSAqCi0gKiBSZXR1cm4g dmFsdWUgaXMgdGhlIHNoYXJlZC1idWZmZXIgc2xvdCBudW1iZXIgbm93IGhvbGRpbmcgdGhlIHBh Z2UuCi0gKiBUaGUgYnVmZmVyJ3MgTFJVIGFjY2VzcyBpbmZvIGlzIHVwZGF0ZWQuCi0gKgotICog Q29udHJvbCBsb2NrIG11c3QgTk9UIGJlIGhlbGQgYXQgZW50cnksIGJ1dCB3aWxsIGJlIGhlbGQg YXQgZXhpdC4KLSAqIEl0IGlzIHVuc3BlY2lmaWVkIHdoZXRoZXIgdGhlIGxvY2sgd2lsbCBiZSBz aGFyZWQgb3IgZXhjbHVzaXZlLgotICovCi1pbnQKLVNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5 KFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLCBUcmFuc2FjdGlvbklkIHhpZCkKLXsKLQlTbHJ1U2hh cmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCWludAkJCXNsb3RubzsKLQotCS8qIFRyeSB0byBm aW5kIHRoZSBwYWdlIHdoaWxlIGhvbGRpbmcgb25seSBzaGFyZWQgbG9jayAqLwotCUxXTG9ja0Fj cXVpcmUoc2hhcmVkLT5Db250cm9sTG9jaywgTFdfU0hBUkVEKTsKLQotCS8qIFNlZSBpZiBwYWdl IGlzIGFscmVhZHkgaW4gYSBidWZmZXIgKi8KLQlmb3IgKHNsb3RubyA9IDA7IHNsb3RubyA8IHNo YXJlZC0+bnVtX3Nsb3RzOyBzbG90bm8rKykKLQl7Ci0JCWlmIChzaGFyZWQtPnBhZ2VfbnVtYmVy W3Nsb3Rub10gPT0gcGFnZW5vICYmCi0JCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gIT0g U0xSVV9QQUdFX0VNUFRZICYmCi0JCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gIT0gU0xS VV9QQUdFX1JFQURfSU5fUFJPR1JFU1MpCi0JCXsKLQkJCS8qIFNlZSBjb21tZW50cyBmb3IgU2xy dVJlY2VudGx5VXNlZCBtYWNybyAqLwotCQkJU2xydVJlY2VudGx5VXNlZChzaGFyZWQsIHNsb3Ru byk7Ci0KLQkJCS8qIHVwZGF0ZSB0aGUgc3RhdHMgY291bnRlciBvZiBwYWdlcyBmb3VuZCBpbiB0 aGUgU0xSVSAqLwotCQkJcGdzdGF0X2NvdW50X3NscnVfcGFnZV9oaXQoc2hhcmVkLT5zbHJ1X3N0 YXRzX2lkeCk7Ci0KLQkJCXJldHVybiBzbG90bm87Ci0JCX0KLQl9Ci0KLQkvKiBObyBsdWNrLCBz byBzd2l0Y2ggdG8gbm9ybWFsIGV4Y2x1c2l2ZSBsb2NrIGFuZCBkbyByZWd1bGFyIHJlYWQgKi8K LQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOwotCUxXTG9ja0FjcXVpcmUoc2hh cmVkLT5Db250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCXJldHVybiBTaW1wbGVMcnVSZWFk UGFnZShjdGwsIHBhZ2VubywgdHJ1ZSwgeGlkKTsKLX0KLQotLyoKLSAqIFdyaXRlIGEgcGFnZSBm cm9tIGEgc2hhcmVkIGJ1ZmZlciwgaWYgbmVjZXNzYXJ5LgotICogRG9lcyBub3RoaW5nIGlmIHRo ZSBzcGVjaWZpZWQgc2xvdCBpcyBub3QgZGlydHkuCi0gKgotICogTk9URTogb25seSBvbmUgd3Jp dGUgYXR0ZW1wdCBpcyBtYWRlIGhlcmUuICBIZW5jZSwgaXQgaXMgcG9zc2libGUgdGhhdAotICog dGhlIHBhZ2UgaXMgc3RpbGwgZGlydHkgYXQgZXhpdCAoaWYgc29tZW9uZSBlbHNlIHJlLWRpcnRp ZWQgaXQgZHVyaW5nCi0gKiB0aGUgd3JpdGUpLiAgSG93ZXZlciwgd2UgKmRvKiBhdHRlbXB0IGEg ZnJlc2ggd3JpdGUgZXZlbiBpZiB0aGUgcGFnZQotICogaXMgYWxyZWFkeSBiZWluZyB3cml0dGVu OyB0aGlzIGlzIGZvciBjaGVja3BvaW50cy4KLSAqCi0gKiBDb250cm9sIGxvY2sgbXVzdCBiZSBo ZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCi0gKi8KLXN0YXRpYyB2b2lk Ci1TbHJ1SW50ZXJuYWxXcml0ZVBhZ2UoU2xydUN0bCBjdGwsIGludCBzbG90bm8sIFNscnVXcml0 ZUFsbCBmZGF0YSkKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCWludAkJ CXBhZ2VubyA9IHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXTsKLQlib29sCQlvazsKLQotCS8q IElmIGEgd3JpdGUgaXMgaW4gcHJvZ3Jlc3MsIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCAqLwotCXdo aWxlIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1dSSVRFX0lOX1BS T0dSRVNTICYmCi0JCSAgIHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSA9PSBwYWdlbm8pCi0J ewotCQlTaW1wbGVMcnVXYWl0SU8oY3RsLCBzbG90bm8pOwotCX0KLQotCS8qCi0JICogRG8gbm90 aGluZyBpZiBwYWdlIGlzIG5vdCBkaXJ0eSwgb3IgaWYgYnVmZmVyIG5vIGxvbmdlciBjb250YWlu cyB0aGUKLQkgKiBzYW1lIHBhZ2Ugd2Ugd2VyZSBjYWxsZWQgZm9yLgotCSAqLwotCWlmICghc2hh cmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gfHwKLQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9d ICE9IFNMUlVfUEFHRV9WQUxJRCB8fAotCQlzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gIT0g cGFnZW5vKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIE1hcmsgdGhlIHNsb3Qgd3JpdGUtYnVzeSwg YW5kIGNsZWFyIHRoZSBkaXJ0eWJpdC4gIEFmdGVyIHRoaXMgcG9pbnQsIGEKLQkgKiB0cmFuc2Fj dGlvbiBzdGF0dXMgdXBkYXRlIG9uIHRoaXMgcGFnZSB3aWxsIG1hcmsgaXQgZGlydHkgYWdhaW4u Ci0JICovCi0Jc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX1dSSVRFX0lO X1BST0dSRVNTOwotCXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gZmFsc2U7Ci0KLQkvKiBB Y3F1aXJlIHBlci1idWZmZXIgbG9jayAoY2Fubm90IGRlYWRsb2NrLCBzZWUgbm90ZXMgYXQgdG9w KSAqLwotCUxXTG9ja0FjcXVpcmUoJnNoYXJlZC0+YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9jaywg TFdfRVhDTFVTSVZFKTsKLQotCS8qIFJlbGVhc2UgY29udHJvbCBsb2NrIHdoaWxlIGRvaW5nIEkv TyAqLwotCUxXTG9ja1JlbGVhc2Uoc2hhcmVkLT5Db250cm9sTG9jayk7Ci0KLQkvKiBEbyB0aGUg d3JpdGUgKi8KLQlvayA9IFNscnVQaHlzaWNhbFdyaXRlUGFnZShjdGwsIHBhZ2Vubywgc2xvdG5v LCBmZGF0YSk7Ci0KLQkvKiBJZiB3ZSBmYWlsZWQsIGFuZCB3ZSdyZSBpbiBhIGZsdXNoLCBiZXR0 ZXIgY2xvc2UgdGhlIGZpbGVzICovCi0JaWYgKCFvayAmJiBmZGF0YSkKLQl7Ci0JCWludAkJCWk7 Ci0KLQkJZm9yIChpID0gMDsgaSA8IGZkYXRhLT5udW1fZmlsZXM7IGkrKykKLQkJCUNsb3NlVHJh bnNpZW50RmlsZShmZGF0YS0+ZmRbaV0pOwotCX0KLQotCS8qIFJlLWFjcXVpcmUgY29udHJvbCBs b2NrIGFuZCB1cGRhdGUgcGFnZSBzdGF0ZSAqLwotCUxXTG9ja0FjcXVpcmUoc2hhcmVkLT5Db250 cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCUFzc2VydChzaGFyZWQtPnBhZ2VfbnVtYmVyW3Ns b3Rub10gPT0gcGFnZW5vICYmCi0JCSAgIHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBT TFJVX1BBR0VfV1JJVEVfSU5fUFJPR1JFU1MpOwotCi0JLyogSWYgd2UgZmFpbGVkIHRvIHdyaXRl LCBtYXJrIHRoZSBwYWdlIGRpcnR5IGFnYWluICovCi0JaWYgKCFvaykKLQkJc2hhcmVkLT5wYWdl X2RpcnR5W3Nsb3Rub10gPSB0cnVlOwotCi0Jc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0g U0xSVV9QQUdFX1ZBTElEOwotCi0JTFdMb2NrUmVsZWFzZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nb c2xvdG5vXS5sb2NrKTsKLQotCS8qIE5vdyBpdCdzIG9rYXkgdG8gZXJlcG9ydCBpZiB3ZSBmYWls ZWQgKi8KLQlpZiAoIW9rKQotCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgSW52YWxp ZFRyYW5zYWN0aW9uSWQpOwotCi0JLyogSWYgcGFydCBvZiBhIGNoZWNrcG9pbnQsIGNvdW50IHRo aXMgYXMgYSBidWZmZXIgd3JpdHRlbi4gKi8KLQlpZiAoZmRhdGEpCi0JCUNoZWNrcG9pbnRTdGF0 cy5ja3B0X2J1ZnNfd3JpdHRlbisrOwotfQotCi0vKgotICogV3JhcHBlciBvZiBTbHJ1SW50ZXJu YWxXcml0ZVBhZ2UsIGZvciBleHRlcm5hbCBjYWxsZXJzLgotICogZmRhdGEgaXMgYWx3YXlzIHBh c3NlZCBhIE5VTEwgaGVyZS4KLSAqLwotdm9pZAotU2ltcGxlTHJ1V3JpdGVQYWdlKFNscnVDdGwg Y3RsLCBpbnQgc2xvdG5vKQotewotCVNscnVJbnRlcm5hbFdyaXRlUGFnZShjdGwsIHNsb3Rubywg TlVMTCk7Ci19CitzdGF0aWMgdm9pZCBTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KGludCBzbHJ1 X2lkLCBpbnQgc2Vnbm8pOwogCiAvKgogICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIHBhZ2Ug ZXhpc3RzIG9uIGRpc2suCkBAIC02MjQsNTkyICs2NCwyNCBAQCBTaW1wbGVMcnVXcml0ZVBhZ2Uo U2xydUN0bCBjdGwsIGludCBzbG90bm8pCiAgKiBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUg Z2l2ZW4gcGFnZS4KICAqLwogYm9vbAotU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KFNs cnVDdGwgY3RsLCBpbnQgcGFnZW5vKQorU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KGlu dCBzbHJ1X2lkLCBpbnQgcGFnZW5vKQogewotCWludAkJCXNlZ25vID0gcGFnZW5vIC8gU0xSVV9Q QUdFU19QRVJfU0VHTUVOVDsKLQlpbnQJCQlycGFnZW5vID0gcGFnZW5vICUgU0xSVV9QQUdFU19Q RVJfU0VHTUVOVDsKLQlpbnQJCQlvZmZzZXQgPSBycGFnZW5vICogQkxDS1NaOwotCWNoYXIJCXBh dGhbTUFYUEdQQVRIXTsKLQlpbnQJCQlmZDsKLQlib29sCQlyZXN1bHQ7Ci0Jb2ZmX3QJCWVuZHBv czsKLQotCS8qIHVwZGF0ZSB0aGUgc3RhdHMgY291bnRlciBvZiBjaGVja2VkIHBhZ2VzICovCi0J cGdzdGF0X2NvdW50X3NscnVfcGFnZV9leGlzdHMoY3RsLT5zaGFyZWQtPnNscnVfc3RhdHNfaWR4 KTsKLQotCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIHNlZ25vKTsKLQotCWZkID0gT3BlblRyYW5z aWVudEZpbGUocGF0aCwgT19SRE9OTFkgfCBQR19CSU5BUlkpOwotCWlmIChmZCA8IDApCi0Jewot CQkvKiBleHBlY3RlZDogZmlsZSBkb2Vzbid0IGV4aXN0ICovCi0JCWlmIChlcnJubyA9PSBFTk9F TlQpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJLyogcmVwb3J0IGVycm9yIG5vcm1hbGx5ICovCi0J CXNscnVfZXJyY2F1c2UgPSBTTFJVX09QRU5fRkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJybm87 Ci0JCVNscnVSZXBvcnRJT0Vycm9yKGN0bCwgcGFnZW5vLCAwKTsKLQl9Ci0KLQlpZiAoKGVuZHBv cyA9IGxzZWVrKGZkLCAwLCBTRUVLX0VORCkpIDwgMCkKLQl7Ci0JCXNscnVfZXJyY2F1c2UgPSBT TFJVX1NFRUtfRkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCVNscnVSZXBvcnRJT0Vy cm9yKGN0bCwgcGFnZW5vLCAwKTsKLQl9Ci0KLQlyZXN1bHQgPSBlbmRwb3MgPj0gKG9mZl90KSAo b2Zmc2V0ICsgQkxDS1NaKTsKLQotCWlmIChDbG9zZVRyYW5zaWVudEZpbGUoZmQpICE9IDApCi0J ewotCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9DTE9TRV9GQUlMRUQ7Ci0JCXNscnVfZXJybm8gPSBl cnJubzsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0g KiBQaHlzaWNhbCByZWFkIG9mIGEgKHByZXZpb3VzbHkgZXhpc3RpbmcpIHBhZ2UgaW50byBhIGJ1 ZmZlciBzbG90Ci0gKgotICogT24gZmFpbHVyZSwgd2UgY2Fubm90IGp1c3QgZXJlcG9ydChFUlJP Uikgc2luY2UgY2FsbGVyIGhhcyBwdXQgc3RhdGUgaW4KLSAqIHNoYXJlZCBtZW1vcnkgdGhhdCBt dXN0IGJlIHVuZG9uZS4gIFNvLCB3ZSByZXR1cm4gZmFsc2UgYW5kIHNhdmUgZW5vdWdoCi0gKiBp bmZvIGluIHN0YXRpYyB2YXJpYWJsZXMgdG8gbGV0IFNscnVSZXBvcnRJT0Vycm9yIG1ha2UgdGhl IHJlcG9ydC4KLSAqCi0gKiBGb3Igbm93LCBhc3N1bWUgaXQncyBub3Qgd29ydGgga2VlcGluZyBh IGZpbGUgcG9pbnRlciBvcGVuIGFjcm9zcwotICogcmVhZC93cml0ZSBvcGVyYXRpb25zLiAgV2Ug Y291bGQgY2FjaGUgb25lIHZpcnR1YWwgZmlsZSBwb2ludGVyIC4uLgotICovCi1zdGF0aWMgYm9v bAotU2xydVBoeXNpY2FsUmVhZFBhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sIGludCBzbG90 bm8pCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKLQlpbnQJCQlzZWdubyA9 IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0JaW50CQkJcnBhZ2VubyA9IHBhZ2Vu byAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0Jb2ZmX3QJCW9mZnNldCA9IHJwYWdlbm8gKiBC TENLU1o7Ci0JY2hhcgkJcGF0aFtNQVhQR1BBVEhdOwotCWludAkJCWZkOwotCi0JU2xydUZpbGVO YW1lKGN0bCwgcGF0aCwgc2Vnbm8pOwotCi0JLyoKLQkgKiBJbiBhIGNyYXNoLWFuZC1yZXN0YXJ0 IHNpdHVhdGlvbiwgaXQncyBwb3NzaWJsZSBmb3IgdXMgdG8gcmVjZWl2ZQotCSAqIGNvbW1hbmRz IHRvIHNldCB0aGUgY29tbWl0IHN0YXR1cyBvZiB0cmFuc2FjdGlvbnMgd2hvc2UgYml0cyBhcmUg aW4KLQkgKiBhbHJlYWR5LXRydW5jYXRlZCBzZWdtZW50cyBvZiB0aGUgY29tbWl0IGxvZyAoc2Vl IG5vdGVzIGluCi0JICogU2xydVBoeXNpY2FsV3JpdGVQYWdlKS4gIEhlbmNlLCBpZiB3ZSBhcmUg SW5SZWNvdmVyeSwgYWxsb3cgdGhlIGNhc2UKLQkgKiB3aGVyZSB0aGUgZmlsZSBkb2Vzbid0IGV4 aXN0LCBhbmQgcmV0dXJuIHplcm9lcyBpbnN0ZWFkLgotCSAqLwotCWZkID0gT3BlblRyYW5zaWVu dEZpbGUocGF0aCwgT19SRE9OTFkgfCBQR19CSU5BUlkpOwotCWlmIChmZCA8IDApCi0JewotCQlp ZiAoZXJybm8gIT0gRU5PRU5UIHx8ICFJblJlY292ZXJ5KQotCQl7Ci0JCQlzbHJ1X2VycmNhdXNl ID0gU0xSVV9PUEVOX0ZBSUxFRDsKLQkJCXNscnVfZXJybm8gPSBlcnJubzsKLQkJCXJldHVybiBm YWxzZTsKLQkJfQotCi0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImZpbGUgXCIlc1wiIGRv ZXNuJ3QgZXhpc3QsIHJlYWRpbmcgYXMgemVyb2VzIiwKLQkJCQkJCXBhdGgpKSk7Ci0JCU1lbVNl dChzaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10sIDAsIEJMQ0tTWik7Ci0JCXJldHVybiB0cnVl OwotCX0KLQotCWVycm5vID0gMDsKLQlwZ3N0YXRfcmVwb3J0X3dhaXRfc3RhcnQoV0FJVF9FVkVO VF9TTFJVX1JFQUQpOwotCWlmIChwZ19wcmVhZChmZCwgc2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90 bm9dLCBCTENLU1osIG9mZnNldCkgIT0gQkxDS1NaKQotCXsKLQkJcGdzdGF0X3JlcG9ydF93YWl0 X2VuZCgpOwotCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9SRUFEX0ZBSUxFRDsKLQkJc2xydV9lcnJu byA9IGVycm5vOwotCQlDbG9zZVRyYW5zaWVudEZpbGUoZmQpOwotCQlyZXR1cm4gZmFsc2U7Ci0J fQotCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKLQotCWlmIChDbG9zZVRyYW5zaWVudEZpbGUo ZmQpICE9IDApCi0JewotCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9DTE9TRV9GQUlMRUQ7Ci0JCXNs cnVfZXJybm8gPSBlcnJubzsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiB0cnVlOwot fQotCi0vKgotICogUGh5c2ljYWwgd3JpdGUgb2YgYSBwYWdlIGZyb20gYSBidWZmZXIgc2xvdAot ICoKLSAqIE9uIGZhaWx1cmUsIHdlIGNhbm5vdCBqdXN0IGVyZXBvcnQoRVJST1IpIHNpbmNlIGNh bGxlciBoYXMgcHV0IHN0YXRlIGluCi0gKiBzaGFyZWQgbWVtb3J5IHRoYXQgbXVzdCBiZSB1bmRv bmUuICBTbywgd2UgcmV0dXJuIGZhbHNlIGFuZCBzYXZlIGVub3VnaAotICogaW5mbyBpbiBzdGF0 aWMgdmFyaWFibGVzIHRvIGxldCBTbHJ1UmVwb3J0SU9FcnJvciBtYWtlIHRoZSByZXBvcnQuCi0g KgotICogRm9yIG5vdywgYXNzdW1lIGl0J3Mgbm90IHdvcnRoIGtlZXBpbmcgYSBmaWxlIHBvaW50 ZXIgb3BlbiBhY3Jvc3MKLSAqIGluZGVwZW5kZW50IHJlYWQvd3JpdGUgb3BlcmF0aW9ucy4gIFdl IGRvIGJhdGNoIG9wZXJhdGlvbnMgZHVyaW5nCi0gKiBTaW1wbGVMcnVXcml0ZUFsbCwgdGhvdWdo LgotICoKLSAqIGZkYXRhIGlzIE5VTEwgZm9yIGEgc3RhbmRhbG9uZSB3cml0ZSwgcG9pbnRlciB0 byBvcGVuLWZpbGUgaW5mbyBkdXJpbmcKLSAqIFNpbXBsZUxydVdyaXRlQWxsLgotICovCi1zdGF0 aWMgYm9vbAotU2xydVBoeXNpY2FsV3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLCBp bnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQgPSBj dGwtPnNoYXJlZDsKIAlpbnQJCQlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01F TlQ7CiAJaW50CQkJcnBhZ2VubyA9IHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CiAJ b2ZmX3QJCW9mZnNldCA9IHJwYWdlbm8gKiBCTENLU1o7Ci0JY2hhcgkJcGF0aFtNQVhQR1BBVEhd OwotCWludAkJCWZkID0gLTE7Ci0KLQkvKiB1cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2Ygd3Jp dHRlbiBwYWdlcyAqLwotCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2Vfd3JpdHRlbihzaGFyZWQtPnNs cnVfc3RhdHNfaWR4KTsKLQotCS8qCi0JICogSG9ub3IgdGhlIHdyaXRlLVdBTC1iZWZvcmUtZGF0 YSBydWxlLCBpZiBhcHByb3ByaWF0ZSwgc28gdGhhdCB3ZSBkbyBub3QKLQkgKiB3cml0ZSBvdXQg ZGF0YSBiZWZvcmUgYXNzb2NpYXRlZCBXQUwgcmVjb3Jkcy4gIFRoaXMgaXMgdGhlIHNhbWUgYWN0 aW9uCi0JICogcGVyZm9ybWVkIGR1cmluZyBGbHVzaEJ1ZmZlcigpIGluIHRoZSBtYWluIGJ1ZmZl ciBtYW5hZ2VyLgotCSAqLwotCWlmIChzaGFyZWQtPmdyb3VwX2xzbiAhPSBOVUxMKQotCXsKLQkJ LyoKLQkJICogV2UgbXVzdCBkZXRlcm1pbmUgdGhlIGxhcmdlc3QgYXN5bmMtY29tbWl0IExTTiBm b3IgdGhlIHBhZ2UuIFRoaXMKLQkJICogaXMgYSBiaXQgdGVkaW91cywgYnV0IHNpbmNlIHRoaXMg ZW50aXJlIGZ1bmN0aW9uIGlzIGEgc2xvdyBwYXRoCi0JCSAqIGFueXdheSwgaXQgc2VlbXMgYmV0 dGVyIHRvIGRvIHRoaXMgaGVyZSB0aGFuIHRvIG1haW50YWluIGEgcGVyLXBhZ2UKLQkJICogTFNO IHZhcmlhYmxlICh3aGljaCdkIG5lZWQgYW4gZXh0cmEgY29tcGFyaXNvbiBpbiB0aGUKLQkJICog dHJhbnNhY3Rpb24tY29tbWl0IHBhdGgpLgotCQkgKi8KLQkJWExvZ1JlY1B0cgltYXhfbHNuOwot CQlpbnQJCQlsc25pbmRleCwKLQkJCQkJbHNub2ZmOwotCi0JCWxzbmluZGV4ID0gc2xvdG5vICog c2hhcmVkLT5sc25fZ3JvdXBzX3Blcl9wYWdlOwotCQltYXhfbHNuID0gc2hhcmVkLT5ncm91cF9s c25bbHNuaW5kZXgrK107Ci0JCWZvciAobHNub2ZmID0gMTsgbHNub2ZmIDwgc2hhcmVkLT5sc25f Z3JvdXBzX3Blcl9wYWdlOyBsc25vZmYrKykKLQkJewotCQkJWExvZ1JlY1B0cgl0aGlzX2xzbiA9 IHNoYXJlZC0+Z3JvdXBfbHNuW2xzbmluZGV4KytdOwotCi0JCQlpZiAobWF4X2xzbiA8IHRoaXNf bHNuKQotCQkJCW1heF9sc24gPSB0aGlzX2xzbjsKLQkJfQotCi0JCWlmICghWExvZ1JlY1B0cklz SW52YWxpZChtYXhfbHNuKSkKLQkJewotCQkJLyoKLQkJCSAqIEFzIG5vdGVkIGFib3ZlLCBlbG9n KEVSUk9SKSBpcyBub3QgYWNjZXB0YWJsZSBoZXJlLCBzbyBpZgotCQkJICogWExvZ0ZsdXNoIHdl cmUgdG8gZmFpbCwgd2UgbXVzdCBQQU5JQy4gIFRoaXMgaXNuJ3QgbXVjaCBvZiBhCi0JCQkgKiBy ZXN0cmljdGlvbiBiZWNhdXNlIFhMb2dGbHVzaCBpcyBqdXN0IGFib3V0IGFsbCBjcml0aWNhbAot CQkJICogc2VjdGlvbiBhbnl3YXksIGJ1dCBsZXQncyBtYWtlIHN1cmUuCi0JCQkgKi8KLQkJCVNU QVJUX0NSSVRfU0VDVElPTigpOwotCQkJWExvZ0ZsdXNoKG1heF9sc24pOwotCQkJRU5EX0NSSVRf U0VDVElPTigpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBEdXJpbmcgYSBXcml0ZUFsbCwgd2UgbWF5 IGFscmVhZHkgaGF2ZSB0aGUgZGVzaXJlZCBmaWxlIG9wZW4uCi0JICovCi0JaWYgKGZkYXRhKQot CXsKLQkJaW50CQkJaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgZmRhdGEtPm51bV9maWxlczsgaSsr KQotCQl7Ci0JCQlpZiAoZmRhdGEtPnNlZ25vW2ldID09IHNlZ25vKQotCQkJewotCQkJCWZkID0g ZmRhdGEtPmZkW2ldOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKGZkIDwgMCkK LQl7Ci0JCS8qCi0JCSAqIElmIHRoZSBmaWxlIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCwgd2Ugc2hv dWxkIGNyZWF0ZSBpdC4gIEl0IGlzCi0JCSAqIHBvc3NpYmxlIGZvciB0aGlzIHRvIG5lZWQgdG8g aGFwcGVuIHdoZW4gd3JpdGluZyBhIHBhZ2UgdGhhdCdzIG5vdAotCQkgKiBmaXJzdCBpbiBpdHMg c2VnbWVudDsgd2UgYXNzdW1lIHRoZSBPUyBjYW4gY29wZSB3aXRoIHRoYXQuIChOb3RlOgotCQkg KiBpdCBtaWdodCBzZWVtIHRoYXQgaXQnZCBiZSBva2F5IHRvIGNyZWF0ZSBmaWxlcyBvbmx5IHdo ZW4KLQkJICogU2ltcGxlTHJ1WmVyb1BhZ2UgaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgcGFnZSBv ZiBhIHNlZ21lbnQuCi0JCSAqIEhvd2V2ZXIsIGlmIGFmdGVyIGEgY3Jhc2ggYW5kIHJlc3RhcnQg dGhlIFJFRE8gbG9naWMgZWxlY3RzIHRvCi0JCSAqIHJlcGxheSB0aGUgbG9nIGZyb20gYSBjaGVj a3BvaW50IGJlZm9yZSB0aGUgbGF0ZXN0IG9uZSwgdGhlbiBpdCdzCi0JCSAqIHBvc3NpYmxlIHRo YXQgd2Ugd2lsbCBnZXQgY29tbWFuZHMgdG8gc2V0IHRyYW5zYWN0aW9uIHN0YXR1cyBvZgotCQkg KiB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiB0cnVuY2F0ZWQgZnJvbSB0aGUg Y29tbWl0IGxvZy4KLQkJICogRWFzaWVzdCB3YXkgdG8gZGVhbCB3aXRoIHRoYXQgaXMgdG8gYWNj ZXB0IHJlZmVyZW5jZXMgdG8KLQkJICogbm9uZXhpc3RlbnQgZmlsZXMgaGVyZSBhbmQgaW4gU2xy dVBoeXNpY2FsUmVhZFBhZ2UuKQotCQkgKgotCQkgKiBOb3RlOiBpdCBpcyBwb3NzaWJsZSBmb3Ig bW9yZSB0aGFuIG9uZSBiYWNrZW5kIHRvIGJlIGV4ZWN1dGluZyB0aGlzCi0JCSAqIGNvZGUgc2lt dWx0YW5lb3VzbHkgZm9yIGRpZmZlcmVudCBwYWdlcyBvZiB0aGUgc2FtZSBmaWxlLiBIZW5jZSwK LQkJICogZG9uJ3QgdXNlIE9fRVhDTCBvciBPX1RSVU5DIG9yIGFueXRoaW5nIGxpa2UgdGhhdC4K LQkJICovCi0JCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIHNlZ25vKTsKLQkJZmQgPSBPcGVuVHJh bnNpZW50RmlsZShwYXRoLCBPX1JEV1IgfCBPX0NSRUFUIHwgUEdfQklOQVJZKTsKLQkJaWYgKGZk IDwgMCkKLQkJewotCQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfT1BFTl9GQUlMRUQ7Ci0JCQlzbHJ1 X2Vycm5vID0gZXJybm87Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlpZiAoZmRhdGEpCi0J CXsKLQkJCWlmIChmZGF0YS0+bnVtX2ZpbGVzIDwgTUFYX1dSSVRFQUxMX0JVRkZFUlMpCi0JCQl7 Ci0JCQkJZmRhdGEtPmZkW2ZkYXRhLT5udW1fZmlsZXNdID0gZmQ7Ci0JCQkJZmRhdGEtPnNlZ25v W2ZkYXRhLT5udW1fZmlsZXNdID0gc2Vnbm87Ci0JCQkJZmRhdGEtPm51bV9maWxlcysrOwotCQkJ fQotCQkJZWxzZQotCQkJewotCQkJCS8qCi0JCQkJICogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRo YXQgd2UgZXhjZWVkIE1BWF9GTFVTSF9CVUZGRVJTLAotCQkJCSAqIGZhbGwgYmFjayB0byB0cmVh dGluZyBpdCBhcyBhIHN0YW5kYWxvbmUgd3JpdGUuCi0JCQkJICovCi0JCQkJZmRhdGEgPSBOVUxM OwotCQkJfQotCQl9Ci0JfQotCi0JZXJybm8gPSAwOwotCXBnc3RhdF9yZXBvcnRfd2FpdF9zdGFy dChXQUlUX0VWRU5UX1NMUlVfV1JJVEUpOwotCWlmIChwZ19wd3JpdGUoZmQsIHNoYXJlZC0+cGFn ZV9idWZmZXJbc2xvdG5vXSwgQkxDS1NaLCBvZmZzZXQpICE9IEJMQ0tTWikKLQl7Ci0JCXBnc3Rh dF9yZXBvcnRfd2FpdF9lbmQoKTsKLQkJLyogaWYgd3JpdGUgZGlkbid0IHNldCBlcnJubywgYXNz dW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFjZSAqLwotCQlpZiAoZXJybm8gPT0gMCkKLQkJCWVy cm5vID0gRU5PU1BDOwotCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9XUklURV9GQUlMRUQ7Ci0JCXNs cnVfZXJybm8gPSBlcnJubzsKLQkJaWYgKCFmZGF0YSkKLQkJCUNsb3NlVHJhbnNpZW50RmlsZShm ZCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JcGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOwotCi0J LyogUXVldWUgdXAgYSBzeW5jIHJlcXVlc3QgZm9yIHRoZSBjaGVja3BvaW50ZXIuICovCi0JaWYg KGN0bC0+c3luY19oYW5kbGVyICE9IFNZTkNfSEFORExFUl9OT05FKQotCXsKLQkJRmlsZVRhZwkJ dGFnOwotCi0JCUlOSVRfU0xSVUZJTEVUQUcodGFnLCBjdGwtPnN5bmNfaGFuZGxlciwgc2Vnbm8p OwotCQlpZiAoIVJlZ2lzdGVyU3luY1JlcXVlc3QoJnRhZywgU1lOQ19SRVFVRVNULCBmYWxzZSkp Ci0JCXsKLQkJCS8qIE5vIHNwYWNlIHRvIGVucXVldWUgc3luYyByZXF1ZXN0LiAgRG8gaXQgc3lu Y2hyb25vdXNseS4gKi8KLQkJCXBnc3RhdF9yZXBvcnRfd2FpdF9zdGFydChXQUlUX0VWRU5UX1NM UlVfU1lOQyk7Ci0JCQlpZiAocGdfZnN5bmMoZmQpICE9IDApCi0JCQl7Ci0JCQkJcGdzdGF0X3Jl cG9ydF93YWl0X2VuZCgpOwotCQkJCXNscnVfZXJyY2F1c2UgPSBTTFJVX0ZTWU5DX0ZBSUxFRDsK LQkJCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCQkJQ2xvc2VUcmFuc2llbnRGaWxlKGZkKTsKLQkJ CQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCQlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5kKCk7Ci0JCX0K LQl9Ci0KLQkvKiBDbG9zZSBmaWxlLCB1bmxlc3MgcGFydCBvZiBmbHVzaCByZXF1ZXN0LiAqLwot CWlmICghZmRhdGEpCi0JewotCQlpZiAoQ2xvc2VUcmFuc2llbnRGaWxlKGZkKSAhPSAwKQotCQl7 Ci0JCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9DTE9TRV9GQUlMRUQ7Ci0JCQlzbHJ1X2Vycm5vID0g ZXJybm87Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQot LyoKLSAqIElzc3VlIHRoZSBlcnJvciBtZXNzYWdlIGFmdGVyIGZhaWx1cmUgb2YgU2xydVBoeXNp Y2FsUmVhZFBhZ2Ugb3IKLSAqIFNscnVQaHlzaWNhbFdyaXRlUGFnZS4gIENhbGwgdGhpcyBhZnRl ciBjbGVhbmluZyB1cCBzaGFyZWQtbWVtb3J5IHN0YXRlLgotICovCi1zdGF0aWMgdm9pZAotU2xy dVJlcG9ydElPRXJyb3IoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQgeGlk KQotewotCWludAkJCXNlZ25vID0gcGFnZW5vIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKLQlp bnQJCQlycGFnZW5vID0gcGFnZW5vICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKLQlpbnQJCQlv ZmZzZXQgPSBycGFnZW5vICogQkxDS1NaOwotCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKLQotCVNs cnVGaWxlTmFtZShjdGwsIHBhdGgsIHNlZ25vKTsKLQllcnJubyA9IHNscnVfZXJybm87Ci0Jc3dp dGNoIChzbHJ1X2VycmNhdXNlKQotCXsKLQkJY2FzZSBTTFJVX09QRU5fRkFJTEVEOgotCQkJZXJl cG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCSBlcnJt c2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJ CQkJIGVycmRldGFpbCgiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtLiIsIHBhdGgpKSk7 Ci0JCQlicmVhazsKLQkJY2FzZSBTTFJVX1NFRUtfRkFJTEVEOgotCQkJZXJlcG9ydChFUlJPUiwK LQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5v dCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJCQkJIGVycmRldGFp bCgiQ291bGQgbm90IHNlZWsgaW4gZmlsZSBcIiVzXCIgdG8gb2Zmc2V0ICVkOiAlbS4iLAotCQkJ CQkJCSAgIHBhdGgsIG9mZnNldCkpKTsKLQkJCWJyZWFrOwotCQljYXNlIFNMUlVfUkVBRF9GQUlM RUQ6Ci0JCQlpZiAoZXJybm8pCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJjb2RlX2Zv cl9maWxlX2FjY2VzcygpLAotCQkJCQkJIGVycm1zZygiY291bGQgbm90IGFjY2VzcyBzdGF0dXMg b2YgdHJhbnNhY3Rpb24gJXUiLCB4aWQpLAotCQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90IHJl YWQgZnJvbSBmaWxlIFwiJXNcIiBhdCBvZmZzZXQgJWQ6ICVtLiIsCi0JCQkJCQkJCSAgIHBhdGgs IG9mZnNldCkpKTsKLQkJCWVsc2UKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycm1zZygi Y291bGQgbm90IGFjY2VzcyBzdGF0dXMgb2YgdHJhbnNhY3Rpb24gJXUiLCB4aWQpLAotCQkJCQkJ IGVycmRldGFpbCgiQ291bGQgbm90IHJlYWQgZnJvbSBmaWxlIFwiJXNcIiBhdCBvZmZzZXQgJWQ6 IHJlYWQgdG9vIGZldyBieXRlcy4iLCBwYXRoLCBvZmZzZXQpKSk7Ci0JCQlicmVhazsKLQkJY2Fz ZSBTTFJVX1dSSVRFX0ZBSUxFRDoKLQkJCWlmIChlcnJubykKLQkJCQllcmVwb3J0KEVSUk9SLAot CQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCQkgZXJybXNnKCJjb3VsZCBu b3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCQkgZXJyZGV0 YWlsKCJDb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiAlbS4iLAot CQkJCQkJCQkgICBwYXRoLCBvZmZzZXQpKSk7Ci0JCQllbHNlCi0JCQkJZXJlcG9ydChFUlJPUiwK LQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1 IiwgeGlkKSwKLQkJCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCB3cml0ZSB0byBmaWxlIFwiJXNc IiBhdCBvZmZzZXQgJWQ6IHdyb3RlIHRvbyBmZXcgYnl0ZXMuIiwKLQkJCQkJCQkJICAgcGF0aCwg b2Zmc2V0KSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0xSVV9GU1lOQ19GQUlMRUQ6Ci0JCQllcmVw b3J0KGRhdGFfc3luY19lbGV2ZWwoRVJST1IpLAotCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nl c3MoKSwKLQkJCQkJIGVycm1zZygiY291bGQgbm90IGFjY2VzcyBzdGF0dXMgb2YgdHJhbnNhY3Rp b24gJXUiLCB4aWQpLAotCQkJCQkgZXJyZGV0YWlsKCJDb3VsZCBub3QgZnN5bmMgZmlsZSBcIiVz XCI6ICVtLiIsCi0JCQkJCQkJICAgcGF0aCkpKTsKLQkJCWJyZWFrOwotCQljYXNlIFNMUlVfQ0xP U0VfRkFJTEVEOgotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNj ZXNzKCksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0 aW9uICV1IiwgeGlkKSwKLQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90IGNsb3NlIGZpbGUgXCIl c1wiOiAlbS4iLAotCQkJCQkJCSAgIHBhdGgpKSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJ CS8qIGNhbid0IGdldCBoZXJlLCB3ZSB0cnVzdCAqLwotCQkJZWxvZyhFUlJPUiwgInVucmVjb2du aXplZCBTaW1wbGVMcnUgZXJyb3IgY2F1c2U6ICVkIiwKLQkJCQkgKGludCkgc2xydV9lcnJjYXVz ZSk7Ci0JCQlicmVhazsKLQl9Ci19Ci0KLS8qCi0gKiBTZWxlY3QgdGhlIHNsb3QgdG8gcmUtdXNl IHdoZW4gd2UgbmVlZCBhIGZyZWUgc2xvdC4KLSAqCi0gKiBUaGUgdGFyZ2V0IHBhZ2UgbnVtYmVy IGlzIHBhc3NlZCBiZWNhdXNlIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlCi0gKiBwb3NzaWJpbGl0 eSB0aGF0IHNvbWUgb3RoZXIgcHJvY2VzcyByZWFkcyBpbiB0aGUgdGFyZ2V0IHBhZ2Ugd2hpbGUK LSAqIHdlIGFyZSBkb2luZyBJL08gdG8gZnJlZSBhIHNsb3QuICBIZW5jZSwgY2hlY2sgb3IgcmVj aGVjayB0byBzZWUgaWYKLSAqIGFueSBzbG90IGFscmVhZHkgaG9sZHMgdGhlIHRhcmdldCBwYWdl LCBhbmQgcmV0dXJuIHRoYXQgc2xvdCBpZiBzby4KLSAqIFRodXMsIHRoZSByZXR1cm5lZCBzbG90 IGlzICplaXRoZXIqIGEgc2xvdCBhbHJlYWR5IGhvbGRpbmcgdGhlIHBhZ2VubwotICogKGNvdWxk IGJlIGFueSBzdGF0ZSBleGNlcHQgRU1QVFkpLCAqb3IqIGEgZnJlZWFibGUgc2xvdCAoc3RhdGUg RU1QVFkKLSAqIG9yIENMRUFOKS4KLSAqCi0gKiBDb250cm9sIGxvY2sgbXVzdCBiZSBoZWxkIGF0 IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCi0gKi8KLXN0YXRpYyBpbnQKLVNscnVT ZWxlY3RMUlVQYWdlKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vKQotewotCVNscnVTaGFyZWQJc2hh cmVkID0gY3RsLT5zaGFyZWQ7Ci0KLQkvKiBPdXRlciBsb29wIGhhbmRsZXMgcmVzdGFydCBhZnRl ciBJL08gKi8KLQlmb3IgKDs7KQotCXsKLQkJaW50CQkJc2xvdG5vOwotCQlpbnQJCQljdXJfY291 bnQ7Ci0JCWludAkJCWJlc3R2YWxpZHNsb3QgPSAwOwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICov Ci0JCWludAkJCWJlc3RfdmFsaWRfZGVsdGEgPSAtMTsKLQkJaW50CQkJYmVzdF92YWxpZF9wYWdl X251bWJlciA9IDA7IC8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KLQkJaW50CQkJYmVzdGludmFs aWRzbG90ID0gMDsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwotCQlpbnQJCQliZXN0X2ludmFs aWRfZGVsdGEgPSAtMTsKLQkJaW50CQkJYmVzdF9pbnZhbGlkX3BhZ2VfbnVtYmVyID0gMDsJLyog a2VlcCBjb21waWxlciBxdWlldCAqLwotCi0JCS8qIFNlZSBpZiBwYWdlIGFscmVhZHkgaGFzIGEg YnVmZmVyIGFzc2lnbmVkICovCi0JCWZvciAoc2xvdG5vID0gMDsgc2xvdG5vIDwgc2hhcmVkLT5u dW1fc2xvdHM7IHNsb3RubysrKQotCQl7Ci0JCQlpZiAoc2hhcmVkLT5wYWdlX251bWJlcltzbG90 bm9dID09IHBhZ2VubyAmJgotCQkJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSAhPSBTTFJV X1BBR0VfRU1QVFkpCi0JCQkJcmV0dXJuIHNsb3RubzsKLQkJfQotCi0JCS8qCi0JCSAqIElmIHdl IGZpbmQgYW55IEVNUFRZIHNsb3QsIGp1c3Qgc2VsZWN0IHRoYXQgb25lLiBFbHNlIGNob29zZSBh Ci0JCSAqIHZpY3RpbSBwYWdlIHRvIHJlcGxhY2UuICBXZSBub3JtYWxseSB0YWtlIHRoZSBsZWFz dCByZWNlbnRseSB1c2VkCi0JCSAqIHZhbGlkIHBhZ2UsIGJ1dCB3ZSB3aWxsIG5ldmVyIHRha2Ug dGhlIHNsb3QgY29udGFpbmluZwotCQkgKiBsYXRlc3RfcGFnZV9udW1iZXIsIGV2ZW4gaWYgaXQg YXBwZWFycyBsZWFzdCByZWNlbnRseSB1c2VkLiAgV2UKLQkJICogd2lsbCBzZWxlY3QgYSBzbG90 IHRoYXQgaXMgYWxyZWFkeSBJL08gYnVzeSBvbmx5IGlmIHRoZXJlIGlzIG5vCi0JCSAqIG90aGVy IGNob2ljZTogYSByZWFkLWJ1c3kgc2xvdCB3aWxsIG5vdCBiZSBsZWFzdCByZWNlbnRseSB1c2Vk IG9uY2UKLQkJICogdGhlIHJlYWQgZmluaXNoZXMsIGFuZCB3YWl0aW5nIGZvciBhbiBJL08gb24g YSB3cml0ZS1idXN5IHNsb3QgaXMKLQkJICogaW5mZXJpb3IgdG8ganVzdCBwaWNraW5nIHNvbWUg b3RoZXIgc2xvdC4gIFRlc3Rpbmcgc2hvd3MgdGhlIHNsb3QKLQkJICogd2UgcGljayBpbnN0ZWFk IHdpbGwgb2Z0ZW4gYmUgY2xlYW4sIGFsbG93aW5nIHVzIHRvIGJlZ2luIGEgcmVhZCBhdAotCQkg KiBvbmNlLgotCQkgKgotCQkgKiBOb3JtYWxseSB0aGUgcGFnZV9scnVfY291bnQgdmFsdWVzIHdp bGwgYWxsIGJlIGRpZmZlcmVudCBhbmQgc28KLQkJICogdGhlcmUgd2lsbCBiZSBhIHdlbGwtZGVm aW5lZCBMUlUgcGFnZS4gIEJ1dCBzaW5jZSB3ZSBhbGxvdwotCQkgKiBjb25jdXJyZW50IGV4ZWN1 dGlvbiBvZiBTbHJ1UmVjZW50bHlVc2VkKCkgd2l0aGluCi0JCSAqIFNpbXBsZUxydVJlYWRQYWdl X1JlYWRPbmx5KCksIGl0IGlzIHBvc3NpYmxlIHRoYXQgbXVsdGlwbGUgcGFnZXMKLQkJICogYWNx dWlyZSB0aGUgc2FtZSBscnVfY291bnQgdmFsdWVzLiAgSW4gdGhhdCBjYXNlIHdlIGJyZWFrIHRp ZXMgYnkKLQkJICogY2hvb3NpbmcgdGhlIGZ1cnRoZXN0LWJhY2sgcGFnZS4KLQkJICoKLQkJICog Tm90aWNlIHRoYXQgdGhpcyBuZXh0IGxpbmUgZm9yY2libHkgYWR2YW5jZXMgY3VyX2xydV9jb3Vu dCB0byBhCi0JCSAqIHZhbHVlIHRoYXQgaXMgY2VydGFpbmx5IGJleW9uZCBhbnkgdmFsdWUgdGhh dCB3aWxsIGJlIGluIHRoZQotCQkgKiBwYWdlX2xydV9jb3VudCBhcnJheSBhZnRlciB0aGUgbG9v cCBmaW5pc2hlcy4gIFRoaXMgZW5zdXJlcyB0aGF0Ci0JCSAqIHRoZSBuZXh0IGV4ZWN1dGlvbiBv ZiBTbHJ1UmVjZW50bHlVc2VkIHdpbGwgbWFyayB0aGUgcGFnZSBuZXdseQotCQkgKiB1c2VkLCBl dmVuIGlmIGl0J3MgZm9yIGEgcGFnZSB0aGF0IGhhcyB0aGUgY3VycmVudCBjb3VudGVyIHZhbHVl LgotCQkgKiBUaGF0IGdldHMgdXMgYmFjayBvbiB0aGUgcGF0aCB0byBoYXZpbmcgZ29vZCBkYXRh IHdoZW4gdGhlcmUgYXJlCi0JCSAqIG11bHRpcGxlIHBhZ2VzIHdpdGggdGhlIHNhbWUgbHJ1X2Nv dW50LgotCQkgKi8KLQkJY3VyX2NvdW50ID0gKHNoYXJlZC0+Y3VyX2xydV9jb3VudCkrKzsKLQkJ Zm9yIChzbG90bm8gPSAwOyBzbG90bm8gPCBzaGFyZWQtPm51bV9zbG90czsgc2xvdG5vKyspCi0J CXsKLQkJCWludAkJCXRoaXNfZGVsdGE7Ci0JCQlpbnQJCQl0aGlzX3BhZ2VfbnVtYmVyOwotCi0J CQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9FTVBUWSkKLQkJ CQlyZXR1cm4gc2xvdG5vOwotCQkJdGhpc19kZWx0YSA9IGN1cl9jb3VudCAtIHNoYXJlZC0+cGFn ZV9scnVfY291bnRbc2xvdG5vXTsKLQkJCWlmICh0aGlzX2RlbHRhIDwgMCkKLQkJCXsKLQkJCQkv KgotCQkJCSAqIENsZWFuIHVwIGluIGNhc2Ugc2hhcmVkIHVwZGF0ZXMgaGF2ZSBjYXVzZWQgY3Vy X2NvdW50Ci0JCQkJICogaW5jcmVtZW50cyB0byBnZXQgImxvc3QiLiAgV2UgYmFjayBvZmYgdGhl IHBhZ2UgY291bnRzLAotCQkJCSAqIHJhdGhlciB0aGFuIHRyeWluZyB0byBpbmNyZWFzZSBjdXJf Y291bnQsIHRvIGF2b2lkIGFueQotCQkJCSAqIHF1ZXN0aW9uIG9mIGluZmluaXRlIGxvb3BzIG9y IGZhaWx1cmUgaW4gdGhlIHByZXNlbmNlIG9mCi0JCQkJICogd3JhcHBlZC1hcm91bmQgY291bnRz LgotCQkJCSAqLwotCQkJCXNoYXJlZC0+cGFnZV9scnVfY291bnRbc2xvdG5vXSA9IGN1cl9jb3Vu dDsKLQkJCQl0aGlzX2RlbHRhID0gMDsKLQkJCX0KLQkJCXRoaXNfcGFnZV9udW1iZXIgPSBzaGFy ZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub107Ci0JCQlpZiAodGhpc19wYWdlX251bWJlciA9PSBzaGFy ZWQtPmxhdGVzdF9wYWdlX251bWJlcikKLQkJCQljb250aW51ZTsKLQkJCWlmIChzaGFyZWQtPnBh Z2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1ZBTElEKQotCQkJewotCQkJCWlmICh0aGlz X2RlbHRhID4gYmVzdF92YWxpZF9kZWx0YSB8fAotCQkJCQkodGhpc19kZWx0YSA9PSBiZXN0X3Zh bGlkX2RlbHRhICYmCi0JCQkJCSBjdGwtPlBhZ2VQcmVjZWRlcyh0aGlzX3BhZ2VfbnVtYmVyLAot CQkJCQkJCQkJICAgYmVzdF92YWxpZF9wYWdlX251bWJlcikpKQotCQkJCXsKLQkJCQkJYmVzdHZh bGlkc2xvdCA9IHNsb3RubzsKLQkJCQkJYmVzdF92YWxpZF9kZWx0YSA9IHRoaXNfZGVsdGE7Ci0J CQkJCWJlc3RfdmFsaWRfcGFnZV9udW1iZXIgPSB0aGlzX3BhZ2VfbnVtYmVyOwotCQkJCX0KLQkJ CX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlpZiAodGhpc19kZWx0YSA+IGJlc3RfaW52YWxpZF9kZWx0 YSB8fAotCQkJCQkodGhpc19kZWx0YSA9PSBiZXN0X2ludmFsaWRfZGVsdGEgJiYKLQkJCQkJIGN0 bC0+UGFnZVByZWNlZGVzKHRoaXNfcGFnZV9udW1iZXIsCi0JCQkJCQkJCQkgICBiZXN0X2ludmFs aWRfcGFnZV9udW1iZXIpKSkKLQkJCQl7Ci0JCQkJCWJlc3RpbnZhbGlkc2xvdCA9IHNsb3RubzsK LQkJCQkJYmVzdF9pbnZhbGlkX2RlbHRhID0gdGhpc19kZWx0YTsKLQkJCQkJYmVzdF9pbnZhbGlk X3BhZ2VfbnVtYmVyID0gdGhpc19wYWdlX251bWJlcjsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQkv KgotCQkgKiBJZiBhbGwgcGFnZXMgKGV4Y2VwdCBwb3NzaWJseSB0aGUgbGF0ZXN0IG9uZSkgYXJl IEkvTyBidXN5LCB3ZSdsbAotCQkgKiBoYXZlIHRvIHdhaXQgZm9yIGFuIEkvTyB0byBjb21wbGV0 ZSBhbmQgdGhlbiByZXRyeS4gIEluIHRoYXQKLQkJICogdW5oYXBweSBjYXNlLCB3ZSBjaG9vc2Ug dG8gd2FpdCBmb3IgdGhlIEkvTyBvbiB0aGUgbGVhc3QgcmVjZW50bHkKLQkJICogdXNlZCBzbG90 LCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGl0IHdhcyBsaWtlbHkgaW5pdGlhdGVkIGZpcnN0IG9m Ci0JCSAqIGFsbCB0aGUgSS9PcyBpbiBwcm9ncmVzcyBhbmQgbWF5IHRoZXJlZm9yZSBmaW5pc2gg Zmlyc3QuCi0JCSAqLwotCQlpZiAoYmVzdF92YWxpZF9kZWx0YSA8IDApCi0JCXsKLQkJCVNpbXBs ZUxydVdhaXRJTyhjdGwsIGJlc3RpbnZhbGlkc2xvdCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0J CS8qCi0JCSAqIElmIHRoZSBzZWxlY3RlZCBwYWdlIGlzIGNsZWFuLCB3ZSdyZSBzZXQuCi0JCSAq LwotCQlpZiAoIXNoYXJlZC0+cGFnZV9kaXJ0eVtiZXN0dmFsaWRzbG90XSkKLQkJCXJldHVybiBi ZXN0dmFsaWRzbG90OwotCi0JCS8qCi0JCSAqIFdyaXRlIHRoZSBwYWdlLgotCQkgKi8KLQkJU2xy dUludGVybmFsV3JpdGVQYWdlKGN0bCwgYmVzdHZhbGlkc2xvdCwgTlVMTCk7Ci0KLQkJLyoKLQkJ ICogTm93IGxvb3AgYmFjayBhbmQgdHJ5IGFnYWluLiAgVGhpcyBpcyB0aGUgZWFzaWVzdCB3YXkg b2YgZGVhbGluZwotCQkgKiB3aXRoIGNvcm5lciBjYXNlcyBzdWNoIGFzIHRoZSB2aWN0aW0gcGFn ZSBiZWluZyByZS1kaXJ0aWVkIHdoaWxlIHdlCi0JCSAqIHdyb3RlIGl0LgotCQkgKi8KLQl9Ci19 Ci0KLS8qCi0gKiBXcml0ZSBkaXJ0eSBwYWdlcyB0byBkaXNrIGR1cmluZyBjaGVja3BvaW50IG9y IGRhdGFiYXNlIHNodXRkb3duLiAgRmx1c2hpbmcKLSAqIGlzIGRlZmVycmVkIHVudGlsIHRoZSBu ZXh0IGNhbGwgdG8gUHJvY2Vzc1N5bmNSZXF1ZXN0cygpLCB0aG91Z2ggd2UgZG8gZnN5bmMKLSAq IHRoZSBjb250YWluaW5nIGRpcmVjdG9yeSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IG5ld2x5IGNy ZWF0ZWQgZGlyZWN0b3J5Ci0gKiBlbnRyaWVzIGFyZSBvbiBkaXNrLgotICovCi12b2lkCi1TaW1w bGVMcnVXcml0ZUFsbChTbHJ1Q3RsIGN0bCwgYm9vbCBhbGxvd19yZWRpcnRpZWQpCi17Ci0JU2xy dVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKLQlTbHJ1V3JpdGVBbGxEYXRhIGZkYXRhOwot CWludAkJCXNsb3RubzsKLQlpbnQJCQlwYWdlbm8gPSAwOwotCWludAkJCWk7Ci0JYm9vbAkJb2s7 Ci0KLQkvKiB1cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2YgZmx1c2hlcyAqLwotCXBnc3RhdF9j b3VudF9zbHJ1X2ZsdXNoKHNoYXJlZC0+c2xydV9zdGF0c19pZHgpOwotCi0JLyoKLQkgKiBGaW5k IGFuZCB3cml0ZSBkaXJ0eSBwYWdlcwotCSAqLwotCWZkYXRhLm51bV9maWxlcyA9IDA7CisJb2Zm X3QJCXNpemU7CisJUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IgPSBTbHJ1UmVsRmlsZUxvY2F0b3Io c2xydV9pZCwgc2Vnbm8pOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlID0gc21ncm9wZW4ocmxvY2F0 b3IsIEludmFsaWRCYWNrZW5kSWQsIE1BSU5fRk9SS05VTSk7CiAKLQlMV0xvY2tBY3F1aXJlKHNo YXJlZC0+Q29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlmb3IgKHNsb3RubyA9IDA7IHNs b3RubyA8IHNoYXJlZC0+bnVtX3Nsb3RzOyBzbG90bm8rKykKLQl7Ci0JCVNscnVJbnRlcm5hbFdy aXRlUGFnZShjdGwsIHNsb3RubywgJmZkYXRhKTsKLQotCQkvKgotCQkgKiBJbiBzb21lIHBsYWNl cyAoZS5nLiBjaGVja3BvaW50cyksIHdlIGNhbm5vdCBhc3NlcnQgdGhhdCB0aGUgc2xvdAotCQkg KiBpcyBjbGVhbiBub3csIHNpbmNlIGFub3RoZXIgcHJvY2VzcyBtaWdodCBoYXZlIHJlLWRpcnRp ZWQgaXQKLQkJICogYWxyZWFkeS4gIFRoYXQncyBva2F5LgotCQkgKi8KLQkJQXNzZXJ0KGFsbG93 X3JlZGlydGllZCB8fAotCQkJICAgc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVf UEFHRV9FTVBUWSB8fAotCQkJICAgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJV X1BBR0VfVkFMSUQgJiYKLQkJCQkhc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pKTsKLQl9Ci0K LQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOworCS8qIHVwZGF0ZSB0aGUgc3Rh dHMgY291bnRlciBvZiBjaGVja2VkIHBhZ2VzICovCisJcGdzdGF0X2NvdW50X3NscnVfcGFnZV9l eGlzdHMoc2xydV9pZCk7CiAKLQkvKgotCSAqIE5vdyBjbG9zZSBhbnkgZmlsZXMgdGhhdCB3ZXJl IG9wZW4KLQkgKi8KLQlvayA9IHRydWU7Ci0JZm9yIChpID0gMDsgaSA8IGZkYXRhLm51bV9maWxl czsgaSsrKQotCXsKLQkJaWYgKENsb3NlVHJhbnNpZW50RmlsZShmZGF0YS5mZFtpXSkgIT0gMCkK LQkJewotCQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfQ0xPU0VfRkFJTEVEOwotCQkJc2xydV9lcnJu byA9IGVycm5vOwotCQkJcGFnZW5vID0gZmRhdGEuc2Vnbm9baV0gKiBTTFJVX1BBR0VTX1BFUl9T RUdNRU5UOwotCQkJb2sgPSBmYWxzZTsKLQkJfQotCX0KLQlpZiAoIW9rKQotCQlTbHJ1UmVwb3J0 SU9FcnJvcihjdGwsIHBhZ2VubywgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCWlmIChzbWdyZXhp c3RzKHNmaWxlKSkKKwkJc2l6ZSA9IHNtZ3JuYmxvY2tzKHNmaWxlKTsKKwllbHNlCisJCXNpemUg PSAwOwogCi0JLyogRW5zdXJlIHRoYXQgZGlyZWN0b3J5IGVudHJpZXMgZm9yIG5ldyBmaWxlcyBh cmUgb24gZGlzay4gKi8KLQlpZiAoY3RsLT5zeW5jX2hhbmRsZXIgIT0gU1lOQ19IQU5ETEVSX05P TkUpCi0JCWZzeW5jX2ZuYW1lKGN0bC0+RGlyLCB0cnVlKTsKKwlyZXR1cm4gc2l6ZSA+PSBvZmZz ZXQgKyBCTENLU1o7CiB9CiAKIC8qCkBAIC0xMjI0LDc1ICs5NiwxNCBAQCBTaW1wbGVMcnVXcml0 ZUFsbChTbHJ1Q3RsIGN0bCwgYm9vbCBhbGxvd19yZWRpcnRpZWQpCiAgKiBhZnRlciBpdCBoYXMg YWNjcnVlZCBmcmVzaGx5LXdyaXR0ZW4gZGF0YS4KICAqLwogdm9pZAotU2ltcGxlTHJ1VHJ1bmNh dGUoU2xydUN0bCBjdGwsIGludCBjdXRvZmZQYWdlKQorU2ltcGxlTHJ1VHJ1bmNhdGUoaW50IHNs cnVfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsIGludCBjdXRvZmZQ YWdlKQogewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0JaW50CQkJc2xvdG5v OwotCiAJLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIHRydW5jYXRlcyAqLwotCXBnc3Rh dF9jb3VudF9zbHJ1X3RydW5jYXRlKHNoYXJlZC0+c2xydV9zdGF0c19pZHgpOwotCi0JLyoKLQkg KiBTY2FuIHNoYXJlZCBtZW1vcnkgYW5kIHJlbW92ZSBhbnkgcGFnZXMgcHJlY2VkaW5nIHRoZSBj dXRvZmYgcGFnZSwgdG8KLQkgKiBlbnN1cmUgd2Ugd29uJ3QgcmV3cml0ZSB0aGVtIGxhdGVyLiAg KFNpbmNlIHRoaXMgaXMgbm9ybWFsbHkgY2FsbGVkIGluCi0JICogb3IganVzdCBhZnRlciBhIGNo ZWNrcG9pbnQsIGFueSBkaXJ0eSBwYWdlcyBzaG91bGQgaGF2ZSBiZWVuIGZsdXNoZWQKLQkgKiBh bHJlYWR5IC4uLiB3ZSdyZSBqdXN0IGJlaW5nIGV4dHJhIGNhcmVmdWwgaGVyZS4pCi0JICovCi0J TFdMb2NrQWNxdWlyZShzaGFyZWQtPkNvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwotCi1yZXN0 YXJ0OgotCi0JLyoKLQkgKiBXaGlsZSB3ZSBhcmUgaG9sZGluZyB0aGUgbG9jaywgbWFrZSBhbiBp bXBvcnRhbnQgc2FmZXR5IGNoZWNrOiB0aGUKLQkgKiBjdXJyZW50IGVuZHBvaW50IHBhZ2UgbXVz dCBub3QgYmUgZWxpZ2libGUgZm9yIHJlbW92YWwuCi0JICovCi0JaWYgKGN0bC0+UGFnZVByZWNl ZGVzKHNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyLCBjdXRvZmZQYWdlKSkKLQl7Ci0JCUxXTG9j a1JlbGVhc2Uoc2hhcmVkLT5Db250cm9sTG9jayk7Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJt c2coImNvdWxkIG5vdCB0cnVuY2F0ZSBkaXJlY3RvcnkgXCIlc1wiOiBhcHBhcmVudCB3cmFwYXJv dW5kIiwKLQkJCQkJCWN0bC0+RGlyKSkpOwotCQlyZXR1cm47Ci0JfQotCi0JZm9yIChzbG90bm8g PSAwOyBzbG90bm8gPCBzaGFyZWQtPm51bV9zbG90czsgc2xvdG5vKyspCi0JewotCQlpZiAoc2hh cmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9FTVBUWSkKLQkJCWNvbnRpbnVl OwotCQlpZiAoIWN0bC0+UGFnZVByZWNlZGVzKHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSwg Y3V0b2ZmUGFnZSkpCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBJZiBwYWdlIGlzIGNsZWFu LCBqdXN0IGNoYW5nZSBzdGF0ZSB0byBFTVBUWSAoZXhwZWN0ZWQgY2FzZSkuCi0JCSAqLwotCQlp ZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9WQUxJRCAmJgotCQkJ IXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKQotCQl7Ci0JCQlzaGFyZWQtPnBhZ2Vfc3RhdHVz W3Nsb3Rub10gPSBTTFJVX1BBR0VfRU1QVFk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qCi0J CSAqIEhtbSwgd2UgaGF2ZSAob3IgbWF5IGhhdmUpIEkvTyBvcGVyYXRpb25zIGFjdGluZyBvbiB0 aGUgcGFnZSwgc28KLQkJICogd2UndmUgZ290IHRvIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoIGFu ZCB0aGVuIHN0YXJ0IGFnYWluLiBUaGlzIGlzCi0JCSAqIHRoZSBzYW1lIGxvZ2ljIGFzIGluIFNs cnVTZWxlY3RMUlVQYWdlLiAgKFhYWCBpZiBwYWdlIGlzIGRpcnR5LAotCQkgKiB3b3VsZG4ndCBp dCBiZSBPSyB0byBqdXN0IGRpc2NhcmQgaXQgd2l0aG91dCB3cml0aW5nIGl0PwotCQkgKiBTbHJ1 TWF5RGVsZXRlU2VnbWVudCgpIHVzZXMgYSBzdHJpY3RlciBxdWFsaWZpY2F0aW9uLCBzbyB3ZSBt aWdodAotCQkgKiBub3QgZGVsZXRlIHRoaXMgcGFnZSBpbiB0aGUgZW5kOyBldmVuIGlmIHdlIGRv bid0IGRlbGV0ZSBpdCwgd2UKLQkJICogd29uJ3QgaGF2ZSBjYXVzZSB0byByZWFkIGl0cyBkYXRh IGFnYWluLiAgRm9yIG5vdywga2VlcCB0aGUgbG9naWMKLQkJICogdGhlIHNhbWUgYXMgaXQgd2Fz LikKLQkJICovCi0JCWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdF X1ZBTElEKQotCQkJU2xydUludGVybmFsV3JpdGVQYWdlKGN0bCwgc2xvdG5vLCBOVUxMKTsKLQkJ ZWxzZQotCQkJU2ltcGxlTHJ1V2FpdElPKGN0bCwgc2xvdG5vKTsKLQkJZ290byByZXN0YXJ0Owot CX0KLQotCUxXTG9ja1JlbGVhc2Uoc2hhcmVkLT5Db250cm9sTG9jayk7CisJcGdzdGF0X2NvdW50 X3NscnVfdHJ1bmNhdGUoc2xydV9pZCk7CiAKIAkvKiBOb3cgd2UgY2FuIHJlbW92ZSB0aGUgb2xk IHNlZ21lbnQocykgKi8KLQkodm9pZCkgU2xydVNjYW5EaXJlY3RvcnkoY3RsLCBTbHJ1U2NhbkRp ckNiRGVsZXRlQ3V0b2ZmLCAmY3V0b2ZmUGFnZSk7CisJKHZvaWQpIFNscnVTY2FuRGlyZWN0b3J5 KHNscnVfaWQsIFBhZ2VQcmVjZWRlcywgU2xydVNjYW5EaXJDYkRlbGV0ZUN1dG9mZiwKKwkJCQkJ CQkgJmN1dG9mZlBhZ2UpOwogfQogCiAvKgpAQCAtMTMwMiw3NyArMTEzLDIyIEBAIHJlc3RhcnQ6 CiAgKiB0aGV5IGVpdGhlciBjYW4ndCB5ZXQgY29udGFpbiBhbnl0aGluZywgb3IgaGF2ZSBhbHJl YWR5IGJlZW4gY2xlYW5lZCBvdXQuCiAgKi8KIHN0YXRpYyB2b2lkCi1TbHJ1SW50ZXJuYWxEZWxl dGVTZWdtZW50KFNscnVDdGwgY3RsLCBpbnQgc2Vnbm8pCitTbHJ1SW50ZXJuYWxEZWxldGVTZWdt ZW50KGludCBzbHJ1X2lkLCBpbnQgc2Vnbm8pCiB7Ci0JY2hhcgkJcGF0aFtNQVhQR1BBVEhdOwot Ci0JLyogRm9yZ2V0IGFueSBmc3luYyByZXF1ZXN0cyBxdWV1ZWQgZm9yIHRoaXMgc2VnbWVudC4g Ki8KLQlpZiAoY3RsLT5zeW5jX2hhbmRsZXIgIT0gU1lOQ19IQU5ETEVSX05PTkUpCi0JewotCQlG aWxlVGFnCQl0YWc7Ci0KLQkJSU5JVF9TTFJVRklMRVRBRyh0YWcsIGN0bC0+c3luY19oYW5kbGVy LCBzZWdubyk7Ci0JCVJlZ2lzdGVyU3luY1JlcXVlc3QoJnRhZywgU1lOQ19GT1JHRVRfUkVRVUVT VCwgdHJ1ZSk7Ci0JfQorCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yID0gU2xydVJlbEZpbGVMb2Nh dG9yKHNscnVfaWQsIHNlZ25vKTsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVuKHJs b2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBNQUlOX0ZPUktOVU0pOwogCiAJLyogVW5saW5rIHRo ZSBmaWxlLiAqLwotCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIHNlZ25vKTsKLQllcmVwb3J0KERF QlVHMiwgKGVycm1zZ19pbnRlcm5hbCgicmVtb3ZpbmcgZmlsZSBcIiVzXCIiLCBwYXRoKSkpOwot CXVubGluayhwYXRoKTsKKwlzbWdydW5saW5rKHNmaWxlLCBmYWxzZSk7CiB9CiAKIC8qCiAgKiBE ZWxldGUgYW4gaW5kaXZpZHVhbCBTTFJVIHNlZ21lbnQsIGlkZW50aWZpZWQgYnkgdGhlIHNlZ21l bnQgbnVtYmVyLgogICovCiB2b2lkCi1TbHJ1RGVsZXRlU2VnbWVudChTbHJ1Q3RsIGN0bCwgaW50 IHNlZ25vKQorU2xydURlbGV0ZVNlZ21lbnQoaW50IHNscnVfaWQsIGludCBzZWdubykKIHsKLQlT bHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCWludAkJCXNsb3RubzsKLQlib29sCQlk aWRfd3JpdGU7Ci0KLQkvKiBDbGVhbiBvdXQgYW55IHBvc3NpYmx5IGV4aXN0aW5nIHJlZmVyZW5j ZXMgdG8gdGhlIHNlZ21lbnQuICovCi0JTFdMb2NrQWNxdWlyZShzaGFyZWQtPkNvbnRyb2xMb2Nr LCBMV19FWENMVVNJVkUpOwotcmVzdGFydDoKLQlkaWRfd3JpdGUgPSBmYWxzZTsKLQlmb3IgKHNs b3RubyA9IDA7IHNsb3RubyA8IHNoYXJlZC0+bnVtX3Nsb3RzOyBzbG90bm8rKykKLQl7Ci0JCWlu dAkJCXBhZ2VzZWdubyA9IHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSAvIFNMUlVfUEFHRVNf UEVSX1NFR01FTlQ7Ci0KLQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJV X1BBR0VfRU1QVFkpCi0JCQljb250aW51ZTsKLQotCQkvKiBub3QgdGhlIHNlZ21lbnQgd2UncmUg bG9va2luZyBmb3IgKi8KLQkJaWYgKHBhZ2VzZWdubyAhPSBzZWdubykKLQkJCWNvbnRpbnVlOwot Ci0JCS8qIElmIHBhZ2UgaXMgY2xlYW4sIGp1c3QgY2hhbmdlIHN0YXRlIHRvIEVNUFRZIChleHBl Y3RlZCBjYXNlKS4gKi8KLQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJV X1BBR0VfVkFMSUQgJiYKLQkJCSFzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSkKLQkJewotCQkJ c2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX0VNUFRZOwotCQkJY29udGlu dWU7Ci0JCX0KLQotCQkvKiBTYW1lIGxvZ2ljIGFzIFNpbXBsZUxydVRydW5jYXRlKCkgKi8KLQkJ aWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfVkFMSUQpCi0JCQlT bHJ1SW50ZXJuYWxXcml0ZVBhZ2UoY3RsLCBzbG90bm8sIE5VTEwpOwotCQllbHNlCi0JCQlTaW1w bGVMcnVXYWl0SU8oY3RsLCBzbG90bm8pOwotCi0JCWRpZF93cml0ZSA9IHRydWU7Ci0JfQotCi0J LyoKLQkgKiBCZSBleHRyYSBjYXJlZnVsIGFuZCByZS1jaGVjay4gVGhlIElPIGZ1bmN0aW9ucyBy ZWxlYXNlIHRoZSBjb250cm9sCi0JICogbG9jaywgc28gbmV3IHBhZ2VzIGNvdWxkIGhhdmUgYmVl biByZWFkIGluLgotCSAqLwotCWlmIChkaWRfd3JpdGUpCi0JCWdvdG8gcmVzdGFydDsKLQotCVNs cnVJbnRlcm5hbERlbGV0ZVNlZ21lbnQoY3RsLCBzZWdubyk7Ci0KLQlMV0xvY2tSZWxlYXNlKHNo YXJlZC0+Q29udHJvbExvY2spOworCVNscnVJbnRlcm5hbERlbGV0ZVNlZ21lbnQoc2xydV9pZCwg c2Vnbm8pOwogfQogCiAvKgpAQCAtMTM4OSwxOSArMTQ1LDIxIEBAIHJlc3RhcnQ6CiAgKiBmaXJz dD49Y3V0b2ZmICYmIGxhc3Q+PWN1dG9mZjogbm87IGV2ZXJ5IHBhZ2Ugb2YgdGhpcyBzZWdtZW50 IGlzIHRvbyB5b3VuZwogICovCiBzdGF0aWMgYm9vbAotU2xydU1heURlbGV0ZVNlZ21lbnQoU2xy dUN0bCBjdGwsIGludCBzZWdwYWdlLCBpbnQgY3V0b2ZmUGFnZSkKK1NscnVNYXlEZWxldGVTZWdt ZW50KFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCSBpbnQgc2Vn cGFnZSwgaW50IGN1dG9mZlBhZ2UpCiB7CiAJaW50CQkJc2VnX2xhc3RfcGFnZSA9IHNlZ3BhZ2Ug KyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UIC0gMTsKIAogCUFzc2VydChzZWdwYWdlICUgU0xSVV9Q QUdFU19QRVJfU0VHTUVOVCA9PSAwKTsKIAotCXJldHVybiAoY3RsLT5QYWdlUHJlY2VkZXMoc2Vn cGFnZSwgY3V0b2ZmUGFnZSkgJiYKLQkJCWN0bC0+UGFnZVByZWNlZGVzKHNlZ19sYXN0X3BhZ2Us IGN1dG9mZlBhZ2UpKTsKKwlyZXR1cm4gKFBhZ2VQcmVjZWRlcyhzZWdwYWdlLCBjdXRvZmZQYWdl KSAmJgorCQkJUGFnZVByZWNlZGVzKHNlZ19sYXN0X3BhZ2UsIGN1dG9mZlBhZ2UpKTsKIH0KIAog I2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKIHN0YXRpYyB2b2lkCi1TbHJ1UGFnZVByZWNlZGVz VGVzdE9mZnNldChTbHJ1Q3RsIGN0bCwgaW50IHBlcl9wYWdlLCB1aW50MzIgb2Zmc2V0KQorU2xy dVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVj ZWRlcywKKwkJCQkJCSAgIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkKIHsKIAlUcmFuc2Fj dGlvbklkIGxocywKIAkJCQlyaHM7CkBAIC0xNDI2LDE5ICsxODQsMTkgQEAgU2xydVBhZ2VQcmVj ZWRlc1Rlc3RPZmZzZXQoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkK IAlBc3NlcnQoIVRyYW5zYWN0aW9uSWRQcmVjZWRlcyhyaHMsIGxocyArIDEpKTsKIAlBc3NlcnQo IVRyYW5zYWN0aW9uSWRGb2xsb3dzT3JFcXVhbHMobGhzLCByaHMpKTsKIAlBc3NlcnQoIVRyYW5z YWN0aW9uSWRGb2xsb3dzT3JFcXVhbHMocmhzLCBsaHMpKTsKLQlBc3NlcnQoIWN0bC0+UGFnZVBy ZWNlZGVzKGxocyAvIHBlcl9wYWdlLCBsaHMgLyBwZXJfcGFnZSkpOwotCUFzc2VydCghY3RsLT5Q YWdlUHJlY2VkZXMobGhzIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KCFj dGwtPlBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgbGhzIC8gcGVyX3BhZ2UpKTsKLQlBc3Nl cnQoIWN0bC0+UGFnZVByZWNlZGVzKChsaHMgLSBwZXJfcGFnZSkgLyBwZXJfcGFnZSwgcmhzIC8g cGVyX3BhZ2UpKTsKLQlBc3NlcnQoY3RsLT5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChs aHMgLSAzICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UpKTsKLQlBc3NlcnQoY3RsLT5QYWdlUHJlY2Vk ZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgLSAyICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UpKTsKLQlB c3NlcnQoY3RsLT5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgLSAxICogcGVyX3Bh Z2UpIC8gcGVyX3BhZ2UpCisJQXNzZXJ0KCFQYWdlUHJlY2VkZXMobGhzIC8gcGVyX3BhZ2UsIGxo cyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KCFQYWdlUHJlY2VkZXMobGhzIC8gcGVyX3BhZ2UsIHJo cyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KCFQYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIGxo cyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KCFQYWdlUHJlY2VkZXMoKGxocyAtIHBlcl9wYWdlKSAv IHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOworCUFzc2VydChQYWdlUHJlY2VkZXMocmhzIC8g cGVyX3BhZ2UsIChsaHMgLSAzICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQoUGFn ZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMiAqIHBlcl9wYWdlKSAvIHBlcl9wYWdl KSk7CisJQXNzZXJ0KFBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxocyAtIDEgKiBwZXJf cGFnZSkgLyBwZXJfcGFnZSkKIAkJICAgfHwgKDFVIDw8IDMxKSAlIHBlcl9wYWdlICE9IDApOwkv KiBTZWUgQ29tbWl0VHNQYWdlUHJlY2VkZXMoKSAqLwotCUFzc2VydChjdGwtPlBhZ2VQcmVjZWRl cygobGhzICsgMSAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkKKwlBc3Nl cnQoUGFnZVByZWNlZGVzKChsaHMgKyAxICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBl cl9wYWdlKQogCQkgICB8fCAoMVUgPDwgMzEpICUgcGVyX3BhZ2UgIT0gMCk7Ci0JQXNzZXJ0KGN0 bC0+UGFnZVByZWNlZGVzKChsaHMgKyAyICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBl cl9wYWdlKSk7Ci0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzKChsaHMgKyAzICogcGVyX3BhZ2Up IC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQcmVjZWRl cyhyaHMgLyBwZXJfcGFnZSwgKGxocyArIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0 KFBhZ2VQcmVjZWRlcygobGhzICsgMiAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJf cGFnZSkpOworCUFzc2VydChQYWdlUHJlY2VkZXMoKGxocyArIDMgKiBwZXJfcGFnZSkgLyBwZXJf cGFnZSwgcmhzIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQoIVBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJf cGFnZSwgKGxocyArIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7CiAKIAkvKgogCSAqIEdldE5ld1Ry YW5zYWN0aW9uSWQoKSBoYXMgYXNzaWduZWQgdGhlIGxhc3QgWElEIGl0IGNhbiBzYWZlbHkgdXNl LCBhbmQKQEAgLTE0NTEsNyArMjA5LDcgQEAgU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xy dUN0bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkKIAlvbGRlc3RYYWN0ID0gbmV3 ZXN0WGFjdCArIDE7CiAJb2xkZXN0WGFjdCAtPSAxVSA8PCAzMTsKIAlvbGRlc3RQYWdlID0gb2xk ZXN0WGFjdCAvIHBlcl9wYWdlOwotCUFzc2VydCghU2xydU1heURlbGV0ZVNlZ21lbnQoY3RsLAor CUFzc2VydCghU2xydU1heURlbGV0ZVNlZ21lbnQoUGFnZVByZWNlZGVzLAogCQkJCQkJCQkgKG5l d2VzdFBhZ2UgLQogCQkJCQkJCQkgIG5ld2VzdFBhZ2UgJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5U KSwKIAkJCQkJCQkJIG9sZGVzdFBhZ2UpKTsKQEAgLTE0NjcsNyArMjI1LDcgQEAgU2xydVBhZ2VQ cmVjZWRlc1Rlc3RPZmZzZXQoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNl dCkKIAlvbGRlc3RYYWN0ID0gbmV3ZXN0WGFjdCArIDE7CiAJb2xkZXN0WGFjdCAtPSAxVSA8PCAz MTsKIAlvbGRlc3RQYWdlID0gb2xkZXN0WGFjdCAvIHBlcl9wYWdlOwotCUFzc2VydCghU2xydU1h eURlbGV0ZVNlZ21lbnQoY3RsLAorCUFzc2VydCghU2xydU1heURlbGV0ZVNlZ21lbnQoUGFnZVBy ZWNlZGVzLAogCQkJCQkJCQkgKG5ld2VzdFBhZ2UgLQogCQkJCQkJCQkgIG5ld2VzdFBhZ2UgJSBT TFJVX1BBR0VTX1BFUl9TRUdNRU5UKSwKIAkJCQkJCQkJIG9sZGVzdFBhZ2UpKTsKQEAgLTE0ODMs MTIgKzI0MSwxMiBAQCBTbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChTbHJ1Q3RsIGN0bCwgaW50 IHBlcl9wYWdlLCB1aW50MzIgb2Zmc2V0KQogICogZG8gbm90IGFwcGx5IHRvIHRoZW0uKQogICov CiB2b2lkCi1TbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNscnVDdGwgY3RsLCBpbnQgcGVyX3Bh Z2UpCitTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQ YWdlUHJlY2VkZXMsIGludCBwZXJfcGFnZSkKIHsKIAkvKiBUZXN0IGZpcnN0LCBtaWRkbGUgYW5k IGxhc3QgZW50cmllcyBvZiBhIHBhZ2UuICovCi0JU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQo Y3RsLCBwZXJfcGFnZSwgMCk7Ci0JU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoY3RsLCBwZXJf cGFnZSwgcGVyX3BhZ2UgLyAyKTsKLQlTbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChjdGwsIHBl cl9wYWdlLCBwZXJfcGFnZSAtIDEpOworCVNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFBhZ2VQ cmVjZWRlcywgcGVyX3BhZ2UsIDApOworCVNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFBhZ2VQ cmVjZWRlcywgcGVyX3BhZ2UsIHBlcl9wYWdlIC8gMik7CisJU2xydVBhZ2VQcmVjZWRlc1Rlc3RP ZmZzZXQoUGFnZVByZWNlZGVzLCBwZXJfcGFnZSwgcGVyX3BhZ2UgLSAxKTsKIH0KICNlbmRpZgog CkBAIC0xNDk4LDExICsyNTYsMTIgQEAgU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTbHJ1Q3Rs IGN0bCwgaW50IHBlcl9wYWdlKQogICoJCW9uZSBjb250YWluaW5nIHRoZSBwYWdlIHBhc3NlZCBh cyAiZGF0YSIuCiAgKi8KIGJvb2wKLVNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShTbHJ1Q3Rs IGN0bCwgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLCB2b2lkICpkYXRhKQorU2xydVNjYW5E aXJDYlJlcG9ydFByZXNlbmNlKGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24g UGFnZVByZWNlZGVzLAorCQkJCQkJCWNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAq ZGF0YSkKIHsKIAlpbnQJCQljdXRvZmZQYWdlID0gKihpbnQgKikgZGF0YTsKIAotCWlmIChTbHJ1 TWF5RGVsZXRlU2VnbWVudChjdGwsIHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpKQorCWlmIChTbHJ1TWF5 RGVsZXRlU2VnbWVudChQYWdlUHJlY2VkZXMsIHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpKQogCQlyZXR1 cm4gdHJ1ZTsJCQkvKiBmb3VuZCBvbmU7IGRvbid0IGl0ZXJhdGUgYW55IG1vcmUgKi8KIAogCXJl dHVybiBmYWxzZTsJCQkJLyoga2VlcCBnb2luZyAqLwpAQCAtMTUxMywxMiArMjcyLDE1IEBAIFNs cnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsIGlu dCBzZWdwYWdlLCB2b2lkICpkYXRhCiAgKgkJVGhpcyBjYWxsYmFjayBkZWxldGVzIHNlZ21lbnRz IHByaW9yIHRvIHRoZSBvbmUgcGFzc2VkIGluIGFzICJkYXRhIi4KICAqLwogc3RhdGljIGJvb2wK LVNscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBp bnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKK1NscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoaW50IHNs cnVfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkgIGNo YXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKIHsKIAlpbnQJCQljdXRvZmZQ YWdlID0gKihpbnQgKikgZGF0YTsKIAotCWlmIChTbHJ1TWF5RGVsZXRlU2VnbWVudChjdGwsIHNl Z3BhZ2UsIGN1dG9mZlBhZ2UpKQotCQlTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KGN0bCwgc2Vn cGFnZSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpOworCWlmIChTbHJ1TWF5RGVsZXRlU2VnbWVu dChQYWdlUHJlY2VkZXMsIHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpKQorCXsKKwkJU2xydURlbGV0ZVNl Z21lbnQoc2xydV9pZCwgc2VncGFnZSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpOworCX0KIAog CXJldHVybiBmYWxzZTsJCQkJLyoga2VlcCBnb2luZyAqLwogfQpAQCAtMTUyOCw5ICsyOTAsMTAg QEAgU2xydVNjYW5EaXJDYkRlbGV0ZUN1dG9mZihTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUs IGludCBzZWdwYWdlLCB2b2lkICpkYXRhKQogICoJCVRoaXMgY2FsbGJhY2sgZGVsZXRlcyBhbGwg c2VnbWVudHMuCiAgKi8KIGJvb2wKLVNscnVTY2FuRGlyQ2JEZWxldGVBbGwoU2xydUN0bCBjdGws IGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKK1NscnVTY2FuRGlyQ2JE ZWxldGVBbGwoaW50IHNscnVfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2Vk ZXMsCisJCQkJCSAgIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKIHsK LQlTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KGN0bCwgc2VncGFnZSAvIFNMUlVfUEFHRVNfUEVS X1NFR01FTlQpOworCVNscnVJbnRlcm5hbERlbGV0ZVNlZ21lbnQoc2xydV9pZCwgc2VncGFnZSAv IFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpOwogCiAJcmV0dXJuIGZhbHNlOwkJCQkvKiBrZWVwIGdv aW5nICovCiB9CkBAIC0xNTUxLDE2ICszMTQsMjAgQEAgU2xydVNjYW5EaXJDYkRlbGV0ZUFsbChT bHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLCB2b2lkICpkYXRhKQogICog Tm90ZSB0aGF0IG5vIGxvY2tpbmcgaXMgYXBwbGllZC4KICAqLwogYm9vbAotU2xydVNjYW5EaXJl Y3RvcnkoU2xydUN0bCBjdGwsIFNscnVTY2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmRhdGEp CitTbHJ1U2NhbkRpcmVjdG9yeShpbnQgc2xydV9pZCwgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9u IFBhZ2VQcmVjZWRlcywKKwkJCQkgIFNscnVTY2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmRh dGEpCiB7CiAJYm9vbAkJcmV0dmFsID0gZmFsc2U7CiAJRElSCQkgICAqY2xkaXI7CiAJc3RydWN0 IGRpcmVudCAqY2xkZTsKIAlpbnQJCQlzZWdubzsKIAlpbnQJCQlzZWdwYWdlOworCWNvbnN0IGNo YXIgKnBhdGg7CisKKwlwYXRoID0gc2xydV9kaXJzW3NscnVfaWRdOwogCi0JY2xkaXIgPSBBbGxv Y2F0ZURpcihjdGwtPkRpcik7Ci0Jd2hpbGUgKChjbGRlID0gUmVhZERpcihjbGRpciwgY3RsLT5E aXIpKSAhPSBOVUxMKQorCWNsZGlyID0gQWxsb2NhdGVEaXIocGF0aCk7CisJd2hpbGUgKChjbGRl ID0gUmVhZERpcihjbGRpciwgcGF0aCkpICE9IE5VTEwpCiAJewogCQlzaXplX3QJCWxlbjsKIApA QCAtMTU3Myw4ICszNDAsOCBAQCBTbHJ1U2NhbkRpcmVjdG9yeShTbHJ1Q3RsIGN0bCwgU2xydVNj YW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSkKIAkJCXNlZ3BhZ2UgPSBzZWdubyAqIFNM UlVfUEFHRVNfUEVSX1NFR01FTlQ7CiAKIAkJCWVsb2coREVCVUcyLCAiU2xydVNjYW5EaXJlY3Rv cnkgaW52b2tpbmcgY2FsbGJhY2sgb24gJXMvJXMiLAotCQkJCSBjdGwtPkRpciwgY2xkZS0+ZF9u YW1lKTsKLQkJCXJldHZhbCA9IGNhbGxiYWNrKGN0bCwgY2xkZS0+ZF9uYW1lLCBzZWdwYWdlLCBk YXRhKTsKKwkJCQkgcGF0aCwgY2xkZS0+ZF9uYW1lKTsKKwkJCXJldHZhbCA9IGNhbGxiYWNrKHNs cnVfaWQsIFBhZ2VQcmVjZWRlcywgY2xkZS0+ZF9uYW1lLCBzZWdwYWdlLCBkYXRhKTsKIAkJCWlm IChyZXR2YWwpCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTE1ODUsMjkgKzM1Miw3NCBAQCBTbHJ1U2Nh bkRpcmVjdG9yeShTbHJ1Q3RsIGN0bCwgU2xydVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAq ZGF0YSkKIH0KIAogLyoKLSAqIEluZGl2aWR1YWwgU0xSVXMgKGNsb2csIC4uLikgaGF2ZSB0byBw cm92aWRlIGEgc3luYy5jIGhhbmRsZXIgZnVuY3Rpb24gc28KLSAqIHRoYXQgdGhleSBjYW4gcHJv dmlkZSB0aGUgY29ycmVjdCAiU2xydUN0bCIgKG90aGVyd2lzZSB3ZSBkb24ndCBrbm93IGhvdyB0 bwotICogYnVpbGQgdGhlIHBhdGgpLCBidXQgdGhleSBqdXN0IGZvcndhcmQgdG8gdGhpcyBjb21t b24gaW1wbGVtZW50YXRpb24gdGhhdAotICogcGVyZm9ybXMgdGhlIGZzeW5jLgorICogUmVhZCBh IGJ1ZmZlci4gIEJ1ZmZlciBpcyBwaW5uZWQgb24gcmV0dXJuLgorICovCitCdWZmZXIKK1JlYWRT bHJ1QnVmZmVyKGludCBzbHJ1X2lkLCBpbnQgcGFnZW5vLCBSZWFkQnVmZmVyTW9kZSBtb2RlKQor eworCWludAkJCXNlZ25vID0gcGFnZW5vIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKKwlpbnQJ CQlycGFnZW5vID0gcGFnZW5vICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKKwlSZWxGaWxlTG9j YXRvciBybG9jYXRvciA9IFNscnVSZWxGaWxlTG9jYXRvcihzbHJ1X2lkLCBzZWdubyk7CisJQnVm ZmVyCQlidWZmZXI7CisJYm9vbAkJaGl0OworCisJLyogVHJ5IHRvIGF2b2lkIGRvaW5nIGEgYnVm ZmVyIG1hcHBpbmcgdGFibGUgbG9va3VwIGZvciByZXBlYXRlZCBhY2Nlc3MuICovCisJYnVmZmVy ID0gc2xydV9yZWNlbnRfYnVmZmVyc1tzbHJ1X2lkXS5yZWNlbnRfYnVmZmVyOworCWlmIChzbHJ1 X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnBhZ2VubyA9PSBwYWdlbm8gJiYKKwkJQnVmZmVySXNW YWxpZChidWZmZXIpICYmCisJCVJlYWRSZWNlbnRCdWZmZXIocmxvY2F0b3IsIE1BSU5fRk9SS05V TSwgcGFnZW5vLCBidWZmZXIpKQorCXsKKwkJcGdzdGF0X2NvdW50X3NscnVfcGFnZV9oaXQoc2xy dV9pZCk7CisJCXJldHVybiBidWZmZXI7CisJfQorCisJLyogUmVndWxhciBsb29rdXAuICovCisJ YnVmZmVyID0gUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZVdpdGhIaXQocmxvY2F0b3IsIE1BSU5f Rk9SS05VTSwgcnBhZ2VubywKKwkJCQkJCQkJCQkJICBtb2RlLCBOVUxMLCB0cnVlLCAmaGl0KTsK KworCS8qIFJlbWVtYmVyIHdoZXJlIHRoaXMgcGFnZSBpcyBmb3IgbmV4dCB0aW1lLiAqLworCXNs cnVfcmVjZW50X2J1ZmZlcnNbc2xydV9pZF0ucGFnZW5vID0gcGFnZW5vOworCXNscnVfcmVjZW50 X2J1ZmZlcnNbc2xydV9pZF0ucmVjZW50X2J1ZmZlciA9IGJ1ZmZlcjsKKworCWlmIChoaXQpCisJ CXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfaGl0KHNscnVfaWQpOworCisJcmV0dXJuIGJ1ZmZlcjsK K30KKworLyoKKyAqIFplcm8taW5pdGlhbGl6ZSBhIGJ1ZmZlci4gIEJ1ZmZlciBpcyBwaW5uZWQg YW5kIGV4Y2x1c2l2ZWx5IGxvY2tlZCBvbiByZXR1cm4uCiAgKi8KLWludAotU2xydVN5bmNGaWxl VGFnKFNscnVDdGwgY3RsLCBjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKQorQnVmZmVy CitaZXJvU2xydUJ1ZmZlcihpbnQgc2xydV9pZCwgaW50IHBhZ2VubykKIHsKLQlpbnQJCQlmZDsK LQlpbnQJCQlzYXZlX2Vycm5vOwotCWludAkJCXJlc3VsdDsKKwlpbnQJCQlzZWdubyA9IHBhZ2Vu byAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CisJaW50CQkJcnBhZ2VubyA9IHBhZ2VubyAlIFNM UlVfUEFHRVNfUEVSX1NFR01FTlQ7CisJUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IgPSBTbHJ1UmVs RmlsZUxvY2F0b3Ioc2xydV9pZCwgc2Vnbm8pOworCUJ1ZmZlcgkJYnVmZmVyOworCVNNZ3JGaWxl SGFuZGxlIHNmaWxlOwogCi0JU2xydUZpbGVOYW1lKGN0bCwgcGF0aCwgZnRhZy0+c2Vnbm8pOwor CXNmaWxlID0gc21ncm9wZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIE1BSU5fRk9SS05V TSk7CisJaWYgKCFzbWdyZXhpc3RzKHNmaWxlKSkKKwkJc21ncmNyZWF0ZShzZmlsZSwgZmFsc2Up OworCQorCWJ1ZmZlciA9IFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUocmxvY2F0b3IsIE1BSU5f Rk9SS05VTSwgcnBhZ2VubywgUkJNX1pFUk9fQU5EX0xPQ0ssIE5VTEwsIHRydWUpOwogCi0JZmQg PSBPcGVuVHJhbnNpZW50RmlsZShwYXRoLCBPX1JEV1IgfCBQR19CSU5BUlkpOwotCWlmIChmZCA8 IDApCi0JCXJldHVybiAtMTsKKwkvKiBSZW1lbWJlciB3aGVyZSB0aGlzIHBhZ2UgaXMgZm9yIG5l eHQgdGltZS4gKi8KKwlzbHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnBhZ2VubyA9IHBhZ2Vu bzsKKwlzbHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnJlY2VudF9idWZmZXIgPSBidWZmZXI7 CiAKLQlyZXN1bHQgPSBwZ19mc3luYyhmZCk7Ci0Jc2F2ZV9lcnJubyA9IGVycm5vOworCXBnc3Rh dF9jb3VudF9zbHJ1X3BhZ2VfemVyb2VkKHNscnVfaWQpOwogCi0JQ2xvc2VUcmFuc2llbnRGaWxl KGZkKTsKKwlyZXR1cm4gYnVmZmVyOworfQorCitib29sCitQcm9iZVNscnVCdWZmZXIoaW50IHNs cnVfaWQsIGludCBwYWdlbm8pCit7CisJaW50CQkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VT X1BFUl9TRUdNRU5UOworCWludAkJCXJwYWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9T RUdNRU5UOworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yID0gU2xydVJlbEZpbGVMb2NhdG9yKHNs cnVfaWQsIHNlZ25vKTsKIAotCWVycm5vID0gc2F2ZV9lcnJubzsKLQlyZXR1cm4gcmVzdWx0Owor CXJldHVybiBCdWZmZXJQcm9iZShybG9jYXRvciwgTUFJTl9GT1JLTlVNLCBycGFnZW5vKTsKIH0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jCmluZGV4IDYyYmI2MTAxNjdjLi4zM2Vk ZTgxMzhkNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJhbnMu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jCkBAIC0zMiw2ICsz Miw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3N1YnRyYW5zLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Ry YW5zYW0uaCIKICNpbmNsdWRlICJwZ190cmFjZS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdy LmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogCiAKQEAgLTQ5LDIxICs1MCwxMyBAQAog ICovCiAKIC8qIFdlIG5lZWQgZm91ciBieXRlcyBwZXIgeGFjdCAqLwotI2RlZmluZSBTVUJUUkFO U19YQUNUU19QRVJfUEFHRSAoQkxDS1NaIC8gc2l6ZW9mKFRyYW5zYWN0aW9uSWQpKQorI2RlZmlu ZSBTVUJUUkFOU19YQUNUU19QRVJfUEFHRSAoKEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFkZXJEYXRh KSAvIHNpemVvZihUcmFuc2FjdGlvbklkKSkKIAogI2RlZmluZSBUcmFuc2FjdGlvbklkVG9QYWdl KHhpZCkgKCh4aWQpIC8gKFRyYW5zYWN0aW9uSWQpIFNVQlRSQU5TX1hBQ1RTX1BFUl9QQUdFKQog I2RlZmluZSBUcmFuc2FjdGlvbklkVG9FbnRyeSh4aWQpICgoeGlkKSAlIChUcmFuc2FjdGlvbklk KSBTVUJUUkFOU19YQUNUU19QRVJfUEFHRSkKIAogCi0vKgotICogTGluayB0byBzaGFyZWQtbWVt b3J5IGRhdGEgc3RydWN0dXJlcyBmb3IgU1VCVFJBTlMgY29udHJvbAotICovCi1zdGF0aWMgU2xy dUN0bERhdGEgU3ViVHJhbnNDdGxEYXRhOwotCi0jZGVmaW5lIFN1YlRyYW5zQ3RsICAoJlN1YlRy YW5zQ3RsRGF0YSkKLQotCi1zdGF0aWMgaW50CVplcm9TVUJUUkFOU1BhZ2UoaW50IHBhZ2Vubyk7 CitzdGF0aWMgQnVmZmVyIFplcm9TVUJUUkFOU1BhZ2UoaW50IHBhZ2Vubyk7CiBzdGF0aWMgYm9v bCBTdWJUcmFuc1BhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMik7CiAKIApAQCAtNzUs MTYgKzY4LDE1IEBAIFN1YlRyYW5zU2V0UGFyZW50KFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFuc2Fj dGlvbklkIHBhcmVudCkKIHsKIAlpbnQJCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKHhp ZCk7CiAJaW50CQkJZW50cnlubyA9IFRyYW5zYWN0aW9uSWRUb0VudHJ5KHhpZCk7Ci0JaW50CQkJ c2xvdG5vOwogCVRyYW5zYWN0aW9uSWQgKnB0cjsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCUFzc2Vy dChUcmFuc2FjdGlvbklkSXNWYWxpZChwYXJlbnQpKTsKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZEZv bGxvd3MoeGlkLCBwYXJlbnQpKTsKIAotCUxXTG9ja0FjcXVpcmUoU3VidHJhbnNTTFJVTG9jaywg TFdfRVhDTFVTSVZFKTsKLQotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKFN1YlRyYW5zQ3Rs LCBwYWdlbm8sIHRydWUsIHhpZCk7Ci0JcHRyID0gKFRyYW5zYWN0aW9uSWQgKikgU3ViVHJhbnND dGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZl cihTTFJVX1NVQlRSQU5TX0lELCBwYWdlbm8sIFJCTV9OT1JNQUwpOworCUxvY2tCdWZmZXIoYnVm ZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCXB0ciA9IChUcmFuc2FjdGlvbklkICopIFBh Z2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpOwogCXB0ciArPSBlbnRyeW5vOwog CiAJLyoKQEAgLTk2LDEwICs4OCwxMCBAQCBTdWJUcmFuc1NldFBhcmVudChUcmFuc2FjdGlvbklk IHhpZCwgVHJhbnNhY3Rpb25JZCBwYXJlbnQpCiAJewogCQlBc3NlcnQoKnB0ciA9PSBJbnZhbGlk VHJhbnNhY3Rpb25JZCk7CiAJCSpwdHIgPSBwYXJlbnQ7Ci0JCVN1YlRyYW5zQ3RsLT5zaGFyZWQt PnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRydWU7CisJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwog CX0KIAotCUxXTG9ja1JlbGVhc2UoU3VidHJhbnNTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1 ZmZlcihidWZmZXIpOwogfQogCiAvKgpAQCAtMTEwLDkgKzEwMiw5IEBAIFN1YlRyYW5zR2V0UGFy ZW50KFRyYW5zYWN0aW9uSWQgeGlkKQogewogCWludAkJCXBhZ2VubyA9IFRyYW5zYWN0aW9uSWRU b1BhZ2UoeGlkKTsKIAlpbnQJCQllbnRyeW5vID0gVHJhbnNhY3Rpb25JZFRvRW50cnkoeGlkKTsK LQlpbnQJCQlzbG90bm87CiAJVHJhbnNhY3Rpb25JZCAqcHRyOwogCVRyYW5zYWN0aW9uSWQgcGFy ZW50OworCUJ1ZmZlcgkJYnVmZmVyOwogCiAJLyogQ2FuJ3QgYXNrIGFib3V0IHN0dWZmIHRoYXQg bWlnaHQgbm90IGJlIGFyb3VuZCBhbnltb3JlICovCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRGb2xs b3dzT3JFcXVhbHMoeGlkLCBUcmFuc2FjdGlvblhtaW4pKTsKQEAgLTEyMSwxNSArMTEzLDE0IEBA IFN1YlRyYW5zR2V0UGFyZW50KFRyYW5zYWN0aW9uSWQgeGlkKQogCWlmICghVHJhbnNhY3Rpb25J ZElzTm9ybWFsKHhpZCkpCiAJCXJldHVybiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAotCS8qIGxv Y2sgaXMgYWNxdWlyZWQgYnkgU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkgKi8KKwlidWZmZXIg PSBSZWFkU2xydUJ1ZmZlcihTTFJVX1NVQlRSQU5TX0lELCBwYWdlbm8sIFJCTV9OT1JNQUwpOwog Ci0Jc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoU3ViVHJhbnNDdGwsIHBhZ2Vu bywgeGlkKTsKLQlwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSBTdWJUcmFuc0N0bC0+c2hhcmVkLT5w YWdlX2J1ZmZlcltzbG90bm9dOworCXB0ciA9IChUcmFuc2FjdGlvbklkICopIFBhZ2VHZXRDb250 ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpOwogCXB0ciArPSBlbnRyeW5vOwogCiAJcGFyZW50 ID0gKnB0cjsKIAotCUxXTG9ja1JlbGVhc2UoU3VidHJhbnNTTFJVTG9jayk7CisJUmVsZWFzZUJ1 ZmZlcihidWZmZXIpOwogCiAJcmV0dXJuIHBhcmVudDsKIH0KQEAgLTE3NywyNiArMTY4LDYgQEAg U3ViVHJhbnNHZXRUb3Btb3N0VHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25JZCB4aWQpCiAJcmV0dXJu IHByZXZpb3VzWGlkOwogfQogCi0KLS8qCi0gKiBJbml0aWFsaXphdGlvbiBvZiBzaGFyZWQgbWVt b3J5IGZvciBTVUJUUkFOUwotICovCi1TaXplCi1TVUJUUkFOU1NobWVtU2l6ZSh2b2lkKQotewot CXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoTlVNX1NVQlRSQU5TX0JVRkZFUlMsIDApOwotfQot Ci12b2lkCi1TVUJUUkFOU1NobWVtSW5pdCh2b2lkKQotewotCVN1YlRyYW5zQ3RsLT5QYWdlUHJl Y2VkZXMgPSBTdWJUcmFuc1BhZ2VQcmVjZWRlczsKLQlTaW1wbGVMcnVJbml0KFN1YlRyYW5zQ3Rs LCAiU3VidHJhbnMiLCBOVU1fU1VCVFJBTlNfQlVGRkVSUywgMCwKLQkJCQkgIFN1YnRyYW5zU0xS VUxvY2ssICJwZ19zdWJ0cmFucyIsCi0JCQkJICBMV1RSQU5DSEVfU1VCVFJBTlNfQlVGRkVSLCBT WU5DX0hBTkRMRVJfTk9ORSk7Ci0JU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTdWJUcmFuc0N0 bCwgU1VCVFJBTlNfWEFDVFNfUEVSX1BBR0UpOwotfQotCiAvKgogICogVGhpcyBmdW5jIG11c3Qg YmUgY2FsbGVkIE9OQ0Ugb24gc3lzdGVtIGluc3RhbGwuICBJdCBjcmVhdGVzCiAgKiB0aGUgaW5p dGlhbCBTVUJUUkFOUyBzZWdtZW50LiAgKFRoZSBTVUJUUkFOUyBkaXJlY3RvcnkgaXMgYXNzdW1l ZCB0bwpAQCAtMjEwLDE4ICsxODEsMTYgQEAgU1VCVFJBTlNTaG1lbUluaXQodm9pZCkKIHZvaWQK IEJvb3RTdHJhcFNVQlRSQU5TKHZvaWQpCiB7Ci0JaW50CQkJc2xvdG5vOworCUJ1ZmZlcgkJYnVm ZmVyOwogCi0JTFdMb2NrQWNxdWlyZShTdWJ0cmFuc1NMUlVMb2NrLCBMV19FWENMVVNJVkUpOwor CVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU3ViVHJhbnNQYWdlUHJlY2VkZXMsIFNVQlRSQU5T X1hBQ1RTX1BFUl9QQUdFKTsKIAogCS8qIENyZWF0ZSBhbmQgemVybyB0aGUgZmlyc3QgcGFnZSBv ZiB0aGUgc3VidHJhbnMgbG9nICovCi0Jc2xvdG5vID0gWmVyb1NVQlRSQU5TUGFnZSgwKTsKKwli dWZmZXIgPSBaZXJvU1VCVFJBTlNQYWdlKDApOwogCiAJLyogTWFrZSBzdXJlIGl0J3Mgd3JpdHRl biBvdXQgKi8KLQlTaW1wbGVMcnVXcml0ZVBhZ2UoU3ViVHJhbnNDdGwsIHNsb3Rubyk7Ci0JQXNz ZXJ0KCFTdWJUcmFuc0N0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pOwotCi0JTFdMb2Nr UmVsZWFzZShTdWJ0cmFuc1NMUlVMb2NrKTsKKwlGbHVzaE9uZUJ1ZmZlcihidWZmZXIpOworCVVu bG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0KIAogLyoKQEAgLTIzMiwxMCArMjAxLDE5IEBA IEJvb3RTdHJhcFNVQlRSQU5TKHZvaWQpCiAgKgogICogQ29udHJvbCBsb2NrIG11c3QgYmUgaGVs ZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0LgogICovCi1zdGF0aWMgaW50Citz dGF0aWMgQnVmZmVyCiBaZXJvU1VCVFJBTlNQYWdlKGludCBwYWdlbm8pCiB7Ci0JcmV0dXJuIFNp bXBsZUxydVplcm9QYWdlKFN1YlRyYW5zQ3RsLCBwYWdlbm8pOworCUJ1ZmZlcgkJYnVmZmVyOwor CVBhZ2UJCXBhZ2U7CisKKwlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX1NVQlRSQU5TX0lE LCBwYWdlbm8pOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisJUGFnZUluaXRTTFJV KHBhZ2UsIEJMQ0tTWiwgMCk7CisKKwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKKworCXJldHVy biBidWZmZXI7CiB9CiAKIC8qCkBAIC0yNTgsNyArMjM2LDYgQEAgU3RhcnR1cFNVQlRSQU5TKFRy YW5zYWN0aW9uSWQgb2xkZXN0QWN0aXZlWElEKQogCSAqIFdoZW5ldmVyIHdlIGFkdmFuY2UgaW50 byBhIG5ldyBwYWdlLCBFeHRlbmRTVUJUUkFOUyB3aWxsIGxpa2V3aXNlIHplcm8KIAkgKiB0aGUg bmV3IHBhZ2Ugd2l0aG91dCByZWdhcmQgdG8gd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgb24gZGlz ay4KIAkgKi8KLQlMV0xvY2tBY3F1aXJlKFN1YnRyYW5zU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7 CiAKIAlzdGFydFBhZ2UgPSBUcmFuc2FjdGlvbklkVG9QYWdlKG9sZGVzdEFjdGl2ZVhJRCk7CiAJ bmV4dFhpZCA9IFNobWVtVmFyaWFibGVDYWNoZS0+bmV4dFhpZDsKQEAgLTI2NiwzNiArMjQzLDE1 IEBAIFN0YXJ0dXBTVUJUUkFOUyhUcmFuc2FjdGlvbklkIG9sZGVzdEFjdGl2ZVhJRCkKIAogCXdo aWxlIChzdGFydFBhZ2UgIT0gZW5kUGFnZSkKIAl7Ci0JCSh2b2lkKSBaZXJvU1VCVFJBTlNQYWdl KHN0YXJ0UGFnZSk7CisJCVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb1NVQlRSQU5TUGFnZShzdGFy dFBhZ2UpKTsKIAkJc3RhcnRQYWdlKys7CiAJCS8qIG11c3QgYWNjb3VudCBmb3Igd3JhcGFyb3Vu ZCAqLwogCQlpZiAoc3RhcnRQYWdlID4gVHJhbnNhY3Rpb25JZFRvUGFnZShNYXhUcmFuc2FjdGlv bklkKSkKIAkJCXN0YXJ0UGFnZSA9IDA7CiAJfQotCSh2b2lkKSBaZXJvU1VCVFJBTlNQYWdlKHN0 YXJ0UGFnZSk7Ci0KLQlMV0xvY2tSZWxlYXNlKFN1YnRyYW5zU0xSVUxvY2spOwotfQotCi0vKgot ICogUGVyZm9ybSBhIGNoZWNrcG9pbnQgLS0tIGVpdGhlciBkdXJpbmcgc2h1dGRvd24sIG9yIG9u LXRoZS1mbHkKLSAqLwotdm9pZAotQ2hlY2tQb2ludFNVQlRSQU5TKHZvaWQpCi17Ci0JLyoKLQkg KiBXcml0ZSBkaXJ0eSBTVUJUUkFOUyBwYWdlcyB0byBkaXNrCi0JICoKLQkgKiBUaGlzIGlzIG5v dCBhY3R1YWxseSBuZWNlc3NhcnkgZnJvbSBhIGNvcnJlY3RuZXNzIHBvaW50IG9mIHZpZXcuIFdl IGRvCi0JICogaXQgbWVyZWx5IHRvIGltcHJvdmUgdGhlIG9kZHMgdGhhdCB3cml0aW5nIG9mIGRp cnR5IHBhZ2VzIGlzIGRvbmUgYnkKLQkgKiB0aGUgY2hlY2twb2ludCBwcm9jZXNzIGFuZCBub3Qg YnkgYmFja2VuZHMuCi0JICovCi0JVFJBQ0VfUE9TVEdSRVNRTF9TVUJUUkFOU19DSEVDS1BPSU5U X1NUQVJUKHRydWUpOwotCVNpbXBsZUxydVdyaXRlQWxsKFN1YlRyYW5zQ3RsLCB0cnVlKTsKLQlU UkFDRV9QT1NUR1JFU1FMX1NVQlRSQU5TX0NIRUNLUE9JTlRfRE9ORSh0cnVlKTsKKwlVbmxvY2tS ZWxlYXNlQnVmZmVyKFplcm9TVUJUUkFOU1BhZ2Uoc3RhcnRQYWdlKSk7CiB9CiAKLQogLyoKICAq IE1ha2Ugc3VyZSB0aGF0IFNVQlRSQU5TIGhhcyByb29tIGZvciBhIG5ld2x5LWFsbG9jYXRlZCBY SUQuCiAgKgpAQCAtMzE5LDEyICsyNzUsOCBAQCBFeHRlbmRTVUJUUkFOUyhUcmFuc2FjdGlvbklk IG5ld2VzdFhhY3QpCiAKIAlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKG5ld2VzdFhhY3Qp OwogCi0JTFdMb2NrQWNxdWlyZShTdWJ0cmFuc1NMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCiAJ LyogWmVybyB0aGUgcGFnZSAqLwotCVplcm9TVUJUUkFOU1BhZ2UocGFnZW5vKTsKLQotCUxXTG9j a1JlbGVhc2UoU3VidHJhbnNTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihaZXJvU1VC VFJBTlNQYWdlKHBhZ2VubykpOwogfQogCiAKQEAgLTM1MCw3ICszMDIsNyBAQCBUcnVuY2F0ZVNV QlRSQU5TKFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCkKIAlUcmFuc2FjdGlvbklkUmV0cmVhdChv bGRlc3RYYWN0KTsKIAljdXRvZmZQYWdlID0gVHJhbnNhY3Rpb25JZFRvUGFnZShvbGRlc3RYYWN0 KTsKIAotCVNpbXBsZUxydVRydW5jYXRlKFN1YlRyYW5zQ3RsLCBjdXRvZmZQYWdlKTsKKwlTaW1w bGVMcnVUcnVuY2F0ZShTTFJVX1NVQlRSQU5TX0lELCBTdWJUcmFuc1BhZ2VQcmVjZWRlcywgY3V0 b2ZmUGFnZSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCmluZGV4IGI4NzY0MDEy NjA3Li43ZDQ4MDBhNWYyNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYwpAQCAtNjgsNiAr NjgsNyBAQAogI2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRp bHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWxtYXBwZXIuaCIKKyNpbmNsdWRlICJ1dGlscy9yZXNv d25lcl9wcml2YXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogI2luY2x1ZGUgInV0 aWxzL3RpbWVvdXQuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKQEAgLTEzOTcsNiAr MTM5OCw3IEBAIFJlY29yZFRyYW5zYWN0aW9uQ29tbWl0KHZvaWQpCiAJCSAqIGFyZSBkZWxheWlu ZyB0aGUgY2hlY2twb2ludCBhIGJpdCBmdXp6eSwgYnV0IGl0IGRvZXNuJ3QgbWF0dGVyLgogCQkg Ki8KIAkJQXNzZXJ0KChNeVByb2MtPmRlbGF5Q2hrcHRGbGFncyAmIERFTEFZX0NIS1BUX1NUQVJU KSA9PSAwKTsKKwogCQlTVEFSVF9DUklUX1NFQ1RJT04oKTsKIAkJTXlQcm9jLT5kZWxheUNoa3B0 RmxhZ3MgfD0gREVMQVlfQ0hLUFRfU1RBUlQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpp bmRleCBmOWYwZjZkYjhkMS4uNjg5MTdkMTcyOTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMKQEAgLTQ2MzgsNiArNDYzOCw3IEBAIEJvb3RTdHJhcFhMT0codm9pZCkKIAl1aW50NjQJCXN5 c2lkZW50aWZpZXI7CiAJc3RydWN0IHRpbWV2YWwgdHY7CiAJcGdfY3JjMzJjCWNyYzsKKwlSZXNv dXJjZU93bmVyIHJlc293bmVyOwogCiAJLyogYWxsb3cgb3JkaW5hcnkgV0FMIHNlZ21lbnQgY3Jl YXRpb24sIGxpa2UgU3RhcnR1cFhMT0coKSB3b3VsZCAqLwogCVNldEluc3RhbGxYTG9nRmlsZVNl Z21lbnRBY3RpdmUoKTsKQEAgLTQ3NzcsMTAgKzQ3NzgsMTQgQEAgQm9vdFN0cmFwWExPRyh2b2lk KQogCVdyaXRlQ29udHJvbEZpbGUoKTsKIAogCS8qIEJvb3RzdHJhcCB0aGUgY29tbWl0IGxvZywg dG9vICovCisJcmVzb3duZXIgPSBSZXNvdXJjZU93bmVyQ3JlYXRlKE5VTEwsICJib290c3RyYXAg cmVzb3duZXIiKTsKKwlDdXJyZW50UmVzb3VyY2VPd25lciA9IHJlc293bmVyOwogCUJvb3RTdHJh cENMT0coKTsKIAlCb290U3RyYXBDb21taXRUcygpOwogCUJvb3RTdHJhcFNVQlRSQU5TKCk7CiAJ Qm9vdFN0cmFwTXVsdGlYYWN0KCk7CisJQ3VycmVudFJlc291cmNlT3duZXIgPSBOVUxMOworCVJl c291cmNlT3duZXJEZWxldGUocmVzb3duZXIpOwogCiAJcGZyZWUoYnVmZmVyKTsKIApAQCAtNDc4 OSw2ICs0Nzk0LDggQEAgQm9vdFN0cmFwWExPRyh2b2lkKQogCSAqIG90aGVyd2lzZSBuZXZlciBy dW4gdGhlIGNoZWNrcyBhbmQgR1VDIHJlbGF0ZWQgaW5pdGlhbGl6YXRpb25zIHRoZXJlaW4uCiAJ ICovCiAJUmVhZENvbnRyb2xGaWxlKCk7CisKKwlzbWdyY2xvc2VhbGwoKTsKIH0KIAogc3RhdGlj IGNoYXIgKgpAQCAtNjk5NywxNSArNzAwNCwxMSBAQCBDaGVja1BvaW50R3V0cyhYTG9nUmVjUHRy IGNoZWNrUG9pbnRSZWRvLCBpbnQgZmxhZ3MpCiAJQ2hlY2tQb2ludFNuYXBCdWlsZCgpOwogCUNo ZWNrUG9pbnRMb2dpY2FsUmV3cml0ZUhlYXAoKTsKIAlDaGVja1BvaW50UmVwbGljYXRpb25Pcmln aW4oKTsKKwlDaGVja1BvaW50UHJlZGljYXRlKCk7CiAKLQkvKiBXcml0ZSBvdXQgYWxsIGRpcnR5 IGRhdGEgaW4gU0xSVXMgYW5kIHRoZSBtYWluIGJ1ZmZlciBwb29sICovCisJLyogV3JpdGUgb3V0 IGFsbCBkaXJ0eSBkYXRhIGluIHRoZSBidWZmZXIgcG9vbCAqLwogCVRSQUNFX1BPU1RHUkVTUUxf QlVGRkVSX0NIRUNLUE9JTlRfU1RBUlQoZmxhZ3MpOwogCUNoZWNrcG9pbnRTdGF0cy5ja3B0X3dy aXRlX3QgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7Ci0JQ2hlY2tQb2ludENMT0coKTsKLQlDaGVj a1BvaW50Q29tbWl0VHMoKTsKLQlDaGVja1BvaW50U1VCVFJBTlMoKTsKLQlDaGVja1BvaW50TXVs dGlYYWN0KCk7Ci0JQ2hlY2tQb2ludFByZWRpY2F0ZSgpOwogCUNoZWNrUG9pbnRCdWZmZXJzKGZs YWdzKTsKIAogCS8qIFBlcmZvcm0gYWxsIHF1ZXVlZCB1cCBmc3luY3MgKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dwcmVmZXRjaGVyLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJlZmV0Y2hlci5jCmluZGV4IDA0NmU0MGQxNDNhLi41MDY3 NGNkOGI1MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3ByZWZl dGNoZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJlZmV0Y2hlci5j CkBAIC02NTIsNyArNjUyLDcgQEAgWExvZ1ByZWZldGNoZXJOZXh0QmxvY2sodWludHB0cl90IHBn c3JfcHJpdmF0ZSwgWExvZ1JlY1B0ciAqbHNuKQogCQl7CiAJCQlpbnQJCQlibG9ja19pZCA9IHBy ZWZldGNoZXItPm5leHRfYmxvY2tfaWQrKzsKIAkJCURlY29kZWRCa3BCbG9jayAqYmxvY2sgPSAm cmVjb3JkLT5ibG9ja3NbYmxvY2tfaWRdOwotCQkJU01nclJlbGF0aW9uIHJlbG47CisJCQlTTWdy RmlsZUhhbmRsZSBzZmlsZTsKIAkJCVByZWZldGNoQnVmZmVyUmVzdWx0IHJlc3VsdDsKIAogCQkJ aWYgKCFibG9jay0+aW5fdXNlKQpAQCAtNzIyLDcgKzcyMiw3IEBAIFhMb2dQcmVmZXRjaGVyTmV4 dEJsb2NrKHVpbnRwdHJfdCBwZ3NyX3ByaXZhdGUsIFhMb2dSZWNQdHIgKmxzbikKIAkJCSAqIHNh bWUgcmVsYXRpb24gKHdpdGggc29tZSBzY2hlbWUgdG8gaGFuZGxlIGludmFsaWRhdGlvbnMKIAkJ CSAqIHNhZmVseSksIGJ1dCBmb3Igbm93IHdlJ2xsIGNhbGwgc21ncm9wZW4oKSBldmVyeSB0aW1l LgogCQkJICovCi0JCQlyZWxuID0gc21ncm9wZW4oYmxvY2stPnJsb2NhdG9yLCBJbnZhbGlkQmFj a2VuZElkKTsKKwkJCXNmaWxlID0gc21ncm9wZW4oYmxvY2stPnJsb2NhdG9yLCBJbnZhbGlkQmFj a2VuZElkLCBibG9jay0+Zm9ya251bSk7CiAKIAkJCS8qCiAJCQkgKiBJZiB0aGUgcmVsYXRpb24g ZmlsZSBkb2Vzbid0IGV4aXN0IG9uIGRpc2ssIGZvciBleGFtcGxlIGJlY2F1c2UKQEAgLTczMSwx NCArNzMxLDE0IEBAIFhMb2dQcmVmZXRjaGVyTmV4dEJsb2NrKHVpbnRwdHJfdCBwZ3NyX3ByaXZh dGUsIFhMb2dSZWNQdHIgKmxzbikKIAkJCSAqIGZ1cnRoZXIgcHJlZmV0Y2hpbmcgaW4gdGhlIHJl bGF0aW9uIHVudGlsIHRoaXMgcmVjb3JkIGlzCiAJCQkgKiByZXBsYXllZC4KIAkJCSAqLwotCQkJ aWYgKCFzbWdyZXhpc3RzKHJlbG4sIE1BSU5fRk9SS05VTSkpCisJCQlpZiAoIXNtZ3JleGlzdHMo c2ZpbGUpKQogCQkJewogI2lmZGVmIFhMT0dQUkVGRVRDSEVSX0RFQlVHX0xFVkVMCiAJCQkJZWxv ZyhYTE9HUFJFRkVUQ0hFUl9ERUJVR19MRVZFTCwKIAkJCQkJICJzdXBwcmVzc2luZyBhbGwgcHJl ZmV0Y2ggaW4gcmVsYXRpb24gJXUvJXUvJXUgdW50aWwgJVgvJVggaXMgcmVwbGF5ZWQsIGJlY2F1 c2UgdGhlIHJlbGF0aW9uIGRvZXMgbm90IGV4aXN0IG9uIGRpc2siLAotCQkJCQkgcmVsbi0+c21n cl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5kYk9pZCwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIs CisJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJIHNmaWxl LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLnJlbE51bWJlciwKIAkJCQkJIExTTl9GT1JNQVRfQVJHUyhyZWNvcmQtPmxzbikp OwogI2VuZGlmCiAJCQkJWExvZ1ByZWZldGNoZXJBZGRGaWx0ZXIocHJlZmV0Y2hlciwgYmxvY2st PnJsb2NhdG9yLCAwLApAQCAtNzUyLDE0ICs3NTIsMTQgQEAgWExvZ1ByZWZldGNoZXJOZXh0Qmxv Y2sodWludHB0cl90IHBnc3JfcHJpdmF0ZSwgWExvZ1JlY1B0ciAqbHNuKQogCQkJICogYmxvY2sg eWV0LCBzdXBwcmVzcyBwcmVmZXRjaGluZyBvZiB0aGlzIGJsb2NrIGFuZCBoaWdoZXIgdW50aWwK IAkJCSAqIHRoaXMgcmVjb3JkIGlzIHJlcGxheWVkLgogCQkJICovCi0JCQlpZiAoYmxvY2stPmJs a25vID49IHNtZ3JuYmxvY2tzKHJlbG4sIGJsb2NrLT5mb3JrbnVtKSkKKwkJCWlmIChibG9jay0+ Ymxrbm8gPj0gc21ncm5ibG9ja3Moc2ZpbGUpKQogCQkJewogI2lmZGVmIFhMT0dQUkVGRVRDSEVS X0RFQlVHX0xFVkVMCiAJCQkJZWxvZyhYTE9HUFJFRkVUQ0hFUl9ERUJVR19MRVZFTCwKIAkJCQkJ ICJzdXBwcmVzc2luZyBwcmVmZXRjaCBpbiByZWxhdGlvbiAldS8ldS8ldSBmcm9tIGJsb2NrICV1 IHVudGlsICVYLyVYIGlzIHJlcGxheWVkLCBiZWNhdXNlIHRoZSByZWxhdGlvbiBpcyB0b28gc21h bGwiLAotCQkJCQkgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJIHJl bG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0 b3IubG9jYXRvci5yZWxOdW1iZXIsCisJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9y LnNwY09pZCwKKwkJCQkJIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJ CSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKIAkJCQkJIGJsb2NrLT5i bGtubywKIAkJCQkJIExTTl9GT1JNQVRfQVJHUyhyZWNvcmQtPmxzbikpOwogI2VuZGlmCkBAIC03 NzAsNyArNzcwLDcgQEAgWExvZ1ByZWZldGNoZXJOZXh0QmxvY2sodWludHB0cl90IHBnc3JfcHJp dmF0ZSwgWExvZ1JlY1B0ciAqbHNuKQogCQkJfQogCiAJCQkvKiBUcnkgdG8gaW5pdGlhdGUgcHJl ZmV0Y2hpbmcuICovCi0JCQlyZXN1bHQgPSBQcmVmZXRjaFNoYXJlZEJ1ZmZlcihyZWxuLCBibG9j ay0+Zm9ya251bSwgYmxvY2stPmJsa25vKTsKKwkJCXJlc3VsdCA9IFByZWZldGNoU2hhcmVkQnVm ZmVyKHNmaWxlLCBibG9jay0+Ymxrbm8pOwogCQkJaWYgKEJ1ZmZlcklzVmFsaWQocmVzdWx0LnJl Y2VudF9idWZmZXIpKQogCQkJewogCQkJCS8qIENhY2hlIGhpdCwgbm90aGluZyB0byBkby4gKi8K QEAgLTc5Niw5ICs3OTYsOSBAQCBYTG9nUHJlZmV0Y2hlck5leHRCbG9jayh1aW50cHRyX3QgcGdz cl9wcml2YXRlLCBYTG9nUmVjUHRyICpsc24pCiAJCQkJICovCiAJCQkJZWxvZyhFUlJPUiwKIAkJ CQkJICJjb3VsZCBub3QgcHJlZmV0Y2ggcmVsYXRpb24gJXUvJXUvJXUgYmxvY2sgJXUiLAotCQkJ CQkgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJIHJlbG4tPnNtZ3Jf cmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRv ci5yZWxOdW1iZXIsCisJCQkJCSBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAor CQkJCQkgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkgc2ZpbGUtPnNt Z3JfbG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKIAkJCQkJIGJsb2NrLT5ibGtubyk7CiAJCQl9 CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1dGlscy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3V0aWxzLmMKaW5kZXggMmMyODk1NmIx YWEuLjVlNDAzNGY3Y2Q3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9ndXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ndXRpbHMuYwpA QCAtNDc3LDcgKzQ3Nyw3IEBAIFhMb2dSZWFkQnVmZmVyRXh0ZW5kZWQoUmVsRmlsZUxvY2F0b3Ig cmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKIHsKIAlCbG9ja051bWJlciBsYXN0YmxvY2s7 CiAJQnVmZmVyCQlidWZmZXI7Ci0JU01nclJlbGF0aW9uIHNtZ3I7CisJU01nckZpbGVIYW5kbGUg c2ZpbGU7CiAKIAlBc3NlcnQoYmxrbm8gIT0gUF9ORVcpOwogCkBAIC00OTEsNyArNDkxLDcgQEAg WExvZ1JlYWRCdWZmZXJFeHRlbmRlZChSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJl ciBmb3JrbnVtLAogCX0KIAogCS8qIE9wZW4gdGhlIHJlbGF0aW9uIGF0IHNtZ3IgbGV2ZWwgKi8K LQlzbWdyID0gc21ncm9wZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOworCXNmaWxlID0g c21ncm9wZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtudW0pOwogCiAJLyoKIAkg KiBDcmVhdGUgdGhlIHRhcmdldCBmaWxlIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4gIFRo aXMgbGV0cyB1cyBjb3BlCkBAIC01MDEsOSArNTAxLDkgQEAgWExvZ1JlYWRCdWZmZXJFeHRlbmRl ZChSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLAogCSAqIGZpbGVz eXN0ZW0gbG9zZXMgYW4gaW5vZGUgZHVyaW5nIGEgY3Jhc2guICBCZXR0ZXIgdG8gd3JpdGUgdGhl IGRhdGEKIAkgKiB1bnRpbCB3ZSBhcmUgYWN0dWFsbHkgdG9sZCB0byBkZWxldGUgdGhlIGZpbGUu KQogCSAqLwotCXNtZ3JjcmVhdGUoc21nciwgZm9ya251bSwgdHJ1ZSk7CisJc21ncmNyZWF0ZShz ZmlsZSwgdHJ1ZSk7CiAKLQlsYXN0YmxvY2sgPSBzbWdybmJsb2NrcyhzbWdyLCBmb3JrbnVtKTsK KwlsYXN0YmxvY2sgPSBzbWdybmJsb2NrcyhzZmlsZSk7CiAKIAlpZiAoYmxrbm8gPCBsYXN0Ymxv Y2spCiAJewpAQCAtNjMxLDcgKzYzMSw3IEBAIENyZWF0ZUZha2VSZWxjYWNoZUVudHJ5KFJlbEZp bGVMb2NhdG9yIHJsb2NhdG9yKQogCXJlbC0+cmRfbG9ja0luZm8ubG9ja1JlbElkLmRiSWQgPSBy bG9jYXRvci5kYk9pZDsKIAlyZWwtPnJkX2xvY2tJbmZvLmxvY2tSZWxJZC5yZWxJZCA9IHJsb2Nh dG9yLnJlbE51bWJlcjsKIAotCXJlbC0+cmRfc21nciA9IE5VTEw7CisJTWVtU2V0KHJlbC0+cmRf c21nciwgMCwgc2l6ZW9mKHJlbC0+cmRfc21ncikpOwogCiAJcmV0dXJuIHJlbDsKIH0KQEAgLTY0 Myw4ICs2NDMsMTEgQEAgdm9pZAogRnJlZUZha2VSZWxjYWNoZUVudHJ5KFJlbGF0aW9uIGZha2Vy ZWwpCiB7CiAJLyogbWFrZSBzdXJlIHRoZSBmYWtlcmVsIGlzIG5vdCByZWZlcmVuY2VkIGJ5IHRo ZSBTbWdyUmVsYXRpb24gYW55bW9yZSAqLwotCWlmIChmYWtlcmVsLT5yZF9zbWdyICE9IE5VTEwp Ci0JCXNtZ3JjbGVhcm93bmVyKCZmYWtlcmVsLT5yZF9zbWdyLCBmYWtlcmVsLT5yZF9zbWdyKTsK Kwlmb3IgKGludCBpID0gMDsgaSA8PSBNQVhfRk9SS05VTTsgaSsrKQorCXsKKwkJaWYgKGZha2Vy ZWwtPnJkX3NtZ3JbaV0gIT0gTlVMTCkKKwkJCXNtZ3JjbGVhcm93bmVyKCZmYWtlcmVsLT5yZF9z bWdyW2ldLCBmYWtlcmVsLT5yZF9zbWdyW2ldKTsKKwl9CiAJcGZyZWUoZmFrZXJlbCk7CiB9CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvY2F0YWxvZy5jIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9jYXRhbG9nLmMKaW5kZXggMWJmNmM1NjMzY2QuLjZiMDExNTg2MTViIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2NhdGFsb2cuYworKysgYi9zcmMvYmFja2VuZC9jYXRh bG9nL2NhdGFsb2cuYwpAQCAtNTAxLDEwICs1MDEsMTAgQEAgR2V0TmV3T2lkV2l0aEluZGV4KFJl bGF0aW9uIHJlbGF0aW9uLCBPaWQgaW5kZXhJZCwgQXR0ck51bWJlciBvaWRjb2x1bW4pCiBSZWxG aWxlTnVtYmVyCiBHZXROZXdSZWxGaWxlTnVtYmVyKE9pZCByZWx0YWJsZXNwYWNlLCBSZWxhdGlv biBwZ19jbGFzcywgY2hhciByZWxwZXJzaXN0ZW5jZSkKIHsKLQlSZWxGaWxlTG9jYXRvckJhY2tl bmQgcmxvY2F0b3I7Ci0JY2hhcgkgICAqcnBhdGg7Ci0JYm9vbAkJY29sbGlkZXM7CisJUmVsRmls ZUxvY2F0b3IgcmxvY2F0b3I7CiAJQmFja2VuZElkCWJhY2tlbmQ7CisJU01nckZpbGVIYW5kbGUg c2ZpbGU7CisJYm9vbAkJY29sbGlkZXM7CiAKIAkvKgogCSAqIElmIHdlIGV2ZXIgZ2V0IGhlcmUg ZHVyaW5nIHBnX3VwZ3JhZGUsIHRoZXJlJ3Mgc29tZXRoaW5nIHdyb25nOyBhbGwKQEAgLTUxMyw2 ICs1MTMsMTEgQEAgR2V0TmV3UmVsRmlsZU51bWJlcihPaWQgcmVsdGFibGVzcGFjZSwgUmVsYXRp b24gcGdfY2xhc3MsIGNoYXIgcmVscGVyc2lzdGVuY2UpCiAJICovCiAJQXNzZXJ0KCFJc0JpbmFy eVVwZ3JhZGUpOwogCisJLyoKKwkgKiBUaGUgcmVscGF0aCB3aWxsIHZhcnkgYmFzZWQgb24gdGhl IGJhY2tlbmQgSUQsIHNvIHdlIG11c3QgaW5pdGlhbGl6ZQorCSAqIHRoYXQgcHJvcGVybHkgaGVy ZSB0byBtYWtlIHN1cmUgdGhhdCBhbnkgY29sbGlzaW9ucyBiYXNlZCBvbiBmaWxlbmFtZQorCSAq IGFyZSBwcm9wZXJseSBkZXRlY3RlZC4KKwkgKi8KIAlzd2l0Y2ggKHJlbHBlcnNpc3RlbmNlKQog CXsKIAkJY2FzZSBSRUxQRVJTSVNURU5DRV9URU1QOgpAQCAtNTI4LDUzICs1MzMsMjkgQEAgR2V0 TmV3UmVsRmlsZU51bWJlcihPaWQgcmVsdGFibGVzcGFjZSwgUmVsYXRpb24gcGdfY2xhc3MsIGNo YXIgcmVscGVyc2lzdGVuY2UpCiAJfQogCiAJLyogVGhpcyBsb2dpYyBzaG91bGQgbWF0Y2ggUmVs YXRpb25Jbml0UGh5c2ljYWxBZGRyICovCi0JcmxvY2F0b3IubG9jYXRvci5zcGNPaWQgPSByZWx0 YWJsZXNwYWNlID8gcmVsdGFibGVzcGFjZSA6IE15RGF0YWJhc2VUYWJsZVNwYWNlOwotCXJsb2Nh dG9yLmxvY2F0b3IuZGJPaWQgPQotCQkocmxvY2F0b3IubG9jYXRvci5zcGNPaWQgPT0gR0xPQkFM VEFCTEVTUEFDRV9PSUQpID8KKwlybG9jYXRvci5zcGNPaWQgPSByZWx0YWJsZXNwYWNlID8gcmVs dGFibGVzcGFjZSA6IE15RGF0YWJhc2VUYWJsZVNwYWNlOworCXJsb2NhdG9yLmRiT2lkID0KKwkJ KHJsb2NhdG9yLnNwY09pZCA9PSBHTE9CQUxUQUJMRVNQQUNFX09JRCkgPwogCQlJbnZhbGlkT2lk IDogTXlEYXRhYmFzZUlkOwogCi0JLyoKLQkgKiBUaGUgcmVscGF0aCB3aWxsIHZhcnkgYmFzZWQg b24gdGhlIGJhY2tlbmQgSUQsIHNvIHdlIG11c3QgaW5pdGlhbGl6ZQotCSAqIHRoYXQgcHJvcGVy bHkgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCBhbnkgY29sbGlzaW9ucyBiYXNlZCBvbiBmaWxlbmFt ZQotCSAqIGFyZSBwcm9wZXJseSBkZXRlY3RlZC4KLQkgKi8KLQlybG9jYXRvci5iYWNrZW5kID0g YmFja2VuZDsKLQogCWRvCiAJewogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCiAJCS8qIEdl bmVyYXRlIHRoZSBPSUQgKi8KIAkJaWYgKHBnX2NsYXNzKQotCQkJcmxvY2F0b3IubG9jYXRvci5y ZWxOdW1iZXIgPSBHZXROZXdPaWRXaXRoSW5kZXgocGdfY2xhc3MsIENsYXNzT2lkSW5kZXhJZCwK KwkJCXJsb2NhdG9yLnJlbE51bWJlciA9IEdldE5ld09pZFdpdGhJbmRleChwZ19jbGFzcywgQ2xh c3NPaWRJbmRleElkLAogCQkJCQkJCQkJCQkJCQkJQW51bV9wZ19jbGFzc19vaWQpOwogCQllbHNl Ci0JCQlybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciA9IEdldE5ld09iamVjdElkKCk7CisJCQly bG9jYXRvci5yZWxOdW1iZXIgPSBHZXROZXdPYmplY3RJZCgpOwogCiAJCS8qIENoZWNrIGZvciBl eGlzdGluZyBmaWxlIG9mIHNhbWUgbmFtZSAqLwotCQlycGF0aCA9IHJlbHBhdGgocmxvY2F0b3Is IE1BSU5fRk9SS05VTSk7Ci0KLQkJaWYgKGFjY2VzcyhycGF0aCwgRl9PSykgPT0gMCkKLQkJewot CQkJLyogZGVmaW5pdGUgY29sbGlzaW9uICovCi0JCQljb2xsaWRlcyA9IHRydWU7Ci0JCX0KLQkJ ZWxzZQotCQl7Ci0JCQkvKgotCQkJICogSGVyZSB3ZSBoYXZlIGEgbGl0dGxlIGJpdCBvZiBhIGRp bGVtbWE6IGlmIGVycm5vIGlzIHNvbWV0aGluZwotCQkJICogb3RoZXIgdGhhbiBFTk9FTlQsIHNo b3VsZCB3ZSBkZWNsYXJlIGEgY29sbGlzaW9uIGFuZCBsb29wPyBJbgotCQkJICogcHJhY3RpY2Ug aXQgc2VlbXMgYmVzdCB0byBnbyBhaGVhZCByZWdhcmRsZXNzIG9mIHRoZSBlcnJuby4gIElmCi0J CQkgKiB0aGVyZSBpcyBhIGNvbGxpZGluZyBmaWxlIHdlIHdpbGwgZ2V0IGFuIHNtZ3IgZmFpbHVy ZSB3aGVuIHdlCi0JCQkgKiBhdHRlbXB0IHRvIGNyZWF0ZSB0aGUgbmV3IHJlbGF0aW9uIGZpbGUu Ci0JCQkgKi8KLQkJCWNvbGxpZGVzID0gZmFsc2U7Ci0JCX0KLQotCQlwZnJlZShycGF0aCk7CisJ CXNmaWxlID0gc21ncm9wZW4ocmxvY2F0b3IsIGJhY2tlbmQsIE1BSU5fRk9SS05VTSk7CisJCWNv bGxpZGVzID0gc21ncmV4aXN0cyhzZmlsZSk7CisJCXNtZ3JjbG9zZShzZmlsZSk7CiAJfSB3aGls ZSAoY29sbGlkZXMpOwogCi0JcmV0dXJuIHJsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyOworCXJl dHVybiBybG9jYXRvci5yZWxOdW1iZXI7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL2luZGV4LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggNDFi MTZjYjg5YmMuLmQyMTA0NWJjYjQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2lu ZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0zMDI5LDkgKzMwMjks OSBAQCBpbmRleF9idWlsZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJICogcmVsZmlsZW51bWJl ciB3b24ndCBjaGFuZ2UsIGFuZCBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgaGVyZS4KIAkgKi8K IAlpZiAoaW5kZXhSZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNU RU5DRV9VTkxPR0dFRCAmJgotCQkhc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IoaW5kZXhSZWxh dGlvbiksIElOSVRfRk9SS05VTSkpCisJCSFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihpbmRl eFJlbGF0aW9uLCBJTklUX0ZPUktOVU0pKSkKIAl7Ci0JCXNtZ3JjcmVhdGUoUmVsYXRpb25HZXRT bWdyKGluZGV4UmVsYXRpb24pLCBJTklUX0ZPUktOVU0sIGZhbHNlKTsKKwkJc21ncmNyZWF0ZShS ZWxhdGlvbkdldFNtZ3IoaW5kZXhSZWxhdGlvbiwgSU5JVF9GT1JLTlVNKSwgZmFsc2UpOwogCQlp bmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1idWlsZGVtcHR5KGluZGV4UmVsYXRpb24pOwogCX0K IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zdG9yYWdlLmMgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL3N0b3JhZ2UuYwppbmRleCBhZjE0OTFhYTFkMS4uMzgxNjYxMGM4N2MgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3RvcmFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvc3RvcmFnZS5jCkBAIC0xMTYsMTEgKzExNiwxMSBAQCBBZGRQZW5kaW5nU3luYyhjb25z dCBSZWxGaWxlTG9jYXRvciAqcmxvY2F0b3IpCiAgKiB0aGF0IGRvZXMgbm90IHdhbnQgdGhlIHN0 b3JhZ2UgdG8gYmUgZGVzdHJveWVkIGluIGNhc2Ugb2YgYW4gYWJvcnQgbWF5CiAgKiBwYXNzIHJl Z2lzdGVyX2RlbGV0ZSA9IGZhbHNlLgogICovCi1TTWdyUmVsYXRpb24KK1NNZ3JGaWxlSGFuZGxl CiBSZWxhdGlvbkNyZWF0ZVN0b3JhZ2UoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIGNoYXIgcmVs cGVyc2lzdGVuY2UsCiAJCQkJCSAgYm9vbCByZWdpc3Rlcl9kZWxldGUpCiB7Ci0JU01nclJlbGF0 aW9uIHNyZWw7CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAJQmFja2VuZElkCWJhY2tlbmQ7CiAJ Ym9vbAkJbmVlZHNfd2FsOwogCkBAIC0xNDUsMTEgKzE0NSwxMSBAQCBSZWxhdGlvbkNyZWF0ZVN0 b3JhZ2UoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsCiAJCQly ZXR1cm4gTlVMTDsJCS8qIHBsYWNhdGUgY29tcGlsZXIgKi8KIAl9CiAKLQlzcmVsID0gc21ncm9w ZW4ocmxvY2F0b3IsIGJhY2tlbmQpOwotCXNtZ3JjcmVhdGUoc3JlbCwgTUFJTl9GT1JLTlVNLCBm YWxzZSk7CisJc2ZpbGUgPSBzbWdyb3BlbihybG9jYXRvciwgYmFja2VuZCwgTUFJTl9GT1JLTlVN KTsKKwlzbWdyY3JlYXRlKHNmaWxlLCBmYWxzZSk7CiAKIAlpZiAobmVlZHNfd2FsKQotCQlsb2df c21ncmNyZWF0ZSgmc3JlbC0+c21ncl9ybG9jYXRvci5sb2NhdG9yLCBNQUlOX0ZPUktOVU0pOwor CQlsb2dfc21ncmNyZWF0ZSgmcmxvY2F0b3IsIE1BSU5fRk9SS05VTSk7CiAKIAkvKgogCSAqIEFk ZCB0aGUgcmVsYXRpb24gdG8gdGhlIGxpc3Qgb2Ygc3R1ZmYgdG8gZGVsZXRlIGF0IGFib3J0LCBp ZiB3ZSBhcmUKQEAgLTE3NSw3ICsxNzUsNyBAQCBSZWxhdGlvbkNyZWF0ZVN0b3JhZ2UoUmVsRmls ZUxvY2F0b3IgcmxvY2F0b3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsCiAJCUFkZFBlbmRpbmdTeW5j KCZybG9jYXRvcik7CiAJfQogCi0JcmV0dXJuIHNyZWw7CisJcmV0dXJuIHNmaWxlOwogfQogCiAv KgpAQCAtMjkyLDE2ICsyOTIsMTggQEAgUmVsYXRpb25UcnVuY2F0ZShSZWxhdGlvbiByZWwsIEJs b2NrTnVtYmVyIG5ibG9ja3MpCiAJRm9ya051bWJlcglmb3Jrc1tNQVhfRk9SS05VTV07CiAJQmxv Y2tOdW1iZXIgYmxvY2tzW01BWF9GT1JLTlVNXTsKIAlpbnQJCQluZm9ya3MgPSAwOwotCVNNZ3JS ZWxhdGlvbiByZWxuOwogCiAJLyoKIAkgKiBNYWtlIHN1cmUgc21ncl90YXJnYmxvY2sgZXRjIGFy ZW4ndCBwb2ludGluZyBzb21ld2hlcmUgcGFzdCBuZXcgZW5kLgogCSAqIChOb3RlOiBkb24ndCBy ZWx5IG9uIHRoaXMgcmVsbiBwb2ludGVyIGJlbG93IHRoaXMgbG9vcC4pCiAJICovCi0JcmVsbiA9 IFJlbGF0aW9uR2V0U21ncihyZWwpOwotCXJlbG4tPnNtZ3JfdGFyZ2Jsb2NrID0gSW52YWxpZEJs b2NrTnVtYmVyOwotCWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyArK2kpCi0JCXJl bG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbaV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJZm9yIChp bnQgaSA9IDA7IGkgPD0gTUFYX0ZPUktOVU07IGkrKykKKwl7CisJCVNNZ3JGaWxlSGFuZGxlIHNm aWxlID0gUmVsYXRpb25HZXRTbWdyKHJlbCwgaSk7CisKKwkJc2ZpbGUtPnNtZ3JfdGFyZ2Jsb2Nr ID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQlzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IElu dmFsaWRCbG9ja051bWJlcjsKKwl9CiAKIAkvKiBQcmVwYXJlIGZvciB0cnVuY2F0aW9uIG9mIE1B SU4gZm9yayBvZiB0aGUgcmVsYXRpb24gKi8KIAlmb3Jrc1tuZm9ya3NdID0gTUFJTl9GT1JLTlVN OwpAQCAtMzA5LDcgKzMxMSw3IEBAIFJlbGF0aW9uVHJ1bmNhdGUoUmVsYXRpb24gcmVsLCBCbG9j a051bWJlciBuYmxvY2tzKQogCW5mb3JrcysrOwogCiAJLyogUHJlcGFyZSBmb3IgdHJ1bmNhdGlv biBvZiB0aGUgRlNNIGlmIGl0IGV4aXN0cyAqLwotCWZzbSA9IHNtZ3JleGlzdHMoUmVsYXRpb25H ZXRTbWdyKHJlbCksIEZTTV9GT1JLTlVNKTsKKwlmc20gPSBzbWdyZXhpc3RzKFJlbGF0aW9uR2V0 U21ncihyZWwsIEZTTV9GT1JLTlVNKSk7CiAJaWYgKGZzbSkKIAl7CiAJCWJsb2Nrc1tuZm9ya3Nd ID0gRnJlZVNwYWNlTWFwUHJlcGFyZVRydW5jYXRlUmVsKHJlbCwgbmJsb2Nrcyk7CkBAIC0zMjIs NyArMzI0LDcgQEAgUmVsYXRpb25UcnVuY2F0ZShSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG5i bG9ja3MpCiAJfQogCiAJLyogUHJlcGFyZSBmb3IgdHJ1bmNhdGlvbiBvZiB0aGUgdmlzaWJpbGl0 eSBtYXAgdG9vIGlmIGl0IGV4aXN0cyAqLwotCXZtID0gc21ncmV4aXN0cyhSZWxhdGlvbkdldFNt Z3IocmVsKSwgVklTSUJJTElUWU1BUF9GT1JLTlVNKTsKKwl2bSA9IHNtZ3JleGlzdHMoUmVsYXRp b25HZXRTbWdyKHJlbCwgVklTSUJJTElUWU1BUF9GT1JLTlVNKSk7CiAJaWYgKHZtKQogCXsKIAkJ YmxvY2tzW25mb3Jrc10gPSB2aXNpYmlsaXR5bWFwX3ByZXBhcmVfdHJ1bmNhdGUocmVsLCBuYmxv Y2tzKTsKQEAgLTM5MCwxMSArMzkyLDEyIEBAIFJlbGF0aW9uVHJ1bmNhdGUoUmVsYXRpb24gcmVs LCBCbG9ja051bWJlciBuYmxvY2tzKQogCX0KIAogCS8qCi0JICogVGhpcyB3aWxsIGZpcnN0IHJl bW92ZSBhbnkgYnVmZmVycyBmcm9tIHRoZSBidWZmZXIgcG9vbCB0aGF0IHNob3VsZCBubworCSAq IEZpcnN0IHJlbW92ZSBhbnkgYnVmZmVycyBmcm9tIHRoZSBidWZmZXIgcG9vbCB0aGF0IHNob3Vs ZCBubwogCSAqIGxvbmdlciBleGlzdCBhZnRlciB0cnVuY2F0aW9uIGlzIGNvbXBsZXRlLCBhbmQg dGhlbiB0cnVuY2F0ZSB0aGUKIAkgKiBjb3JyZXNwb25kaW5nIGZpbGVzIG9uIGRpc2suCiAJICov Ci0Jc21ncnRydW5jYXRlKFJlbGF0aW9uR2V0U21ncihyZWwpLCBmb3JrcywgbmZvcmtzLCBibG9j a3MpOworCURyb3BSZWxhdGlvbkJ1ZmZlcnMocmVsLT5yZF9sb2NhdG9yLCByZWwtPnJkX2JhY2tl bmQsIGZvcmtzLCBuZm9ya3MsIGJsb2Nrcyk7CisJc21ncnRydW5jYXRlX211bHRpKHJlbC0+cmRf bG9jYXRvciwgcmVsLT5yZF9iYWNrZW5kLCBmb3JrcywgbmZvcmtzLCBibG9ja3MpOwogCiAJLyog V2UndmUgZG9uZSBhbGwgdGhlIGNyaXRpY2FsIHdvcmssIHNvIGNoZWNrcG9pbnRzIGFyZSBPSyBu b3cuICovCiAJTXlQcm9jLT5kZWxheUNoa3B0RmxhZ3MgJj0gfkRFTEFZX0NIS1BUX0NPTVBMRVRF OwpAQCAtNDI4LDcgKzQzMSw3IEBAIFJlbGF0aW9uUHJlVHJ1bmNhdGUoUmVsYXRpb24gcmVsKQog CQlyZXR1cm47CiAKIAlwZW5kaW5nID0gaGFzaF9zZWFyY2gocGVuZGluZ1N5bmNIYXNoLAotCQkJ CQkJICAmKFJlbGF0aW9uR2V0U21ncihyZWwpLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IpLAorCQkJ CQkJICAmcmVsLT5yZF9sb2NhdG9yLAogCQkJCQkJICBIQVNIX0ZJTkQsIE5VTEwpOwogCWlmIChw ZW5kaW5nKQogCQlwZW5kaW5nLT5pc190cnVuY2F0ZWQgPSB0cnVlOwpAQCAtNDQ0LDEyICs0NDcs MTIgQEAgUmVsYXRpb25QcmVUcnVuY2F0ZShSZWxhdGlvbiByZWwpCiAgKiBBbHNvIG5vdGUgdGhh dCB0aGlzIGlzIGZyZXF1ZW50bHkgY2FsbGVkIHZpYSBsb2N1dGlvbnMgc3VjaCBhcwogICoJCVJl bGF0aW9uQ29weVN0b3JhZ2UoUmVsYXRpb25HZXRTbWdyKHJlbCksIC4uLik7CiAgKiBUaGF0J3Mg c2FmZSBvbmx5IGJlY2F1c2Ugd2UgcGVyZm9ybSBvbmx5IHNtZ3IgYW5kIFdBTCBvcGVyYXRpb25z IGhlcmUuCi0gKiBJZiB3ZSBpbnZva2VkIGFueXRoaW5nIGVsc2UsIGEgcmVsY2FjaGUgZmx1c2gg Y291bGQgY2F1c2Ugb3VyIFNNZ3JSZWxhdGlvbgorICogSWYgd2UgaW52b2tlZCBhbnl0aGluZyBl bHNlLCBhIHJlbGNhY2hlIGZsdXNoIGNvdWxkIGNhdXNlIG91ciBTTWdyRmlsZUhhbmRsZQogICog YXJndW1lbnQgdG8gYmVjb21lIGEgZGFuZ2xpbmcgcG9pbnRlci4KICAqLwogdm9pZAotUmVsYXRp b25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdyUmVsYXRpb24gZHN0LAotCQkJCQlG b3JrTnVtYmVyIGZvcmtOdW0sIGNoYXIgcmVscGVyc2lzdGVuY2UpCitSZWxhdGlvbkNvcHlTdG9y YWdlKFNNZ3JGaWxlSGFuZGxlIHNyYywgU01nckZpbGVIYW5kbGUgZHN0LAorCQkJCQljaGFyIHJl bHBlcnNpc3RlbmNlKQogewogCVBHQWxpZ25lZEJsb2NrIGJ1ZjsKIAlQYWdlCQlwYWdlOwpAQCAt NDY2LDcgKzQ2OSw3IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0aW9uIHNyYywgU01n clJlbGF0aW9uIGRzdCwKIAkgKiBpdCBuZWVkcyB0byBiZSBzeW5jZWQgdG8gZGlzay4KIAkgKi8K IAljb3B5aW5nX2luaXRmb3JrID0gcmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5M T0dHRUQgJiYKLQkJZm9ya051bSA9PSBJTklUX0ZPUktOVU07CisJCXNyYy0+c21ncl9sb2NhdG9y LmZvcmtudW0gPT0gSU5JVF9GT1JLTlVNOwogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIGxvZyB0aGUg Y29waWVkIGRhdGEgaW4gV0FMIGlmZiBXQUwgYXJjaGl2aW5nL3N0cmVhbWluZyBpcwpAQCAtNDc3 LDE0ICs0ODAsMTQgQEAgUmVsYXRpb25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdy UmVsYXRpb24gZHN0LAogCXVzZV93YWwgPSBYTG9nSXNOZWVkZWQoKSAmJgogCQkocmVscGVyc2lz dGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UIHx8IGNvcHlpbmdfaW5pdGZvcmspOwog Ci0JbmJsb2NrcyA9IHNtZ3JuYmxvY2tzKHNyYywgZm9ya051bSk7CisJbmJsb2NrcyA9IHNtZ3Ju YmxvY2tzKHNyYyk7CiAKIAlmb3IgKGJsa25vID0gMDsgYmxrbm8gPCBuYmxvY2tzOyBibGtubysr KQogCXsKIAkJLyogSWYgd2UgZ290IGEgY2FuY2VsIHNpZ25hbCBkdXJpbmcgdGhlIGNvcHkgb2Yg dGhlIGRhdGEsIHF1aXQgKi8KIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQlzbWdycmVh ZChzcmMsIGZvcmtOdW0sIGJsa25vLCBidWYuZGF0YSk7CisJCXNtZ3JyZWFkKHNyYywgYmxrbm8s IGJ1Zi5kYXRhKTsKIAogCQlpZiAoIVBhZ2VJc1ZlcmlmaWVkRXh0ZW5kZWQocGFnZSwgYmxrbm8s CiAJCQkJCQkJCQlQSVZfTE9HX1dBUk5JTkcgfCBQSVZfUkVQT1JUX1NUQVQpKQpAQCAtNDk2LDkg KzQ5OSw3IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0aW9uIHNyYywgU01nclJlbGF0 aW9uIGRzdCwKIAkJCSAqIChlcnJjb250ZXh0IGNhbGxiYWNrcyBzaG91bGRuJ3QgYmUgcmlza2lu ZyBhbnkgc3VjaCB0aGluZywgYnV0CiAJCQkgKiBwZW9wbGUgaGF2ZSBiZWVuIGtub3duIHRvIGZv cmdldCB0aGF0IHJ1bGUuKQogCQkJICovCi0JCQljaGFyCSAgICpyZWxwYXRoID0gcmVscGF0aGJh Y2tlbmQoc3JjLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsCi0JCQkJCQkJCQkJCQkgc3JjLT5zbWdy X3Jsb2NhdG9yLmJhY2tlbmQsCi0JCQkJCQkJCQkJCQkgZm9ya051bSk7CisJCQljaGFyCSAgICpy ZWxwYXRoID0gc21ncmZpbGVwYXRoKHNyYy0+c21ncl9sb2NhdG9yKTsKIAogCQkJZXJlcG9ydChF UlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBX0NPUlJVUFRFRCksCkBAIC01MTIsNyAr NTEzLDcgQEAgUmVsYXRpb25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdyUmVsYXRp b24gZHN0LAogCQkgKiBzcGFjZS4KIAkJICovCiAJCWlmICh1c2Vfd2FsKQotCQkJbG9nX25ld3Bh Z2UoJmRzdC0+c21ncl9ybG9jYXRvci5sb2NhdG9yLCBmb3JrTnVtLCBibGtubywgcGFnZSwgZmFs c2UpOworCQkJbG9nX25ld3BhZ2UoJmRzdC0+c21ncl9sb2NhdG9yLmxvY2F0b3IsIGRzdC0+c21n cl9sb2NhdG9yLmZvcmtudW0sIGJsa25vLCBwYWdlLCBmYWxzZSk7CiAKIAkJUGFnZVNldENoZWNr c3VtSW5wbGFjZShwYWdlLCBibGtubyk7CiAKQEAgLTUyMSw3ICs1MjIsNyBAQCBSZWxhdGlvbkNv cHlTdG9yYWdlKFNNZ3JSZWxhdGlvbiBzcmMsIFNNZ3JSZWxhdGlvbiBkc3QsCiAJCSAqIG5lZWQg Zm9yIHNtZ3IgdG8gc2NoZWR1bGUgYW4gZnN5bmMgZm9yIHRoaXMgd3JpdGU7IHdlJ2xsIGRvIGl0 CiAJCSAqIG91cnNlbHZlcyBiZWxvdy4KIAkJICovCi0JCXNtZ3JleHRlbmQoZHN0LCBmb3JrTnVt LCBibGtubywgYnVmLmRhdGEsIHRydWUpOworCQlzbWdyZXh0ZW5kKGRzdCwgYmxrbm8sIGJ1Zi5k YXRhLCB0cnVlKTsKIAl9CiAKIAkvKgpAQCAtNTM0LDcgKzUzNSw3IEBAIFJlbGF0aW9uQ29weVN0 b3JhZ2UoU01nclJlbGF0aW9uIHNyYywgU01nclJlbGF0aW9uIGRzdCwKIAkgKiB0aGV5IG1pZ2h0 IHN0aWxsIG5vdCBiZSBvbiBkaXNrIHdoZW4gdGhlIGNyYXNoIG9jY3Vycy4KIAkgKi8KIAlpZiAo dXNlX3dhbCB8fCBjb3B5aW5nX2luaXRmb3JrKQotCQlzbWdyaW1tZWRzeW5jKGRzdCwgZm9ya051 bSk7CisJCXNtZ3JpbW1lZHN5bmMoZHN0KTsKIH0KIAogLyoKQEAgLTY1Myw5ICs2NTQsOSBAQCBz bWdyRG9QZW5kaW5nRGVsZXRlcyhib29sIGlzQ29tbWl0KQogCVBlbmRpbmdSZWxEZWxldGUgKnBl bmRpbmc7CiAJUGVuZGluZ1JlbERlbGV0ZSAqcHJldjsKIAlQZW5kaW5nUmVsRGVsZXRlICpuZXh0 OwotCWludAkJCW5yZWxzID0gMCwKLQkJCQltYXhyZWxzID0gMDsKLQlTTWdyUmVsYXRpb24gKnNy ZWxzID0gTlVMTDsKKwlpbnQJCQlubG9jYXRvcnMgPSAwLAorCQkJCW1heGxvY2F0b3JzID0gMDsK KwlSZWxGaWxlTG9jYXRvckJhY2tlbmQgKmxvY2F0b3JzID0gTlVMTDsKIAogCXByZXYgPSBOVUxM OwogCWZvciAocGVuZGluZyA9IHBlbmRpbmdEZWxldGVzOyBwZW5kaW5nICE9IE5VTEw7IHBlbmRp bmcgPSBuZXh0KQpAQCAtNjc2LDIzICs2NzcsMjEgQEAgc21nckRvUGVuZGluZ0RlbGV0ZXMoYm9v bCBpc0NvbW1pdCkKIAkJCS8qIGRvIGRlbGV0aW9uIGlmIGNhbGxlZCBmb3IgKi8KIAkJCWlmIChw ZW5kaW5nLT5hdENvbW1pdCA9PSBpc0NvbW1pdCkKIAkJCXsKLQkJCQlTTWdyUmVsYXRpb24gc3Jl bDsKLQotCQkJCXNyZWwgPSBzbWdyb3BlbihwZW5kaW5nLT5ybG9jYXRvciwgcGVuZGluZy0+YmFj a2VuZCk7CisJCQkJUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yID0geyBwZW5kaW5nLT5y bG9jYXRvciwgcGVuZGluZy0+YmFja2VuZCB9OwogCiAJCQkJLyogYWxsb2NhdGUgdGhlIGluaXRp YWwgYXJyYXksIG9yIGV4dGVuZCBpdCwgaWYgbmVlZGVkICovCi0JCQkJaWYgKG1heHJlbHMgPT0g MCkKKwkJCQlpZiAobWF4bG9jYXRvcnMgPT0gMCkKIAkJCQl7Ci0JCQkJCW1heHJlbHMgPSA4Owot CQkJCQlzcmVscyA9IHBhbGxvYyhzaXplb2YoU01nclJlbGF0aW9uKSAqIG1heHJlbHMpOworCQkJ CQltYXhsb2NhdG9ycyA9IDg7CisJCQkJCWxvY2F0b3JzID0gcGFsbG9jKHNpemVvZihSZWxGaWxl TG9jYXRvckJhY2tlbmQpICogbWF4bG9jYXRvcnMpOwogCQkJCX0KLQkJCQllbHNlIGlmIChtYXhy ZWxzIDw9IG5yZWxzKQorCQkJCWVsc2UgaWYgKG1heGxvY2F0b3JzIDw9IG5sb2NhdG9ycykKIAkJ CQl7Ci0JCQkJCW1heHJlbHMgKj0gMjsKLQkJCQkJc3JlbHMgPSByZXBhbGxvYyhzcmVscywgc2l6 ZW9mKFNNZ3JSZWxhdGlvbikgKiBtYXhyZWxzKTsKKwkJCQkJbWF4bG9jYXRvcnMgKj0gMjsKKwkJ CQkJbG9jYXRvcnMgPSByZXBhbGxvYyhsb2NhdG9ycywgc2l6ZW9mKFJlbEZpbGVMb2NhdG9yQmFj a2VuZCkgKiBtYXhsb2NhdG9ycyk7CiAJCQkJfQogCi0JCQkJc3JlbHNbbnJlbHMrK10gPSBzcmVs OworCQkJCWxvY2F0b3JzW25sb2NhdG9ycysrXSA9IHJsb2NhdG9yOwogCQkJfQogCQkJLyogbXVz dCBleHBsaWNpdGx5IGZyZWUgdGhlIGxpc3QgZW50cnkgKi8KIAkJCXBmcmVlKHBlbmRpbmcpOwpA QCAtNzAwLDE1ICs2OTksNTggQEAgc21nckRvUGVuZGluZ0RlbGV0ZXMoYm9vbCBpc0NvbW1pdCkK IAkJfQogCX0KIAotCWlmIChucmVscyA+IDApCisJaWYgKG5sb2NhdG9ycyA+IDApCiAJewotCQlz bWdyZG91bmxpbmthbGwoc3JlbHMsIG5yZWxzLCBmYWxzZSk7CisJCUZvcmtOdW1iZXIgZm9ya3Nb TUFYX0ZPUktOVU0gKyAxXTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8PSBNQVhfRk9SS05VTTsg aSsrKQorCQkJZm9ya3NbaV0gPSBpOworCisJCS8qCisJCSAqIEdldCByaWQgb2YgYW55IHJlbWFp bmluZyBidWZmZXJzIGZvciB0aGUgcmVsYXRpb25zLiAgYnVmbWdyIHdpbGwganVzdAorCQkgKiBk cm9wIHRoZW0gd2l0aG91dCBib3RoZXJpbmcgdG8gd3JpdGUgdGhlIGNvbnRlbnRzLgorCQkgKi8K KwkJRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMobG9jYXRvcnMsIG5sb2NhdG9ycyk7CiAKLQkJZm9y IChpbnQgaSA9IDA7IGkgPCBucmVsczsgaSsrKQotCQkJc21ncmNsb3NlKHNyZWxzW2ldKTsKKwkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBubG9jYXRvcnM7IGkrKykKKwkJCXNtZ3J1bmxpbmtfbXVsdGko bG9jYXRvcnNbaV0ubG9jYXRvciwgbG9jYXRvcnNbaV0uYmFja2VuZCwgZm9ya3MsIE1BWF9GT1JL TlVNICsgMSwgZmFsc2UpOworCQlwZnJlZShsb2NhdG9ycyk7CisJfQorfQorCisvKgorICogRHJv cFJlbGF0aW9uRmlsZXMgLS0gZHJvcCBmaWxlcyBvZiBhbGwgZ2l2ZW4gcmVsYXRpb25zCisgKi8K K3ZvaWQKK0Ryb3BSZWxhdGlvbkZpbGVzKFJlbEZpbGVMb2NhdG9yICpkZWxyZWxzLCBpbnQgbmRl bHJlbHMsIGJvb2wgaXNSZWRvKQoreworCVJlbEZpbGVMb2NhdG9yQmFja2VuZCAqbG9jYXRvcnM7 CisJaW50CQkJaTsKKwlGb3JrTnVtYmVyCWFsbF9mb3Jrc1tNQVhfRk9SS05VTSArIDFdOwogCi0J CXBmcmVlKHNyZWxzKTsKKwlsb2NhdG9ycyA9IHBhbGxvYyhzaXplb2YoUmVsRmlsZUxvY2F0b3JC YWNrZW5kKSAqIG5kZWxyZWxzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmRlbHJlbHM7IGkrKykKKwl7 CisJCWlmIChpc1JlZG8pCisJCXsKKwkJCWZvciAoaW50IGZvcmsgPSAwOyBmb3JrIDw9IE1BWF9G T1JLTlVNOyBmb3JrKyspCisJCQkJWExvZ0Ryb3BSZWxhdGlvbihkZWxyZWxzW2ldLCBmb3JrKTsK KwkJfQorCQlsb2NhdG9yc1tpXS5sb2NhdG9yID0gZGVscmVsc1tpXTsKKwkJbG9jYXRvcnNbaV0u YmFja2VuZCA9IEludmFsaWRCYWNrZW5kSWQ7CiAJfQorCisJLyoKKwkgKiBHZXQgcmlkIG9mIGFu eSByZW1haW5pbmcgYnVmZmVycyBmb3IgdGhlIHJlbGF0aW9ucy4gIGJ1Zm1nciB3aWxsIGp1c3QK KwkgKiBkcm9wIHRoZW0gd2l0aG91dCBib3RoZXJpbmcgdG8gd3JpdGUgdGhlIGNvbnRlbnRzLgor CSAqLworCURyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKGxvY2F0b3JzLCBuZGVscmVscyk7CisKKwlm b3IgKGludCBmb3JrID0gMDsgZm9yayA8PSBNQVhfRk9SS05VTTsgZm9yaysrKQorCQlhbGxfZm9y a3NbZm9ya10gPSBmb3JrOworCisJZm9yIChpID0gMDsgaSA8IG5kZWxyZWxzOyBpKyspCisJCXNt Z3J1bmxpbmtfbXVsdGkobG9jYXRvcnNbaV0ubG9jYXRvciwgbG9jYXRvcnNbaV0uYmFja2VuZCwg YWxsX2ZvcmtzLCBNQVhfRk9SS05VTSArIDEsIHRydWUpOwogfQogCiAvKgpAQCAtNzE4LDkgKzc2 MCw5IEBAIHZvaWQKIHNtZ3JEb1BlbmRpbmdTeW5jcyhib29sIGlzQ29tbWl0LCBib29sIGlzUGFy YWxsZWxXb3JrZXIpCiB7CiAJUGVuZGluZ1JlbERlbGV0ZSAqcGVuZGluZzsKLQlpbnQJCQlucmVs cyA9IDAsCi0JCQkJbWF4cmVscyA9IDA7Ci0JU01nclJlbGF0aW9uICpzcmVscyA9IE5VTEw7CisJ aW50CQkJbmxvY2F0b3JzID0gMCwKKwkJCQltYXhsb2NhdG9ycyA9IDA7CisJUmVsRmlsZUxvY2F0 b3IgKmxvY2F0b3JzID0gTlVMTDsKIAlIQVNIX1NFUV9TVEFUVVMgc2NhbjsKIAlQZW5kaW5nUmVs U3luYyAqcGVuZGluZ3N5bmM7CiAKQEAgLTc1Nyw5ICs3OTksNiBAQCBzbWdyRG9QZW5kaW5nU3lu Y3MoYm9vbCBpc0NvbW1pdCwgYm9vbCBpc1BhcmFsbGVsV29ya2VyKQogCQlGb3JrTnVtYmVyCWZv cms7CiAJCUJsb2NrTnVtYmVyIG5ibG9ja3NbTUFYX0ZPUktOVU0gKyAxXTsKIAkJQmxvY2tOdW1i ZXIgdG90YWxfYmxvY2tzID0gMDsKLQkJU01nclJlbGF0aW9uIHNyZWw7Ci0KLQkJc3JlbCA9IHNt Z3JvcGVuKHBlbmRpbmdzeW5jLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7CiAKIAkJLyoK IAkJICogV2UgZW1pdCBuZXdwYWdlIFdBTCByZWNvcmRzIGZvciBzbWFsbGVyIHJlbGF0aW9ucy4K QEAgLTc3Myw5ICs4MTIsMTIgQEAgc21nckRvUGVuZGluZ1N5bmNzKGJvb2wgaXNDb21taXQsIGJv b2wgaXNQYXJhbGxlbFdvcmtlcikKIAkJewogCQkJZm9yIChmb3JrID0gMDsgZm9yayA8PSBNQVhf Rk9SS05VTTsgZm9yaysrKQogCQkJewotCQkJCWlmIChzbWdyZXhpc3RzKHNyZWwsIGZvcmspKQor CQkJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOworCisJCQkJc2ZpbGUgPSBzbWdyb3BlbihwZW5kaW5n c3luYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmspOworCQkJCWlmIChzbWdyZXhp c3RzKHNmaWxlKSkKIAkJCQl7Ci0JCQkJCUJsb2NrTnVtYmVyIG4gPSBzbWdybmJsb2NrcyhzcmVs LCBmb3JrKTsKKwkJCQkJQmxvY2tOdW1iZXIgbiA9IHNtZ3JuYmxvY2tzKHNmaWxlKTsKIAogCQkJ CQkvKiB3ZSBzaG91bGRuJ3QgY29tZSBoZXJlIGZvciB1bmxvZ2dlZCByZWxhdGlvbnMgKi8KIAkJ CQkJQXNzZXJ0KGZvcmsgIT0gSU5JVF9GT1JLTlVNKTsKQEAgLTgwMywxOCArODQ1LDE5IEBAIHNt Z3JEb1BlbmRpbmdTeW5jcyhib29sIGlzQ29tbWl0LCBib29sIGlzUGFyYWxsZWxXb3JrZXIpCiAJ CQl0b3RhbF9ibG9ja3MgKiBCTENLU1ogLyAxMDI0ID49IHdhbF9za2lwX3RocmVzaG9sZCkKIAkJ ewogCQkJLyogYWxsb2NhdGUgdGhlIGluaXRpYWwgYXJyYXksIG9yIGV4dGVuZCBpdCwgaWYgbmVl ZGVkICovCi0JCQlpZiAobWF4cmVscyA9PSAwKQorCQkJaWYgKG1heGxvY2F0b3JzID09IDApCiAJ CQl7Ci0JCQkJbWF4cmVscyA9IDg7Ci0JCQkJc3JlbHMgPSBwYWxsb2Moc2l6ZW9mKFNNZ3JSZWxh dGlvbikgKiBtYXhyZWxzKTsKKwkJCQltYXhsb2NhdG9ycyA9IDg7CisJCQkJbG9jYXRvcnMgPSBw YWxsb2Moc2l6ZW9mKFJlbEZpbGVMb2NhdG9yQmFja2VuZCkgKiBtYXhsb2NhdG9ycyk7CiAJCQl9 Ci0JCQllbHNlIGlmIChtYXhyZWxzIDw9IG5yZWxzKQorCQkJZWxzZSBpZiAobWF4bG9jYXRvcnMg PD0gbmxvY2F0b3JzKQogCQkJewotCQkJCW1heHJlbHMgKj0gMjsKLQkJCQlzcmVscyA9IHJlcGFs bG9jKHNyZWxzLCBzaXplb2YoU01nclJlbGF0aW9uKSAqIG1heHJlbHMpOworCQkJCW1heGxvY2F0 b3JzICo9IDI7CisJCQkJbG9jYXRvcnMgPSByZXBhbGxvYyhsb2NhdG9ycywgc2l6ZW9mKFJlbEZp bGVMb2NhdG9yQmFja2VuZCkgKiBtYXhsb2NhdG9ycyk7CiAJCQl9CiAKLQkJCXNyZWxzW25yZWxz KytdID0gc3JlbDsKKwkJCWxvY2F0b3JzW25sb2NhdG9yc10gPSBwZW5kaW5nc3luYy0+cmxvY2F0 b3I7CisJCQlubG9jYXRvcnMrKzsKIAkJfQogCQllbHNlCiAJCXsKQEAgLTgzMyw3ICs4NzYsNyBA QCBzbWdyRG9QZW5kaW5nU3luY3MoYm9vbCBpc0NvbW1pdCwgYm9vbCBpc1BhcmFsbGVsV29ya2Vy KQogCQkJCSAqIHBhZ2UgaW5jbHVkaW5nIGFueSB1bnVzZWQgc3BhY2UuICBSZWFkQnVmZmVyRXh0 ZW5kZWQoKQogCQkJCSAqIGNvdW50cyBzb21lIHBnc3RhdCBldmVudHM7IHVuZm9ydHVuYXRlbHks IHdlIGRpc2NhcmQgdGhlbS4KIAkJCQkgKi8KLQkJCQlyZWwgPSBDcmVhdGVGYWtlUmVsY2FjaGVF bnRyeShzcmVsLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IpOworCQkJCXJlbCA9IENyZWF0ZUZha2VS ZWxjYWNoZUVudHJ5KHBlbmRpbmdzeW5jLT5ybG9jYXRvcik7CiAJCQkJbG9nX25ld3BhZ2VfcmFu Z2UocmVsLCBmb3JrLCAwLCBuLCBmYWxzZSk7CiAJCQkJRnJlZUZha2VSZWxjYWNoZUVudHJ5KHJl bCk7CiAJCQl9CkBAIC04NDIsMTEgKzg4NSwyMCBAQCBzbWdyRG9QZW5kaW5nU3luY3MoYm9vbCBp c0NvbW1pdCwgYm9vbCBpc1BhcmFsbGVsV29ya2VyKQogCiAJcGVuZGluZ1N5bmNIYXNoID0gTlVM TDsKIAotCWlmIChucmVscyA+IDApCisJRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKGxvY2F0b3Jz LCBubG9jYXRvcnMpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBubG9jYXRvcnM7IGkrKykKIAl7 Ci0JCXNtZ3Jkb3N5bmNhbGwoc3JlbHMsIG5yZWxzKTsKLQkJcGZyZWUoc3JlbHMpOworCQlmb3Ig KGludCBmb3JrID0gMDsgZm9yayA8PSBNQVhfRk9SS05VTTsgZm9yaysrKQorCQl7CisJCQlTTWdy RmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVuKGxvY2F0b3JzW2ldLCBJbnZhbGlkQmFja2VuZElk LCBmb3JrKTsKKworCQkJaWYgKHNtZ3JleGlzdHMoc2ZpbGUpKQorCQkJCXNtZ3JpbW1lZHN5bmMo c2ZpbGUpOworCQl9CiAJfQorCWlmIChsb2NhdG9ycyAhPSBOVUxMKQorCQlwZnJlZShsb2NhdG9y cyk7CiB9CiAKIC8qCkBAIC05NjYsMjIgKzEwMTgsMjIgQEAgc21ncl9yZWRvKFhMb2dSZWFkZXJT dGF0ZSAqcmVjb3JkKQogCWlmIChpbmZvID09IFhMT0dfU01HUl9DUkVBVEUpCiAJewogCQl4bF9z bWdyX2NyZWF0ZSAqeGxyZWMgPSAoeGxfc21ncl9jcmVhdGUgKikgWExvZ1JlY0dldERhdGEocmVj b3JkKTsKLQkJU01nclJlbGF0aW9uIHJlbG47CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCi0J CXJlbG4gPSBzbWdyb3Blbih4bHJlYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOwotCQlz bWdyY3JlYXRlKHJlbG4sIHhscmVjLT5mb3JrTnVtLCB0cnVlKTsKKwkJc2ZpbGUgPSBzbWdyb3Bl bih4bHJlYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIHhscmVjLT5mb3JrTnVtKTsKKwkJ c21ncmNyZWF0ZShzZmlsZSwgdHJ1ZSk7CiAJfQogCWVsc2UgaWYgKGluZm8gPT0gWExPR19TTUdS X1RSVU5DQVRFKQogCXsKIAkJeGxfc21ncl90cnVuY2F0ZSAqeGxyZWMgPSAoeGxfc21ncl90cnVu Y2F0ZSAqKSBYTG9nUmVjR2V0RGF0YShyZWNvcmQpOwotCQlTTWdyUmVsYXRpb24gcmVsbjsKKwkJ U01nckZpbGVIYW5kbGUgc2ZpbGU7CiAJCVJlbGF0aW9uCXJlbDsKIAkJRm9ya051bWJlcglmb3Jr c1tNQVhfRk9SS05VTV07CiAJCUJsb2NrTnVtYmVyIGJsb2Nrc1tNQVhfRk9SS05VTV07CiAJCWlu dAkJCW5mb3JrcyA9IDA7CiAJCWJvb2wJCW5lZWRfZnNtX3ZhY3V1bSA9IGZhbHNlOwogCi0JCXJl bG4gPSBzbWdyb3Blbih4bHJlYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOworCQlzZmls ZSA9IHNtZ3JvcGVuKHhscmVjLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgTUFJTl9GT1JL TlVNKTsKIAogCQkvKgogCQkgKiBGb3JjaWJseSBjcmVhdGUgcmVsYXRpb24gaWYgaXQgZG9lc24n dCBleGlzdCAod2hpY2ggc3VnZ2VzdHMgdGhhdApAQCAtOTg5LDcgKzEwNDEsNyBAQCBzbWdyX3Jl ZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCSAqIFhMb2dSZWFkQnVmZmVyRm9yUmVkbywg d2UgcHJlZmVyIHRvIHJlY3JlYXRlIHRoZSByZWwgYW5kIHJlcGxheSB0aGUKIAkJICogbG9nIGFz IGJlc3Qgd2UgY2FuIHVudGlsIHRoZSBkcm9wIGlzIHNlZW4uCiAJCSAqLwotCQlzbWdyY3JlYXRl KHJlbG4sIE1BSU5fRk9SS05VTSwgdHJ1ZSk7CisJCXNtZ3JjcmVhdGUoc2ZpbGUsIHRydWUpOwog CiAJCS8qCiAJCSAqIEJlZm9yZSB3ZSBwZXJmb3JtIHRoZSB0cnVuY2F0aW9uLCB1cGRhdGUgbWlu aW11bSByZWNvdmVyeSBwb2ludCB0bwpAQCAtMTAyMiw4ICsxMDc0LDEwIEBAIHNtZ3JfcmVkbyhY TG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJLyogUHJlcGFyZSBmb3IgdHJ1bmNhdGlvbiBvZiBG U00gYW5kIFZNIHRvbyAqLwogCQlyZWwgPSBDcmVhdGVGYWtlUmVsY2FjaGVFbnRyeSh4bHJlYy0+ cmxvY2F0b3IpOwogCisJCURyb3BSZWxhdGlvbkJ1ZmZlcnMoeGxyZWMtPnJsb2NhdG9yLCBJbnZh bGlkQmFja2VuZElkLCBmb3JrcywgbmZvcmtzLCBibG9ja3MpOworCiAJCWlmICgoeGxyZWMtPmZs YWdzICYgU01HUl9UUlVOQ0FURV9GU00pICE9IDAgJiYKLQkJCXNtZ3JleGlzdHMocmVsbiwgRlNN X0ZPUktOVU0pKQorCQkJc21ncmV4aXN0cyhzbWdyb3Blbih4bHJlYy0+cmxvY2F0b3IsIEludmFs aWRCYWNrZW5kSWQsIEZTTV9GT1JLTlVNKSkpCiAJCXsKIAkJCWJsb2Nrc1tuZm9ya3NdID0gRnJl ZVNwYWNlTWFwUHJlcGFyZVRydW5jYXRlUmVsKHJlbCwgeGxyZWMtPmJsa25vKTsKIAkJCWlmIChC bG9ja051bWJlcklzVmFsaWQoYmxvY2tzW25mb3Jrc10pKQpAQCAtMTAzNCw3ICsxMDg4LDcgQEAg c21ncl9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkJfQogCQl9CiAJCWlmICgoeGxy ZWMtPmZsYWdzICYgU01HUl9UUlVOQ0FURV9WTSkgIT0gMCAmJgotCQkJc21ncmV4aXN0cyhyZWxu LCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pKQorCQkJc21ncmV4aXN0cyhzbWdyb3Blbih4bHJlYy0+ cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSkpKQogCQl7 CiAJCQlibG9ja3NbbmZvcmtzXSA9IHZpc2liaWxpdHltYXBfcHJlcGFyZV90cnVuY2F0ZShyZWws IHhscmVjLT5ibGtubyk7CiAJCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsb2Nrc1tuZm9ya3Nd KSkKQEAgLTEwNDYsNyArMTEwMCwxMCBAQCBzbWdyX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNv cmQpCiAKIAkJLyogRG8gdGhlIHJlYWwgd29yayB0byB0cnVuY2F0ZSByZWxhdGlvbiBmb3JrcyAq LwogCQlpZiAobmZvcmtzID4gMCkKLQkJCXNtZ3J0cnVuY2F0ZShyZWxuLCBmb3JrcywgbmZvcmtz LCBibG9ja3MpOworCQl7CisJCQlEcm9wUmVsYXRpb25CdWZmZXJzKHhscmVjLT5ybG9jYXRvciwg SW52YWxpZEJhY2tlbmRJZCwgZm9ya3MsIG5mb3JrcywgYmxvY2tzKTsKKwkJCXNtZ3J0cnVuY2F0 ZV9tdWx0aSh4bHJlYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtzLCBuZm9ya3Ms IGJsb2Nrcyk7CisJCX0KIAogCQkvKgogCQkgKiBVcGRhdGUgdXBwZXItbGV2ZWwgRlNNIHBhZ2Vz IHRvIGFjY291bnQgZm9yIHRoZSB0cnVuY2F0aW9uLiBUaGlzIGlzCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9hc3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwpp bmRleCBlZjkwOWNmNGUwOC4uNTIzYTM3ODc1MmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2FzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwpAQCAtMTQx LDYgKzE0MSw3IEBACiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNsdWRlICJsaWJwcS9w cWZvcm1hdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVm bWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3Iu aCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKQEAgLTE2Myw3ICsxNjQsNyBAQAogICogdGhh biB0aGF0LCBzbyBjaGFuZ2VzIGluIHRoYXQgZGF0YSBzdHJ1Y3R1cmUgd29uJ3QgYWZmZWN0IHVz ZXItdmlzaWJsZQogICogcmVzdHJpY3Rpb25zLgogICovCi0jZGVmaW5lIE5PVElGWV9QQVlMT0FE X01BWF9MRU5HVEgJKEJMQ0tTWiAtIE5BTUVEQVRBTEVOIC0gMTI4KQorI2RlZmluZSBOT1RJRllf UEFZTE9BRF9NQVhfTEVOR1RICShCTENLU1ogLSBOQU1FREFUQUxFTiAtIFNpemVPZlBhZ2VIZWFk ZXJEYXRhIC0gMTI4KQogCiAvKgogICogU3RydWN0IHJlcHJlc2VudGluZyBhbiBlbnRyeSBpbiB0 aGUgZ2xvYmFsIG5vdGlmeSBxdWV1ZQpAQCAtMjEzLDcgKzIxNCw3IEBAIHR5cGVkZWYgc3RydWN0 IFF1ZXVlUG9zaXRpb24KIAkoKHgpLnBhZ2UgPT0gKHkpLnBhZ2UgJiYgKHgpLm9mZnNldCA9PSAo eSkub2Zmc2V0KQogCiAjZGVmaW5lIFFVRVVFX1BPU19JU19aRVJPKHgpIFwKLQkoKHgpLnBhZ2Ug PT0gMCAmJiAoeCkub2Zmc2V0ID09IDApCisJKCh4KS5wYWdlID09IDAgJiYgKHgpLm9mZnNldCA9 PSBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0YSkpCiAKIC8qIGNob29zZSBsb2dpY2FsbHkg c21hbGxlciBRdWV1ZVBvc2l0aW9uICovCiAjZGVmaW5lIFFVRVVFX1BPU19NSU4oeCx5KSBcCkBA IC0zMDUsMTIgKzMwNiw2IEBAIHN0YXRpYyBBc3luY1F1ZXVlQ29udHJvbCAqYXN5bmNRdWV1ZUNv bnRyb2w7CiAjZGVmaW5lIFFVRVVFX05FWFRfTElTVEVORVIoaSkJCShhc3luY1F1ZXVlQ29udHJv bC0+YmFja2VuZFtpXS5uZXh0TGlzdGVuZXIpCiAjZGVmaW5lIFFVRVVFX0JBQ0tFTkRfUE9TKGkp CQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ucG9zKQogCi0vKgotICogVGhlIFNMUlUg YnVmZmVyIGFyZWEgdGhyb3VnaCB3aGljaCB3ZSBhY2Nlc3MgdGhlIG5vdGlmaWNhdGlvbiBxdWV1 ZQotICovCi1zdGF0aWMgU2xydUN0bERhdGEgTm90aWZ5Q3RsRGF0YTsKLQotI2RlZmluZSBOb3Rp ZnlDdGwJCQkJCSgmTm90aWZ5Q3RsRGF0YSkKICNkZWZpbmUgUVVFVUVfUEFHRVNJWkUJCQkJQkxD S1NaCiAjZGVmaW5lIFFVRVVFX0ZVTExfV0FSTl9JTlRFUlZBTAk1MDAwCS8qIHdhcm4gYXQgbW9z dCBvbmNlIGV2ZXJ5IDVzICovCiAKQEAgLTUyMSw4ICs1MTYsNiBAQCBBc3luY1NobWVtU2l6ZSh2 b2lkKQogCXNpemUgPSBtdWxfc2l6ZShNYXhCYWNrZW5kcyArIDEsIHNpemVvZihRdWV1ZUJhY2tl bmRTdGF0dXMpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgb2Zmc2V0b2YoQXN5bmNRdWV1ZUNv bnRyb2wsIGJhY2tlbmQpKTsKIAotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVTaG1l bVNpemUoTlVNX05PVElGWV9CVUZGRVJTLCAwKSk7Ci0KIAlyZXR1cm4gc2l6ZTsKIH0KIApAQCAt NTUwLDggKzU0Myw4IEBAIEFzeW5jU2htZW1Jbml0KHZvaWQpCiAJaWYgKCFmb3VuZCkKIAl7CiAJ CS8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgc28gaW5pdGlhbGl6ZSBpdCAqLwotCQlTRVRfUVVFVUVf UE9TKFFVRVVFX0hFQUQsIDAsIDApOwotCQlTRVRfUVVFVUVfUE9TKFFVRVVFX1RBSUwsIDAsIDAp OworCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0hFQUQsIDAsIE1BWEFMSUdOKFNpemVPZlBhZ2VIZWFk ZXJEYXRhKSk7CisJCVNFVF9RVUVVRV9QT1MoUVVFVUVfVEFJTCwgMCwgTUFYQUxJR04oU2l6ZU9m UGFnZUhlYWRlckRhdGEpKTsKIAkJUVVFVUVfU1RPUF9QQUdFID0gMDsKIAkJUVVFVUVfRklSU1Rf TElTVEVORVIgPSBJbnZhbGlkQmFja2VuZElkOwogCQlhc3luY1F1ZXVlQ29udHJvbC0+bGFzdFF1 ZXVlRmlsbFdhcm4gPSAwOwpAQCAtNTYxLDI0ICs1NTQsMTcgQEAgQXN5bmNTaG1lbUluaXQodm9p ZCkKIAkJCVFVRVVFX0JBQ0tFTkRfUElEKGkpID0gSW52YWxpZFBpZDsKIAkJCVFVRVVFX0JBQ0tF TkRfREJPSUQoaSkgPSBJbnZhbGlkT2lkOwogCQkJUVVFVUVfTkVYVF9MSVNURU5FUihpKSA9IElu dmFsaWRCYWNrZW5kSWQ7Ci0JCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0JBQ0tFTkRfUE9TKGkpLCAw LCAwKTsKKwkJCVNFVF9RVUVVRV9QT1MoUVVFVUVfQkFDS0VORF9QT1MoaSksIDAsIE1BWEFMSUdO KFNpemVPZlBhZ2VIZWFkZXJEYXRhKSk7CiAJCX0KIAl9CiAKLQkvKgotCSAqIFNldCB1cCBTTFJV IG1hbmFnZW1lbnQgb2YgdGhlIHBnX25vdGlmeSBkYXRhLgotCSAqLwotCU5vdGlmeUN0bC0+UGFn ZVByZWNlZGVzID0gYXN5bmNRdWV1ZVBhZ2VQcmVjZWRlczsKLQlTaW1wbGVMcnVJbml0KE5vdGlm eUN0bCwgIk5vdGlmeSIsIE5VTV9OT1RJRllfQlVGRkVSUywgMCwKLQkJCQkgIE5vdGlmeVNMUlVM b2NrLCAicGdfbm90aWZ5IiwgTFdUUkFOQ0hFX05PVElGWV9CVUZGRVIsCi0JCQkJICBTWU5DX0hB TkRMRVJfTk9ORSk7Ci0KIAlpZiAoIWZvdW5kKQogCXsKIAkJLyoKIAkJICogRHVyaW5nIHN0YXJ0 IG9yIHJlYm9vdCwgY2xlYW4gb3V0IHRoZSBwZ19ub3RpZnkgZGlyZWN0b3J5LgogCQkgKi8KLQkJ KHZvaWQpIFNscnVTY2FuRGlyZWN0b3J5KE5vdGlmeUN0bCwgU2xydVNjYW5EaXJDYkRlbGV0ZUFs bCwgTlVMTCk7CisJCSh2b2lkKSBTbHJ1U2NhbkRpcmVjdG9yeShTTFJVX05PVElGWV9JRCwgYXN5 bmNRdWV1ZVBhZ2VQcmVjZWRlcywKKwkJCQkJCQkJIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwsIE5V TEwpOwogCX0KIH0KIApAQCAtMTM0NSwxOSArMTMzMSwxOSBAQCBhc3luY1F1ZXVlQWR2YW5jZSh2 b2xhdGlsZSBRdWV1ZVBvc2l0aW9uICpwb3NpdGlvbiwgaW50IGVudHJ5TGVuZ3RoKQogCSAqIHdy aXR0ZW4gb3IgcmVhZC4KIAkgKi8KIAlvZmZzZXQgKz0gZW50cnlMZW5ndGg7Ci0JQXNzZXJ0KG9m ZnNldCA8PSBRVUVVRV9QQUdFU0laRSk7CisJQXNzZXJ0KG9mZnNldCA8PSBRVUVVRV9QQUdFU0la RSAtIE1BWEFMSUdOKFNpemVPZlBhZ2VIZWFkZXJEYXRhKSk7CiAKIAkvKgogCSAqIEluIGEgc2Vj b25kIHN0ZXAgY2hlY2sgaWYgYW5vdGhlciBlbnRyeSBjYW4gcG9zc2libHkgYmUgd3JpdHRlbiB0 byB0aGUKIAkgKiBwYWdlLiBJZiBzbywgc3RheSBoZXJlLCB3ZSBoYXZlIHJlYWNoZWQgdGhlIG5l eHQgcG9zaXRpb24uIElmIG5vdCwgdGhlbgogCSAqIHdlIG5lZWQgdG8gbW92ZSBvbiB0byB0aGUg bmV4dCBwYWdlLgogCSAqLwotCWlmIChvZmZzZXQgKyBRVUVVRUFMSUdOKEFzeW5jUXVldWVFbnRy eUVtcHR5U2l6ZSkgPiBRVUVVRV9QQUdFU0laRSkKKwlpZiAob2Zmc2V0ICsgUVVFVUVBTElHTihB c3luY1F1ZXVlRW50cnlFbXB0eVNpemUpID4gUVVFVUVfUEFHRVNJWkUgLSBNQVhBTElHTihTaXpl T2ZQYWdlSGVhZGVyRGF0YSkpCiAJewogCQlwYWdlbm8rKzsKIAkJaWYgKHBhZ2VubyA+IFFVRVVF X01BWF9QQUdFKQogCQkJcGFnZW5vID0gMDsJCQkvKiB3cmFwIGFyb3VuZCAqLwotCQlvZmZzZXQg PSAwOworCQlvZmZzZXQgPSBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0YSk7IC8qIHN0YXJ0 IGF0IFNpemVPZlBhZ2VIZWFkZXJEYXRhICovCiAJCXBhZ2VKdW1wID0gdHJ1ZTsKIAl9CiAKQEAg LTE0MTEsMTAgKzEzOTcsNyBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0Q2VsbCAqbmV4dE5v dGlmeSkKIAlRdWV1ZVBvc2l0aW9uIHF1ZXVlX2hlYWQ7CiAJaW50CQkJcGFnZW5vOwogCWludAkJ CW9mZnNldDsKLQlpbnQJCQlzbG90bm87Ci0KLQkvKiBXZSBob2xkIGJvdGggTm90aWZ5UXVldWVM b2NrIGFuZCBOb3RpZnlTTFJVTG9jayBkdXJpbmcgdGhpcyBvcGVyYXRpb24gKi8KLQlMV0xvY2tB Y3F1aXJlKE5vdGlmeVNMUlVMb2NrLCBMV19FWENMVVNJVkUpOworCUJ1ZmZlcgkJYnVmZmVyOwog CiAJLyoKIAkgKiBXZSB3b3JrIHdpdGggYSBsb2NhbCBjb3B5IG9mIFFVRVVFX0hFQUQsIHdoaWNo IHdlIHdyaXRlIGJhY2sgdG8gc2hhcmVkCkBAIC0xNDM5LDEzICsxNDIyLDIwIEBAIGFzeW5jUXVl dWVBZGRFbnRyaWVzKExpc3RDZWxsICpuZXh0Tm90aWZ5KQogCSAqLwogCXBhZ2VubyA9IFFVRVVF X1BPU19QQUdFKHF1ZXVlX2hlYWQpOwogCWlmIChRVUVVRV9QT1NfSVNfWkVSTyhxdWV1ZV9oZWFk KSkKLQkJc2xvdG5vID0gU2ltcGxlTHJ1WmVyb1BhZ2UoTm90aWZ5Q3RsLCBwYWdlbm8pOworCXsK KwkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9OT1RJRllfSUQsIHBhZ2Vubyk7CisJCVBh Z2VTZXRIZWFkZXJEYXRhTm9uUmVsKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSwgcGFnZW5vLCBJbnZh bGlkWExvZ1JlY1B0ciwgQkxDS1NaLCBQR19NRVRBUEFHRV9MQVlPVVRfVkVSU0lPTik7CisKKwl9 CiAJZWxzZQotCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShOb3RpZnlDdGwsIHBhZ2Vubywg dHJ1ZSwKLQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCXsKKwkJYnVmZmVyID0g UmVhZFNscnVCdWZmZXIoU0xSVV9OT1RJRllfSUQsIHBhZ2VubywgUkJNX05PUk1BTCk7CisJCUxv Y2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCX0KIAorCQogCS8qIE5v dGUgd2UgbWFyayB0aGUgcGFnZSBkaXJ0eSBiZWZvcmUgd3JpdGluZyBpbiBpdCAqLwotCU5vdGlm eUN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCU1hcmtCdWZmZXJEaXJ0 eShidWZmZXIpOwogCiAJd2hpbGUgKG5leHROb3RpZnkgIT0gTlVMTCkKIAl7CkBAIC0xNDU3LDcg KzE0NDcsNyBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0Q2VsbCAqbmV4dE5vdGlmeSkKIAkJ b2Zmc2V0ID0gUVVFVUVfUE9TX09GRlNFVChxdWV1ZV9oZWFkKTsKIAogCQkvKiBDaGVjayB3aGV0 aGVyIHRoZSBlbnRyeSByZWFsbHkgZml0cyBvbiB0aGUgY3VycmVudCBwYWdlICovCi0JCWlmIChv ZmZzZXQgKyBxZS5sZW5ndGggPD0gUVVFVUVfUEFHRVNJWkUpCisJCWlmIChvZmZzZXQgKyBxZS5s ZW5ndGggPD0gUVVFVUVfUEFHRVNJWkUgLSBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0YSkp CiAJCXsKIAkJCS8qIE9LLCBzbyBhZHZhbmNlIG5leHROb3RpZnkgcGFzdCB0aGlzIGl0ZW0gKi8K IAkJCW5leHROb3RpZnkgPSBsbmV4dChwZW5kaW5nTm90aWZpZXMtPmV2ZW50cywgbmV4dE5vdGlm eSk7CkBAIC0xNDY5LDE3ICsxNDU5LDE4IEBAIGFzeW5jUXVldWVBZGRFbnRyaWVzKExpc3RDZWxs ICpuZXh0Tm90aWZ5KQogCQkJICogb25seSBjaGVjayBkYm9pZCBhbmQgc2luY2UgaXQgd29uJ3Qg bWF0Y2ggYW55IHJlYWRlcidzIGRhdGFiYXNlCiAJCQkgKiBPSUQsIHRoZXkgd2lsbCBpZ25vcmUg dGhpcyBlbnRyeSBhbmQgbW92ZSBvbi4KIAkJCSAqLwotCQkJcWUubGVuZ3RoID0gUVVFVUVfUEFH RVNJWkUgLSBvZmZzZXQ7CisJCQlxZS5sZW5ndGggPSBRVUVVRV9QQUdFU0laRSAtIE1BWEFMSUdO KFNpemVPZlBhZ2VIZWFkZXJEYXRhKSAtIG9mZnNldDsKIAkJCXFlLmRib2lkID0gSW52YWxpZE9p ZDsKIAkJCXFlLmRhdGFbMF0gPSAnXDAnOwkvKiBlbXB0eSBjaGFubmVsICovCiAJCQlxZS5kYXRh WzFdID0gJ1wwJzsJLyogZW1wdHkgcGF5bG9hZCAqLwogCQl9CiAKIAkJLyogTm93IGNvcHkgcWUg aW50byB0aGUgc2hhcmVkIGJ1ZmZlciBwYWdlICovCi0JCW1lbWNweShOb3RpZnlDdGwtPnNoYXJl ZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIG9mZnNldCwKKwkJbWVtY3B5KFBhZ2VHZXRDb250ZW50 cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpICsgb2Zmc2V0LAogCQkJICAgJnFlLAogCQkJICAgcWUu bGVuZ3RoKTsKIAorCiAJCS8qIEFkdmFuY2UgcXVldWVfaGVhZCBhcHByb3ByaWF0ZWx5LCBhbmQg ZGV0ZWN0IGlmIHBhZ2UgaXMgZnVsbCAqLwogCQlpZiAoYXN5bmNRdWV1ZUFkdmFuY2UoJihxdWV1 ZV9oZWFkKSwgcWUubGVuZ3RoKSkKIAkJewpAQCAtMTQ5MSw3ICsxNDgyLDEwIEBAIGFzeW5jUXVl dWVBZGRFbnRyaWVzKExpc3RDZWxsICpuZXh0Tm90aWZ5KQogCQkJICogYXN5bmNRdWV1ZUlzRnVs bCgpIGVuc3VyZWQgdGhhdCB0aGVyZSBpcyByb29tIHRvIGNyZWF0ZSB0aGlzCiAJCQkgKiBwYWdl IHdpdGhvdXQgb3ZlcnJ1bm5pbmcgdGhlIHF1ZXVlLgogCQkJICovCi0JCQlzbG90bm8gPSBTaW1w bGVMcnVaZXJvUGFnZShOb3RpZnlDdGwsIFFVRVVFX1BPU19QQUdFKHF1ZXVlX2hlYWQpKTsKKwkJ CVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCWJ1ZmZlciA9IFplcm9TbHJ1QnVmZmVy KFNMUlVfTk9USUZZX0lELAorCQkJCQkJCQkJUVVFVUVfUE9TX1BBR0UocXVldWVfaGVhZCkpOwor CQkJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKIAkJCS8qCiAJCQkgKiBJZiB0aGUgbmV3IHBh Z2UgYWRkcmVzcyBpcyBhIG11bHRpcGxlIG9mIFFVRVVFX0NMRUFOVVBfREVMQVksCkBAIC0xNTA1 LDEyICsxNDk5LDExIEBAIGFzeW5jUXVldWVBZGRFbnRyaWVzKExpc3RDZWxsICpuZXh0Tm90aWZ5 KQogCQkJYnJlYWs7CiAJCX0KIAl9CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCiAJ LyogU3VjY2Vzcywgc28gdXBkYXRlIHRoZSBnbG9iYWwgUVVFVUVfSEVBRCAqLwogCVFVRVVFX0hF QUQgPSBxdWV1ZV9oZWFkOwogCi0JTFdMb2NrUmVsZWFzZShOb3RpZnlTTFJVTG9jayk7Ci0KIAly ZXR1cm4gbmV4dE5vdGlmeTsKIH0KIApAQCAtMTk4MywxNyArMTk3NiwxNiBAQCBhc3luY1F1ZXVl UmVhZEFsbE5vdGlmaWNhdGlvbnModm9pZCkKIAkJewogCQkJaW50CQkJY3VycGFnZSA9IFFVRVVF X1BPU19QQUdFKHBvcyk7CiAJCQlpbnQJCQljdXJvZmZzZXQgPSBRVUVVRV9QT1NfT0ZGU0VUKHBv cyk7Ci0JCQlpbnQJCQlzbG90bm87CiAJCQlpbnQJCQljb3B5c2l6ZTsKKwkJCUJ1ZmZlcgkJYnVm ZmVyOwogCiAJCQkvKgotCQkJICogV2UgY29weSB0aGUgZGF0YSBmcm9tIFNMUlUgaW50byBhIGxv Y2FsIGJ1ZmZlciwgc28gYXMgdG8gYXZvaWQKLQkJCSAqIGhvbGRpbmcgdGhlIE5vdGlmeVNMUlVM b2NrIHdoaWxlIHdlIGFyZSBleGFtaW5pbmcgdGhlIGVudHJpZXMKLQkJCSAqIGFuZCBwb3NzaWJs eSB0cmFuc21pdHRpbmcgdGhlbSB0byBvdXIgZnJvbnRlbmQuICBDb3B5IG9ubHkgdGhlCi0JCQkg KiBwYXJ0IG9mIHRoZSBwYWdlIHdlIHdpbGwgYWN0dWFsbHkgaW5zcGVjdC4KKwkJCSAqIFdlIGNv cHkgdGhlIGRhdGEgaW50byBhIGxvY2FsIGJ1ZmZlciwgc28gYXMgdG8gYXZvaWQgaG9sZGluZyBh CisJCQkgKiBidWZmZXIgcGluIHdoaWxlIHdlIGFyZSBleGFtaW5pbmcgdGhlIGVudHJpZXMgYW5k IHBvc3NpYmx5CisJCQkgKiB0cmFuc21pdHRpbmcgdGhlbSB0byBvdXIgZnJvbnRlbmQuICBDb3B5 IG9ubHkgdGhlIHBhcnQgb2YgdGhlCisJCQkgKiBwYWdlIHdlIHdpbGwgYWN0dWFsbHkgaW5zcGVj dC4KIAkJCSAqLwotCQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoTm90aWZ5 Q3RsLCBjdXJwYWdlLAotCQkJCQkJCQkJCQkJSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCQkJYnVm ZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9OT1RJRllfSUQsIGN1cnBhZ2UsIFJCTV9OT1JNQUwp OwogCQkJaWYgKGN1cnBhZ2UgPT0gUVVFVUVfUE9TX1BBR0UoaGVhZCkpCiAJCQl7CiAJCQkJLyog d2Ugb25seSB3YW50IHRvIHJlYWQgYXMgZmFyIGFzIGhlYWQgKi8KQEAgLTIwMDQsMTMgKzE5OTYs MTIgQEAgYXN5bmNRdWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZvaWQpCiAJCQllbHNlCiAJCQl7 CiAJCQkJLyogZmV0Y2ggYWxsIHRoZSByZXN0IG9mIHRoZSBwYWdlICovCi0JCQkJY29weXNpemUg PSBRVUVVRV9QQUdFU0laRSAtIGN1cm9mZnNldDsKKwkJCQljb3B5c2l6ZSA9IFFVRVVFX1BBR0VT SVpFIC0gTUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRlckRhdGEpIC0gY3Vyb2Zmc2V0OwogCQkJfQot CQkJbWVtY3B5KHBhZ2VfYnVmZmVyLmJ1ZiArIGN1cm9mZnNldCwKLQkJCQkgICBOb3RpZnlDdGwt PnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGN1cm9mZnNldCwKKwkJCW1lbWNweShQYWdl R2V0Q29udGVudHMocGFnZV9idWZmZXIuYnVmKSArICBjdXJvZmZzZXQsCisJCQkJICAgUGFnZUdl dENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBjdXJvZmZzZXQsCiAJCQkJICAgY29w eXNpemUpOwotCQkJLyogUmVsZWFzZSBsb2NrIHRoYXQgd2UgZ290IGZyb20gU2ltcGxlTHJ1UmVh ZFBhZ2VfUmVhZE9ubHkoKSAqLwotCQkJTFdMb2NrUmVsZWFzZShOb3RpZnlTTFJVTG9jayk7CisJ CQlSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAKIAkJCS8qCiAJCQkgKiBQcm9jZXNzIG1lc3NhZ2Vz IHVwIHRvIHRoZSBzdG9wIHBvc2l0aW9uLCBlbmQgb2YgcGFnZSwgb3IgYW4KQEAgLTIwNzgsNyAr MjA2OSw3IEBAIGFzeW5jUXVldWVQcm9jZXNzUGFnZUVudHJpZXModm9sYXRpbGUgUXVldWVQb3Np dGlvbiAqY3VycmVudCwKIAkJaWYgKFFVRVVFX1BPU19FUVVBTCh0aGlzZW50cnksIHN0b3ApKQog CQkJYnJlYWs7CiAKLQkJcWUgPSAoQXN5bmNRdWV1ZUVudHJ5ICopIChwYWdlX2J1ZmZlciArIFFV RVVFX1BPU19PRkZTRVQodGhpc2VudHJ5KSk7CisJCXFlID0gKEFzeW5jUXVldWVFbnRyeSAqKSAo UGFnZUdldENvbnRlbnRzKHBhZ2VfYnVmZmVyKSArIFFVRVVFX1BPU19PRkZTRVQodGhpc2VudHJ5 KSk7CiAKIAkJLyoKIAkJICogQWR2YW5jZSAqY3VycmVudCBvdmVyIHRoaXMgbWVzc2FnZSwgcG9z c2libHkgdG8gdGhlIG5leHQgcGFnZS4gQXMKQEAgLTIyMDcsNyArMjE5OCw3IEBAIGFzeW5jUXVl dWVBZHZhbmNlVGFpbCh2b2lkKQogCQkgKiBTaW1wbGVMcnVUcnVuY2F0ZSgpIHdpbGwgYXNrIGZv ciBOb3RpZnlTTFJVTG9jayBidXQgd2lsbCBhbHNvCiAJCSAqIHJlbGVhc2UgdGhlIGxvY2sgYWdh aW4uCiAJCSAqLwotCQlTaW1wbGVMcnVUcnVuY2F0ZShOb3RpZnlDdGwsIG5ld3RhaWxwYWdlKTsK KwkJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9OT1RJRllfSUQsIGFzeW5jUXVldWVQYWdlUHJlY2Vk ZXMsIG5ld3RhaWxwYWdlKTsKIAogCQkvKgogCQkgKiBVcGRhdGUgUVVFVUVfU1RPUF9QQUdFLiAg VGhpcyBjaGFuZ2VzIGFzeW5jUXVldWVJc0Z1bGwoKSdzIHZlcmRpY3QKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ri Y29tbWFuZHMuYwppbmRleCAxZjRjZTJmYjljZi4uMDE4OTJhNzU2NmUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9kYmNvbW1hbmRzLmMKQEAgLTI1OCw3ICsyNTgsNyBAQCBTY2FuU291cmNlRGF0YWJhc2VQZ0Ns YXNzKE9pZCB0YmlkLCBPaWQgZGJpZCwgY2hhciAqc3JjcGF0aCkKIAlMaXN0CSAgICpybG9jYXRv cmxpc3QgPSBOSUw7CiAJTG9ja1JlbElkCXJlbGlkOwogCVNuYXBzaG90CXNuYXBzaG90OwotCVNN Z3JSZWxhdGlvbglzbWdyOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCUJ1ZmZlckFjY2Vzc1N0 cmF0ZWd5IGJzdHJhdGVneTsKIAogCS8qIEdldCBwZ19jbGFzcyByZWxmaWxlbnVtYmVyLiAqLwpA QCAtMjc1LDkgKzI3NSw5IEBAIFNjYW5Tb3VyY2VEYXRhYmFzZVBnQ2xhc3MoT2lkIHRiaWQsIE9p ZCBkYmlkLCBjaGFyICpzcmNwYXRoKQogCXJsb2NhdG9yLmRiT2lkID0gZGJpZDsKIAlybG9jYXRv ci5yZWxOdW1iZXIgPSByZWxmaWxlbnVtYmVyOwogCi0Jc21nciA9IHNtZ3JvcGVuKHJsb2NhdG9y LCBJbnZhbGlkQmFja2VuZElkKTsKLQluYmxvY2tzID0gc21ncm5ibG9ja3Moc21nciwgTUFJTl9G T1JLTlVNKTsKLQlzbWdyY2xvc2Uoc21ncik7CisJc2ZpbGUgPSBzbWdyb3BlbihybG9jYXRvciwg SW52YWxpZEJhY2tlbmRJZCwgTUFJTl9GT1JLTlVNKTsKKwluYmxvY2tzID0gc21ncm5ibG9ja3Mo c2ZpbGUpOworCXNtZ3JjbG9zZShzZmlsZSk7CiAKIAkvKiBVc2UgYSBidWZmZXIgYWNjZXNzIHN0 cmF0ZWd5IHNpbmNlIHRoaXMgaXMgYSBidWxrIHJlYWQgb3BlcmF0aW9uLiAqLwogCWJzdHJhdGVn eSA9IEdldEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVBRCk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2Uu YwppbmRleCBiZmUyNzljZGRmMS4uNDYwZTJiYjE4MjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3NlcXVlbmNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2Uu YwpAQCAtMzUzLDE0ICszNTMsMTQgQEAgZmlsbF9zZXFfd2l0aF9kYXRhKFJlbGF0aW9uIHJlbCwg SGVhcFR1cGxlIHR1cGxlKQogCiAJaWYgKHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSA9PSBS RUxQRVJTSVNURU5DRV9VTkxPR0dFRCkKIAl7Ci0JCVNNZ3JSZWxhdGlvbiBzcmVsOworCQlTTWdy RmlsZUhhbmRsZSBzZmlsZTsKIAotCQlzcmVsID0gc21ncm9wZW4ocmVsLT5yZF9sb2NhdG9yLCBJ bnZhbGlkQmFja2VuZElkKTsKLQkJc21ncmNyZWF0ZShzcmVsLCBJTklUX0ZPUktOVU0sIGZhbHNl KTsKKwkJc2ZpbGUgPSBzbWdyb3BlbihyZWwtPnJkX2xvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQs IElOSVRfRk9SS05VTSk7CisJCXNtZ3JjcmVhdGUoc2ZpbGUsIGZhbHNlKTsKIAkJbG9nX3NtZ3Jj cmVhdGUoJnJlbC0+cmRfbG9jYXRvciwgSU5JVF9GT1JLTlVNKTsKIAkJZmlsbF9zZXFfZm9ya193 aXRoX2RhdGEocmVsLCB0dXBsZSwgSU5JVF9GT1JLTlVNKTsKIAkJRmx1c2hSZWxhdGlvbkJ1ZmZl cnMocmVsKTsKLQkJc21ncmNsb3NlKHNyZWwpOworCQlzbWdyY2xvc2Uoc2ZpbGUpOwogCX0KIH0K IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCAxMjkzNTQ1OTQ3ZS4uYTFmZjJmYzc3YTUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC0xNDY0OCw5ICsxNDY0OCw3IEBAIEFsdGVy VGFibGVNb3ZlQWxsKEFsdGVyVGFibGVNb3ZlQWxsU3RtdCAqc3RtdCkKIHN0YXRpYyB2b2lkCiBp bmRleF9jb3B5X2RhdGEoUmVsYXRpb24gcmVsLCBSZWxGaWxlTG9jYXRvciBuZXdybG9jYXRvcikK IHsKLQlTTWdyUmVsYXRpb24gZHN0cmVsOwotCi0JZHN0cmVsID0gc21ncm9wZW4obmV3cmxvY2F0 b3IsIHJlbC0+cmRfYmFja2VuZCk7CisJU01nckZpbGVIYW5kbGUgZHN0bWFpbjsKIAogCS8qCiAJ ICogU2luY2Ugd2UgY29weSB0aGUgZmlsZSBkaXJlY3RseSB3aXRob3V0IGxvb2tpbmcgYXQgdGhl IHNoYXJlZCBidWZmZXJzLApAQCAtMTQ2NzAsMTYgKzE0NjY4LDIwIEBAIGluZGV4X2NvcHlfZGF0 YShSZWxhdGlvbiByZWwsIFJlbEZpbGVMb2NhdG9yIG5ld3Jsb2NhdG9yKQogCVJlbGF0aW9uQ3Jl YXRlU3RvcmFnZShuZXdybG9jYXRvciwgcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlLCB0cnVl KTsKIAogCS8qIGNvcHkgbWFpbiBmb3JrICovCi0JUmVsYXRpb25Db3B5U3RvcmFnZShSZWxhdGlv bkdldFNtZ3IocmVsKSwgZHN0cmVsLCBNQUlOX0ZPUktOVU0sCisJZHN0bWFpbiA9IHNtZ3JvcGVu KG5ld3Jsb2NhdG9yLCByZWwtPnJkX2JhY2tlbmQsIE1BSU5fRk9SS05VTSk7CisJUmVsYXRpb25D b3B5U3RvcmFnZShSZWxhdGlvbkdldFNtZ3IocmVsLCBNQUlOX0ZPUktOVU0pLCBkc3RtYWluLAog CQkJCQkJcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKTsKIAogCS8qIGNvcHkgdGhvc2UgZXh0 cmEgZm9ya3MgdGhhdCBleGlzdCAqLwogCWZvciAoRm9ya051bWJlciBmb3JrTnVtID0gTUFJTl9G T1JLTlVNICsgMTsKIAkJIGZvcmtOdW0gPD0gTUFYX0ZPUktOVU07IGZvcmtOdW0rKykKIAl7Ci0J CWlmIChzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBmb3JrTnVtKSkKKwkJaWYgKHNt Z3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCwgZm9ya051bSkpKQogCQl7Ci0JCQlzbWdyY3Jl YXRlKGRzdHJlbCwgZm9ya051bSwgZmFsc2UpOworCQkJU01nckZpbGVIYW5kbGUgc3JjX2Zvcmsg PSBSZWxhdGlvbkdldFNtZ3IocmVsLCBmb3JrTnVtKTsKKwkJCVNNZ3JGaWxlSGFuZGxlIGRzdF9m b3JrID0gc21ncm9wZW4obmV3cmxvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgZm9ya051bSk7CisK KwkJCXNtZ3JjcmVhdGUoZHN0X2ZvcmssIGZhbHNlKTsKIAogCQkJLyoKIAkJCSAqIFdBTCBsb2cg Y3JlYXRpb24gaWYgdGhlIHJlbGF0aW9uIGlzIHBlcnNpc3RlbnQsIG9yIHRoaXMgaXMgdGhlCkBA IC0xNDY4OSwxNCArMTQ2OTEsMTUgQEAgaW5kZXhfY29weV9kYXRhKFJlbGF0aW9uIHJlbCwgUmVs RmlsZUxvY2F0b3IgbmV3cmxvY2F0b3IpCiAJCQkJKHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5j ZSA9PSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRCAmJgogCQkJCSBmb3JrTnVtID09IElOSVRfRk9S S05VTSkpCiAJCQkJbG9nX3NtZ3JjcmVhdGUoJm5ld3Jsb2NhdG9yLCBmb3JrTnVtKTsKLQkJCVJl bGF0aW9uQ29weVN0b3JhZ2UoUmVsYXRpb25HZXRTbWdyKHJlbCksIGRzdHJlbCwgZm9ya051bSwK KwkJCVJlbGF0aW9uQ29weVN0b3JhZ2Uoc3JjX2ZvcmssIGRzdF9mb3JrLAogCQkJCQkJCQlyZWwt PnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpOworCQkJc21ncmNsb3NlKGRzdF9mb3JrKTsKIAkJfQog CX0KIAogCS8qIGRyb3Agb2xkIHJlbGF0aW9uLCBhbmQgY2xvc2UgbmV3IG9uZSAqLwogCVJlbGF0 aW9uRHJvcFN0b3JhZ2UocmVsKTsKLQlzbWdyY2xvc2UoZHN0cmVsKTsKKwlzbWdyY2xvc2UoZHN0 bWFpbik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9i dWZfaW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwppbmRleCAy MDk0NmM0N2NiNC4uOTc0NjgzOGJmOWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zl9pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2lu aXQuYwpAQCAtMjAsNiArMjAsNyBAQAogCiBCdWZmZXJEZXNjUGFkZGVkICpCdWZmZXJEZXNjcmlw dG9yczsKIGNoYXIJICAgKkJ1ZmZlckJsb2NrczsKK1hMb2dSZWNQdHIgKkJ1ZmZlckV4dGVybmFs TFNOczsKIENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVkICpCdWZmZXJJT0NWQXJyYXk7 CiBXcml0ZWJhY2tDb250ZXh0IEJhY2tlbmRXcml0ZWJhY2tDb250ZXh0OwogQ2twdFNvcnRJdGVt ICpDa3B0QnVmZmVySWRzOwpAQCAtNjksOSArNzAsMTEgQEAgSW5pdEJ1ZmZlclBvb2wodm9pZCkK IHsKIAlib29sCQlmb3VuZEJ1ZnMsCiAJCQkJZm91bmREZXNjcywKKwkJCQlmb3VuZExTTnMsCiAJ CQkJZm91bmRJT0NWLAogCQkJCWZvdW5kQnVmQ2twdDsKIAorCiAJLyogQWxpZ24gZGVzY3JpcHRv cnMgdG8gYSBjYWNoZWxpbmUgYm91bmRhcnkuICovCiAJQnVmZmVyRGVzY3JpcHRvcnMgPSAoQnVm ZmVyRGVzY1BhZGRlZCAqKQogCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBEZXNjcmlwdG9ycyIs CkBAIC04OCw2ICs5MSwxMSBAQCBJbml0QnVmZmVyUG9vbCh2b2lkKQogCQkJCQkJTkJ1ZmZlcnMg KiBzaXplb2YoQ29uZGl0aW9uVmFyaWFibGVNaW5pbWFsbHlQYWRkZWQpLAogCQkJCQkJJmZvdW5k SU9DVik7CiAKKwlCdWZmZXJFeHRlcm5hbExTTnMgPSAoWExvZ1JlY1B0ciAqKQorCQlTaG1lbUlu aXRTdHJ1Y3QoIkJ1ZmZlciBFeHRlcm5hbCBMU05zIiwKKwkJCQkJCU5CdWZmZXJzICogc2l6ZW9m KFhMb2dSZWNQdHIpLAorCQkJCQkJJmZvdW5kTFNOcyk7CisKIAkvKgogCSAqIFRoZSBhcnJheSB1 c2VkIHRvIHNvcnQgdG8tYmUtY2hlY2twb2ludGVkIGJ1ZmZlciBpZHMgaXMgbG9jYXRlZCBpbgog CSAqIHNoYXJlZCBtZW1vcnksIHRvIGF2b2lkIGhhdmluZyB0byBhbGxvY2F0ZSBzaWduaWZpY2Fu dCBhbW91bnRzIG9mCkBAIC05OSwxMCArMTA3LDEwIEBAIEluaXRCdWZmZXJQb29sKHZvaWQpCiAJ CVNobWVtSW5pdFN0cnVjdCgiQ2hlY2twb2ludCBCdWZmZXJJZHMiLAogCQkJCQkJTkJ1ZmZlcnMg KiBzaXplb2YoQ2twdFNvcnRJdGVtKSwgJmZvdW5kQnVmQ2twdCk7CiAKLQlpZiAoZm91bmREZXNj cyB8fCBmb3VuZEJ1ZnMgfHwgZm91bmRJT0NWIHx8IGZvdW5kQnVmQ2twdCkKKwlpZiAoZm91bmRE ZXNjcyB8fCBmb3VuZEJ1ZnMgfHwgZm91bmRJT0NWIHx8IGZvdW5kQnVmQ2twdCB8fCBmb3VuZExT TnMpCiAJewogCQkvKiBzaG91bGQgZmluZCBhbGwgb2YgdGhlc2UsIG9yIG5vbmUgb2YgdGhlbSAq LwotCQlBc3NlcnQoZm91bmREZXNjcyAmJiBmb3VuZEJ1ZnMgJiYgZm91bmRJT0NWICYmIGZvdW5k QnVmQ2twdCk7CisJCUFzc2VydChmb3VuZERlc2NzICYmIGZvdW5kQnVmcyAmJiBmb3VuZElPQ1Yg JiYgZm91bmRCdWZDa3B0ICYmIGZvdW5kTFNOcyk7CiAJCS8qIG5vdGU6IHRoaXMgcGF0aCBpcyBv bmx5IHRha2VuIGluIEVYRUNfQkFDS0VORCBjYXNlICovCiAJfQogCWVsc2UKQEAgLTEzMyw2ICsx NDEsOCBAQCBJbml0QnVmZmVyUG9vbCh2b2lkKQogCQkJCQkJCSBMV1RSQU5DSEVfQlVGRkVSX0NP TlRFTlQpOwogCiAJCQlDb25kaXRpb25WYXJpYWJsZUluaXQoQnVmZmVyRGVzY3JpcHRvckdldElP Q1YoYnVmKSk7CisKKwkJCUJ1ZmZlckV4dGVybmFsTFNOc1tpXSA9IEludmFsaWRYTG9nUmVjUHRy OwogCQl9CiAKIAkJLyogQ29ycmVjdCBsYXN0IGVudHJ5IG9mIGxpbmtlZCBsaXN0ICovCkBAIC0x NjYsNiArMTc2LDkgQEAgQnVmZmVyU2htZW1TaXplKHZvaWQpCiAJLyogc2l6ZSBvZiBkYXRhIHBh Z2VzICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKE5CdWZmZXJzLCBCTENLU1op KTsKIAorCS8qIHNpemUgb2YgZXh0ZXJuYWwgTFNOcyAqLworCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBtdWxfc2l6ZShOQnVmZmVycywgc2l6ZW9mKFhMb2dSZWNQdHIpKSk7CisKIAkvKiBzaXplIG9m IHN0dWZmIGNvbnRyb2xsZWQgYnkgZnJlZWxpc3QuYyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBTdHJhdGVneVNobWVtU2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpp bmRleCAxYmM4ZDY1NTViOS4uMWI5NjAzZDkxNjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zm1nci5jCkBAIC01NywxMCArNTcsMTcgQEAKICNpbmNsdWRlICJ1dGlscy9yZXNvd25lcl9wcml2 YXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCiAKKy8qCisgKiBYWFggSWRlYWxs eSB3ZSdkIHN3aXRjaCB0byBzdGFuZGFyZCBwYWdlcyBmb3IgU0xSVSBkYXRhLCBidXQgaW4gdGhl CisgKiBtZWFudGltZSB3ZSBuZWVkIHNvbWUgd2F5IHRvIGlkZW50aWZ5IGJ1ZmZlcnMgdGhhdCBo b2xkIHJhdyBkYXRhIChubworICogaW52YXNpdmUgTFNOLCBubyBjaGVja3N1bXMpLgorICovCiAK IC8qIE5vdGU6IHRoZXNlIHR3byBtYWNyb3Mgb25seSB3b3JrIG9uIHNoYXJlZCBidWZmZXJzLCBu b3QgbG9jYWwgb25lcyEgKi8KICNkZWZpbmUgQnVmSGRyR2V0QmxvY2soYnVmSGRyKQkoKEJsb2Nr KSAoQnVmZmVyQmxvY2tzICsgKChTaXplKSAoYnVmSGRyKS0+YnVmX2lkKSAqIEJMQ0tTWikpCi0j ZGVmaW5lIEJ1ZmZlckdldExTTihidWZIZHIpCShQYWdlR2V0TFNOKEJ1ZkhkckdldEJsb2NrKGJ1 ZkhkcikpKQorCisjZGVmaW5lIEJ1ZmZlckdldExTTihidWZIZHIpIFwKKwkJUGFnZUdldExTTihC dWZIZHJHZXRCbG9jayhidWZIZHIpKQogCiAvKiBOb3RlOiB0aGlzIG1hY3JvIG9ubHkgd29ya3Mg b24gbG9jYWwgYnVmZmVycywgbm90IHNoYXJlZCBvbmVzISAqLwogI2RlZmluZSBMb2NhbEJ1Zkhk ckdldEJsb2NrKGJ1ZkhkcikgXApAQCAtMTE3LDE5ICsxMjQsNiBAQCB0eXBlZGVmIHN0cnVjdCBD a3B0VHNTdGF0dXMKIAlpbnQJCQlpbmRleDsKIH0gQ2twdFRzU3RhdHVzOwogCi0vKgotICogVHlw ZSBmb3IgYXJyYXkgdXNlZCB0byBzb3J0IFNNZ3JSZWxhdGlvbnMKLSAqCi0gKiBGbHVzaFJlbGF0 aW9uc0FsbEJ1ZmZlcnMgc2hhcmVzIHRoZSBzYW1lIGNvbXBhcmF0b3IgZnVuY3Rpb24gd2l0aAot ICogRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMuIFBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3QgYW5kIFJl bEZpbGVMb2NhdG9yIG11c3QgYmUKLSAqIGNvbXBhdGlibGUuCi0gKi8KLXR5cGVkZWYgc3RydWN0 IFNNZ3JTb3J0QXJyYXkKLXsKLQlSZWxGaWxlTG9jYXRvciBybG9jYXRvcjsJLyogVGhpcyBtdXN0 IGJlIHRoZSBmaXJzdCBtZW1iZXIgKi8KLQlTTWdyUmVsYXRpb24gc3JlbDsKLX0gU01nclNvcnRB cnJheTsKLQogLyogR1VDIHZhcmlhYmxlcyAqLwogYm9vbAkJemVyb19kYW1hZ2VkX3BhZ2VzID0g ZmFsc2U7CiBpbnQJCQliZ3dyaXRlcl9scnVfbWF4cGFnZXMgPSAxMDA7CkBAIC00NTAsOCArNDQ0 LDggQEAgRm9yZ2V0UHJpdmF0ZVJlZkNvdW50RW50cnkoUHJpdmF0ZVJlZkNvdW50RW50cnkgKnJl ZikKICkKIAogCi1zdGF0aWMgQnVmZmVyIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBz bWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLAotCQkJCQkJCQlGb3JrTnVtYmVyIGZvcmtOdW0sIEJs b2NrTnVtYmVyIGJsb2NrTnVtLAorc3RhdGljIEJ1ZmZlciBSZWFkQnVmZmVyX2NvbW1vbihTTWdy RmlsZUhhbmRsZSBzZmlsZSwgY2hhciByZWxwZXJzaXN0ZW5jZSwKKwkJCQkJCQkJQmxvY2tOdW1i ZXIgYmxvY2tOdW0sCiAJCQkJCQkJCVJlYWRCdWZmZXJNb2RlIG1vZGUsIEJ1ZmZlckFjY2Vzc1N0 cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQlib29sICpoaXQpOwogc3RhdGljIGJvb2wgUGluQnVm ZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpOwpAQCAt NDY3LDIwICs0NjEsMTkgQEAgc3RhdGljIHZvaWQgVGVybWluYXRlQnVmZmVySU8oQnVmZmVyRGVz YyAqYnVmLCBib29sIGNsZWFyX2RpcnR5LAogCQkJCQkJCSAgdWludDMyIHNldF9mbGFnX2JpdHMp Owogc3RhdGljIHZvaWQgc2hhcmVkX2J1ZmZlcl93cml0ZV9lcnJvcl9jYWxsYmFjayh2b2lkICph cmcpOwogc3RhdGljIHZvaWQgbG9jYWxfYnVmZmVyX3dyaXRlX2Vycm9yX2NhbGxiYWNrKHZvaWQg KmFyZyk7Ci1zdGF0aWMgQnVmZmVyRGVzYyAqQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3Is CitzdGF0aWMgQnVmZmVyRGVzYyAqQnVmZmVyQWxsb2MoU01nckZpbGVIYW5kbGUgc21nciwKIAkJ CQkJCQkgICBjaGFyIHJlbHBlcnNpc3RlbmNlLAotCQkJCQkJCSAgIEZvcmtOdW1iZXIgZm9ya051 bSwKIAkJCQkJCQkgICBCbG9ja051bWJlciBibG9ja051bSwKIAkJCQkJCQkgICBCdWZmZXJBY2Nl c3NTdHJhdGVneSBzdHJhdGVneSwKIAkJCQkJCQkgICBib29sICpmb3VuZFB0cik7Ci1zdGF0aWMg dm9pZCBGbHVzaEJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIFNNZ3JSZWxhdGlvbiByZWxuKTsKK3N0 YXRpYyB2b2lkIEZsdXNoQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgU01nckZpbGVIYW5kbGUgc2Zp bGUpOwogc3RhdGljIHZvaWQgRmluZEFuZERyb3BSZWxhdGlvbkJ1ZmZlcnMoUmVsRmlsZUxvY2F0 b3IgcmxvY2F0b3IsCi0JCQkJCQkJCQkgICBGb3JrTnVtYmVyIGZvcmtOdW0sCisJCQkJCQkJCQkg ICBGb3JrTnVtYmVyIGZvcmtudW0sCiAJCQkJCQkJCQkgICBCbG9ja051bWJlciBuRm9ya0Jsb2Nr LAogCQkJCQkJCQkJICAgQmxvY2tOdW1iZXIgZmlyc3REZWxCbG9jayk7CiBzdGF0aWMgdm9pZCBS ZWxhdGlvbkNvcHlTdG9yYWdlVXNpbmdCdWZmZXIoUmVsRmlsZUxvY2F0b3Igc3JjbG9jYXRvciwK IAkJCQkJCQkJCQkgICBSZWxGaWxlTG9jYXRvciBkc3Rsb2NhdG9yLAotCQkJCQkJCQkJCSAgIEZv cmtOdW1iZXIgZm9ya051bSwgYm9vbCBwZXJtYW5lbnQpOworCQkJCQkJCQkJCSAgIEZvcmtOdW1i ZXIgZm9ya251bSwgYm9vbCBwZXJtYW5lbnQpOwogc3RhdGljIHZvaWQgQXRQcm9jRXhpdF9CdWZm ZXJzKGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgQ2hlY2tGb3JCdWZmZXJMZWFr cyh2b2lkKTsKIHN0YXRpYyBpbnQJcmxvY2F0b3JfY29tcGFyYXRvcihjb25zdCB2b2lkICpwMSwg Y29uc3Qgdm9pZCAqcDIpOwpAQCAtNDkzLDkgKzQ4Niw3IEBAIHN0YXRpYyBpbnQJdHNfY2twdF9w cm9ncmVzc19jb21wYXJhdG9yKERhdHVtIGEsIERhdHVtIGIsIHZvaWQgKmFyZyk7CiAgKiBJbXBs ZW1lbnRhdGlvbiBvZiBQcmVmZXRjaEJ1ZmZlcigpIGZvciBzaGFyZWQgYnVmZmVycy4KICAqLwog UHJlZmV0Y2hCdWZmZXJSZXN1bHQKLVByZWZldGNoU2hhcmVkQnVmZmVyKFNNZ3JSZWxhdGlvbiBz bWdyX3JlbG4sCi0JCQkJCSBGb3JrTnVtYmVyIGZvcmtOdW0sCi0JCQkJCSBCbG9ja051bWJlciBi bG9ja051bSkKK1ByZWZldGNoU2hhcmVkQnVmZmVyKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9j a051bWJlciBibG9ja051bSkKIHsKIAlQcmVmZXRjaEJ1ZmZlclJlc3VsdCByZXN1bHQgPSB7SW52 YWxpZEJ1ZmZlciwgZmFsc2V9OwogCUJ1ZmZlclRhZwluZXdUYWc7CQkJLyogaWRlbnRpdHkgb2Yg cmVxdWVzdGVkIGJsb2NrICovCkBAIC01MDYsOCArNDk3LDkgQEAgUHJlZmV0Y2hTaGFyZWRCdWZm ZXIoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwKIAlBc3NlcnQoQmxvY2tOdW1iZXJJc1ZhbGlkKGJs b2NrTnVtKSk7CiAKIAkvKiBjcmVhdGUgYSB0YWcgc28gd2UgY2FuIGxvb2t1cCB0aGUgYnVmZmVy ICovCi0JSW5pdEJ1ZmZlclRhZygmbmV3VGFnLCAmc21ncl9yZWxuLT5zbWdyX3Jsb2NhdG9yLmxv Y2F0b3IsCi0JCQkJICBmb3JrTnVtLCBibG9ja051bSk7CisKKwlJbml0QnVmZmVyVGFnKCZuZXdU YWcsICZzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IsCisJCQkJICAgc2ZpbGUtPnNtZ3JfbG9j YXRvci5mb3JrbnVtLCBibG9ja051bSk7CiAKIAkvKiBkZXRlcm1pbmUgaXRzIGhhc2ggY29kZSBh bmQgcGFydGl0aW9uIGxvY2sgSUQgKi8KIAluZXdIYXNoID0gQnVmVGFibGVIYXNoQ29kZSgmbmV3 VGFnKTsKQEAgLTUyNiw3ICs1MTgsNyBAQCBQcmVmZXRjaFNoYXJlZEJ1ZmZlcihTTWdyUmVsYXRp b24gc21ncl9yZWxuLAogCQkgKiBUcnkgdG8gaW5pdGlhdGUgYW4gYXN5bmNocm9ub3VzIHJlYWQu ICBUaGlzIHJldHVybnMgZmFsc2UgaW4KIAkJICogcmVjb3ZlcnkgaWYgdGhlIHJlbGF0aW9uIGZp bGUgZG9lc24ndCBleGlzdC4KIAkJICovCi0JCWlmIChzbWdycHJlZmV0Y2goc21ncl9yZWxuLCBm b3JrTnVtLCBibG9ja051bSkpCisJCWlmIChzbWdycHJlZmV0Y2goc2ZpbGUsIGJsb2NrTnVtKSkK IAkJCXJlc3VsdC5pbml0aWF0ZWRfaW8gPSB0cnVlOwogI2VuZGlmCQkJCQkJCS8qIFVTRV9QUkVG RVRDSCAqLwogCX0KQEAgLTU4MCw3ICs1NzIsNyBAQCBQcmVmZXRjaFNoYXJlZEJ1ZmZlcihTTWdy UmVsYXRpb24gc21ncl9yZWxuLAogICogcmVjb3ZlcnksIGFuIGVycm9yIGlzIHJhaXNlZCkuCiAg Ki8KIFByZWZldGNoQnVmZmVyUmVzdWx0Ci1QcmVmZXRjaEJ1ZmZlcihSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtKQorUHJlZmV0Y2hCdWZmZXIo UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja051bSkK IHsKIAlBc3NlcnQoUmVsYXRpb25Jc1ZhbGlkKHJlbG4pKTsKIAlBc3NlcnQoQmxvY2tOdW1iZXJJ c1ZhbGlkKGJsb2NrTnVtKSk7CkBAIC01OTQsMTIgKzU4NiwxMiBAQCBQcmVmZXRjaEJ1ZmZlcihS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtKQog CQkJCQkgZXJybXNnKCJjYW5ub3QgYWNjZXNzIHRlbXBvcmFyeSB0YWJsZXMgb2Ygb3RoZXIgc2Vz c2lvbnMiKSkpOwogCiAJCS8qIHBhc3MgaXQgb2ZmIHRvIGxvY2FsYnVmLmMgKi8KLQkJcmV0dXJu IFByZWZldGNoTG9jYWxCdWZmZXIoUmVsYXRpb25HZXRTbWdyKHJlbG4pLCBmb3JrTnVtLCBibG9j a051bSk7CisJCXJldHVybiBQcmVmZXRjaExvY2FsQnVmZmVyKFJlbGF0aW9uR2V0U21ncihyZWxu LCBmb3JrbnVtKSwgYmxvY2tOdW0pOwogCX0KIAllbHNlCiAJewogCQkvKiBwYXNzIGl0IHRvIHRo ZSBzaGFyZWQgYnVmZmVyIHZlcnNpb24gKi8KLQkJcmV0dXJuIFByZWZldGNoU2hhcmVkQnVmZmVy KFJlbGF0aW9uR2V0U21ncihyZWxuKSwgZm9ya051bSwgYmxvY2tOdW0pOworCQlyZXR1cm4gUHJl ZmV0Y2hTaGFyZWRCdWZmZXIoUmVsYXRpb25HZXRTbWdyKHJlbG4sIGZvcmtudW0pLCBibG9ja051 bSk7CiAJfQogfQogCkBAIC02MTEsNyArNjAzLDcgQEAgUHJlZmV0Y2hCdWZmZXIoUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSkKICAqIHRhZy4g IEluIHRoYXQgY2FzZSwgdGhlIGJ1ZmZlciBpcyBwaW5uZWQgYW5kIHRoZSB1c2FnZSBjb3VudCBp cyBidW1wZWQuCiAgKi8KIGJvb2wKLVJlYWRSZWNlbnRCdWZmZXIoUmVsRmlsZUxvY2F0b3Igcmxv Y2F0b3IsIEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCitSZWFkUmVj ZW50QnVmZmVyKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJs b2NrTnVtYmVyIGJsb2NrTnVtLAogCQkJCSBCdWZmZXIgcmVjZW50X2J1ZmZlcikKIHsKIAlCdWZm ZXJEZXNjICpidWZIZHI7CkBAIC02MjMsNyArNjE1LDcgQEAgUmVhZFJlY2VudEJ1ZmZlcihSZWxG aWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9j a04KIAogCVJlc291cmNlT3duZXJFbmxhcmdlQnVmZmVycyhDdXJyZW50UmVzb3VyY2VPd25lcik7 CiAJUmVzZXJ2ZVByaXZhdGVSZWZDb3VudEVudHJ5KCk7Ci0JSW5pdEJ1ZmZlclRhZygmdGFnLCAm cmxvY2F0b3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsKKwlJbml0QnVmZmVyVGFnKCZ0YWcsICZybG9j YXRvciwgZm9ya251bSwgYmxvY2tOdW0pOwogCiAJaWYgKEJ1ZmZlcklzTG9jYWwocmVjZW50X2J1 ZmZlcikpCiAJewpAQCAtNzQ3LDcgKzczOSw3IEBAIFJlYWRCdWZmZXIoUmVsYXRpb24gcmVsbiwg QmxvY2tOdW1iZXIgYmxvY2tOdW0pCiAgKiBTZWUgYnVmZmVyL1JFQURNRSBmb3IgZGV0YWlscy4K ICAqLwogQnVmZmVyCi1SZWFkQnVmZmVyRXh0ZW5kZWQoUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwKK1JlYWRCdWZmZXJFeHRlbmRlZChSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCQkJ CSAgIFJlYWRCdWZmZXJNb2RlIG1vZGUsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5KQog ewogCWJvb2wJCWhpdDsKQEAgLTc2OCw4ICs3NjAsOSBAQCBSZWFkQnVmZmVyRXh0ZW5kZWQoUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwKIAkg KiBtaXNzLgogCSAqLwogCXBnc3RhdF9jb3VudF9idWZmZXJfcmVhZChyZWxuKTsKLQlidWYgPSBS ZWFkQnVmZmVyX2NvbW1vbihSZWxhdGlvbkdldFNtZ3IocmVsbiksIHJlbG4tPnJkX3JlbC0+cmVs cGVyc2lzdGVuY2UsCi0JCQkJCQkJZm9ya051bSwgYmxvY2tOdW0sIG1vZGUsIHN0cmF0ZWd5LCAm aGl0KTsKKwlidWYgPSBSZWFkQnVmZmVyX2NvbW1vbihSZWxhdGlvbkdldFNtZ3IocmVsbiwgZm9y a251bSksCisJCQkJCQkJcmVsbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSwKKwkJCQkJCQlibG9j a051bSwgbW9kZSwgc3RyYXRlZ3ksICZoaXQpOwogCWlmIChoaXQpCiAJCXBnc3RhdF9jb3VudF9i dWZmZXJfaGl0KHJlbG4pOwogCXJldHVybiBidWY7CkBAIC03ODcsMTkgKzc4MCwzMSBAQCBSZWFk QnVmZmVyRXh0ZW5kZWQoUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051 bWJlciBibG9ja051bSwKICAqIEJhY2tlbmRJZCkuCiAgKi8KIEJ1ZmZlcgotUmVhZEJ1ZmZlcldp dGhvdXRSZWxjYWNoZShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVt LAorUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9y a051bWJlciBmb3JrbnVtLAogCQkJCQkJICBCbG9ja051bWJlciBibG9ja051bSwgUmVhZEJ1ZmZl ck1vZGUgbW9kZSwKIAkJCQkJCSAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIGJvb2wg cGVybWFuZW50KQogewogCWJvb2wJCWhpdDsKIAotCVNNZ3JSZWxhdGlvbiBzbWdyID0gc21ncm9w ZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlID0g c21ncm9wZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtudW0pOwogCi0JcmV0dXJu IFJlYWRCdWZmZXJfY29tbW9uKHNtZ3IsIHBlcm1hbmVudCA/IFJFTFBFUlNJU1RFTkNFX1BFUk1B TkVOVCA6Ci0JCQkJCQkJIFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VELCBmb3JrTnVtLCBibG9ja051 bSwKKwlyZXR1cm4gUmVhZEJ1ZmZlcl9jb21tb24oc2ZpbGUsIHBlcm1hbmVudCA/IFJFTFBFUlNJ U1RFTkNFX1BFUk1BTkVOVCA6CisJCQkJCQkJIFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VELCBibG9j a051bSwKIAkJCQkJCQkgbW9kZSwgc3RyYXRlZ3ksICZoaXQpOwogfQogCitCdWZmZXIKK1JlYWRC dWZmZXJXaXRob3V0UmVsY2FjaGVXaXRoSGl0KFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3Jr TnVtYmVyIGZvcmtudW0sCisJCQkJCQkJCSBCbG9ja051bWJlciBibG9ja051bSwgUmVhZEJ1ZmZl ck1vZGUgbW9kZSwKKwkJCQkJCQkJIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCBib29s IHBlcm1hbmVudCwgYm9vbCAqaGl0KQoreworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlID0gc21ncm9w ZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtudW0pOworCisJcmV0dXJuIFJlYWRC dWZmZXJfY29tbW9uKHNmaWxlLCBwZXJtYW5lbnQgPyBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQg OgorCQkJCQkJCSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRCwgYmxvY2tOdW0sCisJCQkJCQkJIG1v ZGUsIHN0cmF0ZWd5LCBoaXQpOworfQorCiAKIC8qCiAgKiBSZWFkQnVmZmVyX2NvbW1vbiAtLSBj b21tb24gbG9naWMgZm9yIGFsbCBSZWFkQnVmZmVyIHZhcmlhbnRzCkBAIC04MDcsNyArODEyLDcg QEAgUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9y a051bWJlciBmb3JrTnVtLAogICogKmhpdCBpcyBzZXQgdG8gdHJ1ZSBpZiB0aGUgcmVxdWVzdCB3 YXMgc2F0aXNmaWVkIGZyb20gc2hhcmVkIGJ1ZmZlciBjYWNoZS4KICAqLwogc3RhdGljIEJ1ZmZl cgotUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVu Y2UsIEZvcmtOdW1iZXIgZm9ya051bSwKK1JlYWRCdWZmZXJfY29tbW9uKFNNZ3JGaWxlSGFuZGxl IHNmaWxlLCBjaGFyIHJlbHBlcnNpc3RlbmNlLAogCQkJCSAgQmxvY2tOdW1iZXIgYmxvY2tOdW0s IFJlYWRCdWZmZXJNb2RlIG1vZGUsCiAJCQkJICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVn eSwgYm9vbCAqaGl0KQogewpAQCAtODE1LDcgKzgyMCw3IEBAIFJlYWRCdWZmZXJfY29tbW9uKFNN Z3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0s CiAJQmxvY2sJCWJ1ZkJsb2NrOwogCWJvb2wJCWZvdW5kOwogCWJvb2wJCWlzRXh0ZW5kOwotCWJv b2wJCWlzTG9jYWxCdWYgPSBTbWdySXNUZW1wKHNtZ3IpOworCWJvb2wJCWlzTG9jYWxCdWYgPSBT bWdySXNUZW1wKHNmaWxlKTsKIAogCSpoaXQgPSBmYWxzZTsKIApAQCAtODI0LDI5ICs4MjksMzAg QEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVu Y2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAogCWlzRXh0ZW5kID0gKGJsb2NrTnVtID09IFBfTkVX KTsKIAotCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURfU1RBUlQoZm9ya051bSwgYmxvY2tO dW0sCi0JCQkJCQkJCQkgICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJ CQkJCQkJICAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJICAg c21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKLQkJCQkJCQkJCSAgIHNtZ3It PnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwKKwlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX1NU QVJUKHNtZ3ItPnNtZ3JfbG9jYXRvci5mb3JrbnVtLAorCQkJCQkJCQkJICAgYmxvY2tOdW0sCisJ CQkJCQkJCQkgICBzbWdyLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkg ICBzbWdyLT5zbWdyX2xvY2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJCSAgIHNtZ3ItPnNt Z3JfbG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfbG9j YXRvci5iYWNrZW5kLAogCQkJCQkJCQkJICAgaXNFeHRlbmQpOwogCiAJLyogU3Vic3RpdHV0ZSBw cm9wZXIgYmxvY2sgbnVtYmVyIGlmIGNhbGxlciBhc2tlZCBmb3IgUF9ORVcgKi8KIAlpZiAoaXNF eHRlbmQpCiAJewotCQlibG9ja051bSA9IHNtZ3JuYmxvY2tzKHNtZ3IsIGZvcmtOdW0pOworCQli bG9ja051bSA9IHNtZ3JuYmxvY2tzKHNmaWxlKTsKIAkJLyogRmFpbCBpZiByZWxhdGlvbiBpcyBh bHJlYWR5IGF0IG1heGltdW0gcG9zc2libGUgbGVuZ3RoICovCiAJCWlmIChibG9ja051bSA9PSBQ X05FVykKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPR1JBTV9M SU1JVF9FWENFRURFRCksCiAJCQkJCSBlcnJtc2coImNhbm5vdCBleHRlbmQgcmVsYXRpb24gJXMg YmV5b25kICV1IGJsb2NrcyIsCi0JCQkJCQkJcmVscGF0aChzbWdyLT5zbWdyX3Jsb2NhdG9yLCBm b3JrTnVtKSwKKwkJCQkJCQlzbWdyZmlsZXBhdGgoc2ZpbGUtPnNtZ3JfbG9jYXRvciksCiAJCQkJ CQkJUF9ORVcpKSk7CiAJfQogCiAJaWYgKGlzTG9jYWxCdWYpCiAJewotCQlidWZIZHIgPSBMb2Nh bEJ1ZmZlckFsbG9jKHNtZ3IsIGZvcmtOdW0sIGJsb2NrTnVtLCAmZm91bmQpOworCQlidWZIZHIg PSBMb2NhbEJ1ZmZlckFsbG9jKHNmaWxlLCBibG9ja051bSwgJmZvdW5kKTsKIAkJaWYgKGZvdW5k KQogCQkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX2hpdCsrOwogCQllbHNlIGlmIChpc0V4dGVu ZCkKQEAgLTg2MSw3ICs4NjcsNyBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21n ciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCQkgKiBsb29rdXAg dGhlIGJ1ZmZlci4gIElPX0lOX1BST0dSRVNTIGlzIHNldCBpZiB0aGUgcmVxdWVzdGVkIGJsb2Nr IGlzCiAJCSAqIG5vdCBjdXJyZW50bHkgaW4gbWVtb3J5LgogCQkgKi8KLQkJYnVmSGRyID0gQnVm ZmVyQWxsb2Moc21nciwgcmVscGVyc2lzdGVuY2UsIGZvcmtOdW0sIGJsb2NrTnVtLAorCQlidWZI ZHIgPSBCdWZmZXJBbGxvYyhzZmlsZSwgcmVscGVyc2lzdGVuY2UsIGJsb2NrTnVtLAogCQkJCQkJ CSBzdHJhdGVneSwgJmZvdW5kKTsKIAkJaWYgKGZvdW5kKQogCQkJcGdCdWZmZXJVc2FnZS5zaGFy ZWRfYmxrc19oaXQrKzsKQEAgLTg4NiwxMSArODkyLDEyIEBAIFJlYWRCdWZmZXJfY29tbW9uKFNN Z3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0s CiAJCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKIAkJCQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1 dW1Db3N0UGFnZUhpdDsKIAotCQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfUkVBRF9ET05FKGZv cmtOdW0sIGJsb2NrTnVtLAotCQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRv ci5zcGNPaWQsCi0JCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lk LAotCQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCi0J CQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAorCQkJVFJBQ0VfUE9TVEdS RVNRTF9CVUZGRVJfUkVBRF9ET05FKHNmaWxlLT5zbWdyX2ZvcmtudW0sCisJCQkJCQkJCQkJCSAg YmxvY2tOdW0sCisJCQkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNP aWQsCisJCQkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKKwkJ CQkJCQkJCQkJICBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJ CQkJCQkJICBzZmlsZS0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAogCQkJCQkJCQkJCQkgIGlzRXh0 ZW5kLAogCQkJCQkJCQkJCQkgIGZvdW5kKTsKIApAQCAtOTI3LDcgKzkzNCw3IEBAIFJlYWRCdWZm ZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVt YmVyIGZvcmtOdW0sCiAJCWlmICghUGFnZUlzTmV3KChQYWdlKSBidWZCbG9jaykpCiAJCQllcmVw b3J0KEVSUk9SLAogCQkJCQkoZXJybXNnKCJ1bmV4cGVjdGVkIGRhdGEgYmV5b25kIEVPRiBpbiBi bG9jayAldSBvZiByZWxhdGlvbiAlcyIsCi0JCQkJCQkJYmxvY2tOdW0sIHJlbHBhdGgoc21nci0+ c21ncl9ybG9jYXRvciwgZm9ya051bSkpLAorCQkJCQkJCWJsb2NrTnVtLCBzbWdyZmlsZXBhdGgo c2ZpbGUtPnNtZ3JfbG9jYXRvcikpLAogCQkJCQkgZXJyaGludCgiVGhpcyBoYXMgYmVlbiBzZWVu IHRvIG9jY3VyIHdpdGggYnVnZ3kga2VybmVsczsgY29uc2lkZXIgdXBkYXRpbmcgeW91ciBzeXN0 ZW0uIikpKTsKIAogCQkvKgpAQCAtOTg0LDcgKzk5MSw3IEBAIFJlYWRCdWZmZXJfY29tbW9uKFNN Z3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0s CiAJCS8qIG5ldyBidWZmZXJzIGFyZSB6ZXJvLWZpbGxlZCAqLwogCQlNZW1TZXQoKGNoYXIgKikg YnVmQmxvY2ssIDAsIEJMQ0tTWik7CiAJCS8qIGRvbid0IHNldCBjaGVja3N1bSBmb3IgYWxsLXpl cm8gcGFnZSAqLwotCQlzbWdyZXh0ZW5kKHNtZ3IsIGZvcmtOdW0sIGJsb2NrTnVtLCAoY2hhciAq KSBidWZCbG9jaywgZmFsc2UpOworCQlzbWdyZXh0ZW5kKHNmaWxlLCBibG9ja051bSwgKGNoYXIg KikgYnVmQmxvY2ssIGZhbHNlKTsKIAogCQkvKgogCQkgKiBOQjogd2UncmUgKm5vdCogZG9pbmcg YSBTY2hlZHVsZUJ1ZmZlclRhZ0ZvcldyaXRlYmFjayBoZXJlOwpAQCAtMTAxMSw3ICsxMDE4LDcg QEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVu Y2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCWVsc2UKIAkJCQlJTlNUUl9USU1FX1NFVF9aRVJP KGlvX3N0YXJ0KTsKIAotCQkJc21ncnJlYWQoc21nciwgZm9ya051bSwgYmxvY2tOdW0sIChjaGFy ICopIGJ1ZkJsb2NrKTsKKwkJCXNtZ3JyZWFkKHNmaWxlLCBibG9ja051bSwgKGNoYXIgKikgYnVm QmxvY2spOwogCiAJCQlpZiAodHJhY2tfaW9fdGltaW5nKQogCQkJewpAQCAtMTAyMiw4ICsxMDI5 LDggQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lz dGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCX0KIAogCQkJLyogY2hlY2sgZm9yIGdhcmJh Z2UgZGF0YSAqLwotCQkJaWYgKCFQYWdlSXNWZXJpZmllZEV4dGVuZGVkKChQYWdlKSBidWZCbG9j aywgYmxvY2tOdW0sCi0JCQkJCQkJCQkJUElWX0xPR19XQVJOSU5HIHwgUElWX1JFUE9SVF9TVEFU KSkKKwkJCWlmICgoIShtb2RlID09IFJCTV9UUklNKSkgJiYgKCFQYWdlSXNWZXJpZmllZEV4dGVu ZGVkKChQYWdlKSBidWZCbG9jaywgYmxvY2tOdW0sCisJCQkJCQkJCQkJUElWX0xPR19XQVJOSU5H IHwgUElWX1JFUE9SVF9TVEFUKSkpCiAJCQl7CiAJCQkJaWYgKG1vZGUgPT0gUkJNX1pFUk9fT05f RVJST1IgfHwgemVyb19kYW1hZ2VkX3BhZ2VzKQogCQkJCXsKQEAgLTEwMzEsNyArMTAzOCw3IEBA IFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNl LCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBX0NPUlJV UFRFRCksCiAJCQkJCQkJIGVycm1zZygiaW52YWxpZCBwYWdlIGluIGJsb2NrICV1IG9mIHJlbGF0 aW9uICVzOyB6ZXJvaW5nIG91dCBwYWdlIiwKIAkJCQkJCQkJCWJsb2NrTnVtLAotCQkJCQkJCQkJ cmVscGF0aChzbWdyLT5zbWdyX3Jsb2NhdG9yLCBmb3JrTnVtKSkpKTsKKwkJCQkJCQkJCXNtZ3Jm aWxlcGF0aChzZmlsZS0+c21ncl9sb2NhdG9yKSkpKTsKIAkJCQkJTWVtU2V0KChjaGFyICopIGJ1 ZkJsb2NrLCAwLCBCTENLU1opOwogCQkJCX0KIAkJCQllbHNlCkBAIC0xMDM5LDcgKzEwNDYsNyBA QCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5j ZSwgRm9ya051bWJlciBmb3JrTnVtLAogCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JS VVBURUQpLAogCQkJCQkJCSBlcnJtc2coImludmFsaWQgcGFnZSBpbiBibG9jayAldSBvZiByZWxh dGlvbiAlcyIsCiAJCQkJCQkJCQlibG9ja051bSwKLQkJCQkJCQkJCXJlbHBhdGgoc21nci0+c21n cl9ybG9jYXRvciwgZm9ya051bSkpKSk7CisJCQkJCQkJCQlzbWdyZmlsZXBhdGgoc2ZpbGUtPnNt Z3JfbG9jYXRvcikpKSk7CiAJCQl9CiAJCX0KIAl9CkBAIC0xMDc4LDExICsxMDg1LDEyIEBAIFJl YWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBG b3JrTnVtYmVyIGZvcmtOdW0sCiAJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCiAJCVZhY3V1bUNvc3RC YWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlTWlzczsKIAotCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVS X1JFQURfRE9ORShmb3JrTnVtLCBibG9ja051bSwKLQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9j YXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2Nh dG9yLmRiT2lkLAotCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVt YmVyLAotCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCisJVFJBQ0VfUE9T VEdSRVNRTF9CVUZGRVJfUkVBRF9ET05FKHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9ya251bSwKKwkJ CQkJCQkJCSAgYmxvY2tOdW0sCisJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRv ci5zcGNPaWQsCisJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5kYk9pZCwK KwkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJ CQkJCSAgc2ZpbGUtPnNtZ3JfbG9jYXRvci5iYWNrZW5kLAogCQkJCQkJCQkJICBpc0V4dGVuZCwK IAkJCQkJCQkJCSAgZm91bmQpOwogCkBAIC0xMTA5LDcgKzExMTcsNyBAQCBSZWFkQnVmZmVyX2Nv bW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBm b3JrTnVtLAogICogTm8gbG9ja3MgYXJlIGhlbGQgZWl0aGVyIGF0IGVudHJ5IG9yIGV4aXQuCiAg Ki8KIHN0YXRpYyBCdWZmZXJEZXNjICoKLUJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBj aGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCitCdWZmZXJBbGxvYyhTTWdy RmlsZUhhbmRsZSBzZmlsZSwgY2hhciByZWxwZXJzaXN0ZW5jZSwKIAkJCUJsb2NrTnVtYmVyIGJs b2NrTnVtLAogCQkJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQlib29sICpmb3Vu ZFB0cikKQEAgLTExMjcsNyArMTEzNSw3IEBAIEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdy LCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJdWludDMyCQlidWZf c3RhdGU7CiAKIAkvKiBjcmVhdGUgYSB0YWcgc28gd2UgY2FuIGxvb2t1cCB0aGUgYnVmZmVyICov Ci0JSW5pdEJ1ZmZlclRhZygmbmV3VGFnLCAmc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLCBm b3JrTnVtLCBibG9ja051bSk7CisJSW5pdEJ1ZmZlclRhZygmbmV3VGFnLCAmc2ZpbGUtPnNtZ3Jf bG9jYXRvci5sb2NhdG9yLCBzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sIGJsb2NrTnVtKTsK IAogCS8qIGRldGVybWluZSBpdHMgaGFzaCBjb2RlIGFuZCBwYXJ0aXRpb24gbG9jayBJRCAqLwog CW5ld0hhc2ggPSBCdWZUYWJsZUhhc2hDb2RlKCZuZXdUYWcpOwpAQCAtMTI1NywxMCArMTI2NSwx MSBAQCBCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwg Rm9ya051bWJlciBmb3JrTnVtLAogCQkJCX0KIAogCQkJCS8qIE9LLCBkbyB0aGUgSS9PICovCi0J CQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfV1JJVEVfRElSVFlfU1RBUlQoZm9ya051bSwgYmxv Y2tOdW0sCi0JCQkJCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09p ZCwKLQkJCQkJCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0J CQkJCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlcik7CisJ CQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfV1JJVEVfRElSVFlfU1RBUlQoc2ZpbGUtPnNtZ3Jf bG9jYXRvci5mb3JrbnVtLAorCQkJCQkJCQkJCQkJCQkgIGJsb2NrTnVtLAorCQkJCQkJCQkJCQkJ CQkgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkJCQkJCSAg c2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJCQkJCQkgIHNmaWxl LT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIpOwogCiAJCQkJRmx1c2hCdWZmZXIoYnVm LCBOVUxMKTsKIAkJCQlMV0xvY2tSZWxlYXNlKEJ1ZmZlckRlc2NyaXB0b3JHZXRDb250ZW50TG9j ayhidWYpKTsKQEAgLTEyNjgsMTAgKzEyNzcsMTEgQEAgQnVmZmVyQWxsb2MoU01nclJlbGF0aW9u IHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCQlTY2hl ZHVsZUJ1ZmZlclRhZ0ZvcldyaXRlYmFjaygmQmFja2VuZFdyaXRlYmFja0NvbnRleHQsCiAJCQkJ CQkJCQkJCSAgJmJ1Zi0+dGFnKTsKIAotCQkJCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1dSSVRF X0RJUlRZX0RPTkUoZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJCQkJCQkJCSBzbWdyLT5zbWdy X3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJCQkJCQkgc21nci0+c21ncl9ybG9j YXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCQkJCQkgc21nci0+c21ncl9ybG9jYXRvci5s b2NhdG9yLnJlbE51bWJlcik7CisJCQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfV1JJVEVfRElS VFlfRE9ORShzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sCisJCQkJCQkJCQkJCQkJCSBibG9j a051bSwKKwkJCQkJCQkJCQkJCQkJIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNPaWQs CisJCQkJCQkJCQkJCQkJCSBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJ CQkJCQkJCQkJCSBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyKTsKIAkJCX0K IAkJCWVsc2UKIAkJCXsKQEAgLTE0MjcsNyArMTQzNyw3IEBAIEJ1ZmZlckFsbG9jKFNNZ3JSZWxh dGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJYnVm X3N0YXRlICY9IH4oQk1fVkFMSUQgfCBCTV9ESVJUWSB8IEJNX0pVU1RfRElSVElFRCB8CiAJCQkJ ICAgQk1fQ0hFQ0tQT0lOVF9ORUVERUQgfCBCTV9JT19FUlJPUiB8IEJNX1BFUk1BTkVOVCB8CiAJ CQkJICAgQlVGX1VTQUdFQ09VTlRfTUFTSyk7Ci0JaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBF UlNJU1RFTkNFX1BFUk1BTkVOVCB8fCBmb3JrTnVtID09IElOSVRfRk9SS05VTSkKKwlpZiAocmVs cGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UIHx8IHNmaWxlLT5zbWdyX2xv Y2F0b3IuZm9ya251bSA9PSBJTklUX0ZPUktOVU0pCiAJCWJ1Zl9zdGF0ZSB8PSBCTV9UQUdfVkFM SUQgfCBCTV9QRVJNQU5FTlQgfCBCVUZfVVNBR0VDT1VOVF9PTkU7CiAJZWxzZQogCQlidWZfc3Rh dGUgfD0gQk1fVEFHX1ZBTElEIHwgQlVGX1VTQUdFQ09VTlRfT05FOwpAQCAtMTY0MCw3ICsxNjUw LDcgQEAgUmVsZWFzZUFuZFJlYWRCdWZmZXIoQnVmZmVyIGJ1ZmZlciwKIAkJCQkJIFJlbGF0aW9u IHJlbGF0aW9uLAogCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tOdW0pCiB7Ci0JRm9ya051bWJlcglm b3JrTnVtID0gTUFJTl9GT1JLTlVNOworCUZvcmtOdW1iZXIJZm9ya251bSA9IE1BSU5fRk9SS05V TTsKIAlCdWZmZXJEZXNjICpidWZIZHI7CiAKIAlpZiAoQnVmZmVySXNWYWxpZChidWZmZXIpKQpA QCAtMTY1MSw3ICsxNjYxLDcgQEAgUmVsZWFzZUFuZFJlYWRCdWZmZXIoQnVmZmVyIGJ1ZmZlciwK IAkJCWJ1ZkhkciA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSk7CiAJCQlp ZiAoYnVmSGRyLT50YWcuYmxvY2tOdW0gPT0gYmxvY2tOdW0gJiYKIAkJCQlCdWZUYWdNYXRjaGVz UmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnLCAmcmVsYXRpb24tPnJkX2xvY2F0b3IpICYmCi0J CQkJQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50YWcpID09IGZvcmtOdW0pCisJCQkJQnVmVGFn R2V0Rm9ya051bSgmYnVmSGRyLT50YWcpID09IGZvcmtudW0pCiAJCQkJcmV0dXJuIGJ1ZmZlcjsK IAkJCVJlc291cmNlT3duZXJGb3JnZXRCdWZmZXIoQ3VycmVudFJlc291cmNlT3duZXIsIGJ1ZmZl cik7CiAJCQlMb2NhbFJlZkNvdW50Wy1idWZmZXIgLSAxXS0tOwpAQCAtMTY2Miw3ICsxNjcyLDcg QEAgUmVsZWFzZUFuZFJlYWRCdWZmZXIoQnVmZmVyIGJ1ZmZlciwKIAkJCS8qIHdlIGhhdmUgcGlu LCBzbyBpdCdzIG9rIHRvIGV4YW1pbmUgdGFnIHdpdGhvdXQgc3BpbmxvY2sgKi8KIAkJCWlmIChi dWZIZHItPnRhZy5ibG9ja051bSA9PSBibG9ja051bSAmJgogCQkJCUJ1ZlRhZ01hdGNoZXNSZWxG aWxlTG9jYXRvcigmYnVmSGRyLT50YWcsICZyZWxhdGlvbi0+cmRfbG9jYXRvcikgJiYKLQkJCQlC dWZUYWdHZXRGb3JrTnVtKCZidWZIZHItPnRhZykgPT0gZm9ya051bSkKKwkJCQlCdWZUYWdHZXRG b3JrTnVtKCZidWZIZHItPnRhZykgPT0gZm9ya251bSkKIAkJCQlyZXR1cm4gYnVmZmVyOwogCQkJ VW5waW5CdWZmZXIoYnVmSGRyKTsKIAkJfQpAQCAtMjgxMyw3ICsyODIzLDcgQEAgQnVmZmVyR2V0 VGFnKEJ1ZmZlciBidWZmZXIsIFJlbEZpbGVMb2NhdG9yICpybG9jYXRvciwgRm9ya051bWJlciAq Zm9ya251bSwKICAqIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyLiAgSWYgbm90LCBwYXNzIE5VTEwu CiAgKi8KIHN0YXRpYyB2b2lkCi1GbHVzaEJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIFNNZ3JSZWxh dGlvbiByZWxuKQorRmx1c2hCdWZmZXIoQnVmZmVyRGVzYyAqYnVmLCBTTWdyRmlsZUhhbmRsZSBz ZmlsZSkKIHsKIAlYTG9nUmVjUHRyCXJlY3B0cjsKIAlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJj YWxsYmFjazsKQEAgLTI4MzgsMTQgKzI4NDgsMTQgQEAgRmx1c2hCdWZmZXIoQnVmZmVyRGVzYyAq YnVmLCBTTWdyUmVsYXRpb24gcmVsbikKIAllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxi YWNrOwogCiAJLyogRmluZCBzbWdyIHJlbGF0aW9uIGZvciBidWZmZXIgKi8KLQlpZiAocmVsbiA9 PSBOVUxMKQotCQlyZWxuID0gc21ncm9wZW4oQnVmVGFnR2V0UmVsRmlsZUxvY2F0b3IoJmJ1Zi0+ dGFnKSwgSW52YWxpZEJhY2tlbmRJZCk7CisJaWYgKHNmaWxlID09IE5VTEwpCisJCXNmaWxlID0g c21ncm9wZW4oQnVmVGFnR2V0UmVsRmlsZUxvY2F0b3IoJmJ1Zi0+dGFnKSwgSW52YWxpZEJhY2tl bmRJZCwgQnVmVGFnR2V0Rm9ya051bSgmYnVmLT50YWcpKTsKIAotCVRSQUNFX1BPU1RHUkVTUUxf QlVGRkVSX0ZMVVNIX1NUQVJUKEJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zi0+dGFnKSwKKwlUUkFDRV9Q T1NUR1JFU1FMX0JVRkZFUl9GTFVTSF9TVEFSVChzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0s CiAJCQkJCQkJCQkJYnVmLT50YWcuYmxvY2tOdW0sCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9j YXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCQlyZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IuZGJPaWQsCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJl cik7CisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJ CQkJCQlzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJCQkJc2ZpbGUt PnNtZ3JfbG9jYXRvci5sb2NhdG9yLnJlbE51bWJlcik7CiAKIAlidWZfc3RhdGUgPSBMb2NrQnVm SGRyKGJ1Zik7CiAKQEAgLTI5MDEsOCArMjkxMSw3IEBAIEZsdXNoQnVmZmVyKEJ1ZmZlckRlc2Mg KmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4pCiAJLyoKIAkgKiBidWZUb1dyaXRlIGlzIGVpdGhlciB0 aGUgc2hhcmVkIGJ1ZmZlciBvciBhIGNvcHksIGFzIGFwcHJvcHJpYXRlLgogCSAqLwotCXNtZ3J3 cml0ZShyZWxuLAotCQkJICBCdWZUYWdHZXRGb3JrTnVtKCZidWYtPnRhZyksCisJc21ncndyaXRl KHNmaWxlLAogCQkJICBidWYtPnRhZy5ibG9ja051bSwKIAkJCSAgYnVmVG9Xcml0ZSwKIAkJCSAg ZmFsc2UpOwpAQCAtMjkyMywxMSArMjkzMiwxMSBAQCBGbHVzaEJ1ZmZlcihCdWZmZXJEZXNjICpi dWYsIFNNZ3JSZWxhdGlvbiByZWxuKQogCSAqLwogCVRlcm1pbmF0ZUJ1ZmZlcklPKGJ1ZiwgdHJ1 ZSwgMCk7CiAKLQlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9GTFVTSF9ET05FKEJ1ZlRhZ0dldEZv cmtOdW0oJmJ1Zi0+dGFnKSwKKwlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9GTFVTSF9ET05FKHNm aWxlLT5zbWdyX2xvY2F0b3IuZm9ya251bSwKIAkJCQkJCQkJCSAgIGJ1Zi0+dGFnLmJsb2NrTnVt LAotCQkJCQkJCQkJICAgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJ CQkJCSAgIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCSAgIHJl bG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIpOworCQkJCQkJCQkJICAgc2ZpbGUt PnNtZ3JfbG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCSAgIHNmaWxlLT5zbWdyX2xv Y2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJCSAgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9j YXRvci5yZWxOdW1iZXIpOwogCiAJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCiAJ ZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwpAQCAtMjk0Miw3ICsy OTUxLDcgQEAgRmx1c2hCdWZmZXIoQnVmZmVyRGVzYyAqYnVmLCBTTWdyUmVsYXRpb24gcmVsbikK ICAqIGl0IG1pZ2h0IG5vdCBiZS4KICAqLwogQmxvY2tOdW1iZXIKLVJlbGF0aW9uR2V0TnVtYmVy T2ZCbG9ja3NJbkZvcmsoUmVsYXRpb24gcmVsYXRpb24sIEZvcmtOdW1iZXIgZm9ya051bSkKK1Jl bGF0aW9uR2V0TnVtYmVyT2ZCbG9ja3NJbkZvcmsoUmVsYXRpb24gcmVsYXRpb24sIEZvcmtOdW1i ZXIgZm9ya251bSkKIHsKIAlpZiAoUkVMS0lORF9IQVNfVEFCTEVfQU0ocmVsYXRpb24tPnJkX3Jl bC0+cmVsa2luZCkpCiAJewpAQCAtMjk1NCwxMyArMjk2MywxMyBAQCBSZWxhdGlvbkdldE51bWJl ck9mQmxvY2tzSW5Gb3JrKFJlbGF0aW9uIHJlbGF0aW9uLCBGb3JrTnVtYmVyIGZvcmtOdW0pCiAJ CSAqLwogCQl1aW50NjQJCXN6Ynl0ZXM7CiAKLQkJc3pieXRlcyA9IHRhYmxlX3JlbGF0aW9uX3Np emUocmVsYXRpb24sIGZvcmtOdW0pOworCQlzemJ5dGVzID0gdGFibGVfcmVsYXRpb25fc2l6ZShy ZWxhdGlvbiwgZm9ya251bSk7CiAKIAkJcmV0dXJuIChzemJ5dGVzICsgKEJMQ0tTWiAtIDEpKSAv IEJMQ0tTWjsKIAl9CiAJZWxzZSBpZiAoUkVMS0lORF9IQVNfU1RPUkFHRShyZWxhdGlvbi0+cmRf cmVsLT5yZWxraW5kKSkKIAl7Ci0JCXJldHVybiBzbWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3Io cmVsYXRpb24pLCBmb3JrTnVtKTsKKwkJcmV0dXJuIHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0U21n cihyZWxhdGlvbiwgZm9ya251bSkpOwogCX0KIAllbHNlCiAJCUFzc2VydChmYWxzZSk7CkBAIC0z MDIzLDYgKzMwMzIsNyBAQCBCdWZmZXJHZXRMU05BdG9taWMoQnVmZmVyIGJ1ZmZlcikKIAogCWJ1 Zl9zdGF0ZSA9IExvY2tCdWZIZHIoYnVmSGRyKTsKIAlsc24gPSBQYWdlR2V0TFNOKHBhZ2UpOwor CQogCVVubG9ja0J1ZkhkcihidWZIZHIsIGJ1Zl9zdGF0ZSk7CiAKIAlyZXR1cm4gbHNuOwpAQCAt MzA1MCwyNiArMzA2MCwyMCBAQCBCdWZmZXJHZXRMU05BdG9taWMoQnVmZmVyIGJ1ZmZlcikKICAq IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgKi8KIHZvaWQKLURyb3BSZWxhdGlvbkJ1ZmZlcnMoU01nclJlbGF0aW9u IHNtZ3JfcmVsbiwgRm9ya051bWJlciAqZm9ya051bSwKK0Ryb3BSZWxhdGlvbkJ1ZmZlcnMoUmVs RmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kLCBGb3JrTnVtYmVyICpmb3Jr bnVtLAogCQkJCQlpbnQgbmZvcmtzLCBCbG9ja051bWJlciAqZmlyc3REZWxCbG9jaykKIHsKIAlp bnQJCQlpOwogCWludAkJCWo7Ci0JUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yOwogCUJs b2NrTnVtYmVyIG5Gb3JrQmxvY2tbTUFYX0ZPUktOVU1dOwogCXVpbnQ2NAkJbkJsb2Nrc1RvSW52 YWxpZGF0ZSA9IDA7CiAKLQlybG9jYXRvciA9IHNtZ3JfcmVsbi0+c21ncl9ybG9jYXRvcjsKLQog CS8qIElmIGl0J3MgYSBsb2NhbCByZWxhdGlvbiwgaXQncyBsb2NhbGJ1Zi5jJ3MgcHJvYmxlbS4g Ki8KLQlpZiAoUmVsRmlsZUxvY2F0b3JCYWNrZW5kSXNUZW1wKHJsb2NhdG9yKSkKKwlpZiAoYmFj a2VuZCA9PSBNeUJhY2tlbmRJZCkKIAl7Ci0JCWlmIChybG9jYXRvci5iYWNrZW5kID09IE15QmFj a2VuZElkKQotCQl7Ci0JCQlmb3IgKGogPSAwOyBqIDwgbmZvcmtzOyBqKyspCi0JCQkJRHJvcFJl bGF0aW9uTG9jYWxCdWZmZXJzKHJsb2NhdG9yLmxvY2F0b3IsIGZvcmtOdW1bal0sCi0JCQkJCQkJ CQkJIGZpcnN0RGVsQmxvY2tbal0pOwotCQl9CisJCWZvciAoaiA9IDA7IGogPCBuZm9ya3M7IGor KykKKwkJCURyb3BSZWxhdGlvbkxvY2FsQnVmZmVycyhybG9jYXRvciwgZm9ya251bVtqXSwKKwkJ CQkJCQkJCSBmaXJzdERlbEJsb2NrW2pdKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzA5OCw3ICsz MTAyLDEwIEBAIERyb3BSZWxhdGlvbkJ1ZmZlcnMoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwgRm9y a051bWJlciAqZm9ya051bSwKIAlmb3IgKGkgPSAwOyBpIDwgbmZvcmtzOyBpKyspCiAJewogCQkv KiBHZXQgdGhlIG51bWJlciBvZiBibG9ja3MgZm9yIGEgcmVsYXRpb24ncyBmb3JrICovCi0JCW5G b3JrQmxvY2tbaV0gPSBzbWdybmJsb2Nrc19jYWNoZWQoc21ncl9yZWxuLCBmb3JrTnVtW2ldKTsK KwkJU01nckZpbGVIYW5kbGUgc2ZpbGU7CisKKwkJc2ZpbGUgPSBzbWdyb3BlbihybG9jYXRvciwg YmFja2VuZCwgZm9ya251bVtpXSk7CisJCW5Gb3JrQmxvY2tbaV0gPSBzbWdybmJsb2Nrc19jYWNo ZWQoc2ZpbGUpOwogCiAJCWlmIChuRm9ya0Jsb2NrW2ldID09IEludmFsaWRCbG9ja051bWJlcikK IAkJewpAQCAtMzExOCw3ICszMTI1LDcgQEAgRHJvcFJlbGF0aW9uQnVmZmVycyhTTWdyUmVsYXRp b24gc21ncl9yZWxuLCBGb3JrTnVtYmVyICpmb3JrTnVtLAogCQluQmxvY2tzVG9JbnZhbGlkYXRl IDwgQlVGX0RST1BfRlVMTF9TQ0FOX1RIUkVTSE9MRCkKIAl7CiAJCWZvciAoaiA9IDA7IGogPCBu Zm9ya3M7IGorKykKLQkJCUZpbmRBbmREcm9wUmVsYXRpb25CdWZmZXJzKHJsb2NhdG9yLmxvY2F0 b3IsIGZvcmtOdW1bal0sCisJCQlGaW5kQW5kRHJvcFJlbGF0aW9uQnVmZmVycyhybG9jYXRvciwg Zm9ya251bVtqXSwKIAkJCQkJCQkJCSAgIG5Gb3JrQmxvY2tbal0sIGZpcnN0RGVsQmxvY2tbal0p OwogCQlyZXR1cm47CiAJfQpAQCAtMzE0MSwxOCArMzE0OCwxOCBAQCBEcm9wUmVsYXRpb25CdWZm ZXJzKFNNZ3JSZWxhdGlvbiBzbWdyX3JlbG4sIEZvcmtOdW1iZXIgKmZvcmtOdW0sCiAJCSAqIGZh bHNlIHBvc2l0aXZlcyBhcmUgc2FmZSBiZWNhdXNlIHdlJ2xsIHJlY2hlY2sgYWZ0ZXIgZ2V0dGlu ZyB0aGUKIAkJICogYnVmZmVyIGxvY2suCiAJCSAqCi0JCSAqIFdlIGNvdWxkIGNoZWNrIGZvcmtO dW0gYW5kIGJsb2NrTnVtIGFzIHdlbGwgYXMgdGhlIHJsb2NhdG9yLCBidXQKKwkJICogV2UgY291 bGQgY2hlY2sgZm9ya251bSBhbmQgYmxvY2tOdW0gYXMgd2VsbCBhcyB0aGUgcmxvY2F0b3IsIGJ1 dAogCQkgKiB0aGUgaW5jcmVtZW50YWwgd2luIGZyb20gZG9pbmcgc28gc2VlbXMgc21hbGwuCiAJ CSAqLwotCQlpZiAoIUJ1ZlRhZ01hdGNoZXNSZWxGaWxlTG9jYXRvcigmYnVmSGRyLT50YWcsICZy bG9jYXRvci5sb2NhdG9yKSkKKwkJaWYgKCFCdWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1 Zkhkci0+dGFnLCAmcmxvY2F0b3IpKQogCQkJY29udGludWU7CiAKIAkJYnVmX3N0YXRlID0gTG9j a0J1ZkhkcihidWZIZHIpOwogCiAJCWZvciAoaiA9IDA7IGogPCBuZm9ya3M7IGorKykKIAkJewot CQkJaWYgKEJ1ZlRhZ01hdGNoZXNSZWxGaWxlTG9jYXRvcigmYnVmSGRyLT50YWcsICZybG9jYXRv ci5sb2NhdG9yKSAmJgotCQkJCUJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhkci0+dGFnKSA9PSBmb3Jr TnVtW2pdICYmCisJCQlpZiAoQnVmVGFnTWF0Y2hlc1JlbEZpbGVMb2NhdG9yKCZidWZIZHItPnRh ZywgJnJsb2NhdG9yKSAmJgorCQkJCUJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhkci0+dGFnKSA9PSBm b3JrbnVtW2pdICYmCiAJCQkJYnVmSGRyLT50YWcuYmxvY2tOdW0gPj0gZmlyc3REZWxCbG9ja1tq XSkKIAkJCXsKIAkJCQlJbnZhbGlkYXRlQnVmZmVyKGJ1Zkhkcik7CS8qIHJlbGVhc2VzIHNwaW5s b2NrICovCkBAIC0zMTczLDExICszMTgwLDEwIEBAIERyb3BSZWxhdGlvbkJ1ZmZlcnMoU01nclJl bGF0aW9uIHNtZ3JfcmVsbiwgRm9ya051bWJlciAqZm9ya051bSwKICAqCQktLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog ICovCiB2b2lkCi1Ecm9wUmVsYXRpb25zQWxsQnVmZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JfcmVs biwgaW50IG5sb2NhdG9ycykKK0Ryb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFJlbEZpbGVMb2NhdG9y QmFja2VuZCAqcmxvY2F0b3JzLCBpbnQgbmxvY2F0b3JzKQogewogCWludAkJCWk7CiAJaW50CQkJ biA9IDA7Ci0JU01nclJlbGF0aW9uICpyZWxzOwogCUJsb2NrTnVtYmVyICgqYmxvY2spW01BWF9G T1JLTlVNICsgMV07CiAJdWludDY0CQluQmxvY2tzVG9JbnZhbGlkYXRlID0gMDsKIAlSZWxGaWxl TG9jYXRvciAqbG9jYXRvcnM7CkBAIC0zMTg3LDE4ICszMTkzLDE4IEBAIERyb3BSZWxhdGlvbnNB bGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncl9yZWxuLCBpbnQgbmxvY2F0b3JzKQogCWlmIChu bG9jYXRvcnMgPT0gMCkKIAkJcmV0dXJuOwogCi0JcmVscyA9IHBhbGxvYyhzaXplb2YoU01nclJl bGF0aW9uKSAqIG5sb2NhdG9ycyk7CS8qIG5vbi1sb2NhbCByZWxhdGlvbnMgKi8KKwlsb2NhdG9y cyA9IHBhbGxvYyhzaXplb2YoUmVsRmlsZUxvY2F0b3IpICogbmxvY2F0b3JzKTsJLyogbm9uLWxv Y2FsIHJlbGF0aW9ucyAqLwogCiAJLyogSWYgaXQncyBhIGxvY2FsIHJlbGF0aW9uLCBpdCdzIGxv Y2FsYnVmLmMncyBwcm9ibGVtLiAqLwogCWZvciAoaSA9IDA7IGkgPCBubG9jYXRvcnM7IGkrKykK IAl7Ci0JCWlmIChSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAoc21ncl9yZWxuW2ldLT5zbWdy X3Jsb2NhdG9yKSkKKwkJaWYgKHJsb2NhdG9yc1tpXS5iYWNrZW5kICE9IEludmFsaWRCYWNrZW5k SWQpCiAJCXsKLQkJCWlmIChzbWdyX3JlbG5baV0tPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCA9PSBN eUJhY2tlbmRJZCkKLQkJCQlEcm9wUmVsYXRpb25BbGxMb2NhbEJ1ZmZlcnMoc21ncl9yZWxuW2ld LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IpOworCQkJaWYgKHJsb2NhdG9yc1tpXS5iYWNrZW5kID09 IE15QmFja2VuZElkKQorCQkJCURyb3BSZWxhdGlvbkFsbExvY2FsQnVmZmVycyhybG9jYXRvcnNb aV0ubG9jYXRvcik7CiAJCX0KIAkJZWxzZQotCQkJcmVsc1tuKytdID0gc21ncl9yZWxuW2ldOwor CQkJbG9jYXRvcnNbbisrXSA9IHJsb2NhdG9yc1tpXS5sb2NhdG9yOwogCX0KIAogCS8qCkBAIC0z MjA3LDcgKzMyMTMsNyBAQCBEcm9wUmVsYXRpb25zQWxsQnVmZmVycyhTTWdyUmVsYXRpb24gKnNt Z3JfcmVsbiwgaW50IG5sb2NhdG9ycykKIAkgKi8KIAlpZiAobiA9PSAwKQogCXsKLQkJcGZyZWUo cmVscyk7CisJCXBmcmVlKGxvY2F0b3JzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzIyNywxMiAr MzIzMywxMyBAQCBEcm9wUmVsYXRpb25zQWxsQnVmZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JfcmVs biwgaW50IG5sb2NhdG9ycykKIAkJZm9yIChpbnQgaiA9IDA7IGogPD0gTUFYX0ZPUktOVU07IGor KykKIAkJewogCQkJLyogR2V0IHRoZSBudW1iZXIgb2YgYmxvY2tzIGZvciBhIHJlbGF0aW9uJ3Mg Zm9yay4gKi8KLQkJCWJsb2NrW2ldW2pdID0gc21ncm5ibG9ja3NfY2FjaGVkKHJlbHNbaV0sIGop OworCQkJU01nckZpbGVIYW5kbGUgc2ZpbGUgPSBzbWdyb3Blbihsb2NhdG9yc1tpXSwgSW52YWxp ZEJhY2tlbmRJZCwgaik7CisJCQlibG9ja1tpXVtqXSA9IHNtZ3JuYmxvY2tzX2NhY2hlZChzZmls ZSk7CiAKIAkJCS8qIFdlIG5lZWQgdG8gb25seSBjb25zaWRlciB0aGUgcmVsYXRpb24gZm9ya3Mg dGhhdCBleGlzdHMuICovCiAJCQlpZiAoYmxvY2tbaV1bal0gPT0gSW52YWxpZEJsb2NrTnVtYmVy KQogCQkJewotCQkJCWlmICghc21ncmV4aXN0cyhyZWxzW2ldLCBqKSkKKwkJCQlpZiAoIXNtZ3Jl eGlzdHMoc2ZpbGUpKQogCQkJCQljb250aW51ZTsKIAkJCQljYWNoZWQgPSBmYWxzZTsKIAkJCQli cmVhazsKQEAgLTMyNTgsMjAgKzMyNjUsMTcgQEAgRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01n clJlbGF0aW9uICpzbWdyX3JlbG4sIGludCBubG9jYXRvcnMpCiAJCQkJCWNvbnRpbnVlOwogCiAJ CQkJLyogZHJvcCBhbGwgdGhlIGJ1ZmZlcnMgZm9yIGEgcGFydGljdWxhciByZWxhdGlvbiBmb3Jr ICovCi0JCQkJRmluZEFuZERyb3BSZWxhdGlvbkJ1ZmZlcnMocmVsc1tpXS0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLAorCQkJCUZpbmRBbmREcm9wUmVsYXRpb25CdWZmZXJzKGxvY2F0b3JzW2ldLAog CQkJCQkJCQkJCSAgIGosIGJsb2NrW2ldW2pdLCAwKTsKIAkJCX0KIAkJfQogCiAJCXBmcmVlKGJs b2NrKTsKLQkJcGZyZWUocmVscyk7CisJCXBmcmVlKGxvY2F0b3JzKTsKIAkJcmV0dXJuOwogCX0K IAogCXBmcmVlKGJsb2NrKTsKLQlsb2NhdG9ycyA9IHBhbGxvYyhzaXplb2YoUmVsRmlsZUxvY2F0 b3IpICogbik7CS8qIG5vbi1sb2NhbCByZWxhdGlvbnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbjsg aSsrKQotCQlsb2NhdG9yc1tpXSA9IHJlbHNbaV0tPnNtZ3JfcmxvY2F0b3IubG9jYXRvcjsKIAog CS8qCiAJICogRm9yIGxvdyBudW1iZXIgb2YgcmVsYXRpb25zIHRvIGRyb3AganVzdCB1c2UgYSBz aW1wbGUgd2FsayB0aHJvdWdoLCB0bwpAQCAtMzMzMSw3ICszMzM1LDYgQEAgRHJvcFJlbGF0aW9u c0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdyX3JlbG4sIGludCBubG9jYXRvcnMpCiAJfQog CiAJcGZyZWUobG9jYXRvcnMpOwotCXBmcmVlKHJlbHMpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K QEAgLTMzNDQsNyArMzM0Nyw3IEBAIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlv biAqc21ncl9yZWxuLCBpbnQgbmxvY2F0b3JzKQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogc3RhdGlj IHZvaWQKLUZpbmRBbmREcm9wUmVsYXRpb25CdWZmZXJzKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9y LCBGb3JrTnVtYmVyIGZvcmtOdW0sCitGaW5kQW5kRHJvcFJlbGF0aW9uQnVmZmVycyhSZWxGaWxl TG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJICAgQmxvY2tOdW1i ZXIgbkZvcmtCbG9jaywKIAkJCQkJCSAgIEJsb2NrTnVtYmVyIGZpcnN0RGVsQmxvY2spCiB7CkBA IC0zMzYwLDcgKzMzNjMsNyBAQCBGaW5kQW5kRHJvcFJlbGF0aW9uQnVmZmVycyhSZWxGaWxlTG9j YXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLAogCQl1aW50MzIJCWJ1Zl9zdGF0ZTsK IAogCQkvKiBjcmVhdGUgYSB0YWcgc28gd2UgY2FuIGxvb2t1cCB0aGUgYnVmZmVyICovCi0JCUlu aXRCdWZmZXJUYWcoJmJ1ZlRhZywgJnJsb2NhdG9yLCBmb3JrTnVtLCBjdXJCbG9jayk7CisJCUlu aXRCdWZmZXJUYWcoJmJ1ZlRhZywgJnJsb2NhdG9yLCBmb3JrbnVtLCBjdXJCbG9jayk7CiAKIAkJ LyogZGV0ZXJtaW5lIGl0cyBoYXNoIGNvZGUgYW5kIHBhcnRpdGlvbiBsb2NrIElEICovCiAJCWJ1 Zkhhc2ggPSBCdWZUYWJsZUhhc2hDb2RlKCZidWZUYWcpOwpAQCAtMzM4NSw3ICszMzg4LDcgQEAg RmluZEFuZERyb3BSZWxhdGlvbkJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtO dW1iZXIgZm9ya051bSwKIAkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihidWZIZHIpOwogCiAJCWlm IChCdWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnLCAmcmxvY2F0b3IpICYm Ci0JCQlCdWZUYWdHZXRGb3JrTnVtKCZidWZIZHItPnRhZykgPT0gZm9ya051bSAmJgorCQkJQnVm VGFnR2V0Rm9ya051bSgmYnVmSGRyLT50YWcpID09IGZvcmtudW0gJiYKIAkJCWJ1Zkhkci0+dGFn LmJsb2NrTnVtID49IGZpcnN0RGVsQmxvY2spCiAJCQlJbnZhbGlkYXRlQnVmZmVyKGJ1Zkhkcik7 CS8qIHJlbGVhc2VzIHNwaW5sb2NrICovCiAJCWVsc2UKQEAgLTM1NDAsOCArMzU0Myw3IEBAIEZs dXNoUmVsYXRpb25CdWZmZXJzKFJlbGF0aW9uIHJlbCkKIAogCQkJCVBhZ2VTZXRDaGVja3N1bUlu cGxhY2UobG9jYWxwYWdlLCBidWZIZHItPnRhZy5ibG9ja051bSk7CiAKLQkJCQlzbWdyd3JpdGUo UmVsYXRpb25HZXRTbWdyKHJlbCksCi0JCQkJCQkgIEJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhkci0+ dGFnKSwKKwkJCQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHJlbCwgQnVmVGFnR2V0Rm9ya051 bSgmYnVmSGRyLT50YWcpKSwKIAkJCQkJCSAgYnVmSGRyLT50YWcuYmxvY2tOdW0sCiAJCQkJCQkg IGxvY2FscGFnZSwKIAkJCQkJCSAgZmFsc2UpOwpAQCAtMzU4MSw3ICszNTgzLDcgQEAgRmx1c2hS ZWxhdGlvbkJ1ZmZlcnMoUmVsYXRpb24gcmVsKQogCQl7CiAJCQlQaW5CdWZmZXJfTG9ja2VkKGJ1 Zkhkcik7CiAJCQlMV0xvY2tBY3F1aXJlKEJ1ZmZlckRlc2NyaXB0b3JHZXRDb250ZW50TG9jayhi dWZIZHIpLCBMV19TSEFSRUQpOwotCQkJRmx1c2hCdWZmZXIoYnVmSGRyLCBSZWxhdGlvbkdldFNt Z3IocmVsKSk7CisJCQlGbHVzaEJ1ZmZlcihidWZIZHIsIFJlbGF0aW9uR2V0U21ncihyZWwsIGJ1 Zkhkci0+dGFnLmZvcmtOdW0pKTsKIAkJCUxXTG9ja1JlbGVhc2UoQnVmZmVyRGVzY3JpcHRvckdl dENvbnRlbnRMb2NrKGJ1ZkhkcikpOwogCQkJVW5waW5CdWZmZXIoYnVmSGRyKTsKIAkJfQpAQCAt MzYwMCwyNSArMzYwMiwyMCBAQCBGbHVzaFJlbGF0aW9uQnVmZmVycyhSZWxhdGlvbiByZWwpCiAg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogICovCiB2b2lkCi1GbHVzaFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJl bGF0aW9uICpzbWdycywgaW50IG5yZWxzKQorRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFJlbEZp bGVMb2NhdG9yICpyZWxzLCBpbnQgbnJlbHMpCiB7CiAJaW50CQkJaTsKLQlTTWdyU29ydEFycmF5 ICpzcmVsczsKKwlSZWxGaWxlTG9jYXRvciAqbG9jYXRvcnMgPSBOVUxMOwogCWJvb2wJCXVzZV9i c2VhcmNoOwogCiAJaWYgKG5yZWxzID09IDApCiAJCXJldHVybjsKIAogCS8qIGZpbGwtaW4gYXJy YXkgZm9yIHFzb3J0ICovCi0Jc3JlbHMgPSBwYWxsb2Moc2l6ZW9mKFNNZ3JTb3J0QXJyYXkpICog bnJlbHMpOworCWxvY2F0b3JzID0gcGFsbG9jKHNpemVvZihSZWxGaWxlTG9jYXRvcikgKiBucmVs cyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJlbHM7IGkrKykKLQl7Ci0JCUFzc2VydCghUmVsRmls ZUxvY2F0b3JCYWNrZW5kSXNUZW1wKHNtZ3JzW2ldLT5zbWdyX3Jsb2NhdG9yKSk7Ci0KLQkJc3Jl bHNbaV0ucmxvY2F0b3IgPSBzbWdyc1tpXS0+c21ncl9ybG9jYXRvci5sb2NhdG9yOwotCQlzcmVs c1tpXS5zcmVsID0gc21ncnNbaV07Ci0JfQorCQlsb2NhdG9yc1tpXSA9IHJlbHNbaV07CiAKIAkv KgogCSAqIFNhdmUgdGhlIGJzZWFyY2ggb3ZlcmhlYWQgZm9yIGxvdyBudW1iZXIgb2YgcmVsYXRp b25zIHRvIHN5bmMuIFNlZQpAQCAtMzYyNiwxNiArMzYyMywxNiBAQCBGbHVzaFJlbGF0aW9uc0Fs bEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdycywgaW50IG5yZWxzKQogCSAqLwogCXVzZV9ic2Vh cmNoID0gbnJlbHMgPiBSRUxTX0JTRUFSQ0hfVEhSRVNIT0xEOwogCi0JLyogc29ydCB0aGUgbGlz dCBvZiBTTWdyUmVsYXRpb25zIGlmIG5lY2Vzc2FyeSAqLworCS8qIHNvcnQgdGhlIGxpc3Qgb2Yg bG9jYXRvcnMgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKHVzZV9ic2VhcmNoKQotCQlwZ19xc29ydChz cmVscywgbnJlbHMsIHNpemVvZihTTWdyU29ydEFycmF5KSwgcmxvY2F0b3JfY29tcGFyYXRvcik7 CisJCXBnX3Fzb3J0KGxvY2F0b3JzLCBucmVscywgc2l6ZW9mKFJlbEZpbGVMb2NhdG9yKSwgcmxv Y2F0b3JfY29tcGFyYXRvcik7CiAKIAkvKiBNYWtlIHN1cmUgd2UgY2FuIGhhbmRsZSB0aGUgcGlu IGluc2lkZSB0aGUgbG9vcCAqLwogCVJlc291cmNlT3duZXJFbmxhcmdlQnVmZmVycyhDdXJyZW50 UmVzb3VyY2VPd25lcik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTkJ1ZmZlcnM7IGkrKykKIAl7Ci0J CVNNZ3JTb3J0QXJyYXkgKnNyZWxlbnQgPSBOVUxMOworCQlSZWxGaWxlTG9jYXRvciAqZm91bmQg PSBOVUxMOwogCQlCdWZmZXJEZXNjICpidWZIZHIgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGkpOwog CQl1aW50MzIJCWJ1Zl9zdGF0ZTsKIApAQCAtMzY1MCw5ICszNjQ3LDkgQEAgRmx1c2hSZWxhdGlv bnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncnMsIGludCBucmVscykKIAogCQkJZm9yIChq ID0gMDsgaiA8IG5yZWxzOyBqKyspCiAJCQl7Ci0JCQkJaWYgKEJ1ZlRhZ01hdGNoZXNSZWxGaWxl TG9jYXRvcigmYnVmSGRyLT50YWcsICZzcmVsc1tqXS5ybG9jYXRvcikpCisJCQkJaWYgKEJ1ZlRh Z01hdGNoZXNSZWxGaWxlTG9jYXRvcigmYnVmSGRyLT50YWcsICZsb2NhdG9yc1tqXSkpCiAJCQkJ ewotCQkJCQlzcmVsZW50ID0gJnNyZWxzW2pdOworCQkJCQlmb3VuZCA9ICZsb2NhdG9yc1tqXTsK IAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpAQCAtMzY2MiwyNCArMzY1OSwyNiBAQCBGbHVzaFJl bGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdycywgaW50IG5yZWxzKQogCQkJUmVs RmlsZUxvY2F0b3IgcmxvY2F0b3I7CiAKIAkJCXJsb2NhdG9yID0gQnVmVGFnR2V0UmVsRmlsZUxv Y2F0b3IoJmJ1Zkhkci0+dGFnKTsKLQkJCXNyZWxlbnQgPSBic2VhcmNoKChjb25zdCB2b2lkICop ICYocmxvY2F0b3IpLAotCQkJCQkJCSAgc3JlbHMsIG5yZWxzLCBzaXplb2YoU01nclNvcnRBcnJh eSksCisJCQlmb3VuZCA9IGJzZWFyY2goKGNvbnN0IHZvaWQgKikgJihybG9jYXRvciksCisJCQkJ CQkJICBsb2NhdG9ycywgbnJlbHMsIHNpemVvZihSZWxGaWxlTG9jYXRvciksCiAJCQkJCQkJICBy bG9jYXRvcl9jb21wYXJhdG9yKTsKIAkJfQogCiAJCS8qIGJ1ZmZlciBkb2Vzbid0IGJlbG9uZyB0 byBhbnkgb2YgdGhlIGdpdmVuIHJlbGZpbGVsb2NhdG9yczsgc2tpcCBpdCAqLwotCQlpZiAoc3Jl bGVudCA9PSBOVUxMKQorCQlpZiAoZm91bmQgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCisJCS8q IEZJWE1FOiBjYWNoZSBTTWdyRmlsZUhhbmRsZXMgZm9yIHRoZSByZWxzLCBhbmQgcGFzcyB0byBG bHVzaEJ1ZmZlciAqLworCiAJCVJlc2VydmVQcml2YXRlUmVmQ291bnRFbnRyeSgpOwogCiAJCWJ1 Zl9zdGF0ZSA9IExvY2tCdWZIZHIoYnVmSGRyKTsKLQkJaWYgKEJ1ZlRhZ01hdGNoZXNSZWxGaWxl TG9jYXRvcigmYnVmSGRyLT50YWcsICZzcmVsZW50LT5ybG9jYXRvcikgJiYKKwkJaWYgKEJ1ZlRh Z01hdGNoZXNSZWxGaWxlTG9jYXRvcigmYnVmSGRyLT50YWcsIGZvdW5kKSAmJgogCQkJKGJ1Zl9z dGF0ZSAmIChCTV9WQUxJRCB8IEJNX0RJUlRZKSkgPT0gKEJNX1ZBTElEIHwgQk1fRElSVFkpKQog CQl7CiAJCQlQaW5CdWZmZXJfTG9ja2VkKGJ1Zkhkcik7CiAJCQlMV0xvY2tBY3F1aXJlKEJ1ZmZl ckRlc2NyaXB0b3JHZXRDb250ZW50TG9jayhidWZIZHIpLCBMV19TSEFSRUQpOwotCQkJRmx1c2hC dWZmZXIoYnVmSGRyLCBzcmVsZW50LT5zcmVsKTsKKwkJCUZsdXNoQnVmZmVyKGJ1ZkhkciwgTlVM TCk7CiAJCQlMV0xvY2tSZWxlYXNlKEJ1ZmZlckRlc2NyaXB0b3JHZXRDb250ZW50TG9jayhidWZI ZHIpKTsKIAkJCVVucGluQnVmZmVyKGJ1Zkhkcik7CiAJCX0KQEAgLTM2ODcsNyArMzY4Niw3IEBA IEZsdXNoUmVsYXRpb25zQWxsQnVmZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JzLCBpbnQgbnJlbHMp CiAJCQlVbmxvY2tCdWZIZHIoYnVmSGRyLCBidWZfc3RhdGUpOwogCX0KIAotCXBmcmVlKHNyZWxz KTsKKwlwZnJlZShsb2NhdG9ycyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzcwMyw3ICsz NzAyLDcgQEAgRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncnMsIGlu dCBucmVscykKIHN0YXRpYyB2b2lkCiBSZWxhdGlvbkNvcHlTdG9yYWdlVXNpbmdCdWZmZXIoUmVs RmlsZUxvY2F0b3Igc3JjbG9jYXRvciwKIAkJCQkJCQkgICBSZWxGaWxlTG9jYXRvciBkc3Rsb2Nh dG9yLAotCQkJCQkJCSAgIEZvcmtOdW1iZXIgZm9ya051bSwgYm9vbCBwZXJtYW5lbnQpCisJCQkJ CQkJICAgRm9ya051bWJlciBmb3JrbnVtLCBib29sIHBlcm1hbmVudCkKIHsKIAlCdWZmZXIJCXNy Y0J1ZjsKIAlCdWZmZXIJCWRzdEJ1ZjsKQEAgLTM3MjEsMTEgKzM3MjAsMTEgQEAgUmVsYXRpb25D b3B5U3RvcmFnZVVzaW5nQnVmZmVyKFJlbEZpbGVMb2NhdG9yIHNyY2xvY2F0b3IsCiAJICogY2Fu IHNraXAgaXQgd2hlbiBjb3B5aW5nIGFueSBmb3JrIG9mIGFuIHVubG9nZ2VkIHJlbGF0aW9uIG90 aGVyIHRoYW4KIAkgKiB0aGUgaW5pdCBmb3JrLgogCSAqLwotCXVzZV93YWwgPSBYTG9nSXNOZWVk ZWQoKSAmJiAocGVybWFuZW50IHx8IGZvcmtOdW0gPT0gSU5JVF9GT1JLTlVNKTsKKwl1c2Vfd2Fs ID0gWExvZ0lzTmVlZGVkKCkgJiYgKHBlcm1hbmVudCB8fCBmb3JrbnVtID09IElOSVRfRk9SS05V TSk7CiAKIAkvKiBHZXQgbnVtYmVyIG9mIGJsb2NrcyBpbiB0aGUgc291cmNlIHJlbGF0aW9uLiAq LwotCW5ibG9ja3MgPSBzbWdybmJsb2NrcyhzbWdyb3BlbihzcmNsb2NhdG9yLCBJbnZhbGlkQmFj a2VuZElkKSwKLQkJCQkJCSAgZm9ya051bSk7CisJbmJsb2NrcyA9IHNtZ3JuYmxvY2tzKHNtZ3Jv cGVuKHNyY2xvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtudW0pKTsKKwkJCQkJCSAgCiAK IAkvKiBOb3RoaW5nIHRvIGNvcHk7IGp1c3QgcmV0dXJuLiAqLwogCWlmIChuYmxvY2tzID09IDAp CkBAIC0zNzM2LDcgKzM3MzUsNyBAQCBSZWxhdGlvbkNvcHlTdG9yYWdlVXNpbmdCdWZmZXIoUmVs RmlsZUxvY2F0b3Igc3JjbG9jYXRvciwKIAkgKiByZWxhdGlvbiBiZWZvcmUgc3RhcnRpbmcgdG8g Y29weSBibG9jayBieSBibG9jay4KIAkgKi8KIAltZW1zZXQoYnVmLmRhdGEsIDAsIEJMQ0tTWik7 Ci0Jc21ncmV4dGVuZChzbWdyb3Blbihkc3Rsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkKSwgZm9y a051bSwgbmJsb2NrcyAtIDEsCisJc21ncmV4dGVuZChzbWdyb3Blbihkc3Rsb2NhdG9yLCBJbnZh bGlkQmFja2VuZElkLCBmb3JrbnVtKSwgbmJsb2NrcyAtIDEsCiAJCQkgICBidWYuZGF0YSwgdHJ1 ZSk7CiAKIAkvKiBUaGlzIGlzIGEgYnVsayBvcGVyYXRpb24sIHNvIHVzZSBidWZmZXIgYWNjZXNz IHN0cmF0ZWdpZXMuICovCkBAIC0zNzQ5LDE0ICszNzQ4LDE0IEBAIFJlbGF0aW9uQ29weVN0b3Jh Z2VVc2luZ0J1ZmZlcihSZWxGaWxlTG9jYXRvciBzcmNsb2NhdG9yLAogCQlDSEVDS19GT1JfSU5U RVJSVVBUUygpOwogCiAJCS8qIFJlYWQgYmxvY2sgZnJvbSBzb3VyY2UgcmVsYXRpb24uICovCi0J CXNyY0J1ZiA9IFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUoc3JjbG9jYXRvciwgZm9ya051bSwg Ymxrbm8sCisJCXNyY0J1ZiA9IFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUoc3JjbG9jYXRvciwg Zm9ya251bSwgYmxrbm8sCiAJCQkJCQkJCQkJICAgUkJNX05PUk1BTCwgYnN0cmF0ZWd5X3NyYywK IAkJCQkJCQkJCQkgICBwZXJtYW5lbnQpOwogCQlMb2NrQnVmZmVyKHNyY0J1ZiwgQlVGRkVSX0xP Q0tfU0hBUkUpOwogCQlzcmNQYWdlID0gQnVmZmVyR2V0UGFnZShzcmNCdWYpOwogCiAJCS8qIFVz ZSBQX05FVyB0byBleHRlbmQgdGhlIGRlc3RpbmF0aW9uIHJlbGF0aW9uLiAqLwotCQlkc3RCdWYg PSBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlKGRzdGxvY2F0b3IsIGZvcmtOdW0sIGJsa25vLAor CQlkc3RCdWYgPSBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlKGRzdGxvY2F0b3IsIGZvcmtudW0s IGJsa25vLAogCQkJCQkJCQkJCSAgIFJCTV9OT1JNQUwsIGJzdHJhdGVneV9kc3QsCiAJCQkJCQkJ CQkJICAgcGVybWFuZW50KTsKIAkJTG9ja0J1ZmZlcihkc3RCdWYsIEJVRkZFUl9MT0NLX0VYQ0xV U0lWRSk7CkBAIC0zNzk0LDcgKzM3OTMsNiBAQCB2b2lkCiBDcmVhdGVBbmRDb3B5UmVsYXRpb25E YXRhKFJlbEZpbGVMb2NhdG9yIHNyY19ybG9jYXRvciwKIAkJCQkJCSAgUmVsRmlsZUxvY2F0b3Ig ZHN0X3Jsb2NhdG9yLCBib29sIHBlcm1hbmVudCkKIHsKLQlSZWxGaWxlTG9jYXRvckJhY2tlbmQg cmxvY2F0b3I7CiAJY2hhcgkJcmVscGVyc2lzdGVuY2U7CiAKIAkvKiBTZXQgdGhlIHJlbHBlcnNp c3RlbmNlLiAqLwpAQCAtMzgxNCwzNCArMzgxMiwzMCBAQCBDcmVhdGVBbmRDb3B5UmVsYXRpb25E YXRhKFJlbEZpbGVMb2NhdG9yIHNyY19ybG9jYXRvciwKIAkJCQkJCQkJICAgcGVybWFuZW50KTsK IAogCS8qIGNvcHkgdGhvc2UgZXh0cmEgZm9ya3MgdGhhdCBleGlzdCAqLwotCWZvciAoRm9ya051 bWJlciBmb3JrTnVtID0gTUFJTl9GT1JLTlVNICsgMTsKLQkJIGZvcmtOdW0gPD0gTUFYX0ZPUktO VU07IGZvcmtOdW0rKykKKwlmb3IgKEZvcmtOdW1iZXIgZm9ya251bSA9IE1BSU5fRk9SS05VTSAr IDE7CisJCSBmb3JrbnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrbnVtKyspCiAJewotCQlpZiAoc21n cmV4aXN0cyhzbWdyb3BlbihzcmNfcmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpLCBmb3JrTnVt KSkKKwkJaWYgKHNtZ3JleGlzdHMoc21ncm9wZW4oc3JjX3Jsb2NhdG9yLCBJbnZhbGlkQmFja2Vu ZElkLCBmb3JrbnVtKSkpCiAJCXsKLQkJCXNtZ3JjcmVhdGUoc21ncm9wZW4oZHN0X3Jsb2NhdG9y LCBJbnZhbGlkQmFja2VuZElkKSwgZm9ya051bSwgZmFsc2UpOworCQkJc21ncmNyZWF0ZShzbWdy b3Blbihkc3RfcmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtudW0pLCBmYWxzZSk7CiAK IAkJCS8qCiAJCQkgKiBXQUwgbG9nIGNyZWF0aW9uIGlmIHRoZSByZWxhdGlvbiBpcyBwZXJzaXN0 ZW50LCBvciB0aGlzIGlzIHRoZQogCQkJICogaW5pdCBmb3JrIG9mIGFuIHVubG9nZ2VkIHJlbGF0 aW9uLgogCQkJICovCi0JCQlpZiAocGVybWFuZW50IHx8IGZvcmtOdW0gPT0gSU5JVF9GT1JLTlVN KQotCQkJCWxvZ19zbWdyY3JlYXRlKCZkc3RfcmxvY2F0b3IsIGZvcmtOdW0pOworCQkJaWYgKHBl cm1hbmVudCB8fCBmb3JrbnVtID09IElOSVRfRk9SS05VTSkKKwkJCQlsb2dfc21ncmNyZWF0ZSgm ZHN0X3Jsb2NhdG9yLCBmb3JrbnVtKTsKIAogCQkJLyogQ29weSBhIGZvcmsncyBkYXRhLCBibG9j ayBieSBibG9jay4gKi8KLQkJCVJlbGF0aW9uQ29weVN0b3JhZ2VVc2luZ0J1ZmZlcihzcmNfcmxv Y2F0b3IsIGRzdF9ybG9jYXRvciwgZm9ya051bSwKKwkJCVJlbGF0aW9uQ29weVN0b3JhZ2VVc2lu Z0J1ZmZlcihzcmNfcmxvY2F0b3IsIGRzdF9ybG9jYXRvciwgZm9ya251bSwKIAkJCQkJCQkJCQkg ICBwZXJtYW5lbnQpOwogCQl9CiAJfQogCi0JLyogY2xvc2Ugc291cmNlIGFuZCBkZXN0aW5hdGlv biBzbWdyIGlmIGV4aXN0cy4gKi8KLQlybG9jYXRvci5iYWNrZW5kID0gSW52YWxpZEJhY2tlbmRJ ZDsKIAotCXJsb2NhdG9yLmxvY2F0b3IgPSBzcmNfcmxvY2F0b3I7Ci0Jc21ncmNsb3NlcmVsbG9j YXRvcihybG9jYXRvcik7CisJc21ncmNsb3NlcmVsbG9jYXRvcihzcmNfcmxvY2F0b3IsIEludmFs aWRCYWNrZW5kSWQpOwogCi0JcmxvY2F0b3IubG9jYXRvciA9IGRzdF9ybG9jYXRvcjsKLQlzbWdy Y2xvc2VyZWxsb2NhdG9yKHJsb2NhdG9yKTsKKwlzbWdyY2xvc2VyZWxsb2NhdG9yKGRzdF9ybG9j YXRvciwgSW52YWxpZEJhY2tlbmRJZCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDk2Miw3 ICs0OTU2LDcgQEAgSXNzdWVQZW5kaW5nV3JpdGViYWNrcyhXcml0ZWJhY2tDb250ZXh0ICpjb250 ZXh0KQogCXsKIAkJUGVuZGluZ1dyaXRlYmFjayAqY3VyOwogCQlQZW5kaW5nV3JpdGViYWNrICpu ZXh0OwotCQlTTWdyUmVsYXRpb24gcmVsbjsKKwkJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAJCWlu dAkJCWFoZWFkOwogCQlCdWZmZXJUYWcJdGFnOwogCQlSZWxGaWxlTG9jYXRvciBjdXJybG9jYXRv cjsKQEAgLTUwMDIsOCArNDk5Niw4IEBAIElzc3VlUGVuZGluZ1dyaXRlYmFja3MoV3JpdGViYWNr Q29udGV4dCAqY29udGV4dCkKIAkJaSArPSBhaGVhZDsKIAogCQkvKiBhbmQgZmluYWxseSB0ZWxs IHRoZSBrZXJuZWwgdG8gd3JpdGUgdGhlIGRhdGEgdG8gc3RvcmFnZSAqLwotCQlyZWxuID0gc21n cm9wZW4oY3VycmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOwotCQlzbWdyd3JpdGViYWNrKHJl bG4sIEJ1ZlRhZ0dldEZvcmtOdW0oJnRhZyksIHRhZy5ibG9ja051bSwgbmJsb2Nrcyk7CisJCXNm aWxlID0gc21ncm9wZW4oY3VycmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIEJ1ZlRhZ0dldEZv cmtOdW0oJnRhZykpOworCQlzbWdyd3JpdGViYWNrKHNmaWxlLCB0YWcuYmxvY2tOdW0sIG5ibG9j a3MpOwogCX0KIAogCWNvbnRleHQtPm5yX3BlbmRpbmcgPSAwOwpAQCAtNTAyNSwzICs1MDE5LDI5 IEBAIFRlc3RGb3JPbGRTbmFwc2hvdF9pbXBsKFNuYXBzaG90IHNuYXBzaG90LCBSZWxhdGlvbiBy ZWxhdGlvbikKIAkJCQkoZXJyY29kZShFUlJDT0RFX1NOQVBTSE9UX1RPT19PTEQpLAogCQkJCSBl cnJtc2coInNuYXBzaG90IHRvbyBvbGQiKSkpOwogfQorCisvKgorICogQ2hlY2sgaWYgYSBidWZm ZXIgdGFnIGlzIGN1cnJlbnRseSBtYXBwZWQuCisgKgorICogWFhYIER1YmlvdXMgc2VtYW50aWNz OyBuZWVkZWQgb25seSBmb3IgbXVsdGl4YWN0J3MgaGFuZGxpbmcgZm9yCisgKiBpbmNvbnNpc3Rl bnQgc3RhdGVzLgorICovCitib29sCitCdWZmZXJQcm9iZShSZWxGaWxlTG9jYXRvciBybG9jYXRv ciwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja051bSkKK3sKKwlCdWZmZXJU YWcJdGFnOworCXVpbnQzMgkJaGFzaDsKKwlMV0xvY2sJICAgKnBhcnRpdGlvbkxvY2s7CisJaW50 CQkJYnVmX2lkOworCisJSW5pdEJ1ZmZlclRhZygmdGFnLCAmcmxvY2F0b3IsIGZvcmtudW0sIGJs b2NrTnVtKTsKKworCWhhc2ggPSBCdWZUYWJsZUhhc2hDb2RlKCZ0YWcpOworCXBhcnRpdGlvbkxv Y2sgPSBCdWZNYXBwaW5nUGFydGl0aW9uTG9jayhoYXNoKTsKKworCUxXTG9ja0FjcXVpcmUocGFy dGl0aW9uTG9jaywgTFdfU0hBUkVEKTsKKwlidWZfaWQgPSBCdWZUYWJsZUxvb2t1cCgmdGFnLCBo YXNoKTsKKwlMV0xvY2tSZWxlYXNlKHBhcnRpdGlvbkxvY2spOworCisJcmV0dXJuIGJ1Zl9pZCA+ PSAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYu YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2xvY2FsYnVmLmMKaW5kZXggNzFlMmE1ZmVj ZDUuLjUyZmEyNTgxZjQ0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9s b2NhbGJ1Zi5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2xvY2FsYnVmLmMKQEAg LTYxLDE0ICs2MSwxMyBAQCBzdGF0aWMgQmxvY2sgR2V0TG9jYWxCdWZmZXJTdG9yYWdlKHZvaWQp OwogICogTm8tb3AgaWYgcHJlZmV0Y2hpbmcgaXNuJ3QgY29tcGlsZWQgaW4uCiAgKi8KIFByZWZl dGNoQnVmZmVyUmVzdWx0Ci1QcmVmZXRjaExvY2FsQnVmZmVyKFNNZ3JSZWxhdGlvbiBzbWdyLCBG b3JrTnVtYmVyIGZvcmtOdW0sCi0JCQkJCUJsb2NrTnVtYmVyIGJsb2NrTnVtKQorUHJlZmV0Y2hM b2NhbEJ1ZmZlcihTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0pCiB7 CiAJUHJlZmV0Y2hCdWZmZXJSZXN1bHQgcmVzdWx0ID0ge0ludmFsaWRCdWZmZXIsIGZhbHNlfTsK IAlCdWZmZXJUYWcJbmV3VGFnOwkJCS8qIGlkZW50aXR5IG9mIHJlcXVlc3RlZCBibG9jayAqLwog CUxvY2FsQnVmZmVyTG9va3VwRW50ICpocmVzdWx0OwogCi0JSW5pdEJ1ZmZlclRhZygmbmV3VGFn LCAmc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLCBmb3JrTnVtLCBibG9ja051bSk7CisJSW5p dEJ1ZmZlclRhZygmbmV3VGFnLCAmc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLCBzZmlsZS0+ c21ncl9sb2NhdG9yLmZvcmtudW0sIGJsb2NrTnVtKTsKIAogCS8qIEluaXRpYWxpemUgbG9jYWwg YnVmZmVycyBpZiBmaXJzdCByZXF1ZXN0IGluIHRoaXMgc2Vzc2lvbiAqLwogCWlmIChMb2NhbEJ1 Zkhhc2ggPT0gTlVMTCkKQEAgLTg3LDcgKzg2LDcgQEAgUHJlZmV0Y2hMb2NhbEJ1ZmZlcihTTWdy UmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVtLAogCXsKICNpZmRlZiBVU0VfUFJFRkVU Q0gKIAkJLyogTm90IGluIGJ1ZmZlcnMsIHNvIGluaXRpYXRlIHByZWZldGNoICovCi0JCXNtZ3Jw cmVmZXRjaChzbWdyLCBmb3JrTnVtLCBibG9ja051bSk7CisJCXNtZ3JwcmVmZXRjaChzZmlsZSwg YmxvY2tOdW0pOwogCQlyZXN1bHQuaW5pdGlhdGVkX2lvID0gdHJ1ZTsKICNlbmRpZgkJCQkJCQkv KiBVU0VfUFJFRkVUQ0ggKi8KIAl9CkBAIC0xMDYsOCArMTA1LDcgQEAgUHJlZmV0Y2hMb2NhbEJ1 ZmZlcihTTWdyUmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVtLAogICogKGhlbmNlLCB1 c2FnZV9jb3VudCBpcyBhbHdheXMgYWR2YW5jZWQpLgogICovCiBCdWZmZXJEZXNjICoKLUxvY2Fs QnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tO dW1iZXIgYmxvY2tOdW0sCi0JCQkJIGJvb2wgKmZvdW5kUHRyKQorTG9jYWxCdWZmZXJBbGxvYyhT TWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sIGJvb2wgKmZvdW5kUHRy KQogewogCUJ1ZmZlclRhZwluZXdUYWc7CQkJLyogaWRlbnRpdHkgb2YgcmVxdWVzdGVkIGJsb2Nr ICovCiAJTG9jYWxCdWZmZXJMb29rdXBFbnQgKmhyZXN1bHQ7CkBAIC0xMTcsNyArMTE1LDcgQEAg TG9jYWxCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVtLCBC bG9ja051bWJlciBibG9ja051bSwKIAlib29sCQlmb3VuZDsKIAl1aW50MzIJCWJ1Zl9zdGF0ZTsK IAotCUluaXRCdWZmZXJUYWcoJm5ld1RhZywgJnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwg Zm9ya051bSwgYmxvY2tOdW0pOworCUluaXRCdWZmZXJUYWcoJm5ld1RhZywgJnNmaWxlLT5zbWdy X2xvY2F0b3IubG9jYXRvciwgc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBibG9ja051bSk7 CiAKIAkvKiBJbml0aWFsaXplIGxvY2FsIGJ1ZmZlcnMgaWYgZmlyc3QgcmVxdWVzdCBpbiB0aGlz IHNlc3Npb24gKi8KIAlpZiAoTG9jYWxCdWZIYXNoID09IE5VTEwpCkBAIC0xMzQsNyArMTMyLDcg QEAgTG9jYWxCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVt LCBCbG9ja051bWJlciBibG9ja051bSwKIAkJQXNzZXJ0KEJ1ZmZlclRhZ3NFcXVhbCgmYnVmSGRy LT50YWcsICZuZXdUYWcpKTsKICNpZmRlZiBMQkRFQlVHCiAJCWZwcmludGYoc3RkZXJyLCAiTEIg QUxMT0MgKCV1LCVkLCVkKSAlZFxuIiwKLQkJCQlzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu cmVsTnVtYmVyLCBmb3JrTnVtLCBibG9ja051bSwgLWIgLSAxKTsKKwkJCQlzZmlsZS0+c21ncl9s b2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLCBzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sIGJs b2NrTnVtLCAtYiAtIDEpOwogI2VuZGlmCiAJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21pY19yZWFkX3Uz MigmYnVmSGRyLT5zdGF0ZSk7CiAKQEAgLTE2Miw3ICsxNjAsNyBAQCBMb2NhbEJ1ZmZlckFsbG9j KFNNZ3JSZWxhdGlvbiBzbWdyLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2Nr TnVtLAogCiAjaWZkZWYgTEJERUJVRwogCWZwcmludGYoc3RkZXJyLCAiTEIgQUxMT0MgKCV1LCVk LCVkKSAlZFxuIiwKLQkJCXNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsIGZv cmtOdW0sIGJsb2NrTnVtLAorCQkJc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnJlbE51bWJl ciwgc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBibG9ja051bSwKIAkJCS1uZXh0RnJlZUxv Y2FsQnVmIC0gMSk7CiAjZW5kaWYKIApAQCAtMjExLDE3ICsyMDksMTYgQEAgTG9jYWxCdWZmZXJB bGxvYyhTTWdyUmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBi bG9ja051bSwKIAkgKi8KIAlpZiAoYnVmX3N0YXRlICYgQk1fRElSVFkpCiAJewotCQlTTWdyUmVs YXRpb24gb3JlbG47CisJCVNNZ3JGaWxlSGFuZGxlIG9maWxlOwogCQlQYWdlCQlsb2NhbHBhZ2Ug PSAoY2hhciAqKSBMb2NhbEJ1ZkhkckdldEJsb2NrKGJ1Zkhkcik7CiAKLQkJLyogRmluZCBzbWdy IHJlbGF0aW9uIGZvciBidWZmZXIgKi8KLQkJb3JlbG4gPSBzbWdyb3BlbihCdWZUYWdHZXRSZWxG aWxlTG9jYXRvcigmYnVmSGRyLT50YWcpLCBNeUJhY2tlbmRJZCk7CisJCS8qIEZpbmQgc21nciBm aWxlIGhhbmRsZSBmb3IgYnVmZmVyICovCisJCW9maWxlID0gc21ncm9wZW4oQnVmVGFnR2V0UmVs RmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnKSwgTXlCYWNrZW5kSWQsIEJ1ZlRhZ0dldEZvcmtOdW0o JmJ1Zkhkci0+dGFnKSk7CiAKIAkJUGFnZVNldENoZWNrc3VtSW5wbGFjZShsb2NhbHBhZ2UsIGJ1 Zkhkci0+dGFnLmJsb2NrTnVtKTsKIAogCQkvKiBBbmQgd3JpdGUuLi4gKi8KLQkJc21ncndyaXRl KG9yZWxuLAotCQkJCSAgQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50YWcpLAorCQlzbWdyd3Jp dGUob2ZpbGUsCiAJCQkJICBidWZIZHItPnRhZy5ibG9ja051bSwKIAkJCQkgIGxvY2FscGFnZSwK IAkJCQkgIGZhbHNlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvZnJlZXNwYWNl L2ZyZWVzcGFjZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9mcmVlc3BhY2UvZnJlZXNwYWNlLmMK aW5kZXggM2U5NjkzYjI5M2IuLmE4MjVhMGI1YWYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9z dG9yYWdlL2ZyZWVzcGFjZS9mcmVlc3BhY2UuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Zy ZWVzcGFjZS9mcmVlc3BhY2UuYwpAQCAtMjcxLDcgKzI3MSw3IEBAIEZyZWVTcGFjZU1hcFByZXBh cmVUcnVuY2F0ZVJlbChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJICogSWYg bm8gRlNNIGhhcyBiZWVuIGNyZWF0ZWQgeWV0IGZvciB0aGlzIHJlbGF0aW9uLCB0aGVyZSdzIG5v dGhpbmcgdG8KIAkgKiB0cnVuY2F0ZS4KIAkgKi8KLQlpZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25H ZXRTbWdyKHJlbCksIEZTTV9GT1JLTlVNKSkKKwlpZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRT bWdyKHJlbCwgRlNNX0ZPUktOVU0pKSkKIAkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKIAog CS8qIEdldCB0aGUgbG9jYXRpb24gaW4gdGhlIEZTTSBvZiB0aGUgZmlyc3QgcmVtb3ZlZCBoZWFw IGJsb2NrICovCkBAIC0zMTcsNyArMzE3LDcgQEAgRnJlZVNwYWNlTWFwUHJlcGFyZVRydW5jYXRl UmVsKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIAllbHNlCiAJewogCQluZXdf bmZzbWJsb2NrcyA9IGZzbV9sb2dpY2FsX3RvX3BoeXNpY2FsKGZpcnN0X3JlbW92ZWRfYWRkcmVz cyk7Ci0JCWlmIChzbWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgRlNNX0ZPUktOVU0p IDw9IG5ld19uZnNtYmxvY2tzKQorCQlpZiAoc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdyKHJl bCwgRlNNX0ZPUktOVU0pKSA8PSBuZXdfbmZzbWJsb2NrcykKIAkJCXJldHVybiBJbnZhbGlkQmxv Y2tOdW1iZXI7CS8qIG5vdGhpbmcgdG8gZG87IHRoZSBGU00gd2FzIGFscmVhZHkKIAkJCQkJCQkJ CQkgKiBzbWFsbGVyICovCiAJfQpAQCAtNTMyLDE0ICs1MzIsMTQgQEAgZnNtX3JlYWRidWYoUmVs YXRpb24gcmVsLCBGU01BZGRyZXNzIGFkZHIsIGJvb2wgZXh0ZW5kKQogewogCUJsb2NrTnVtYmVy IGJsa25vID0gZnNtX2xvZ2ljYWxfdG9fcGh5c2ljYWwoYWRkcik7CiAJQnVmZmVyCQlidWY7Ci0J U01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgZnNtX2ZpbGU7CiAKIAkvKgogCSAq IENhdXRpb246IHJlLXVzaW5nIHRoaXMgc21nciBwb2ludGVyIGNvdWxkIGZhaWwgaWYgdGhlIHJl bGNhY2hlIGVudHJ5CiAJICogZ2V0cyBjbG9zZWQuICBJdCdzIHNhZmUgYXMgbG9uZyBhcyB3ZSBv bmx5IGRvIHNtZ3ItbGV2ZWwgb3BlcmF0aW9ucwogCSAqIGJldHdlZW4gaGVyZSBhbmQgdGhlIGxh c3QgdXNlIG9mIHRoZSBwb2ludGVyLgogCSAqLwotCXJlbG4gPSBSZWxhdGlvbkdldFNtZ3IocmVs KTsKKwlmc21fZmlsZSA9IFJlbGF0aW9uR2V0U21ncihyZWwsIEZTTV9GT1JLTlVNKTsKIAogCS8q CiAJICogSWYgd2UgaGF2ZW4ndCBjYWNoZWQgdGhlIHNpemUgb2YgdGhlIEZTTSB5ZXQsIGNoZWNr IGl0IGZpcnN0LiAgQWxzbwpAQCAtNTQ3LDE5ICs1NDcsMTkgQEAgZnNtX3JlYWRidWYoUmVsYXRp b24gcmVsLCBGU01BZGRyZXNzIGFkZHIsIGJvb2wgZXh0ZW5kKQogCSAqIHZhbHVlIG1pZ2h0IGJl IHN0YWxlLiAgKFdlIHNlbmQgc21nciBpbnZhbCBtZXNzYWdlcyBvbiB0cnVuY2F0aW9uLCBidXQK IAkgKiBub3Qgb24gZXh0ZW5zaW9uLikKIAkgKi8KLQlpZiAocmVsbi0+c21ncl9jYWNoZWRfbmJs b2Nrc1tGU01fRk9SS05VTV0gPT0gSW52YWxpZEJsb2NrTnVtYmVyIHx8Ci0JCWJsa25vID49IHJl bG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbRlNNX0ZPUktOVU1dKQorCWlmIChmc21fZmlsZS0+c21n cl9jYWNoZWRfbmJsb2NrcyA9PSBJbnZhbGlkQmxvY2tOdW1iZXIgfHwKKwkJYmxrbm8gPj0gZnNt X2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MpCiAJewogCQkvKiBJbnZhbGlkYXRlIHRoZSBjYWNo ZSBzbyBzbWdybmJsb2NrcyBhc2tzIHRoZSBrZXJuZWwuICovCi0JCXJlbG4tPnNtZ3JfY2FjaGVk X25ibG9ja3NbRlNNX0ZPUktOVU1dID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQlpZiAoc21ncmV4 aXN0cyhyZWxuLCBGU01fRk9SS05VTSkpCi0JCQlzbWdybmJsb2NrcyhyZWxuLCBGU01fRk9SS05V TSk7CisJCWZzbV9maWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0gSW52YWxpZEJsb2NrTnVtYmVy OworCQlpZiAoc21ncmV4aXN0cyhmc21fZmlsZSkpCisJCQlzbWdybmJsb2Nrcyhmc21fZmlsZSk7 CiAJCWVsc2UKLQkJCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbRlNNX0ZPUktOVU1dID0gMDsK KwkJCWZzbV9maWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0gMDsKIAl9CiAKIAkvKiBIYW5kbGUg cmVxdWVzdHMgYmV5b25kIEVPRiAqLwotCWlmIChibGtubyA+PSByZWxuLT5zbWdyX2NhY2hlZF9u YmxvY2tzW0ZTTV9GT1JLTlVNXSkKKwlpZiAoYmxrbm8gPj0gZnNtX2ZpbGUtPnNtZ3JfY2FjaGVk X25ibG9ja3MpCiAJewogCQlpZiAoZXh0ZW5kKQogCQkJZnNtX2V4dGVuZChyZWwsIGJsa25vICsg MSk7CkBAIC02MDksNyArNjA5LDcgQEAgZnNtX2V4dGVuZChSZWxhdGlvbiByZWwsIEJsb2NrTnVt YmVyIGZzbV9uYmxvY2tzKQogewogCUJsb2NrTnVtYmVyIGZzbV9uYmxvY2tzX25vdzsKIAlQR0Fs aWduZWRCbG9jayBwZzsKLQlTTWdyUmVsYXRpb24gcmVsbjsKKwlTTWdyRmlsZUhhbmRsZSBmc21f ZmlsZTsKIAogCVBhZ2VJbml0KChQYWdlKSBwZy5kYXRhLCBCTENLU1osIDApOwogCkBAIC02MzAs MjkgKzYzMCwyOCBAQCBmc21fZXh0ZW5kKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgZnNtX25i bG9ja3MpCiAJICogZ2V0cyBjbG9zZWQuICBJdCdzIHNhZmUgYXMgbG9uZyBhcyB3ZSBvbmx5IGRv IHNtZ3ItbGV2ZWwgb3BlcmF0aW9ucwogCSAqIGJldHdlZW4gaGVyZSBhbmQgdGhlIGxhc3QgdXNl IG9mIHRoZSBwb2ludGVyLgogCSAqLwotCXJlbG4gPSBSZWxhdGlvbkdldFNtZ3IocmVsKTsKKwlm c21fZmlsZSA9IFJlbGF0aW9uR2V0U21ncihyZWwsIEZTTV9GT1JLTlVNKTsKIAogCS8qCiAJICog Q3JlYXRlIHRoZSBGU00gZmlsZSBmaXJzdCBpZiBpdCBkb2Vzbid0IGV4aXN0LiAgSWYKIAkgKiBz bWdyX2NhY2hlZF9uYmxvY2tzW0ZTTV9GT1JLTlVNXSBpcyBwb3NpdGl2ZSB0aGVuIGl0IG11c3Qg ZXhpc3QsIG5vCiAJICogbmVlZCBmb3IgYW4gc21ncmV4aXN0cyBjYWxsLgogCSAqLwotCWlmICgo cmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0gPT0gMCB8fAotCQkgcmVsbi0+ c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0gPT0gSW52YWxpZEJsb2NrTnVtYmVyKSAm JgotCQkhc21ncmV4aXN0cyhyZWxuLCBGU01fRk9SS05VTSkpCi0JCXNtZ3JjcmVhdGUocmVsbiwg RlNNX0ZPUktOVU0sIGZhbHNlKTsKKwlpZiAoKGZzbV9maWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tz ID09IDAgfHwKKwkJIGZzbV9maWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID09IEludmFsaWRCbG9j a051bWJlcikgJiYKKwkJIXNtZ3JleGlzdHMoZnNtX2ZpbGUpKQorCQlzbWdyY3JlYXRlKGZzbV9m aWxlLCBmYWxzZSk7CiAKIAkvKiBJbnZhbGlkYXRlIGNhY2hlIHNvIHRoYXQgc21ncm5ibG9ja3Mo KSBhc2tzIHRoZSBrZXJuZWwuICovCi0JcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9S S05VTV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JZnNtX25ibG9ja3Nfbm93ID0gc21ncm5ibG9j a3MocmVsbiwgRlNNX0ZPUktOVU0pOworCWZzbV9maWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0g SW52YWxpZEJsb2NrTnVtYmVyOworCWZzbV9uYmxvY2tzX25vdyA9IHNtZ3JuYmxvY2tzKGZzbV9m aWxlKTsKIAogCS8qIEV4dGVuZCBhcyBuZWVkZWQuICovCiAJd2hpbGUgKGZzbV9uYmxvY2tzX25v dyA8IGZzbV9uYmxvY2tzKQogCXsKIAkJUGFnZVNldENoZWNrc3VtSW5wbGFjZSgoUGFnZSkgcGcu ZGF0YSwgZnNtX25ibG9ja3Nfbm93KTsKIAotCQlzbWdyZXh0ZW5kKHJlbG4sIEZTTV9GT1JLTlVN LCBmc21fbmJsb2Nrc19ub3csCi0JCQkJICAgcGcuZGF0YSwgZmFsc2UpOworCQlzbWdyZXh0ZW5k KGZzbV9maWxlLCBmc21fbmJsb2Nrc19ub3csIHBnLmRhdGEsIGZhbHNlKTsKIAkJZnNtX25ibG9j a3Nfbm93Kys7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNp LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKaW5kZXggOGYxZGVkNzMzOGYuLjg2 MDFlMWMwZGZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBAIC0xMTcsOSArMTE3LDcgQEAgQ2Fs Y3VsYXRlU2htZW1TaXplKGludCAqbnVtX3NlbWFwaG9yZXMpCiAJc2l6ZSA9IGFkZF9zaXplKHNp emUsIFhMb2dQcmVmZXRjaFNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgWExP R1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgWExvZ1JlY292ZXJ5U2htZW1T aXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBDTE9HU2htZW1TaXplKCkpOwogCXNpemUg PSBhZGRfc2l6ZShzaXplLCBDb21taXRUc1NobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUo c2l6ZSwgU1VCVFJBTlNTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFR3b1Bo YXNlU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCYWNrZ3JvdW5kV29ya2Vy U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBNdWx0aVhhY3RTaG1lbVNpemUo KSk7CkBAIC0yNDEsOSArMjM5LDcgQEAgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2 b2lkKQogCVhMT0dTaG1lbUluaXQoKTsKIAlYTG9nUHJlZmV0Y2hTaG1lbUluaXQoKTsKIAlYTG9n UmVjb3ZlcnlTaG1lbUluaXQoKTsKLQlDTE9HU2htZW1Jbml0KCk7CiAJQ29tbWl0VHNTaG1lbUlu aXQoKTsKLQlTVUJUUkFOU1NobWVtSW5pdCgpOwogCU11bHRpWGFjdFNobWVtSW5pdCgpOwogCUlu aXRCdWZmZXJQb29sKCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9w cmVkaWNhdGUuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwppbmRleCAx MWRlY2I3NGIyYS4uYjk5YTZmZmI1YjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9wcmVkaWNhdGUuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRl LmMKQEAgLTMxMywxNyArMzEzLDkgQEAKIAkoKHRhcmdldGhhc2gpIF4gKCh1aW50MzIpIFBvaW50 ZXJHZXREYXR1bSgocHJlZGljYXRlbG9ja3RhZyktPm15WGFjdCkpIFwKIAkgPDwgTE9HMl9OVU1f UFJFRElDQVRFTE9DS19QQVJUSVRJT05TKQogCi0KLS8qCi0gKiBUaGUgU0xSVSBidWZmZXIgYXJl YSB0aHJvdWdoIHdoaWNoIHdlIGFjY2VzcyB0aGUgb2xkIHhpZHMuCi0gKi8KLXN0YXRpYyBTbHJ1 Q3RsRGF0YSBTZXJpYWxTbHJ1Q3RsRGF0YTsKLQotI2RlZmluZSBTZXJpYWxTbHJ1Q3RsCQkJKCZT ZXJpYWxTbHJ1Q3RsRGF0YSkKLQogI2RlZmluZSBTRVJJQUxfUEFHRVNJWkUJCQlCTENLU1oKICNk ZWZpbmUgU0VSSUFMX0VOVFJZU0laRQkJCXNpemVvZihTZXJDb21taXRTZXFObykKLSNkZWZpbmUg U0VSSUFMX0VOVFJJRVNQRVJQQUdFCShTRVJJQUxfUEFHRVNJWkUgLyBTRVJJQUxfRU5UUllTSVpF KQorI2RlZmluZSBTRVJJQUxfRU5UUklFU1BFUlBBR0UJKChTRVJJQUxfUEFHRVNJWkUgLSBTaXpl T2ZQYWdlSGVhZGVyRGF0YSkgLyBTRVJJQUxfRU5UUllTSVpFKQogCiAvKgogICogU2V0IG1heGlt dW0gcGFnZXMgYmFzZWQgb24gdGhlIG51bWJlciBuZWVkZWQgdG8gdHJhY2sgYWxsIHRyYW5zYWN0 aW9ucy4KQEAgLTMzMiwxMiArMzI0LDEzIEBAIHN0YXRpYyBTbHJ1Q3RsRGF0YSBTZXJpYWxTbHJ1 Q3RsRGF0YTsKIAogI2RlZmluZSBTZXJpYWxOZXh0UGFnZShwYWdlKSAoKChwYWdlKSA+PSBTRVJJ QUxfTUFYX1BBR0UpID8gMCA6IChwYWdlKSArIDEpCiAKLSNkZWZpbmUgU2VyaWFsVmFsdWUoc2xv dG5vLCB4aWQpICgqKChTZXJDb21taXRTZXFObyAqKSBcCi0JKFNlcmlhbFNscnVDdGwtPnNoYXJl ZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIFwKKyNkZWZpbmUgU2VyaWFsVmFsdWUoYnVmZmVyLCB4 aWQpICgqKChTZXJDb21taXRTZXFObyAqKSBcCisJKFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQ YWdlKGJ1ZmZlcikpICsgXAogCSgoKCh1aW50MzIpICh4aWQpKSAlIFNFUklBTF9FTlRSSUVTUEVS UEFHRSkgKiBTRVJJQUxfRU5UUllTSVpFKSkpKQogCiAjZGVmaW5lIFNlcmlhbFBhZ2UoeGlkKQko KCh1aW50MzIpICh4aWQpKSAvIFNFUklBTF9FTlRSSUVTUEVSUEFHRSkKIAorCiB0eXBlZGVmIHN0 cnVjdCBTZXJpYWxDb250cm9sRGF0YQogewogCWludAkJCWhlYWRQYWdlOwkJLyogbmV3ZXN0IGlu aXRpYWxpemVkIHBhZ2UgKi8KQEAgLTc4NSwxMCArNzc4LDE0IEBAIFNlcmlhbFBhZ2VQcmVjZWRl c0xvZ2ljYWxseVVuaXRUZXN0cyh2b2lkKQogCSAqIHJlcXVpcmVzIGJ1cm5pbmcgfjJCIFhJRHMg aW4gc2luZ2xlLXVzZXIgbW9kZSwgYSBuZWdsaWdpYmxlCiAJICogcG9zc2liaWxpdHkuICBNb3Jl b3ZlciwgaWYgaXQgZG9lcyBoYXBwZW4sIHRoZSBjb25zZXF1ZW5jZSB3b3VsZCBiZQogCSAqIG1p bGQsIG5hbWVseSBhIG5ldyB0cmFuc2FjdGlvbiBmYWlsaW5nIGluIFNpbXBsZUxydVJlYWRQYWdl KCkuCisJICogCisJICogTk9URTogIEFmdGVyIGFkZGluZyBwYWdlIGhlYWRlcnMsIHRoZSBkZWZl Y3QgYWZmZWN0cyB0d28gcGFnZXMuCisJICogV2Ugbm93IGFzc2VydCBjb3JyZWN0IHRyZWF0bWVu dCBvZiBpdHMgc2Vjb25kIHRvIHByaW9yIHBhZ2UuCisJICogCiAJICovCiAJaGVhZFBhZ2UgPSBv bGRlc3RQYWdlOwogCXRhcmdldFBhZ2UgPSBuZXdlc3RQYWdlOwotCUFzc2VydChTZXJpYWxQYWdl UHJlY2VkZXNMb2dpY2FsbHkoaGVhZFBhZ2UsIHRhcmdldFBhZ2UgLSAxKSk7CisJQXNzZXJ0KFNl cmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseShoZWFkUGFnZSwgdGFyZ2V0UGFnZSAtIDIpKTsKICNp ZiAwCiAJQXNzZXJ0KFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseShoZWFkUGFnZSwgdGFyZ2V0 UGFnZSkpOwogI2VuZGlmCkBAIC04MDMsMTcgKzgwMCwxMCBAQCBTZXJpYWxJbml0KHZvaWQpCiB7 CiAJYm9vbAkJZm91bmQ7CiAKLQkvKgotCSAqIFNldCB1cCBTTFJVIG1hbmFnZW1lbnQgb2YgdGhl IHBnX3NlcmlhbCBkYXRhLgotCSAqLwotCVNlcmlhbFNscnVDdGwtPlBhZ2VQcmVjZWRlcyA9IFNl cmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseTsKLQlTaW1wbGVMcnVJbml0KFNlcmlhbFNscnVDdGws ICJTZXJpYWwiLAotCQkJCSAgTlVNX1NFUklBTF9CVUZGRVJTLCAwLCBTZXJpYWxTTFJVTG9jaywg InBnX3NlcmlhbCIsCi0JCQkJICBMV1RSQU5DSEVfU0VSSUFMX0JVRkZFUiwgU1lOQ19IQU5ETEVS X05PTkUpOwogI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKIAlTZXJpYWxQYWdlUHJlY2VkZXNM b2dpY2FsbHlVbml0VGVzdHMoKTsKICNlbmRpZgotCVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMo U2VyaWFsU2xydUN0bCwgU0VSSUFMX0VOVFJJRVNQRVJQQUdFKTsKKwlTbHJ1UGFnZVByZWNlZGVz VW5pdFRlc3RzKFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseSwgU0VSSUFMX0VOVFJJRVNQRVJQ QUdFKTsKIAogCS8qCiAJICogQ3JlYXRlIG9yIGF0dGFjaCB0byB0aGUgU2VyaWFsQ29udHJvbCBz dHJ1Y3R1cmUuCkBAIC04NDMsOSArODMzLDkgQEAgU2VyaWFsQWRkKFRyYW5zYWN0aW9uSWQgeGlk LCBTZXJDb21taXRTZXFObyBtaW5Db25mbGljdENvbW1pdFNlcU5vKQogewogCVRyYW5zYWN0aW9u SWQgdGFpbFhpZDsKIAlpbnQJCQl0YXJnZXRQYWdlOwotCWludAkJCXNsb3RubzsKIAlpbnQJCQlm aXJzdFplcm9QYWdlOwogCWJvb2wJCWlzTmV3UGFnZTsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCUFz c2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKIApAQCAtODkwLDE2ICs4ODAsMjMgQEAg U2VyaWFsQWRkKFRyYW5zYWN0aW9uSWQgeGlkLCBTZXJDb21taXRTZXFObyBtaW5Db25mbGljdENv bW1pdFNlcU5vKQogCQkvKiBJbml0aWFsaXplIGludGVydmVuaW5nIHBhZ2VzLiAqLwogCQl3aGls ZSAoZmlyc3RaZXJvUGFnZSAhPSB0YXJnZXRQYWdlKQogCQl7Ci0JCQkodm9pZCkgU2ltcGxlTHJ1 WmVyb1BhZ2UoU2VyaWFsU2xydUN0bCwgZmlyc3RaZXJvUGFnZSk7CisJCQlidWZmZXIgPSBaZXJv U2xydUJ1ZmZlcihTTFJVX1NFUklBTF9JRCwgZmlyc3RaZXJvUGFnZSk7CisJCQlQYWdlU2V0SGVh ZGVyRGF0YU5vblJlbChCdWZmZXJHZXRQYWdlKGJ1ZmZlciksIGZpcnN0WmVyb1BhZ2UsIEludmFs aWRYTG9nUmVjUHRyLCBCTENLU1osIFBHX01FVEFQQUdFX0xBWU9VVF9WRVJTSU9OKTsKKwkJCU1h cmtCdWZmZXJEaXJ0eShidWZmZXIpOworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwog CQkJZmlyc3RaZXJvUGFnZSA9IFNlcmlhbE5leHRQYWdlKGZpcnN0WmVyb1BhZ2UpOwogCQl9Ci0J CXNsb3RubyA9IFNpbXBsZUxydVplcm9QYWdlKFNlcmlhbFNscnVDdGwsIHRhcmdldFBhZ2UpOwor CQlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX1NFUklBTF9JRCwgdGFyZ2V0UGFnZSk7CiAJ fQogCWVsc2UKLQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoU2VyaWFsU2xydUN0bCwgdGFy Z2V0UGFnZSwgdHJ1ZSwgeGlkKTsKKwl7CisJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVf U0VSSUFMX0lELCB0YXJnZXRQYWdlLCBSQk1fTk9STUFMKTsKKwkJTG9ja0J1ZmZlcihidWZmZXIs IEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisJfQogCi0JU2VyaWFsVmFsdWUoc2xvdG5vLCB4aWQp ID0gbWluQ29uZmxpY3RDb21taXRTZXFObzsKLQlTZXJpYWxTbHJ1Q3RsLT5zaGFyZWQtPnBhZ2Vf ZGlydHlbc2xvdG5vXSA9IHRydWU7CisJU2VyaWFsVmFsdWUoYnVmZmVyLCB4aWQpID0gbWluQ29u ZmxpY3RDb21taXRTZXFObzsKKwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKKwlVbmxvY2tSZWxl YXNlQnVmZmVyKGJ1ZmZlcik7CiAKIAlMV0xvY2tSZWxlYXNlKFNlcmlhbFNMUlVMb2NrKTsKIH0K QEAgLTkxNSw3ICs5MTIsNyBAQCBTZXJpYWxHZXRNaW5Db25mbGljdENvbW1pdFNlcU5vKFRyYW5z YWN0aW9uSWQgeGlkKQogCVRyYW5zYWN0aW9uSWQgaGVhZFhpZDsKIAlUcmFuc2FjdGlvbklkIHRh aWxYaWQ7CiAJU2VyQ29tbWl0U2VxTm8gdmFsOwotCWludAkJCXNsb3RubzsKKwlCdWZmZXIJCWJ1 ZmZlcjsKIAogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKIApAQCAtOTM3LDkg KzkzNCw5IEBAIFNlcmlhbEdldE1pbkNvbmZsaWN0Q29tbWl0U2VxTm8oVHJhbnNhY3Rpb25JZCB4 aWQpCiAJICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IGhv bGRpbmcgU2VyaWFsU0xSVUxvY2ssCiAJICogYnV0IHdpbGwgcmV0dXJuIHdpdGggdGhhdCBsb2Nr IGhlbGQsIHdoaWNoIG11c3QgdGhlbiBiZSByZWxlYXNlZC4KIAkgKi8KLQlzbG90bm8gPSBTaW1w bGVMcnVSZWFkUGFnZV9SZWFkT25seShTZXJpYWxTbHJ1Q3RsLAotCQkJCQkJCQkJCVNlcmlhbFBh Z2UoeGlkKSwgeGlkKTsKLQl2YWwgPSBTZXJpYWxWYWx1ZShzbG90bm8sIHhpZCk7CisJYnVmZmVy ID0gUmVhZFNscnVCdWZmZXIoU0xSVV9TRVJJQUxfSUQsIFNlcmlhbFBhZ2UoeGlkKSwgUkJNX05P Uk1BTCk7CisJdmFsID0gU2VyaWFsVmFsdWUoYnVmZmVyLCB4aWQpOworCVJlbGVhc2VCdWZmZXIo YnVmZmVyKTsKIAlMV0xvY2tSZWxlYXNlKFNlcmlhbFNMUlVMb2NrKTsKIAlyZXR1cm4gdmFsOwog fQpAQCAtMTA1OCwxOSArMTA1NSw3IEBAIENoZWNrUG9pbnRQcmVkaWNhdGUodm9pZCkKIAlMV0xv Y2tSZWxlYXNlKFNlcmlhbFNMUlVMb2NrKTsKIAogCS8qIFRydW5jYXRlIGF3YXkgcGFnZXMgdGhh dCBhcmUgbm8gbG9uZ2VyIHJlcXVpcmVkICovCi0JU2ltcGxlTHJ1VHJ1bmNhdGUoU2VyaWFsU2xy dUN0bCwgdGFpbFBhZ2UpOwotCi0JLyoKLQkgKiBXcml0ZSBkaXJ0eSBTTFJVIHBhZ2VzIHRvIGRp c2sKLQkgKgotCSAqIFRoaXMgaXMgbm90IGFjdHVhbGx5IG5lY2Vzc2FyeSBmcm9tIGEgY29ycmVj dG5lc3MgcG9pbnQgb2Ygdmlldy4gV2UgZG8KLQkgKiBpdCBtZXJlbHkgYXMgYSBkZWJ1Z2dpbmcg YWlkLgotCSAqCi0JICogV2UncmUgZG9pbmcgdGhpcyBhZnRlciB0aGUgdHJ1bmNhdGlvbiB0byBh dm9pZCB3cml0aW5nIHBhZ2VzIHJpZ2h0Ci0JICogYmVmb3JlIGRlbGV0aW5nIHRoZSBmaWxlIGlu IHdoaWNoIHRoZXkgc2l0LCB3aGljaCB3b3VsZCBiZSBjb21wbGV0ZWx5Ci0JICogcG9pbnRsZXNz LgotCSAqLwotCVNpbXBsZUxydVdyaXRlQWxsKFNlcmlhbFNscnVDdGwsIHRydWUpOworCVNpbXBs ZUxydVRydW5jYXRlKFNMUlVfU0VSSUFMX0lELCBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHks IHRhaWxQYWdlKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTMzMSw3ICsxMzE2LDYg QEAgUHJlZGljYXRlTG9ja1NobWVtU2l6ZSh2b2lkKQogCiAJLyogU2hhcmVkIG1lbW9yeSBzdHJ1 Y3R1cmVzIGZvciBTTFJVIHRyYWNraW5nIG9mIG9sZCBjb21taXR0ZWQgeGlkcy4gKi8KIAlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9mKFNlcmlhbENvbnRyb2xEYXRhKSk7Ci0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFNpbXBsZUxydVNobWVtU2l6ZShOVU1fU0VSSUFMX0JVRkZFUlMsIDApKTsK IAogCXJldHVybiBzaXplOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdl L2J1ZnBhZ2UuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdlLmMKaW5kZXggOTI5 OTRmOGYzOTUuLjFhODEwNzU0YzVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL3Bh Z2UvYnVmcGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdlLmMKQEAg LTU5LDYgKzU5LDI3IEBAIFBhZ2VJbml0KFBhZ2UgcGFnZSwgU2l6ZSBwYWdlU2l6ZSwgU2l6ZSBz cGVjaWFsU2l6ZSkKIAkvKiBwLT5wZF9wcnVuZV94aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsJ CWRvbmUgYnkgYWJvdmUgTWVtU2V0ICovCiB9CiAKK3ZvaWQKK1BhZ2VJbml0U0xSVShQYWdlIHBh Z2UsIFNpemUgcGFnZVNpemUsIFNpemUgc3BlY2lhbFNpemUpCit7CisJUGFnZUhlYWRlcglwID0g KFBhZ2VIZWFkZXIpIHBhZ2U7CisKKwlzcGVjaWFsU2l6ZSA9IE1BWEFMSUdOKHNwZWNpYWxTaXpl KTsKKworCUFzc2VydChwYWdlU2l6ZSA9PSBCTENLU1opOworCUFzc2VydChwYWdlU2l6ZSA+IHNw ZWNpYWxTaXplICsgU2l6ZU9mUGFnZUhlYWRlckRhdGEpOworCisJLyogTWFrZSBzdXJlIGFsbCBm aWVsZHMgb2YgcGFnZSBhcmUgemVybywgYXMgd2VsbCBhcyB1bnVzZWQgc3BhY2UgKi8KKwlNZW1T ZXQocCwgMCwgcGFnZVNpemUpOworCisJcC0+cGRfZmxhZ3MgPSAwOworCXAtPnBkX2xvd2VyID0g U2l6ZU9mUGFnZUhlYWRlckRhdGE7CisJcC0+cGRfdXBwZXIgPSBwYWdlU2l6ZSAtIHNwZWNpYWxT aXplOworCXAtPnBkX3NwZWNpYWwgPSBwYWdlU2l6ZSAtIHNwZWNpYWxTaXplOworCVBhZ2VTZXRQ YWdlU2l6ZUFuZFZlcnNpb24ocGFnZSwgcGFnZVNpemUsIFBHX01FVEFQQUdFX0xBWU9VVF9WRVJT SU9OKTsKKwkvKiBwLT5wZF9wcnVuZV94aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsJCWRvbmUg YnkgYWJvdmUgTWVtU2V0ICovCit9CisKIAogLyoKICAqIFBhZ2VJc1ZlcmlmaWVkRXh0ZW5kZWQK QEAgLTEwMyw3ICsxMjQsNyBAQCBQYWdlSXNWZXJpZmllZEV4dGVuZGVkKFBhZ2UgcGFnZSwgQmxv Y2tOdW1iZXIgYmxrbm8sIGludCBmbGFncykKIAkJaWYgKERhdGFDaGVja3N1bXNFbmFibGVkKCkp CiAJCXsKIAkJCWNoZWNrc3VtID0gcGdfY2hlY2tzdW1fcGFnZSgoY2hhciAqKSBwYWdlLCBibGtu byk7Ci0KKwkJCQogCQkJaWYgKGNoZWNrc3VtICE9IHAtPnBkX2NoZWNrc3VtKQogCQkJCWNoZWNr c3VtX2ZhaWx1cmUgPSB0cnVlOwogCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L3NtZ3IvbWQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jCmluZGV4IDYwYzk5MDVl ZmY5Li41NWViZDQ1YjdkMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21k LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMKQEAgLTY2LDEwICs2NiwxMCBA QAogICoJb3V0IHRvIGFuIHVubGlua2VkIG9sZCBjb3B5IG9mIGEgc2VnbWVudCBmaWxlIHRoYXQg d2lsbCBldmVudHVhbGx5CiAgKglkaXNhcHBlYXIuCiAgKgotICoJRmlsZSBkZXNjcmlwdG9ycyBh cmUgc3RvcmVkIGluIHRoZSBwZXItZm9yayBtZF9zZWdfZmRzIGFycmF5cyBpbnNpZGUKLSAqCVNN Z3JSZWxhdGlvbi4gVGhlIGxlbmd0aCBvZiB0aGVzZSBhcnJheXMgaXMgc3RvcmVkIGluIG1kX251 bV9vcGVuX3NlZ3MuCi0gKglOb3RlIHRoYXQgYSBmb3JrJ3MgbWRfbnVtX29wZW5fc2VncyBoYXZp bmcgYSBzcGVjaWZpYyB2YWx1ZSBkb2VzIG5vdAotICoJbmVjZXNzYXJpbHkgbWVhbiB0aGUgcmVs YXRpb24gZG9lc24ndCBoYXZlIGFkZGl0aW9uYWwgc2VnbWVudHM7IHdlIG1heQorICoJRmlsZSBk ZXNjcmlwdG9ycyBhcmUgc3RvcmVkIGluIHRoZSBtZF9zZWdfZmRzIGFycmF5IGluc2lkZQorICoJ U01nckZpbGVEYXRhLiBUaGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBpcyBzdG9yZWQgaW4gbWRfbnVt X29wZW5fc2Vncy4KKyAqCU5vdGUgdGhhdCBtZF9udW1fb3Blbl9zZWdzIGhhdmluZyBhIHNwZWNp ZmljIHZhbHVlIGRvZXMgbm90CisgKgluZWNlc3NhcmlseSBtZWFuIHRoZSBmaWxlIGRvZXNuJ3Qg aGF2ZSBhZGRpdGlvbmFsIHNlZ21lbnRzOyB3ZSBtYXkKICAqCWp1c3Qgbm90IGhhdmUgb3BlbmVk IHRoZSBuZXh0IHNlZ21lbnQgeWV0LiAgKFdlIGNvdWxkIG5vdCBoYXZlICJhbGwKICAqCXNlZ21l bnRzIGFyZSBpbiB0aGUgYXJyYXkiIGFzIGFuIGludmFyaWFudCBhbnl3YXksIHNpbmNlIGFub3Ro ZXIgYmFja2VuZAogICoJY291bGQgZXh0ZW5kIHRoZSByZWxhdGlvbiB3aGlsZSB3ZSBhcmVuJ3Qg bG9va2luZy4pICBXZSBkbyBub3QgaGF2ZQpAQCAtMTIxLDI2ICsxMjEsMTggQEAgc3RhdGljIE1l bW9yeUNvbnRleHQgTWRDeHQ7CQkvKiBjb250ZXh0IGZvciBhbGwgTWRmZFZlYyBvYmplY3RzICov CiAKIAogLyogbG9jYWwgcm91dGluZXMgKi8KLXN0YXRpYyB2b2lkIG1kdW5saW5rZm9yayhSZWxG aWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCSBi b29sIGlzUmVkbyk7Ci1zdGF0aWMgTWRmZFZlYyAqbWRvcGVuZm9yayhTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLCBpbnQgYmVoYXZpb3IpOwotc3RhdGljIHZvaWQgcmVnaXN0 ZXJfZGlydHlfc2VnbWVudChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAot CQkJCQkJCQkgICBNZGZkVmVjICpzZWcpOwotc3RhdGljIHZvaWQgcmVnaXN0ZXJfdW5saW5rX3Nl Z21lbnQoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0s Ci0JCQkJCQkJCQlCbG9ja051bWJlciBzZWdubyk7Ci1zdGF0aWMgdm9pZCByZWdpc3Rlcl9mb3Jn ZXRfcmVxdWVzdChSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9y a251bSwKLQkJCQkJCQkJCUJsb2NrTnVtYmVyIHNlZ25vKTsKLXN0YXRpYyB2b2lkIF9mZHZlY19y ZXNpemUoU01nclJlbGF0aW9uIHJlbG4sCi0JCQkJCQkgIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJ CQkJCSAgaW50IG5zZWcpOwotc3RhdGljIGNoYXIgKl9tZGZkX3NlZ3BhdGgoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCSAgIEJsb2NrTnVtYmVyIHNlZ25vKTsK LXN0YXRpYyBNZGZkVmVjICpfbWRmZF9vcGVuc2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sCitzdGF0aWMgdm9pZCBtZHVubGlua2ZvcmsoU01nckZpbGVMb2NhdG9yIHNs b2NhdG9yLCBib29sIGlzUmVkbyk7CitzdGF0aWMgTWRmZFZlYyAqbWRvcGVuZm9yayhTTWdyRmls ZUhhbmRsZSBzZmlsZSwgaW50IGJlaGF2aW9yKTsKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX2RpcnR5 X3NlZ21lbnQoU01nckZpbGVIYW5kbGUgc2ZpbGUsIE1kZmRWZWMgKnNlZyk7CitzdGF0aWMgdm9p ZCByZWdpc3Rlcl91bmxpbmtfc2VnbWVudChTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3IsIEJsb2Nr TnVtYmVyIHNlZ25vKTsKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX2ZvcmdldF9yZXF1ZXN0KFNNZ3JG aWxlTG9jYXRvciBzbG9jYXRvciwgQmxvY2tOdW1iZXIgc2Vnbm8pOworc3RhdGljIHZvaWQgX2Zk dmVjX3Jlc2l6ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwgaW50IG5zZWcpOworc3RhdGljIGNoYXIg Kl9tZGZkX3NlZ3BhdGgoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIHNlZ25vKTsK K3N0YXRpYyBNZGZkVmVjICpfbWRmZF9vcGVuc2VnKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJ CQkJCSAgQmxvY2tOdW1iZXIgc2Vnbm8sIGludCBvZmxhZ3MpOwotc3RhdGljIE1kZmRWZWMgKl9t ZGZkX2dldHNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorc3RhdGlj IE1kZmRWZWMgKl9tZGZkX2dldHNlZyhTTWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJCQkgQmxv Y2tOdW1iZXIgYmxrbm8sIGJvb2wgc2tpcEZzeW5jLCBpbnQgYmVoYXZpb3IpOwotc3RhdGljIEJs b2NrTnVtYmVyIF9tZG5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSwKLQkJCQkJCQkgIE1kZmRWZWMgKnNlZyk7CitzdGF0aWMgQmxvY2tOdW1iZXIgX21kbmJsb2Nr cyhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgTWRmZFZlYyAqc2VnKTsKIAogCiAvKgpAQCAtMTYwLDcg KzE1Miw3IEBAIG1kaW5pdCh2b2lkKQogICogTm90ZTogdGhpcyB3aWxsIHJldHVybiB0cnVlIGZv ciBsaW5nZXJpbmcgZmlsZXMsIHdpdGggcGVuZGluZyBkZWxldGlvbnMKICAqLwogYm9vbAotbWRl eGlzdHMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK21kZXhpc3RzKFNN Z3JGaWxlSGFuZGxlIHNmaWxlKQogewogCS8qCiAJICogQ2xvc2UgaXQgZmlyc3QsIHRvIGVuc3Vy ZSB0aGF0IHdlIG5vdGljZSBpZiB0aGUgZm9yayBoYXMgYmVlbiB1bmxpbmtlZApAQCAtMTY4LDkg KzE2MCw5IEBAIG1kZXhpc3RzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0p CiAJICogd2hpY2ggYWxyZWFkeSBjbG9zZXMgcmVsYXRpb25zIHdoZW4gZHJvcHBpbmcgdGhlbS4K IAkgKi8KIAlpZiAoIUluUmVjb3ZlcnkpCi0JCW1kY2xvc2UocmVsbiwgZm9ya251bSk7CisJCW1k Y2xvc2Uoc2ZpbGUpOwogCi0JcmV0dXJuIChtZG9wZW5mb3JrKHJlbG4sIGZvcmtudW0sIEVYVEVO U0lPTl9SRVRVUk5fTlVMTCkgIT0gTlVMTCk7CisJcmV0dXJuIChtZG9wZW5mb3JrKHNmaWxlLCBF WFRFTlNJT05fUkVUVVJOX05VTEwpICE9IE5VTEwpOwogfQogCiAvKgpAQCAtMTc5LDE2ICsxNzEs MTYgQEAgbWRleGlzdHMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKICAq IElmIGlzUmVkbyBpcyB0cnVlLCBpdCdzIG9rYXkgZm9yIHRoZSByZWxhdGlvbiB0byBleGlzdCBh bHJlYWR5LgogICovCiB2b2lkCi1tZGNyZWF0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtLCBib29sIGlzUmVkbykKK21kY3JlYXRlKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBi b29sIGlzUmVkbykKIHsKIAlNZGZkVmVjICAgICptZGZkOwogCWNoYXIJICAgKnBhdGg7CiAJRmls ZQkJZmQ7CiAKLQlpZiAoaXNSZWRvICYmIHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV0g PiAwKQorCWlmIChpc1JlZG8gJiYgc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgPiAwKQogCQlyZXR1 cm47CQkJCQkvKiBjcmVhdGVkIGFuZCBvcGVuZWQgYWxyZWFkeS4uLiAqLwogCi0JQXNzZXJ0KHJl bG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV0gPT0gMCk7CisJQXNzZXJ0KHNmaWxlLT5tZF9u dW1fb3Blbl9zZWdzID09IDApOwogCiAJLyoKIAkgKiBXZSBtYXkgYmUgdXNpbmcgdGhlIHRhcmdl dCB0YWJsZSBzcGFjZSBmb3IgdGhlIGZpcnN0IHRpbWUgaW4gdGhpcwpAQCAtMTk5LDExICsxOTEs MTQgQEAgbWRjcmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9v bCBpc1JlZG8pCiAJICogc2hvdWxkIGJlIGhlcmUgYW5kIG5vdCBpbiBjb21tYW5kcy90YWJsZXNw YWNlLmM/ICBCdXQgdGhhdCB3b3VsZCBpbXBseQogCSAqIGltcG9ydGluZyBhIGxvdCBvZiBzdHVm ZiB0aGF0IHNtZ3IuYyBvdWdodG4ndCBrbm93LCBlaXRoZXIuCiAJICovCi0JVGFibGVzcGFjZUNy ZWF0ZURic3BhY2UocmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQly ZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJaXNSZWRvKTsKKwlpZiAo c2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnNwY09pZCAhPSBTTFJVX1NQQ19PSUQpCisJewor CQlUYWJsZXNwYWNlQ3JlYXRlRGJzcGFjZShzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3Iuc3Bj T2lkLAorCQkJCQkJCQlzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJ CWlzUmVkbyk7CisJfQogCi0JcGF0aCA9IHJlbHBhdGgocmVsbi0+c21ncl9ybG9jYXRvciwgZm9y a251bSk7CisJcGF0aCA9IHNtZ3JmaWxlcGF0aChzZmlsZS0+c21ncl9sb2NhdG9yKTsKIAogCWZk ID0gUGF0aE5hbWVPcGVuRmlsZShwYXRoLCBPX1JEV1IgfCBPX0NSRUFUIHwgT19FWENMIHwgUEdf QklOQVJZKTsKIApAQCAtMjI1LDggKzIyMCw4IEBAIG1kY3JlYXRlKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKQogCiAJcGZyZWUocGF0aCk7CiAKLQlf ZmR2ZWNfcmVzaXplKHJlbG4sIGZvcmtudW0sIDEpOwotCW1kZmQgPSAmcmVsbi0+bWRfc2VnX2Zk c1tmb3JrbnVtXVswXTsKKwlfZmR2ZWNfcmVzaXplKHNmaWxlLCAxKTsKKwltZGZkID0gJnNmaWxl LT5tZF9zZWdfZmRzWzBdOwogCW1kZmQtPm1kZmRfdmZkID0gZmQ7CiAJbWRmZC0+bWRmZF9zZWdu byA9IDA7CiB9CkBAIC0yOTMsMTYgKzI4OCw5IEBAIG1kY3JlYXRlKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKQogICogd2UgYXJlIHVzdWFsbHkgbm90 IGluIGEgdHJhbnNhY3Rpb24gYW55bW9yZSB3aGVuIHRoaXMgaXMgY2FsbGVkLgogICovCiB2b2lk Ci1tZHVubGluayhSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9y a251bSwgYm9vbCBpc1JlZG8pCittZHVubGluayhTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3IsIGJv b2wgaXNSZWRvKQogewotCS8qIE5vdyBkbyB0aGUgcGVyLWZvcmsgd29yayAqLwotCWlmIChmb3Jr bnVtID09IEludmFsaWRGb3JrTnVtYmVyKQotCXsKLQkJZm9yIChmb3JrbnVtID0gMDsgZm9ya251 bSA8PSBNQVhfRk9SS05VTTsgZm9ya251bSsrKQotCQkJbWR1bmxpbmtmb3JrKHJsb2NhdG9yLCBm b3JrbnVtLCBpc1JlZG8pOwotCX0KLQllbHNlCi0JCW1kdW5saW5rZm9yayhybG9jYXRvciwgZm9y a251bSwgaXNSZWRvKTsKKwltZHVubGlua2Zvcmsoc2xvY2F0b3IsIGlzUmVkbyk7CiB9CiAKIC8q CkBAIC0zMzAsMjkgKzMxOCwyOSBAQCBkb190cnVuY2F0ZShjb25zdCBjaGFyICpwYXRoKQogfQog CiBzdGF0aWMgdm9pZAotbWR1bmxpbmtmb3JrKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRv ciwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbykKK21kdW5saW5rZm9yayhTTWdyRmls ZUxvY2F0b3Igc2xvY2F0b3IsIGJvb2wgaXNSZWRvKQogewogCWNoYXIJICAgKnBhdGg7CiAJaW50 CQkJcmV0OwogCWludAkJCXNhdmVfZXJybm87CiAKLQlwYXRoID0gcmVscGF0aChybG9jYXRvciwg Zm9ya251bSk7CisJcGF0aCA9IHNtZ3JmaWxlcGF0aChzbG9jYXRvcik7CiAKIAkvKgogCSAqIFRy dW5jYXRlIGFuZCB0aGVuIHVubGluayB0aGUgZmlyc3Qgc2VnbWVudCwgb3IganVzdCByZWdpc3Rl ciBhIHJlcXVlc3QKIAkgKiB0byB1bmxpbmsgaXQgbGF0ZXIsIGFzIGRlc2NyaWJlZCBpbiB0aGUg Y29tbWVudHMgZm9yIG1kdW5saW5rKCkuCiAJICovCi0JaWYgKGlzUmVkbyB8fCBJc0JpbmFyeVVw Z3JhZGUgfHwgZm9ya251bSAhPSBNQUlOX0ZPUktOVU0gfHwKLQkJUmVsRmlsZUxvY2F0b3JCYWNr ZW5kSXNUZW1wKHJsb2NhdG9yKSkKKwlpZiAoaXNSZWRvIHx8IElzQmluYXJ5VXBncmFkZSB8fCBz bG9jYXRvci5mb3JrbnVtICE9IE1BSU5fRk9SS05VTSB8fAorCQlTTWdyRmlsZUxvY2F0b3JJc1Rl bXAoc2xvY2F0b3IpKQogCXsKLQkJaWYgKCFSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAocmxv Y2F0b3IpKQorCQlpZiAoIVNNZ3JGaWxlTG9jYXRvcklzVGVtcChzbG9jYXRvcikpCiAJCXsKIAkJ CS8qIFByZXZlbnQgb3RoZXIgYmFja2VuZHMnIGZkcyBmcm9tIGhvbGRpbmcgb24gdG8gdGhlIGRp c2sgc3BhY2UgKi8KIAkJCXJldCA9IGRvX3RydW5jYXRlKHBhdGgpOwogCiAJCQkvKiBGb3JnZXQg YW55IHBlbmRpbmcgc3luYyByZXF1ZXN0cyBmb3IgdGhlIGZpcnN0IHNlZ21lbnQgKi8KIAkJCXNh dmVfZXJybm8gPSBlcnJubzsKLQkJCXJlZ2lzdGVyX2ZvcmdldF9yZXF1ZXN0KHJsb2NhdG9yLCBm b3JrbnVtLCAwIC8qIGZpcnN0IHNlZyAqLyApOworCQkJcmVnaXN0ZXJfZm9yZ2V0X3JlcXVlc3Qo c2xvY2F0b3IsIDAgLyogZmlyc3Qgc2VnICovICk7CiAJCQllcnJubyA9IHNhdmVfZXJybm87CiAJ CX0KIAkJZWxzZQpAQCAtMzc5LDcgKzM2Nyw3IEBAIG1kdW5saW5rZm9yayhSZWxGaWxlTG9jYXRv ckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pCiAKIAkJ LyogUmVnaXN0ZXIgcmVxdWVzdCB0byB1bmxpbmsgZmlyc3Qgc2VnbWVudCBsYXRlciAqLwogCQlz YXZlX2Vycm5vID0gZXJybm87Ci0JCXJlZ2lzdGVyX3VubGlua19zZWdtZW50KHJsb2NhdG9yLCBm b3JrbnVtLCAwIC8qIGZpcnN0IHNlZyAqLyApOworCQlyZWdpc3Rlcl91bmxpbmtfc2VnbWVudChz bG9jYXRvciwgMCAvKiBmaXJzdCBzZWcgKi8gKTsKIAkJZXJybm8gPSBzYXZlX2Vycm5vOwogCX0K IApAQCAtNDA0LDcgKzM5Miw3IEBAIG1kdW5saW5rZm9yayhSZWxGaWxlTG9jYXRvckJhY2tlbmQg cmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pCiAJCXsKIAkJCXNwcmlu dGYoc2VncGF0aCwgIiVzLiV1IiwgcGF0aCwgc2Vnbm8pOwogCi0JCQlpZiAoIVJlbEZpbGVMb2Nh dG9yQmFja2VuZElzVGVtcChybG9jYXRvcikpCisJCQlpZiAoIVNNZ3JGaWxlTG9jYXRvcklzVGVt cChzbG9jYXRvcikpCiAJCQl7CiAJCQkJLyoKIAkJCQkgKiBQcmV2ZW50IG90aGVyIGJhY2tlbmRz JyBmZHMgZnJvbSBob2xkaW5nIG9uIHRvIHRoZSBkaXNrCkBAIC00MTcsNyArNDA1LDcgQEAgbWR1 bmxpbmtmb3JrKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBmb3Jr bnVtLCBib29sIGlzUmVkbykKIAkJCQkgKiBGb3JnZXQgYW55IHBlbmRpbmcgc3luYyByZXF1ZXN0 cyBmb3IgdGhpcyBzZWdtZW50IGJlZm9yZSB3ZQogCQkJCSAqIHRyeSB0byB1bmxpbmsuCiAJCQkJ ICovCi0JCQkJcmVnaXN0ZXJfZm9yZ2V0X3JlcXVlc3QocmxvY2F0b3IsIGZvcmtudW0sIHNlZ25v KTsKKwkJCQlyZWdpc3Rlcl9mb3JnZXRfcmVxdWVzdChzbG9jYXRvciwgc2Vnbm8pOwogCQkJfQog CiAJCQlpZiAodW5saW5rKHNlZ3BhdGgpIDwgMCkKQEAgLTQ0Niw3ICs0MzQsNyBAQCBtZHVubGlu a2ZvcmsoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0s IGJvb2wgaXNSZWRvKQogICoJCWNhdXNlcyBpbnRlcnZlbmluZyBmaWxlIHNwYWNlIHRvIGJlY29t ZSBmaWxsZWQgd2l0aCB6ZXJvZXMuCiAgKi8KIHZvaWQKLW1kZXh0ZW5kKFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAorbWRleHRlbmQo U01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCQkgY2hhciAqYnVm ZmVyLCBib29sIHNraXBGc3luYykKIHsKIAlvZmZfdAkJc2Vla3BvczsKQEAgLTQ1NSw3ICs0NDMs NyBAQCBtZGV4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9j a051bWJlciBibG9ja251bSwKIAogCS8qIFRoaXMgYXNzZXJ0IGlzIHRvbyBleHBlbnNpdmUgdG8g aGF2ZSBvbiBub3JtYWxseSAuLi4gKi8KICNpZmRlZiBDSEVDS19XUklURV9WU19FWFRFTkQKLQlB c3NlcnQoYmxvY2tudW0gPj0gbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0pKTsKKwlBc3NlcnQoYmxv Y2tudW0gPj0gbWRuYmxvY2tzKHNmaWxlKSk7CiAjZW5kaWYKIAogCS8qCkBAIC00NjgsMTAgKzQ1 NiwxMCBAQCBtZGV4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBC bG9ja051bWJlciBibG9ja251bSwKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJD T0RFX1BST0dSQU1fTElNSVRfRVhDRUVERUQpLAogCQkJCSBlcnJtc2coImNhbm5vdCBleHRlbmQg ZmlsZSBcIiVzXCIgYmV5b25kICV1IGJsb2NrcyIsCi0JCQkJCQlyZWxwYXRoKHJlbG4tPnNtZ3Jf cmxvY2F0b3IsIGZvcmtudW0pLAorCQkJCQkJc21ncmZpbGVwYXRoKHNmaWxlLT5zbWdyX2xvY2F0 b3IpLAogCQkJCQkJSW52YWxpZEJsb2NrTnVtYmVyKSkpOwogCi0JdiA9IF9tZGZkX2dldHNlZyhy ZWxuLCBmb3JrbnVtLCBibG9ja251bSwgc2tpcEZzeW5jLCBFWFRFTlNJT05fQ1JFQVRFKTsKKwl2 ID0gX21kZmRfZ2V0c2VnKHNmaWxlLCBibG9ja251bSwgc2tpcEZzeW5jLCBFWFRFTlNJT05fQ1JF QVRFKTsKIAogCXNlZWtwb3MgPSAob2ZmX3QpIEJMQ0tTWiAqIChibG9ja251bSAlICgoQmxvY2tO dW1iZXIpIFJFTFNFR19TSVpFKSk7CiAKQEAgLTQ5NCwxMCArNDgyLDEwIEBAIG1kZXh0ZW5kKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVt LAogCQkJCSBlcnJoaW50KCJDaGVjayBmcmVlIGRpc2sgc3BhY2UuIikpKTsKIAl9CiAKLQlpZiAo IXNraXBGc3luYyAmJiAhU21ncklzVGVtcChyZWxuKSkKLQkJcmVnaXN0ZXJfZGlydHlfc2VnbWVu dChyZWxuLCBmb3JrbnVtLCB2KTsKKwlpZiAoIXNraXBGc3luYyAmJiAhU21ncklzVGVtcChzZmls ZSkpCisJCXJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQoc2ZpbGUsIHYpOwogCi0JQXNzZXJ0KF9tZG5i bG9ja3MocmVsbiwgZm9ya251bSwgdikgPD0gKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsK KwlBc3NlcnQoX21kbmJsb2NrcyhzZmlsZSwgdikgPD0gKChCbG9ja051bWJlcikgUkVMU0VHX1NJ WkUpKTsKIH0KIAogLyoKQEAgLTUxMSwxNyArNDk5LDE3IEBAIG1kZXh0ZW5kKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogICogaW52 ZW50IG9uZSBvdXQgb2Ygd2hvbGUgY2xvdGguCiAgKi8KIHN0YXRpYyBNZGZkVmVjICoKLW1kb3Bl bmZvcmsoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgaW50IGJlaGF2aW9y KQorbWRvcGVuZm9yayhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgaW50IGJlaGF2aW9yKQogewogCU1k ZmRWZWMgICAgKm1kZmQ7CiAJY2hhcgkgICAqcGF0aDsKIAlGaWxlCQlmZDsKIAogCS8qIE5vIHdv cmsgaWYgYWxyZWFkeSBvcGVuICovCi0JaWYgKHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251 bV0gPiAwKQotCQlyZXR1cm4gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bMF07CisJaWYgKHNm aWxlLT5tZF9udW1fb3Blbl9zZWdzID4gMCkKKwkJcmV0dXJuICZzZmlsZS0+bWRfc2VnX2Zkc1sw XTsKIAotCXBhdGggPSByZWxwYXRoKHJlbG4tPnNtZ3JfcmxvY2F0b3IsIGZvcmtudW0pOworCXBh dGggPSBzbWdyZmlsZXBhdGgoc2ZpbGUtPnNtZ3JfbG9jYXRvcik7CiAKIAlmZCA9IFBhdGhOYW1l T3BlbkZpbGUocGF0aCwgT19SRFdSIHwgUEdfQklOQVJZKTsKIApAQCAtNTQwLDEyICs1MjgsMTIg QEAgbWRvcGVuZm9yayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBpbnQg YmVoYXZpb3IpCiAKIAlwZnJlZShwYXRoKTsKIAotCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251 bSwgMSk7Ci0JbWRmZCA9ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dWzBdOworCV9mZHZlY19y ZXNpemUoc2ZpbGUsIDEpOworCW1kZmQgPSAmc2ZpbGUtPm1kX3NlZ19mZHNbMF07CiAJbWRmZC0+ bWRmZF92ZmQgPSBmZDsKIAltZGZkLT5tZGZkX3NlZ25vID0gMDsKIAotCUFzc2VydChfbWRuYmxv Y2tzKHJlbG4sIGZvcmtudW0sIG1kZmQpIDw9ICgoQmxvY2tOdW1iZXIpIFJFTFNFR19TSVpFKSk7 CisJQXNzZXJ0KF9tZG5ibG9ja3Moc2ZpbGUsIG1kZmQpIDw9ICgoQmxvY2tOdW1iZXIpIFJFTFNF R19TSVpFKSk7CiAKIAlyZXR1cm4gbWRmZDsKIH0KQEAgLTU1NCwyMCArNTQyLDE5IEBAIG1kb3Bl bmZvcmsoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgaW50IGJlaGF2aW9y KQogICogIG1kb3BlbigpIC0tIEluaXRpYWxpemUgbmV3bHktb3BlbmVkIHJlbGF0aW9uLgogICov CiB2b2lkCi1tZG9wZW4oU01nclJlbGF0aW9uIHJlbG4pCittZG9wZW4oU01nckZpbGVIYW5kbGUg c2ZpbGUpCiB7CiAJLyogbWFyayBpdCBub3Qgb3BlbiAqLwotCWZvciAoaW50IGZvcmtudW0gPSAw OyBmb3JrbnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrbnVtKyspCi0JCXJlbG4tPm1kX251bV9vcGVu X3NlZ3NbZm9ya251bV0gPSAwOworCXNmaWxlLT5tZF9udW1fb3Blbl9zZWdzID0gMDsKIH0KIAog LyoKICAqCW1kY2xvc2UoKSAtLSBDbG9zZSB0aGUgc3BlY2lmaWVkIHJlbGF0aW9uLCBpZiBpdCBp c24ndCBjbG9zZWQgYWxyZWFkeS4KICAqLwogdm9pZAotbWRjbG9zZShTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtKQorbWRjbG9zZShTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsK LQlpbnQJCQlub3BlbnNlZ3MgPSByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dOworCWlu dAkJCW5vcGVuc2VncyA9IHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzOwogCiAJLyogTm8gd29yayBp ZiBhbHJlYWR5IGNsb3NlZCAqLwogCWlmIChub3BlbnNlZ3MgPT0gMCkKQEAgLTU3NiwxMCArNTYz LDEwIEBAIG1kY2xvc2UoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKIAkv KiBjbG9zZSBzZWdtZW50cyBzdGFydGluZyBmcm9tIHRoZSBlbmQgKi8KIAl3aGlsZSAobm9wZW5z ZWdzID4gMCkKIAl7Ci0JCU1kZmRWZWMgICAgKnYgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVt XVtub3BlbnNlZ3MgLSAxXTsKKwkJTWRmZFZlYyAgICAqdiA9ICZzZmlsZS0+bWRfc2VnX2Zkc1tu b3BlbnNlZ3MgLSAxXTsKIAogCQlGaWxlQ2xvc2Uodi0+bWRmZF92ZmQpOwotCQlfZmR2ZWNfcmVz aXplKHJlbG4sIGZvcmtudW0sIG5vcGVuc2VncyAtIDEpOworCQlfZmR2ZWNfcmVzaXplKHNmaWxl LCBub3BlbnNlZ3MgLSAxKTsKIAkJbm9wZW5zZWdzLS07CiAJfQogfQpAQCAtNTg4LDEzICs1NzUs MTMgQEAgbWRjbG9zZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogICoJ bWRwcmVmZXRjaCgpIC0tIEluaXRpYXRlIGFzeW5jaHJvbm91cyByZWFkIG9mIHRoZSBzcGVjaWZp ZWQgYmxvY2sgb2YgYSByZWxhdGlvbgogICovCiBib29sCi1tZHByZWZldGNoKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtKQorbWRwcmVm ZXRjaChTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tudW0pCiB7CiAjaWZk ZWYgVVNFX1BSRUZFVENICiAJb2ZmX3QJCXNlZWtwb3M7CiAJTWRmZFZlYyAgICAqdjsKIAotCXYg PSBfbWRmZF9nZXRzZWcocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIGZhbHNlLAorCXYgPSBfbWRm ZF9nZXRzZWcoc2ZpbGUsIGJsb2NrbnVtLCBmYWxzZSwKIAkJCQkJIEluUmVjb3ZlcnkgPyBFWFRF TlNJT05fUkVUVVJOX05VTEwgOiBFWFRFTlNJT05fRkFJTCk7CiAJaWYgKHYgPT0gTlVMTCkKIAkJ cmV0dXJuIGZhbHNlOwpAQCAtNjE2LDggKzYwMyw3IEBAIG1kcHJlZmV0Y2goU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0pCiAgKiBjb25z aWRlcmFibHkgbW9yZSBlZmZpY2llbnQgdGhhbiBkb2luZyBzbyBpbmRpdmlkdWFsbHkuCiAgKi8K IHZvaWQKLW1kd3JpdGViYWNrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0s Ci0JCQlCbG9ja051bWJlciBibG9ja251bSwgQmxvY2tOdW1iZXIgbmJsb2NrcykKK21kd3JpdGVi YWNrKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibG9ja251bSwgQmxvY2tOdW1i ZXIgbmJsb2NrcykKIHsKIAkvKgogCSAqIElzc3VlIGZsdXNoIHJlcXVlc3RzIGluIGFzIGZldyBy ZXF1ZXN0cyBhcyBwb3NzaWJsZTsgaGF2ZSB0byBzcGxpdCBhdApAQCAtNjMxLDcgKzYxNyw3IEBA IG1kd3JpdGViYWNrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCiAJCWlu dAkJCXNlZ251bV9zdGFydCwKIAkJCQkJc2VnbnVtX2VuZDsKIAotCQl2ID0gX21kZmRfZ2V0c2Vn KHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCB0cnVlIC8qIG5vdCB1c2VkICovICwKKwkJdiA9IF9t ZGZkX2dldHNlZyhzZmlsZSwgYmxvY2tudW0sIHRydWUgLyogbm90IHVzZWQgKi8gLAogCQkJCQkJ IEVYVEVOU0lPTl9ET05UX09QRU4pOwogCiAJCS8qCkBAIC02NjgsMjAgKzY1NCwyMSBAQCBtZHdy aXRlYmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAogICoJbWRyZWFk KCkgLS0gUmVhZCB0aGUgc3BlY2lmaWVkIGJsb2NrIGZyb20gYSByZWxhdGlvbi4KICAqLwogdm9p ZAotbWRyZWFkKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVt YmVyIGJsb2NrbnVtLAorbWRyZWFkKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBi bG9ja251bSwKIAkgICBjaGFyICpidWZmZXIpCiB7CiAJb2ZmX3QJCXNlZWtwb3M7CiAJaW50CQkJ bmJ5dGVzOwogCU1kZmRWZWMgICAgKnY7CiAKLQlUUkFDRV9QT1NUR1JFU1FMX1NNR1JfTURfUkVB RF9TVEFSVChmb3JrbnVtLCBibG9ja251bSwKLQkJCQkJCQkJCQlyZWxuLT5zbWdyX3Jsb2NhdG9y LmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5k Yk9pZCwKLQkJCQkJCQkJCQlyZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAot CQkJCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCk7CisJVFJBQ0VfUE9TVEdSRVNR TF9TTUdSX01EX1JFQURfU1RBUlQoc2ZpbGUtPnNtZ3JfZm9ya251bSwKKwkJCQkJCQkJCQlibG9j a251bSwKKwkJCQkJCQkJCQlzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJ CQkJCQkJCQlzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJCXNm aWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkJCQkJCXNmaWxlLT5z bWdyX3Jsb2NhdG9yLmJhY2tlbmQpOwogCi0JdiA9IF9tZGZkX2dldHNlZyhyZWxuLCBmb3JrbnVt LCBibG9ja251bSwgZmFsc2UsCisJdiA9IF9tZGZkX2dldHNlZyhzZmlsZSwgYmxvY2tudW0sIGZh bHNlLAogCQkJCQkgRVhURU5TSU9OX0ZBSUwgfCBFWFRFTlNJT05fQ1JFQVRFX1JFQ09WRVJZKTsK IAogCXNlZWtwb3MgPSAob2ZmX3QpIEJMQ0tTWiAqIChibG9ja251bSAlICgoQmxvY2tOdW1iZXIp IFJFTFNFR19TSVpFKSk7CkBAIC02OTAsMTEgKzY3NywxMiBAQCBtZHJlYWQoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAKIAluYnl0 ZXMgPSBGaWxlUmVhZCh2LT5tZGZkX3ZmZCwgYnVmZmVyLCBCTENLU1osIHNlZWtwb3MsIFdBSVRf RVZFTlRfREFUQV9GSUxFX1JFQUQpOwogCi0JVFJBQ0VfUE9TVEdSRVNRTF9TTUdSX01EX1JFQURf RE9ORShmb3JrbnVtLCBibG9ja251bSwKLQkJCQkJCQkJCSAgIHJlbG4tPnNtZ3JfcmxvY2F0b3Iu bG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkgICByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu ZGJPaWQsCi0JCQkJCQkJCQkgICByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVy LAotCQkJCQkJCQkJICAgcmVsbi0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAorCVRSQUNFX1BPU1RH UkVTUUxfU01HUl9NRF9SRUFEX0RPTkUoc2ZpbGUtPnNtZ3JfZm9ya251bSwKKwkJCQkJCQkJCSAg IGJsb2NrbnVtLAorCQkJCQkJCQkJICAgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNP aWQsCisJCQkJCQkJCQkgICBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJ CQkJCQkJICAgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCisJCQkJCQkJ CQkgICBzZmlsZS0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAogCQkJCQkJCQkJICAgbmJ5dGVzLAog CQkJCQkJCQkJICAgQkxDS1NaKTsKIApAQCAtNzMzLDcgKzcyMSw3IEBAIG1kcmVhZChTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKICAq CQl1c2UgbWRleHRlbmQoKS4KICAqLwogdm9pZAotbWR3cml0ZShTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKK21kd3JpdGUoU01nckZp bGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCQljaGFyICpidWZmZXIsIGJv b2wgc2tpcEZzeW5jKQogewogCW9mZl90CQlzZWVrcG9zOwpAQCAtNzQyLDE2ICs3MzAsMTcgQEAg bWR3cml0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJl ciBibG9ja251bSwKIAogCS8qIFRoaXMgYXNzZXJ0IGlzIHRvbyBleHBlbnNpdmUgdG8gaGF2ZSBv biBub3JtYWxseSAuLi4gKi8KICNpZmRlZiBDSEVDS19XUklURV9WU19FWFRFTkQKLQlBc3NlcnQo YmxvY2tudW0gPCBtZG5ibG9ja3MocmVsbiwgZm9ya251bSkpOworCUFzc2VydChibG9ja251bSA8 IG1kbmJsb2NrcyhzZmlsZSkpOwogI2VuZGlmCiAKLQlUUkFDRV9QT1NUR1JFU1FMX1NNR1JfTURf V1JJVEVfU1RBUlQoZm9ya251bSwgYmxvY2tudW0sCi0JCQkJCQkJCQkJIHJlbG4tPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5kYk9pZCwKLQkJCQkJCQkJCQkgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51 bWJlciwKLQkJCQkJCQkJCQkgcmVsbi0+c21ncl9ybG9jYXRvci5iYWNrZW5kKTsKKwlUUkFDRV9Q T1NUR1JFU1FMX1NNR1JfTURfV1JJVEVfU1RBUlQoc2ZpbGUtPnNtZ3JfZm9ya251bSwKKwkJCQkJ CQkJCQkgYmxvY2tudW0sCisJCQkJCQkJCQkJIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu c3BjT2lkLAorCQkJCQkJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAor CQkJCQkJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJ CQkJCQkgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCk7CiAKLQl2ID0gX21kZmRfZ2V0c2Vn KHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBza2lwRnN5bmMsCisJdiA9IF9tZGZkX2dldHNlZyhz ZmlsZSwgYmxvY2tudW0sIHNraXBGc3luYywKIAkJCQkJIEVYVEVOU0lPTl9GQUlMIHwgRVhURU5T SU9OX0NSRUFURV9SRUNPVkVSWSk7CiAKIAlzZWVrcG9zID0gKG9mZl90KSBCTENLU1ogKiAoYmxv Y2tudW0gJSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOwpAQCAtNzYwLDExICs3NDksMTIg QEAgbWR3cml0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051 bWJlciBibG9ja251bSwKIAogCW5ieXRlcyA9IEZpbGVXcml0ZSh2LT5tZGZkX3ZmZCwgYnVmZmVy LCBCTENLU1osIHNlZWtwb3MsIFdBSVRfRVZFTlRfREFUQV9GSUxFX1dSSVRFKTsKIAotCVRSQUNF X1BPU1RHUkVTUUxfU01HUl9NRF9XUklURV9ET05FKGZvcmtudW0sIGJsb2NrbnVtLAotCQkJCQkJ CQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJcmVsbi0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0 b3IubG9jYXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5iYWNr ZW5kLAorCVRSQUNFX1BPU1RHUkVTUUxfU01HUl9NRF9XUklURV9ET05FKHNmaWxlLT5zbWdyX2Zv cmtudW0sCisJCQkJCQkJCQkJYmxvY2tudW0sCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0 b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRv ci5kYk9pZCwKKwkJCQkJCQkJCQlzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJl ciwKKwkJCQkJCQkJCQlzZmlsZS0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAogCQkJCQkJCQkJCW5i eXRlcywKIAkJCQkJCQkJCQlCTENLU1opOwogCkBAIC03ODUsOCArNzc1LDggQEAgbWR3cml0ZShT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251 bSwKIAkJCQkgZXJyaGludCgiQ2hlY2sgZnJlZSBkaXNrIHNwYWNlLiIpKSk7CiAJfQogCi0JaWYg KCFza2lwRnN5bmMgJiYgIVNtZ3JJc1RlbXAocmVsbikpCi0JCXJlZ2lzdGVyX2RpcnR5X3NlZ21l bnQocmVsbiwgZm9ya251bSwgdik7CisJaWYgKCFza2lwRnN5bmMgJiYgIVNtZ3JJc1RlbXAoc2Zp bGUpKQorCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHNmaWxlLCB2KTsKIH0KIAogLyoKQEAgLTc5 OCwxNiArNzg4LDE2IEBAIG1kd3JpdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAgKgkJYXJlIHByZXNlbnQgaW4gdGhlIGFycmF5 LgogICovCiBCbG9ja051bWJlcgotbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0pCittZG5ibG9ja3MoU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7CiAJTWRmZFZl YyAgICAqdjsKIAlCbG9ja051bWJlciBuYmxvY2tzOwogCUJsb2NrTnVtYmVyIHNlZ25vOwogCi0J bWRvcGVuZm9yayhyZWxuLCBmb3JrbnVtLCBFWFRFTlNJT05fRkFJTCk7CisJbWRvcGVuZm9yayhz ZmlsZSwgRVhURU5TSU9OX0ZBSUwpOwogCiAJLyogbWRvcGVuIGhhcyBvcGVuZWQgdGhlIGZpcnN0 IHNlZ21lbnQgKi8KLQlBc3NlcnQocmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA+IDAp OworCUFzc2VydChzZmlsZS0+bWRfbnVtX29wZW5fc2VncyA+IDApOwogCiAJLyoKIAkgKiBTdGFy dCBmcm9tIHRoZSBsYXN0IG9wZW4gc2VnbWVudHMsIHRvIGF2b2lkIHJlZHVuZGFudCBzZWVrcy4g IFdlIGhhdmUKQEAgLTgyMiwxMiArODEyLDEyIEBAIG1kbmJsb2NrcyhTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtKQogCSAqIHRoYXQncyBPSyBiZWNhdXNlIHRoZSBjaGVja3Bv aW50ZXIgbmV2ZXIgbmVlZHMgdG8gY29tcHV0ZSByZWxhdGlvbgogCSAqIHNpemUuKQogCSAqLwot CXNlZ25vID0gcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSAtIDE7Ci0JdiA9ICZyZWxu LT5tZF9zZWdfZmRzW2ZvcmtudW1dW3NlZ25vXTsKKwlzZWdubyA9IHNmaWxlLT5tZF9udW1fb3Bl bl9zZWdzIC0gMTsKKwl2ID0gJnNmaWxlLT5tZF9zZWdfZmRzW3NlZ25vXTsKIAogCWZvciAoOzsp CiAJewotCQluYmxvY2tzID0gX21kbmJsb2NrcyhyZWxuLCBmb3JrbnVtLCB2KTsKKwkJbmJsb2Nr cyA9IF9tZG5ibG9ja3Moc2ZpbGUsIHYpOwogCQlpZiAobmJsb2NrcyA+ICgoQmxvY2tOdW1iZXIp IFJFTFNFR19TSVpFKSkKIAkJCWVsb2coRkFUQUwsICJzZWdtZW50IHRvbyBiaWciKTsKIAkJaWYg KG5ibG9ja3MgPCAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpCkBAIC04NDUsNyArODM1LDcg QEAgbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAJCSAq IHVuZGVybWluZXMgX21kZmRfZ2V0c2VnJ3MgYXR0ZW1wdHMgdG8gbm90aWNlIGFuZCByZXBvcnQg YW4gZXJyb3IKIAkJICogdXBvbiBhY2Nlc3MgdG8gYSBtaXNzaW5nIHNlZ21lbnQuCiAJCSAqLwot CQl2ID0gX21kZmRfb3BlbnNlZyhyZWxuLCBmb3JrbnVtLCBzZWdubywgMCk7CisJCXYgPSBfbWRm ZF9vcGVuc2VnKHNmaWxlLCBzZWdubywgMCk7CiAJCWlmICh2ID09IE5VTEwpCiAJCQlyZXR1cm4g c2Vnbm8gKiAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSk7CiAJfQpAQCAtODU1LDcgKzg0NSw3 IEBAIG1kbmJsb2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogICoJ bWR0cnVuY2F0ZSgpIC0tIFRydW5jYXRlIHJlbGF0aW9uIHRvIHNwZWNpZmllZCBudW1iZXIgb2Yg YmxvY2tzLgogICovCiB2b2lkCi1tZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpCittZHRydW5jYXRlKFNNZ3JGaWxlSGFu ZGxlIHNmaWxlLCBCbG9ja051bWJlciBuYmxvY2tzKQogewogCUJsb2NrTnVtYmVyIGN1cm5ibGs7 CiAJQmxvY2tOdW1iZXIgcHJpb3JibG9ja3M7CkBAIC04NjUsNyArODU1LDcgQEAgbWR0cnVuY2F0 ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBuYmxv Y2tzKQogCSAqIE5PVEU6IG1kbmJsb2NrcyBtYWtlcyBzdXJlIHdlIGhhdmUgb3BlbmVkIGFsbCBh Y3RpdmUgc2VnbWVudHMsIHNvIHRoYXQKIAkgKiB0cnVuY2F0aW9uIGxvb3Agd2lsbCBnZXQgdGhl bSBhbGwhCiAJICovCi0JY3VybmJsayA9IG1kbmJsb2NrcyhyZWxuLCBmb3JrbnVtKTsKKwljdXJu YmxrID0gbWRuYmxvY2tzKHNmaWxlKTsKIAlpZiAobmJsb2NrcyA+IGN1cm5ibGspCiAJewogCQkv KiBCb2d1cyByZXF1ZXN0IC4uLiBidXQgbm8gY29tcGxhaW50IGlmIEluUmVjb3ZlcnkgKi8KQEAg LTg3Myw3ICs4NjMsNyBAQCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJCQlyZXR1cm47CiAJCWVyZXBvcnQoRVJS T1IsCiAJCQkJKGVycm1zZygiY291bGQgbm90IHRydW5jYXRlIGZpbGUgXCIlc1wiIHRvICV1IGJs b2NrczogaXQncyBvbmx5ICV1IGJsb2NrcyBub3ciLAotCQkJCQkJcmVscGF0aChyZWxuLT5zbWdy X3Jsb2NhdG9yLCBmb3JrbnVtKSwKKwkJCQkJCXNtZ3JmaWxlcGF0aChzZmlsZS0+c21ncl9sb2Nh dG9yKSwKIAkJCQkJCW5ibG9ja3MsIGN1cm5ibGspKSk7CiAJfQogCWlmIChuYmxvY2tzID09IGN1 cm5ibGspCkBAIC04ODMsMTQgKzg3MywxNCBAQCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJICogVHJ1bmNhdGUg c2VnbWVudHMsIHN0YXJ0aW5nIGF0IHRoZSBsYXN0IG9uZS4gU3RhcnRpbmcgYXQgdGhlIGVuZCBt YWtlcwogCSAqIG1hbmFnaW5nIHRoZSBtZW1vcnkgZm9yIHRoZSBmZCBhcnJheSBlYXNpZXIsIHNo b3VsZCB0aGVyZSBiZSBlcnJvcnMuCiAJICovCi0JY3Vyb3BlbnNlZ3MgPSByZWxuLT5tZF9udW1f b3Blbl9zZWdzW2ZvcmtudW1dOworCWN1cm9wZW5zZWdzID0gc2ZpbGUtPm1kX251bV9vcGVuX3Nl Z3M7CiAJd2hpbGUgKGN1cm9wZW5zZWdzID4gMCkKIAl7CiAJCU1kZmRWZWMgICAgKnY7CiAKIAkJ cHJpb3JibG9ja3MgPSAoY3Vyb3BlbnNlZ3MgLSAxKSAqIFJFTFNFR19TSVpFOwogCi0JCXYgPSAm cmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVtjdXJvcGVuc2VncyAtIDFdOworCQl2ID0gJnNmaWxl LT5tZF9zZWdfZmRzW2N1cm9wZW5zZWdzIC0gMV07CiAKIAkJaWYgKHByaW9yYmxvY2tzID4gbmJs b2NrcykKIAkJewpAQCAtOTA0LDE0ICs4OTQsMTQgQEAgbWR0cnVuY2F0ZShTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKQogCQkJCQkJIGVy cm1zZygiY291bGQgbm90IHRydW5jYXRlIGZpbGUgXCIlc1wiOiAlbSIsCiAJCQkJCQkJCUZpbGVQ YXRoTmFtZSh2LT5tZGZkX3ZmZCkpKSk7CiAKLQkJCWlmICghU21ncklzVGVtcChyZWxuKSkKLQkJ CQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHJlbG4sIGZvcmtudW0sIHYpOworCQkJaWYgKCFTbWdy SXNUZW1wKHNmaWxlKSkKKwkJCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHNmaWxlLCB2KTsKIAog CQkJLyogd2UgbmV2ZXIgZHJvcCB0aGUgMXN0IHNlZ21lbnQgKi8KLQkJCUFzc2VydCh2ICE9ICZy ZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dWzBdKTsKKwkJCUFzc2VydCh2ICE9ICZzZmlsZS0+bWRf c2VnX2Zkc1swXSk7CiAKIAkJCUZpbGVDbG9zZSh2LT5tZGZkX3ZmZCk7Ci0JCQlfZmR2ZWNfcmVz aXplKHJlbG4sIGZvcmtudW0sIGN1cm9wZW5zZWdzIC0gMSk7CisJCQlfZmR2ZWNfcmVzaXplKHNm aWxlLCBjdXJvcGVuc2VncyAtIDEpOwogCQl9CiAJCWVsc2UgaWYgKHByaW9yYmxvY2tzICsgKChC bG9ja051bWJlcikgUkVMU0VHX1NJWkUpID4gbmJsb2NrcykKIAkJewpAQCAtOTMwLDggKzkyMCw4 IEBAIG1kdHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxv Y2tOdW1iZXIgbmJsb2NrcykKIAkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCB0cnVuY2F0ZSBmaWxl IFwiJXNcIiB0byAldSBibG9ja3M6ICVtIiwKIAkJCQkJCQkJRmlsZVBhdGhOYW1lKHYtPm1kZmRf dmZkKSwKIAkJCQkJCQkJbmJsb2NrcykpKTsKLQkJCWlmICghU21ncklzVGVtcChyZWxuKSkKLQkJ CQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHJlbG4sIGZvcmtudW0sIHYpOworCQkJaWYgKCFTbWdy SXNUZW1wKHNmaWxlKSkKKwkJCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHNmaWxlLCB2KTsKIAkJ fQogCQllbHNlCiAJCXsKQEAgLTk1Nyw3ICs5NDcsNyBAQCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAgKiBzZWdt ZW50IG1heSBzdXJ2aXZlIHJlY292ZXJ5LCByZWludHJvZHVjaW5nIHVud2FudGVkIGRhdGEgaW50 byB0aGUgdGFibGUuCiAgKi8KIHZvaWQKLW1kaW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0pCittZGltbWVkc3luYyhTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsK IAlpbnQJCQlzZWdubzsKIAlpbnQJCQltaW5faW5hY3RpdmVfc2VnOwpAQCAtOTY2LDkgKzk1Niw5 IEBAIG1kaW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAJ ICogTk9URTogbWRuYmxvY2tzIG1ha2VzIHN1cmUgd2UgaGF2ZSBvcGVuZWQgYWxsIGFjdGl2ZSBz ZWdtZW50cywgc28gdGhhdAogCSAqIGZzeW5jIGxvb3Agd2lsbCBnZXQgdGhlbSBhbGwhCiAJICov Ci0JbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0pOworCW1kbmJsb2NrcyhzZmlsZSk7CiAKLQltaW5f aW5hY3RpdmVfc2VnID0gc2Vnbm8gPSByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dOwor CW1pbl9pbmFjdGl2ZV9zZWcgPSBzZWdubyA9IHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzOwogCiAJ LyoKIAkgKiBUZW1wb3JhcmlseSBvcGVuIGluYWN0aXZlIHNlZ21lbnRzLCB0aGVuIGNsb3NlIHRo ZW0gYWZ0ZXIgc3luYy4gIFRoZXJlCkBAIC05NzYsMTIgKzk2NiwxMiBAQCBtZGltbWVkc3luYyhT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogCSAqIGlzIGhhcm1sZXNzLiAg V2UgZG9uJ3QgYm90aGVyIHRvIGNsZWFuIHRoZW0gdXAgYW5kIHRha2UgYSByaXNrIG9mCiAJICog ZnVydGhlciB0cm91YmxlLiAgVGhlIG5leHQgbWRjbG9zZSgpIHdpbGwgc29vbiBjbG9zZSB0aGVt LgogCSAqLwotCXdoaWxlIChfbWRmZF9vcGVuc2VnKHJlbG4sIGZvcmtudW0sIHNlZ25vLCAwKSAh PSBOVUxMKQorCXdoaWxlIChfbWRmZF9vcGVuc2VnKHNmaWxlLCBzZWdubywgMCkgIT0gTlVMTCkK IAkJc2Vnbm8rKzsKIAogCXdoaWxlIChzZWdubyA+IDApCiAJewotCQlNZGZkVmVjICAgICp2ID0g JnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bc2Vnbm8gLSAxXTsKKwkJTWRmZFZlYyAgICAqdiA9 ICZzZmlsZS0+bWRfc2VnX2Zkc1tzZWdubyAtIDFdOwogCiAJCWlmIChGaWxlU3luYyh2LT5tZGZk X3ZmZCwgV0FJVF9FVkVOVF9EQVRBX0ZJTEVfSU1NRURJQVRFX1NZTkMpIDwgMCkKIAkJCWVyZXBv cnQoZGF0YV9zeW5jX2VsZXZlbChFUlJPUiksCkBAIC05OTMsNyArOTgzLDcgQEAgbWRpbW1lZHN5 bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKIAkJaWYgKHNlZ25vID4g bWluX2luYWN0aXZlX3NlZykKIAkJewogCQkJRmlsZUNsb3NlKHYtPm1kZmRfdmZkKTsKLQkJCV9m ZHZlY19yZXNpemUocmVsbiwgZm9ya251bSwgc2Vnbm8gLSAxKTsKKwkJCV9mZHZlY19yZXNpemUo c2ZpbGUsIHNlZ25vIC0gMSk7CiAJCX0KIAogCQlzZWduby0tOwpAQCAtMTAxMCwxNCArMTAwMCwx NCBAQCBtZGltbWVkc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQog ICogZW5vdWdoIHRvIGJlIGEgcGVyZm9ybWFuY2UgcHJvYmxlbSkuCiAgKi8KIHN0YXRpYyB2b2lk Ci1yZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0sIE1kZmRWZWMgKnNlZykKK3JlZ2lzdGVyX2RpcnR5X3NlZ21lbnQoU01nckZpbGVIYW5k bGUgc2ZpbGUsIE1kZmRWZWMgKnNlZykKIHsKIAlGaWxlVGFnCQl0YWc7CiAKLQlJTklUX01EX0ZJ TEVUQUcodGFnLCByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIGZvcmtudW0sIHNlZy0+bWRm ZF9zZWdubyk7CisJSU5JVF9NRF9GSUxFVEFHKHRhZywgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2Nh dG9yLCBzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sIHNlZy0+bWRmZF9zZWdubyk7CiAKIAkv KiBUZW1wIHJlbGF0aW9ucyBzaG91bGQgbmV2ZXIgYmUgZnN5bmMnZCAqLwotCUFzc2VydCghU21n cklzVGVtcChyZWxuKSk7CisJQXNzZXJ0KCFTbWdySXNUZW1wKHNmaWxlKSk7CiAKIAlpZiAoIVJl Z2lzdGVyU3luY1JlcXVlc3QoJnRhZywgU1lOQ19SRVFVRVNULCBmYWxzZSAvKiByZXRyeU9uRXJy b3IgKi8gKSkKIAl7CkBAIC0xMDM2LDE1ICsxMDI2LDE0IEBAIHJlZ2lzdGVyX2RpcnR5X3NlZ21l bnQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgTWRmZFZlYyAqc2VnKQog ICogcmVnaXN0ZXJfdW5saW5rX3NlZ21lbnQoKSAtLSBTY2hlZHVsZSBhIGZpbGUgdG8gYmUgZGVs ZXRlZCBhZnRlciBuZXh0IGNoZWNrcG9pbnQKICAqLwogc3RhdGljIHZvaWQKLXJlZ2lzdGVyX3Vu bGlua19zZWdtZW50KFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBm b3JrbnVtLAotCQkJCQkJQmxvY2tOdW1iZXIgc2Vnbm8pCityZWdpc3Rlcl91bmxpbmtfc2VnbWVu dChTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3IsIEJsb2NrTnVtYmVyIHNlZ25vKQogewogCUZpbGVU YWcJCXRhZzsKIAotCUlOSVRfTURfRklMRVRBRyh0YWcsIHJsb2NhdG9yLmxvY2F0b3IsIGZvcmtu dW0sIHNlZ25vKTsKKwlJTklUX01EX0ZJTEVUQUcodGFnLCBzbG9jYXRvci5sb2NhdG9yLCBzbG9j YXRvci5mb3JrbnVtLCBzZWdubyk7CiAKIAkvKiBTaG91bGQgbmV2ZXIgYmUgdXNlZCB3aXRoIHRl bXAgcmVsYXRpb25zICovCi0JQXNzZXJ0KCFSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAocmxv Y2F0b3IpKTsKKwlBc3NlcnQoIVNNZ3JGaWxlTG9jYXRvcklzVGVtcChzbG9jYXRvcikpOwogCiAJ UmVnaXN0ZXJTeW5jUmVxdWVzdCgmdGFnLCBTWU5DX1VOTElOS19SRVFVRVNULCB0cnVlIC8qIHJl dHJ5T25FcnJvciAqLyApOwogfQpAQCAtMTA1MywxMiArMTA0MiwxMSBAQCByZWdpc3Rlcl91bmxp bmtfc2VnbWVudChSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9y a251bSwKICAqIHJlZ2lzdGVyX2ZvcmdldF9yZXF1ZXN0KCkgLS0gZm9yZ2V0IGFueSBmc3luY3Mg Zm9yIGEgcmVsYXRpb24gZm9yaydzIHNlZ21lbnQKICAqLwogc3RhdGljIHZvaWQKLXJlZ2lzdGVy X2ZvcmdldF9yZXF1ZXN0KFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJl ciBmb3JrbnVtLAotCQkJCQkJQmxvY2tOdW1iZXIgc2Vnbm8pCityZWdpc3Rlcl9mb3JnZXRfcmVx dWVzdChTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3IsIEJsb2NrTnVtYmVyIHNlZ25vKQogewogCUZp bGVUYWcJCXRhZzsKIAotCUlOSVRfTURfRklMRVRBRyh0YWcsIHJsb2NhdG9yLmxvY2F0b3IsIGZv cmtudW0sIHNlZ25vKTsKKwlJTklUX01EX0ZJTEVUQUcodGFnLCBzbG9jYXRvci5sb2NhdG9yLCBz bG9jYXRvci5mb3JrbnVtLCBzZWdubyk7CiAKIAlSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZ TkNfRk9SR0VUX1JFUVVFU1QsIHRydWUgLyogcmV0cnlPbkVycm9yICovICk7CiB9CkBAIC0xMDgx LDU3ICsxMDY5LDI1IEBAIEZvcmdldERhdGFiYXNlU3luY1JlcXVlc3RzKE9pZCBkYmlkKQogCVJl Z2lzdGVyU3luY1JlcXVlc3QoJnRhZywgU1lOQ19GSUxURVJfUkVRVUVTVCwgdHJ1ZSAvKiByZXRy eU9uRXJyb3IgKi8gKTsKIH0KIAotLyoKLSAqIERyb3BSZWxhdGlvbkZpbGVzIC0tIGRyb3AgZmls ZXMgb2YgYWxsIGdpdmVuIHJlbGF0aW9ucwotICovCi12b2lkCi1Ecm9wUmVsYXRpb25GaWxlcyhS ZWxGaWxlTG9jYXRvciAqZGVscmVscywgaW50IG5kZWxyZWxzLCBib29sIGlzUmVkbykKLXsKLQlT TWdyUmVsYXRpb24gKnNyZWxzOwotCWludAkJCWk7Ci0KLQlzcmVscyA9IHBhbGxvYyhzaXplb2Yo U01nclJlbGF0aW9uKSAqIG5kZWxyZWxzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbmRlbHJlbHM7IGkr KykKLQl7Ci0JCVNNZ3JSZWxhdGlvbiBzcmVsID0gc21ncm9wZW4oZGVscmVsc1tpXSwgSW52YWxp ZEJhY2tlbmRJZCk7Ci0KLQkJaWYgKGlzUmVkbykKLQkJewotCQkJRm9ya051bWJlcglmb3JrOwot Ci0JCQlmb3IgKGZvcmsgPSAwOyBmb3JrIDw9IE1BWF9GT1JLTlVNOyBmb3JrKyspCi0JCQkJWExv Z0Ryb3BSZWxhdGlvbihkZWxyZWxzW2ldLCBmb3JrKTsKLQkJfQotCQlzcmVsc1tpXSA9IHNyZWw7 Ci0JfQotCi0Jc21ncmRvdW5saW5rYWxsKHNyZWxzLCBuZGVscmVscywgaXNSZWRvKTsKLQotCWZv ciAoaSA9IDA7IGkgPCBuZGVscmVsczsgaSsrKQotCQlzbWdyY2xvc2Uoc3JlbHNbaV0pOwotCXBm cmVlKHNyZWxzKTsKLX0KLQogCiAvKgogICoJX2ZkdmVjX3Jlc2l6ZSgpIC0tIFJlc2l6ZSB0aGUg Zm9yaydzIG9wZW4gc2VnbWVudHMgYXJyYXkKICAqLwogc3RhdGljIHZvaWQKLV9mZHZlY19yZXNp emUoU01nclJlbGF0aW9uIHJlbG4sCi0JCQkgIEZvcmtOdW1iZXIgZm9ya251bSwKK19mZHZlY19y ZXNpemUoU01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkgIGludCBuc2VnKQogewogCWlmIChuc2Vn ID09IDApCiAJewotCQlpZiAocmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA+IDApCisJ CWlmIChzZmlsZS0+bWRfbnVtX29wZW5fc2VncyA+IDApCiAJCXsKLQkJCXBmcmVlKHJlbG4tPm1k X3NlZ19mZHNbZm9ya251bV0pOwotCQkJcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXSA9IE5VTEw7 CisJCQlwZnJlZShzZmlsZS0+bWRfc2VnX2Zkcyk7CisJCQlzZmlsZS0+bWRfc2VnX2ZkcyA9IE5V TEw7CiAJCX0KIAl9Ci0JZWxzZSBpZiAocmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA9 PSAwKQorCWVsc2UgaWYgKHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzID09IDApCiAJewotCQlyZWxu LT5tZF9zZWdfZmRzW2ZvcmtudW1dID0KKwkJc2ZpbGUtPm1kX3NlZ19mZHMgPQogCQkJTWVtb3J5 Q29udGV4dEFsbG9jKE1kQ3h0LCBzaXplb2YoTWRmZFZlYykgKiBuc2VnKTsKIAl9CiAJZWxzZQpA QCAtMTE0MiwxMiArMTA5OCwxMiBAQCBfZmR2ZWNfcmVzaXplKFNNZ3JSZWxhdGlvbiByZWxuLAog CQkgKiBGaWxlQ2xvc2UoKSwgYW5kIHRoZSBtZW1vcnkgY29udGV4dCBpbnRlcm5hbGx5IHdpbGwg c29tZXRpbWVzIGF2b2lkCiAJCSAqIGRvaW5nIGFuIGFjdHVhbCByZWFsbG9jYXRpb24uCiAJCSAq LwotCQlyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dID0KLQkJCXJlcGFsbG9jKHJlbG4tPm1kX3Nl Z19mZHNbZm9ya251bV0sCisJCXNmaWxlLT5tZF9zZWdfZmRzID0KKwkJCXJlcGFsbG9jKHNmaWxl LT5tZF9zZWdfZmRzLAogCQkJCQkgc2l6ZW9mKE1kZmRWZWMpICogbnNlZyk7CiAJfQogCi0JcmVs bi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA9IG5zZWc7CisJc2ZpbGUtPm1kX251bV9vcGVu X3NlZ3MgPSBuc2VnOwogfQogCiAvKgpAQCAtMTE1NSwxMiArMTExMSwxMiBAQCBfZmR2ZWNfcmVz aXplKFNNZ3JSZWxhdGlvbiByZWxuLAogICogcmV0dXJuZWQgc3RyaW5nIGlzIHBhbGxvYydkLgog ICovCiBzdGF0aWMgY2hhciAqCi1fbWRmZF9zZWdwYXRoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIHNlZ25vKQorX21kZmRfc2VncGF0aChTTWdyRmls ZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgc2Vnbm8pCiB7CiAJY2hhcgkgICAqcGF0aCwKIAkJ CSAgICpmdWxscGF0aDsKIAotCXBhdGggPSByZWxwYXRoKHJlbG4tPnNtZ3JfcmxvY2F0b3IsIGZv cmtudW0pOworCXBhdGggPSBzbWdyZmlsZXBhdGgoc2ZpbGUtPnNtZ3JfbG9jYXRvcik7CiAKIAlp ZiAoc2Vnbm8gPiAwKQogCXsKQEAgLTExNzgsMTQgKzExMzQsMTQgQEAgX21kZmRfc2VncGF0aChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBzZWdubykK ICAqIGFuZCBtYWtlIGEgTWRmZFZlYyBvYmplY3QgZm9yIGl0LiAgUmV0dXJucyBOVUxMIG9uIGZh aWx1cmUuCiAgKi8KIHN0YXRpYyBNZGZkVmVjICoKLV9tZGZkX29wZW5zZWcoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgc2Vnbm8sCitfbWRmZF9vcGVu c2VnKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBzZWdubywKIAkJCSAgaW50IG9m bGFncykKIHsKIAlNZGZkVmVjICAgICp2OwogCUZpbGUJCWZkOwogCWNoYXIJICAgKmZ1bGxwYXRo OwogCi0JZnVsbHBhdGggPSBfbWRmZF9zZWdwYXRoKHJlbG4sIGZvcmtudW0sIHNlZ25vKTsKKwlm dWxscGF0aCA9IF9tZGZkX3NlZ3BhdGgoc2ZpbGUsIHNlZ25vKTsKIAogCS8qIG9wZW4gdGhlIGZp bGUgKi8KIAlmZCA9IFBhdGhOYW1lT3BlbkZpbGUoZnVsbHBhdGgsIE9fUkRXUiB8IFBHX0JJTkFS WSB8IG9mbGFncyk7CkBAIC0xMTk5LDE2ICsxMTU1LDE2IEBAIF9tZGZkX29wZW5zZWcoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgc2Vnbm8sCiAJICog U2VnbWVudHMgYXJlIGFsd2F5cyBvcGVuZWQgaW4gb3JkZXIgZnJvbSBsb3dlc3QgdG8gaGlnaGVz dCwgc28gd2UgbXVzdAogCSAqIGJlIGFkZGluZyBhIG5ldyBvbmUgYXQgdGhlIGVuZC4KIAkgKi8K LQlBc3NlcnQoc2Vnbm8gPT0gcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSk7CisJQXNz ZXJ0KHNlZ25vID09IHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzKTsKIAotCV9mZHZlY19yZXNpemUo cmVsbiwgZm9ya251bSwgc2Vnbm8gKyAxKTsKKwlfZmR2ZWNfcmVzaXplKHNmaWxlLCBzZWdubyAr IDEpOwogCiAJLyogZmlsbCB0aGUgZW50cnkgKi8KLQl2ID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9y a251bV1bc2Vnbm9dOworCXYgPSAmc2ZpbGUtPm1kX3NlZ19mZHNbc2Vnbm9dOwogCXYtPm1kZmRf dmZkID0gZmQ7CiAJdi0+bWRmZF9zZWdubyA9IHNlZ25vOwogCi0JQXNzZXJ0KF9tZG5ibG9ja3Mo cmVsbiwgZm9ya251bSwgdikgPD0gKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKKwlBc3Nl cnQoX21kbmJsb2NrcyhzZmlsZSwgdikgPD0gKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsK IAogCS8qIGFsbCBkb25lICovCiAJcmV0dXJuIHY7CkBAIC0xMjIzLDcgKzExNzksNyBAQCBfbWRm ZF9vcGVuc2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVt YmVyIHNlZ25vLAogICogRVhURU5TSU9OX0NSRUFURSBjYXNlLgogICovCiBzdGF0aWMgTWRmZFZl YyAqCi1fbWRmZF9nZXRzZWcoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwg QmxvY2tOdW1iZXIgYmxrbm8sCitfbWRmZF9nZXRzZWcoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJs b2NrTnVtYmVyIGJsa25vLAogCQkJIGJvb2wgc2tpcEZzeW5jLCBpbnQgYmVoYXZpb3IpCiB7CiAJ TWRmZFZlYyAgICAqdjsKQEAgLTEyMzgsOSArMTE5NCw5IEBAIF9tZGZkX2dldHNlZyhTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibGtubywKIAl0YXJn ZXRzZWcgPSBibGtubyAvICgoQmxvY2tOdW1iZXIpIFJFTFNFR19TSVpFKTsKIAogCS8qIGlmIGFu IGV4aXN0aW5nIGFuZCBvcGVuZWQgc2VnbWVudCwgd2UncmUgZG9uZSAqLwotCWlmICh0YXJnZXRz ZWcgPCByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dKQorCWlmICh0YXJnZXRzZWcgPCBz ZmlsZS0+bWRfbnVtX29wZW5fc2VncykKIAl7Ci0JCXYgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3Jr bnVtXVt0YXJnZXRzZWddOworCQl2ID0gJnNmaWxlLT5tZF9zZWdfZmRzW3RhcmdldHNlZ107CiAJ CXJldHVybiB2OwogCX0KIApAQCAtMTI1NSwxOSArMTIxMSwxOSBAQCBfbWRmZF9nZXRzZWcoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJ ICogJ2JlaGF2aW9yJykuIFN0YXJ0IHdpdGggZWl0aGVyIHRoZSBsYXN0IG9wZW5lZCwgb3IgdGhl IGZpcnN0IHNlZ21lbnQgaWYKIAkgKiBub25lIHdhcyBvcGVuZWQgYmVmb3JlLgogCSAqLwotCWlm IChyZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID4gMCkKLQkJdiA9ICZyZWxuLT5tZF9z ZWdfZmRzW2ZvcmtudW1dW3JlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV0gLSAxXTsKKwlp ZiAoc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgPiAwKQorCQl2ID0gJnNmaWxlLT5tZF9zZWdfZmRz W3NmaWxlLT5tZF9udW1fb3Blbl9zZWdzIC0gMV07CiAJZWxzZQogCXsKLQkJdiA9IG1kb3BlbmZv cmsocmVsbiwgZm9ya251bSwgYmVoYXZpb3IpOworCQl2ID0gbWRvcGVuZm9yayhzZmlsZSwgYmVo YXZpb3IpOwogCQlpZiAoIXYpCiAJCQlyZXR1cm4gTlVMTDsJCS8qIGlmIGJlaGF2aW9yICYgRVhU RU5TSU9OX1JFVFVSTl9OVUxMICovCiAJfQogCi0JZm9yIChuZXh0c2Vnbm8gPSByZWxuLT5tZF9u dW1fb3Blbl9zZWdzW2ZvcmtudW1dOworCWZvciAobmV4dHNlZ25vID0gc2ZpbGUtPm1kX251bV9v cGVuX3NlZ3M7CiAJCSBuZXh0c2Vnbm8gPD0gdGFyZ2V0c2VnOyBuZXh0c2Vnbm8rKykKIAl7Ci0J CUJsb2NrTnVtYmVyIG5ibG9ja3MgPSBfbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0sIHYpOworCQlC bG9ja051bWJlciBuYmxvY2tzID0gX21kbmJsb2NrcyhzZmlsZSwgdik7CiAJCWludAkJCWZsYWdz ID0gMDsKIAogCQlBc3NlcnQobmV4dHNlZ25vID09IHYtPm1kZmRfc2Vnbm8gKyAxKTsKQEAgLTEy OTYsNyArMTI1Miw3IEBAIF9tZGZkX2dldHNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtLCBCbG9ja051bWJlciBibGtubywKIAkJCXsKIAkJCQljaGFyCSAgICp6ZXJvYnVm ID0gcGFsbG9jMChCTENLU1opOwogCi0JCQkJbWRleHRlbmQocmVsbiwgZm9ya251bSwKKwkJCQlt ZGV4dGVuZChzZmlsZSwKIAkJCQkJCSBuZXh0c2Vnbm8gKiAoKEJsb2NrTnVtYmVyKSBSRUxTRUdf U0laRSkgLSAxLAogCQkJCQkJIHplcm9idWYsIHNraXBGc3luYyk7CiAJCQkJcGZyZWUoemVyb2J1 Zik7CkBAIC0xMzI3LDExICsxMjgzLDExIEBAIF9tZGZkX2dldHNlZyhTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibGtubywKIAkJCWVyZXBvcnQoRVJS T1IsCiAJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAogCQkJCQkgZXJybXNnKCJjb3Vs ZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiAodGFyZ2V0IGJsb2NrICV1KTogcHJldmlvdXMgc2VnbWVu dCBpcyBvbmx5ICV1IGJsb2NrcyIsCi0JCQkJCQkJX21kZmRfc2VncGF0aChyZWxuLCBmb3JrbnVt LCBuZXh0c2Vnbm8pLAorCQkJCQkJCV9tZGZkX3NlZ3BhdGgoc2ZpbGUsIG5leHRzZWdubyksCiAJ CQkJCQkJYmxrbm8sIG5ibG9ja3MpKSk7CiAJCX0KIAotCQl2ID0gX21kZmRfb3BlbnNlZyhyZWxu LCBmb3JrbnVtLCBuZXh0c2Vnbm8sIGZsYWdzKTsKKwkJdiA9IF9tZGZkX29wZW5zZWcoc2ZpbGUs IG5leHRzZWdubywgZmxhZ3MpOwogCiAJCWlmICh2ID09IE5VTEwpCiAJCXsKQEAgLTEzNDEsNyAr MTI5Nyw3IEBAIF9tZGZkX2dldHNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3Jr bnVtLCBCbG9ja051bWJlciBibGtubywKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAogCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwi JXNcIiAodGFyZ2V0IGJsb2NrICV1KTogJW0iLAotCQkJCQkJCV9tZGZkX3NlZ3BhdGgocmVsbiwg Zm9ya251bSwgbmV4dHNlZ25vKSwKKwkJCQkJCQlfbWRmZF9zZWdwYXRoKHNmaWxlLCBuZXh0c2Vn bm8pLAogCQkJCQkJCWJsa25vKSkpOwogCQl9CiAJfQpAQCAtMTM1Myw3ICsxMzA5LDcgQEAgX21k ZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVt YmVyIGJsa25vLAogICogR2V0IG51bWJlciBvZiBibG9ja3MgcHJlc2VudCBpbiBhIHNpbmdsZSBk aXNrIGZpbGUKICAqLwogc3RhdGljIEJsb2NrTnVtYmVyCi1fbWRuYmxvY2tzKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIE1kZmRWZWMgKnNlZykKK19tZG5ibG9ja3MoU01n ckZpbGVIYW5kbGUgc2ZpbGUsIE1kZmRWZWMgKnNlZykKIHsKIAlvZmZfdAkJbGVuOwogCkBAIC0x Mzc2LDE2ICsxMzMyLDE2IEBAIF9tZG5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwgTWRmZFZlYyAqc2VnKQogaW50CiBtZHN5bmNmaWxldGFnKGNvbnN0IEZpbGVU YWcgKmZ0YWcsIGNoYXIgKnBhdGgpCiB7Ci0JU01nclJlbGF0aW9uIHJlbG4gPSBzbWdyb3Blbihm dGFnLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7CisJU01nckZpbGVIYW5kbGUgc2ZpbGUg PSBzbWdyb3BlbihmdGFnLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgZnRhZy0+Zm9ya251 bSk7CiAJRmlsZQkJZmlsZTsKIAlib29sCQluZWVkX3RvX2Nsb3NlOwogCWludAkJCXJlc3VsdCwK IAkJCQlzYXZlX2Vycm5vOwogCiAJLyogU2VlIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGUgZmlsZSBv cGVuLCBvciBuZWVkIHRvIG9wZW4gaXQuICovCi0JaWYgKGZ0YWctPnNlZ25vIDwgcmVsbi0+bWRf bnVtX29wZW5fc2Vnc1tmdGFnLT5mb3JrbnVtXSkKKwlpZiAoZnRhZy0+c2Vnbm8gPCBzZmlsZS0+ bWRfbnVtX29wZW5fc2VncykKIAl7Ci0JCWZpbGUgPSByZWxuLT5tZF9zZWdfZmRzW2Z0YWctPmZv cmtudW1dW2Z0YWctPnNlZ25vXS5tZGZkX3ZmZDsKKwkJZmlsZSA9IHNmaWxlLT5tZF9zZWdfZmRz W2Z0YWctPnNlZ25vXS5tZGZkX3ZmZDsKIAkJc3RybGNweShwYXRoLCBGaWxlUGF0aE5hbWUoZmls ZSksIE1BWFBHUEFUSCk7CiAJCW5lZWRfdG9fY2xvc2UgPSBmYWxzZTsKIAl9CkBAIC0xMzkzLDcg KzEzNDksNyBAQCBtZHN5bmNmaWxldGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgp CiAJewogCQljaGFyCSAgICpwOwogCi0JCXAgPSBfbWRmZF9zZWdwYXRoKHJlbG4sIGZ0YWctPmZv cmtudW0sIGZ0YWctPnNlZ25vKTsKKwkJcCA9IF9tZGZkX3NlZ3BhdGgoc2ZpbGUsIGZ0YWctPnNl Z25vKTsKIAkJc3RybGNweShwYXRoLCBwLCBNQVhQR1BBVEgpOwogCQlwZnJlZShwKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2Uvc21nci9zbWdyLmMKaW5kZXggYjJiZDc0OWQ3NzAuLjRjNTZjMTM0ZDMyIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2Uvc21nci9zbWdyLmMKQEAgLTQxLDI3ICs0MSwyNCBAQCB0eXBlZGVmIHN0cnVjdCBmX3Nt Z3IKIHsKIAl2b2lkCQkoKnNtZ3JfaW5pdCkgKHZvaWQpOwkvKiBtYXkgYmUgTlVMTCAqLwogCXZv aWQJCSgqc21ncl9zaHV0ZG93bikgKHZvaWQpOwkvKiBtYXkgYmUgTlVMTCAqLwotCXZvaWQJCSgq c21ncl9vcGVuKSAoU01nclJlbGF0aW9uIHJlbG4pOwotCXZvaWQJCSgqc21ncl9jbG9zZSkgKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwotCXZvaWQJCSgqc21ncl9jcmVh dGUpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJCQlib29s IGlzUmVkbyk7Ci0JYm9vbAkJKCpzbWdyX2V4aXN0cykgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0pOwotCXZvaWQJCSgqc21ncl91bmxpbmspIChSZWxGaWxlTG9jYXRvckJh Y2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCQkJYm9vbCBpc1JlZG8p OwotCXZvaWQJCSgqc21ncl9leHRlbmQpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrbnVtLAorCXZvaWQJCSgqc21ncl9vcGVuKSAoU01nckZpbGVIYW5kbGUgc2ZpbGUpOworCXZv aWQJCSgqc21ncl9jbG9zZSkgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKKwl2b2lkCQkoKnNtZ3Jf Y3JlYXRlKSAoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGJvb2wgaXNSZWRvKTsKKwlib29sCQkoKnNt Z3JfZXhpc3RzKSAoU01nckZpbGVIYW5kbGUgc2ZpbGUpOworCXZvaWQJCSgqc21ncl91bmxpbmsp IChTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3IsIGJvb2wgaXNSZWRvKTsKKwl2b2lkCQkoKnNtZ3Jf ZXh0ZW5kKSAoU01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCQkJCUJsb2NrTnVtYmVyIGJsb2Nr bnVtLCBjaGFyICpidWZmZXIsIGJvb2wgc2tpcEZzeW5jKTsKLQlib29sCQkoKnNtZ3JfcHJlZmV0 Y2gpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorCWJvb2wJCSgqc21n cl9wcmVmZXRjaCkgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJCQkgIEJsb2NrTnVtYmVy IGJsb2NrbnVtKTsKLQl2b2lkCQkoKnNtZ3JfcmVhZCkgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sCisJdm9pZAkJKCpzbWdyX3JlYWQpIChTTWdyRmlsZUhhbmRsZSBzZmls ZSwKIAkJCQkJCQkgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBjaGFyICpidWZmZXIpOwotCXZvaWQJ CSgqc21ncl93cml0ZSkgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCisJ dm9pZAkJKCpzbWdyX3dyaXRlKSAoU01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCQkJICAgQmxv Y2tOdW1iZXIgYmxvY2tudW0sIGNoYXIgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMpOwotCXZvaWQJ CSgqc21ncl93cml0ZWJhY2spIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LAorCXZvaWQJCSgqc21ncl93cml0ZWJhY2spIChTTWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJ CQkJICAgQmxvY2tOdW1iZXIgYmxvY2tudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpOwotCUJsb2Nr TnVtYmVyICgqc21ncl9uYmxvY2tzKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSk7Ci0Jdm9pZAkJKCpzbWdyX3RydW5jYXRlKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwKLQkJCQkJCQkJICBCbG9ja051bWJlciBuYmxvY2tzKTsKLQl2b2lkCQko KnNtZ3JfaW1tZWRzeW5jKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7 CisJQmxvY2tOdW1iZXIgKCpzbWdyX25ibG9ja3MpIChTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CisJ dm9pZAkJKCpzbWdyX3RydW5jYXRlKSAoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVy IG5ibG9ja3MpOworCXZvaWQJCSgqc21ncl9pbW1lZHN5bmMpIChTTWdyRmlsZUhhbmRsZSBzZmls ZSk7CiB9IGZfc21ncjsKIAogc3RhdGljIGNvbnN0IGZfc21nciBzbWdyc3dbXSA9IHsKQEAgLTg4 LDEyICs4NSwxMiBAQCBzdGF0aWMgY29uc3QgZl9zbWdyIHNtZ3Jzd1tdID0gewogc3RhdGljIGNv bnN0IGludCBOU21nciA9IGxlbmd0aG9mKHNtZ3Jzdyk7CiAKIC8qCi0gKiBFYWNoIGJhY2tlbmQg aGFzIGEgaGFzaHRhYmxlIHRoYXQgc3RvcmVzIGFsbCBleHRhbnQgU01nclJlbGF0aW9uIG9iamVj dHMuCi0gKiBJbiBhZGRpdGlvbiwgInVub3duZWQiIFNNZ3JSZWxhdGlvbiBvYmplY3RzIGFyZSBj aGFpbmVkIHRvZ2V0aGVyIGluIGEgbGlzdC4KKyAqIEVhY2ggYmFja2VuZCBoYXMgYSBoYXNodGFi bGUgdGhhdCBzdG9yZXMgYWxsIGV4dGFudCBTTWdyRmlsZURhdGEgb2JqZWN0cy4KKyAqIEluIGFk ZGl0aW9uLCAidW5vd25lZCIgU01nckZpbGUgb2JqZWN0cyBhcmUgY2hhaW5lZCB0b2dldGhlciBp biBhIGxpc3QuCiAgKi8KLXN0YXRpYyBIVEFCICpTTWdyUmVsYXRpb25IYXNoID0gTlVMTDsKK3N0 YXRpYyBIVEFCICpTTWdyRmlsZUhhc2ggPSBOVUxMOwogCi1zdGF0aWMgZGxpc3RfaGVhZCB1bm93 bmVkX3JlbG5zOworc3RhdGljIGRsaXN0X2hlYWQgdW5vd25lZF9zZmlsZXM7CiAKIC8qIGxvY2Fs IGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIHN0YXRpYyB2b2lkIHNtZ3JzaHV0ZG93bihpbnQgY29k ZSwgRGF0dW0gYXJnKTsKQEAgLTE0Miw1MCArMTM5LDUyIEBAIHNtZ3JzaHV0ZG93bihpbnQgY29k ZSwgRGF0dW0gYXJnKQogICoKICAqCQlUaGlzIGRvZXMgbm90IGF0dGVtcHQgdG8gYWN0dWFsbHkg b3BlbiB0aGUgdW5kZXJseWluZyBmaWxlLgogICovCi1TTWdyUmVsYXRpb24KLXNtZ3JvcGVuKFJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCkKK1NNZ3JGaWxlSGFuZGxl CitzbWdyb3BlbihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQsIEZv cmtOdW1iZXIgZm9ya051bSkKIHsKLQlSZWxGaWxlTG9jYXRvckJhY2tlbmQgYnJsb2NhdG9yOwot CVNNZ3JSZWxhdGlvbiByZWxuOworCVNNZ3JGaWxlTG9jYXRvciBzbG9jYXRvcjsKKwlTTWdyRmls ZUhhbmRsZSBzZmlsZTsKIAlib29sCQlmb3VuZDsKIAotCWlmIChTTWdyUmVsYXRpb25IYXNoID09 IE5VTEwpCisJaWYgKFNNZ3JGaWxlSGFzaCA9PSBOVUxMKQogCXsKIAkJLyogRmlyc3QgdGltZSB0 aHJvdWdoOiBpbml0aWFsaXplIHRoZSBoYXNoIHRhYmxlICovCiAJCUhBU0hDVEwJCWN0bDsKIAot CQljdGwua2V5c2l6ZSA9IHNpemVvZihSZWxGaWxlTG9jYXRvckJhY2tlbmQpOwotCQljdGwuZW50 cnlzaXplID0gc2l6ZW9mKFNNZ3JSZWxhdGlvbkRhdGEpOwotCQlTTWdyUmVsYXRpb25IYXNoID0g aGFzaF9jcmVhdGUoInNtZ3IgcmVsYXRpb24gdGFibGUiLCA0MDAsCisJCWN0bC5rZXlzaXplID0g c2l6ZW9mKFNNZ3JGaWxlTG9jYXRvcik7CisJCWN0bC5lbnRyeXNpemUgPSBzaXplb2YoU01nckZp bGVEYXRhKTsKKwkJU01nckZpbGVIYXNoID0gaGFzaF9jcmVhdGUoInNtZ3IgcmVsYXRpb24gdGFi bGUiLCA0MDAsCiAJCQkJCQkJCQkgICAmY3RsLCBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTKTsKLQkJ ZGxpc3RfaW5pdCgmdW5vd25lZF9yZWxucyk7CisJCWRsaXN0X2luaXQoJnVub3duZWRfc2ZpbGVz KTsKIAl9CiAKIAkvKiBMb29rIHVwIG9yIGNyZWF0ZSBhbiBlbnRyeSAqLwotCWJybG9jYXRvci5s b2NhdG9yID0gcmxvY2F0b3I7Ci0JYnJsb2NhdG9yLmJhY2tlbmQgPSBiYWNrZW5kOwotCXJlbG4g PSAoU01nclJlbGF0aW9uKSBoYXNoX3NlYXJjaChTTWdyUmVsYXRpb25IYXNoLAotCQkJCQkJCQkJ ICAmYnJsb2NhdG9yLAotCQkJCQkJCQkJICBIQVNIX0VOVEVSLCAmZm91bmQpOworCisJc2xvY2F0 b3IubG9jYXRvciA9IHJsb2NhdG9yOworCXNsb2NhdG9yLmJhY2tlbmQgPSBiYWNrZW5kOworCXNs b2NhdG9yLmZvcmtudW0gPSBmb3JrTnVtOworCXNmaWxlID0gKFNNZ3JGaWxlSGFuZGxlKSBoYXNo X3NlYXJjaChTTWdyRmlsZUhhc2gsCisJCQkJCQkJCQkJICZzbG9jYXRvciwKKwkJCQkJCQkJCQkg SEFTSF9FTlRFUiwgJmZvdW5kKTsKKwogCiAJLyogSW5pdGlhbGl6ZSBpdCBpZiBub3QgcHJlc2Vu dCBiZWZvcmUgKi8KIAlpZiAoIWZvdW5kKQogCXsKIAkJLyogaGFzaF9zZWFyY2ggYWxyZWFkeSBm aWxsZWQgaW4gdGhlIGxvb2t1cCBrZXkgKi8KLQkJcmVsbi0+c21ncl9vd25lciA9IE5VTEw7Ci0J CXJlbG4tPnNtZ3JfdGFyZ2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQlmb3IgKGludCBp ID0gMDsgaSA8PSBNQVhfRk9SS05VTTsgKytpKQotCQkJcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nr c1tpXSA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJcmVsbi0+c21ncl93aGljaCA9IDA7CS8qIHdl IG9ubHkgaGF2ZSBtZC5jIGF0IHByZXNlbnQgKi8KKwkJc2ZpbGUtPnNtZ3Jfb3duZXIgPSBOVUxM OworCQlzZmlsZS0+c21ncl90YXJnYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCXNmaWxl LT5zbWdyX2NhY2hlZF9uYmxvY2tzID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQlzZmlsZS0+c21n cl93aGljaCA9IDA7CS8qIHdlIG9ubHkgaGF2ZSBtZC5jIGF0IHByZXNlbnQgKi8KIAogCQkvKiBp bXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiAqLwotCQlzbWdyc3dbcmVsbi0+ c21ncl93aGljaF0uc21ncl9vcGVuKHJlbG4pOworCQlzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hd LnNtZ3Jfb3BlbihzZmlsZSk7CiAKIAkJLyogaXQgaGFzIG5vIG93bmVyIHlldCAqLwotCQlkbGlz dF9wdXNoX3RhaWwoJnVub3duZWRfcmVsbnMsICZyZWxuLT5ub2RlKTsKKwkJZGxpc3RfcHVzaF90 YWlsKCZ1bm93bmVkX3NmaWxlcywgJnNmaWxlLT5ub2RlKTsKIAl9CiAKLQlyZXR1cm4gcmVsbjsK KwlyZXR1cm4gc2ZpbGU7CiB9CiAKIC8qCkBAIC0xOTUsNyArMTk0LDcgQEAgc21ncm9wZW4oUmVs RmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kKQogICogdGhlIG9ubHkgc3Vj aCBvd25lcnMgZXhpc3QgaW4gdGhlIHJlbGNhY2hlLgogICovCiB2b2lkCi1zbWdyc2V0b3duZXIo U01nclJlbGF0aW9uICpvd25lciwgU01nclJlbGF0aW9uIHJlbG4pCitzbWdyc2V0b3duZXIoU01n ckZpbGVIYW5kbGUgKm93bmVyLCBTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKIAkvKiBXZSBkb24n dCBzdXBwb3J0ICJkaXNvd25pbmciIGFuIFNNZ3JSZWxhdGlvbiBoZXJlLCB1c2Ugc21ncmNsZWFy b3duZXIgKi8KIAlBc3NlcnQob3duZXIgIT0gTlVMTCk7CkBAIC0yMDYsNjggKzIwNSw2NyBAQCBz bWdyc2V0b3duZXIoU01nclJlbGF0aW9uICpvd25lciwgU01nclJlbGF0aW9uIHJlbG4pCiAJICog ZGVwZW5kaW5nIG9uIHRoZSBvcmRlciBvZiBwcm9jZXNzaW5nLiAgSXQncyBvayB0byBjbG9zZSB0 aGUgb2xkCiAJICogcmVsY2FjaGUgZW50cnkgZWFybHkgaW4gdGhhdCBjYXNlLikKIAkgKgotCSAq IElmIHRoZXJlIGlzbid0IGFuIG9sZCBvd25lciwgdGhlbiB0aGUgcmVsbiBzaG91bGQgYmUgaW4g dGhlIHVub3duZWQKKwkgKiBJZiB0aGVyZSBpc24ndCBhbiBvbGQgb3duZXIsIHRoZW4gdGhlIHNm aWxlIHNob3VsZCBiZSBpbiB0aGUgdW5vd25lZAogCSAqIGxpc3QsIGFuZCB3ZSBuZWVkIHRvIHJl bW92ZSBpdC4KIAkgKi8KLQlpZiAocmVsbi0+c21ncl9vd25lcikKLQkJKihyZWxuLT5zbWdyX293 bmVyKSA9IE5VTEw7CisJaWYgKHNmaWxlLT5zbWdyX293bmVyKQorCQkqKHNmaWxlLT5zbWdyX293 bmVyKSA9IE5VTEw7CiAJZWxzZQotCQlkbGlzdF9kZWxldGUoJnJlbG4tPm5vZGUpOworCQlkbGlz dF9kZWxldGUoJnNmaWxlLT5ub2RlKTsKIAogCS8qIE5vdyBlc3RhYmxpc2ggdGhlIG93bmVyc2hp cCByZWxhdGlvbnNoaXAuICovCi0JcmVsbi0+c21ncl9vd25lciA9IG93bmVyOwotCSpvd25lciA9 IHJlbG47CisJc2ZpbGUtPnNtZ3Jfb3duZXIgPSBvd25lcjsKKwkqb3duZXIgPSBzZmlsZTsKIH0K IAogLyoKLSAqIHNtZ3JjbGVhcm93bmVyKCkgLS0gUmVtb3ZlIGxvbmctbGl2ZWQgcmVmZXJlbmNl IHRvIGFuIFNNZ3JSZWxhdGlvbiBvYmplY3QKKyAqIHNtZ3JjbGVhcm93bmVyKCkgLS0gUmVtb3Zl IGxvbmctbGl2ZWQgcmVmZXJlbmNlIHRvIGFuIFNNZ3JGaWxlSGFuZGxlIG9iamVjdAogICoJCQkJ CSAgIGlmIG9uZSBleGlzdHMKICAqLwogdm9pZAotc21ncmNsZWFyb3duZXIoU01nclJlbGF0aW9u ICpvd25lciwgU01nclJlbGF0aW9uIHJlbG4pCitzbWdyY2xlYXJvd25lcihTTWdyRmlsZUhhbmRs ZSAqb3duZXIsIFNNZ3JGaWxlSGFuZGxlIHNmaWxlKQogewogCS8qIERvIG5vdGhpbmcgaWYgdGhl IFNNZ3JSZWxhdGlvbiBvYmplY3QgaXMgbm90IG93bmVkIGJ5IHRoZSBvd25lciAqLwotCWlmIChy ZWxuLT5zbWdyX293bmVyICE9IG93bmVyKQorCWlmIChzZmlsZS0+c21ncl9vd25lciAhPSBvd25l cikKIAkJcmV0dXJuOwogCiAJLyogdW5zZXQgdGhlIG93bmVyJ3MgcmVmZXJlbmNlICovCiAJKm93 bmVyID0gTlVMTDsKIAogCS8qIHVuc2V0IG91ciByZWZlcmVuY2UgdG8gdGhlIG93bmVyICovCi0J cmVsbi0+c21ncl9vd25lciA9IE5VTEw7CisJc2ZpbGUtPnNtZ3Jfb3duZXIgPSBOVUxMOwogCiAJ LyogYWRkIHRvIGxpc3Qgb2YgdW5vd25lZCByZWxhdGlvbnMgKi8KLQlkbGlzdF9wdXNoX3RhaWwo JnVub3duZWRfcmVsbnMsICZyZWxuLT5ub2RlKTsKKwlkbGlzdF9wdXNoX3RhaWwoJnVub3duZWRf c2ZpbGVzLCAmc2ZpbGUtPm5vZGUpOwogfQogCiAvKgotICoJc21ncmV4aXN0cygpIC0tIERvZXMg dGhlIHVuZGVybHlpbmcgZmlsZSBmb3IgYSBmb3JrIGV4aXN0PworICoJc21ncmV4aXN0cygpIC0t IERvZXMgdGhlIHVuZGVybHlpbmcgZmlsZSBleGlzdD8KICAqLwogYm9vbAotc21ncmV4aXN0cyhT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQorc21ncmV4aXN0cyhTTWdyRmls ZUhhbmRsZSBzZmlsZSkKIHsKLQlyZXR1cm4gc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3Jf ZXhpc3RzKHJlbG4sIGZvcmtudW0pOworCXJldHVybiBzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hd LnNtZ3JfZXhpc3RzKHNmaWxlKTsKIH0KIAogLyoKLSAqCXNtZ3JjbG9zZSgpIC0tIENsb3NlIGFu ZCBkZWxldGUgYW4gU01nclJlbGF0aW9uIG9iamVjdC4KKyAqCXNtZ3JjbG9zZSgpIC0tIENsb3Nl IGFuZCBkZWxldGUgYW4gU01nckZpbGUgb2JqZWN0LgogICovCiB2b2lkCi1zbWdyY2xvc2UoU01n clJlbGF0aW9uIHJlbG4pCitzbWdyY2xvc2UoU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7Ci0JU01n clJlbGF0aW9uICpvd25lcjsKLQlGb3JrTnVtYmVyCWZvcmtudW07CisJU01nckZpbGVIYW5kbGUg Km93bmVyOwogCi0JZm9yIChmb3JrbnVtID0gMDsgZm9ya251bSA8PSBNQVhfRk9SS05VTTsgZm9y a251bSsrKQotCQlzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9jbG9zZShyZWxuLCBmb3Jr bnVtKTsKKwlzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNtZ3JfY2xvc2Uoc2ZpbGUpOwogCi0J b3duZXIgPSByZWxuLT5zbWdyX293bmVyOworCW93bmVyID0gc2ZpbGUtPnNtZ3Jfb3duZXI7CiAK IAlpZiAoIW93bmVyKQotCQlkbGlzdF9kZWxldGUoJnJlbG4tPm5vZGUpOworCQlkbGlzdF9kZWxl dGUoJnNmaWxlLT5ub2RlKTsKIAotCWlmIChoYXNoX3NlYXJjaChTTWdyUmVsYXRpb25IYXNoLAot CQkJCQkmKHJlbG4tPnNtZ3JfcmxvY2F0b3IpLAorCisJaWYgKGhhc2hfc2VhcmNoKFNNZ3JGaWxl SGFzaCwKKwkJCQkJJihzZmlsZS0+c21ncl9sb2NhdG9yKSwKIAkJCQkJSEFTSF9SRU1PVkUsIE5V TEwpID09IE5VTEwpCiAJCWVsb2coRVJST1IsICJTTWdyUmVsYXRpb24gaGFzaHRhYmxlIGNvcnJ1 cHRlZCIpOwogCkBAIC0yODQsMTQgKzI4MiwxMSBAQCBzbWdyY2xvc2UoU01nclJlbGF0aW9uIHJl bG4pCiAgKgogICoJVGhlIG9iamVjdCByZW1haW5zIHZhbGlkLgogICovCi12b2lkCi1zbWdycmVs ZWFzZShTTWdyUmVsYXRpb24gcmVsbikKK3N0YXRpYyB2b2lkCitzbWdycmVsZWFzZShTTWdyRmls ZUhhbmRsZSBzZmlsZSkKIHsKLQlmb3IgKEZvcmtOdW1iZXIgZm9ya251bSA9IDA7IGZvcmtudW0g PD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykKLQl7Ci0JCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNo XS5zbWdyX2Nsb3NlKHJlbG4sIGZvcmtudW0pOwotCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tz W2ZvcmtudW1dID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCX0KKwlzbWdyc3dbc2ZpbGUtPnNtZ3Jf d2hpY2hdLnNtZ3JfY2xvc2Uoc2ZpbGUpOworCXNmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0g SW52YWxpZEJsb2NrTnVtYmVyOwogfQogCiAvKgpAQCAtMzAzLDE2ICsyOTgsMTYgQEAgdm9pZAog c21ncnJlbGVhc2VhbGwodm9pZCkKIHsKIAlIQVNIX1NFUV9TVEFUVVMgc3RhdHVzOwotCVNNZ3JS ZWxhdGlvbiByZWxuOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCiAJLyogTm90aGluZyB0byBk byBpZiBoYXNodGFibGUgbm90IHNldCB1cCAqLwotCWlmIChTTWdyUmVsYXRpb25IYXNoID09IE5V TEwpCisJaWYgKFNNZ3JGaWxlSGFzaCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQloYXNoX3NlcV9p bml0KCZzdGF0dXMsIFNNZ3JSZWxhdGlvbkhhc2gpOworCWhhc2hfc2VxX2luaXQoJnN0YXR1cywg U01nckZpbGVIYXNoKTsKIAotCXdoaWxlICgocmVsbiA9IChTTWdyUmVsYXRpb24pIGhhc2hfc2Vx X3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKLQkJc21ncnJlbGVhc2UocmVsbik7CisJd2hpbGUg KChzZmlsZSA9IChTTWdyRmlsZUhhbmRsZSkgaGFzaF9zZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBO VUxMKQorCQlzbWdycmVsZWFzZShzZmlsZSk7CiB9CiAKIC8qCkBAIC0zMjIsMTYgKzMxNywxNiBA QCB2b2lkCiBzbWdyY2xvc2VhbGwodm9pZCkKIHsKIAlIQVNIX1NFUV9TVEFUVVMgc3RhdHVzOwot CVNNZ3JSZWxhdGlvbiByZWxuOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCiAJLyogTm90aGlu ZyB0byBkbyBpZiBoYXNodGFibGUgbm90IHNldCB1cCAqLwotCWlmIChTTWdyUmVsYXRpb25IYXNo ID09IE5VTEwpCisJaWYgKFNNZ3JGaWxlSGFzaCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQloYXNo X3NlcV9pbml0KCZzdGF0dXMsIFNNZ3JSZWxhdGlvbkhhc2gpOworCWhhc2hfc2VxX2luaXQoJnN0 YXR1cywgU01nckZpbGVIYXNoKTsKIAotCXdoaWxlICgocmVsbiA9IChTTWdyUmVsYXRpb24pIGhh c2hfc2VxX3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKLQkJc21ncmNsb3NlKHJlbG4pOworCXdo aWxlICgoc2ZpbGUgPSAoU01nckZpbGVIYW5kbGUpIGhhc2hfc2VxX3NlYXJjaCgmc3RhdHVzKSkg IT0gTlVMTCkKKwkJc21ncmNsb3NlKHNmaWxlKTsKIH0KIAogLyoKQEAgLTM0MywxMTEgKzMzOCwx MTIgQEAgc21ncmNsb3NlYWxsKHZvaWQpCiAgKiBzdWNoIGVudHJ5IGV4aXN0cyBhbHJlYWR5Lgog ICovCiB2b2lkCi1zbWdyY2xvc2VyZWxsb2NhdG9yKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9j YXRvcikKK3NtZ3JjbG9zZXJlbGxvY2F0b3IoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tl bmRJZCBiYWNrZW5kKQogewotCVNNZ3JSZWxhdGlvbiByZWxuOworCVNNZ3JGaWxlSGFuZGxlIHNm aWxlOwogCiAJLyogTm90aGluZyB0byBkbyBpZiBoYXNodGFibGUgbm90IHNldCB1cCAqLwotCWlm IChTTWdyUmVsYXRpb25IYXNoID09IE5VTEwpCisJaWYgKFNNZ3JGaWxlSGFzaCA9PSBOVUxMKQog CQlyZXR1cm47CiAKLQlyZWxuID0gKFNNZ3JSZWxhdGlvbikgaGFzaF9zZWFyY2goU01nclJlbGF0 aW9uSGFzaCwKLQkJCQkJCQkJCSAgJnJsb2NhdG9yLAotCQkJCQkJCQkJICBIQVNIX0ZJTkQsIE5V TEwpOwotCWlmIChyZWxuICE9IE5VTEwpCi0JCXNtZ3JjbG9zZShyZWxuKTsKKwlmb3IgKGludCBp ID0gMDsgaSA8PSBNQVhfRk9SS05VTTsgaSsrKQorCXsKKwkJU01nckZpbGVMb2NhdG9yIHNsb2Nh dG9yID0geyBybG9jYXRvciwgYmFja2VuZCwgaSB9OworCisJCXNmaWxlID0gKFNNZ3JGaWxlSGFu ZGxlKSBoYXNoX3NlYXJjaChTTWdyRmlsZUhhc2gsCisJCQkJCQkJCQkJCSAmc2xvY2F0b3IsCisJ CQkJCQkJCQkJCSBIQVNIX0ZJTkQsIE5VTEwpOworCQlpZiAoc2ZpbGUgIT0gTlVMTCkKKwkJCXNt Z3JjbG9zZShzZmlsZSk7CisJfQogfQogCiAvKgotICoJc21ncmNyZWF0ZSgpIC0tIENyZWF0ZSBh IG5ldyByZWxhdGlvbi4KKyAqCXNtZ3JjcmVhdGUoKSAtLSBDcmVhdGUgYSBuZXcgZmlsZS4KICAq Ci0gKgkJR2l2ZW4gYW4gYWxyZWFkeS1jcmVhdGVkIChidXQgcHJlc3VtYWJseSB1bnVzZWQpIFNN Z3JSZWxhdGlvbiwKKyAqCQlHaXZlbiBhbiBhbHJlYWR5LWNyZWF0ZWQgKGJ1dCBwcmVzdW1hYmx5 IHVudXNlZCkgU01nckZpbGVIYW5kbGUsCiAgKgkJY2F1c2UgdGhlIHVuZGVybHlpbmcgZGlzayBm aWxlIG9yIG90aGVyIHN0b3JhZ2UgZm9yIHRoZSBmb3JrCiAgKgkJdG8gYmUgY3JlYXRlZC4KICAq Lwogdm9pZAotc21ncmNyZWF0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LCBib29sIGlzUmVkbykKK3NtZ3JjcmVhdGUoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGJvb2wgaXNS ZWRvKQogewotCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX2NyZWF0ZShyZWxuLCBmb3Jr bnVtLCBpc1JlZG8pOworCXNtZ3Jzd1tzZmlsZS0+c21ncl93aGljaF0uc21ncl9jcmVhdGUoc2Zp bGUsIGlzUmVkbyk7CiB9CiAKIC8qCi0gKglzbWdyZG9zeW5jYWxsKCkgLS0gSW1tZWRpYXRlbHkg c3luYyBhbGwgZm9ya3Mgb2YgYWxsIGdpdmVuIHJlbGF0aW9ucworICoJc21ncnVubGlua19tdWx0 aSgpIC0tIEltbWVkaWF0ZWx5IHVubGluayBnaXZlbiBmb3JrcyBvZiBnaXZlbiByZWxhdGlvbgog ICoKLSAqCQlBbGwgZm9ya3Mgb2YgYWxsIGdpdmVuIHJlbGF0aW9ucyBhcmUgc3luY2VkIG91dCB0 byB0aGUgc3RvcmUuCisgKgkJVGhlIGdpdmVuIGZvcmtzIG9mIHRoZSByZWxhdGlvbiBhcmUgcmVt b3ZlZCBmcm9tIHRoZSBzdG9yZS4gIFRoaXMKKyAqCQlzaG91bGQgbm90IGJlIHVzZWQgZHVyaW5n IHRyYW5zYWN0aW9uYWwgb3BlcmF0aW9ucywgc2luY2UgaXQgY2FuJ3QgYmUKKyAqCQl1bmRvbmUu CiAgKgotICoJCVRoaXMgaXMgZXF1aXZhbGVudCB0byBGbHVzaFJlbGF0aW9uQnVmZmVycygpIGZv ciBlYWNoIHNtZ3IgcmVsYXRpb24sCi0gKgkJdGhlbiBjYWxsaW5nIHNtZ3JpbW1lZHN5bmMoKSBm b3IgYWxsIGZvcmtzIG9mIGVhY2ggcmVsYXRpb24sIGJ1dCBpdCdzCi0gKgkJc2lnbmlmaWNhbnRs eSBxdWlja2VyIHNvIHNob3VsZCBiZSBwcmVmZXJyZWQgd2hlbiBwb3NzaWJsZS4KKyAqCQlUaGlz IGhhbmRsZXMgbXVsdGlwbGUgZm9ya3MgaW4gb25lIGNhbGwsIGJlY2F1c2UgdGhlIGNhY2hlIGlu dmFsaWRhdGlvbgorICoJCWhhcHBlbnMgYXQgcmVsYXRpb24gZ3JhbnVsYXJpdHkuIElmIHdlIGhh ZCBhbiBzbWdydW5saW5rKCkgZnVuY3Rpb24KKyAqCQl0byB1bmxpbmsganVzdCBhIHNpbmdsZSBz bWdyIGZpbGUsIGFuZCB0aGUgY2FsbGVyIHdhbnRlZCB0byBkZWxldGUKKyAqCQltdWx0aXBsZSBm b3JrcyBvZiBhIHNpbmdsZSByZWxhdGlvbiwgZWFjaCBjYWxsIHdvdWxkIHNlbmQgYSBuZXcKKyAq CQljYWNoZSBpbnZhbGlkYXRpb24gZXZlbnQsIHdoaWNoIHdvdWxkIGJlIHdhc3RlZnVsLgorICoK KyAqCQlJZiBpc1JlZG8gaXMgdHJ1ZSwgaXQgaXMgb2theSBmb3IgdGhlIHVuZGVybHlpbmcgZmls ZShzKSB0byBiZSBnb25lCisgKgkJYWxyZWFkeS4KICAqLwogdm9pZAotc21ncmRvc3luY2FsbChT TWdyUmVsYXRpb24gKnJlbHMsIGludCBucmVscykKK3NtZ3J1bmxpbmtfbXVsdGkoUmVsRmlsZUxv Y2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kLCBGb3JrTnVtYmVyICpmb3JrcywgaW50 IG5mb3JrcywgYm9vbCBpc1JlZG8pCiB7CisJaW50CQkJd2hpY2g7CiAJaW50CQkJaSA9IDA7Ci0J Rm9ya051bWJlcglmb3JrbnVtOwogCi0JaWYgKG5yZWxzID09IDApCi0JCXJldHVybjsKKwl3aGlj aCA9IDA7CS8qIHdlIG9ubHkgaGF2ZSBtZC5jIGF0IHByZXNlbnQgKi8KIAotCUZsdXNoUmVsYXRp b25zQWxsQnVmZmVycyhyZWxzLCBucmVscyk7CisJLyogQ2xvc2UgdGhlIGZvcmtzIGF0IHNtZ3Ig bGV2ZWwgKi8KKwlzbWdyY2xvc2VyZWxsb2NhdG9yKHJsb2NhdG9yLCBiYWNrZW5kKTsKIAogCS8q Ci0JICogU3luYyB0aGUgcGh5c2ljYWwgZmlsZShzKS4KKwkgKiBTZW5kIGEgc2hhcmVkLWludmFs IG1lc3NhZ2UgdG8gZm9yY2Ugb3RoZXIgYmFja2VuZHMgdG8gY2xvc2UgYW55CisJICogZGFuZ2xp bmcgc21nciByZWZlcmVuY2VzIHRoZXkgbWF5IGhhdmUgZm9yIHRoZXNlIHJlbHMuICBXZSBzaG91 bGQgZG8KKwkgKiB0aGlzIGJlZm9yZSBzdGFydGluZyB0aGUgYWN0dWFsIHVubGlua2luZywgaW4g Y2FzZSB3ZSBmYWlsIHBhcnR3YXkKKwkgKiB0aHJvdWdoIHRoYXQgc3RlcC4gIE5vdGUgdGhhdCB0 aGUgc2ludmFsIG1lc3NhZ2VzIHdpbGwgZXZlbnR1YWxseSBjb21lCisJICogYmFjayB0byB0aGlz IGJhY2tlbmQsIHRvbywgYW5kIHRoZXJlYnkgcHJvdmlkZSBhIGJhY2tzdG9wIHRoYXQgd2UKKwkg KiBjbG9zZWQgb3VyIG93biBzbWdyIHJlbC4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJlbHM7 IGkrKykKLQl7Ci0JCWludAkJCXdoaWNoID0gcmVsc1tpXS0+c21ncl93aGljaDsKKwlDYWNoZUlu dmFsaWRhdGVTbWdyKHJsb2NhdG9yLCBiYWNrZW5kKTsKIAotCQlmb3IgKGZvcmtudW0gPSAwOyBm b3JrbnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrbnVtKyspCi0JCXsKLQkJCWlmIChzbWdyc3dbd2hp Y2hdLnNtZ3JfZXhpc3RzKHJlbHNbaV0sIGZvcmtudW0pKQotCQkJCXNtZ3Jzd1t3aGljaF0uc21n cl9pbW1lZHN5bmMocmVsc1tpXSwgZm9ya251bSk7Ci0JCX0KKwkvKgorCSAqIERlbGV0ZSB0aGUg cGh5c2ljYWwgZmlsZShzKS4KKwkgKgorCSAqIE5vdGU6IHNtZ3JfdW5saW5rIG11c3QgdHJlYXQg ZGVsZXRpb24gZmFpbHVyZSBhcyBhIFdBUk5JTkcsIG5vdCBhbgorCSAqIEVSUk9SLCBiZWNhdXNl IHdlJ3ZlIGFscmVhZHkgZGVjaWRlZCB0byBjb21taXQgb3IgYWJvcnQgdGhlIGN1cnJlbnQKKwkg KiB4YWN0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBuZm9ya3M7IGkrKykKKwl7CisJCVNNZ3JG aWxlTG9jYXRvciBzbG9jYXRvciA9IHsgcmxvY2F0b3IsIGJhY2tlbmQsIGZvcmtzW2ldIH07CisJ CXNtZ3Jzd1t3aGljaF0uc21ncl91bmxpbmsoc2xvY2F0b3IsIGlzUmVkbyk7CiAJfQogfQogCiAv KgotICoJc21ncmRvdW5saW5rYWxsKCkgLS0gSW1tZWRpYXRlbHkgdW5saW5rIGFsbCBmb3JrcyBv ZiBhbGwgZ2l2ZW4gcmVsYXRpb25zCi0gKgotICoJCUFsbCBmb3JrcyBvZiBhbGwgZ2l2ZW4gcmVs YXRpb25zIGFyZSByZW1vdmVkIGZyb20gdGhlIHN0b3JlLiAgVGhpcwotICoJCXNob3VsZCBub3Qg YmUgdXNlZCBkdXJpbmcgdHJhbnNhY3Rpb25hbCBvcGVyYXRpb25zLCBzaW5jZSBpdCBjYW4ndCBi ZQotICoJCXVuZG9uZS4KKyAqCXNtZ3Jkb3VubGluaygpIC0tIEltbWVkaWF0ZWx5IHVubGluayBh IGZpbGUKICAqCiAgKgkJSWYgaXNSZWRvIGlzIHRydWUsIGl0IGlzIG9rYXkgZm9yIHRoZSB1bmRl cmx5aW5nIGZpbGUocykgdG8gYmUgZ29uZQogICoJCWFscmVhZHkuCisgKgorICogVG8gcmVtb3Zl IGEgcmVsYXRpb24gdHJhbnNhY3Rpb25hbGx5LCBzZWUgUmVsYXRpb25Ecm9wU3RvcmFnZSgpIGlu c3RlYWQuCisgKiBUaGlzIHdpbGwgY2F1c2UgY2FjaGUgaW52YWxpZGF0aW9uIG9mIGFsbCBmb3Jr cyBvZiB0aGUgcmVsYXRpb24sIG5vdCBqdXN0CisgKiB0aGlzIG9uZS4KICAqLwogdm9pZAotc21n cmRvdW5saW5rYWxsKFNNZ3JSZWxhdGlvbiAqcmVscywgaW50IG5yZWxzLCBib29sIGlzUmVkbykK K3NtZ3J1bmxpbmsoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGJvb2wgaXNSZWRvKQogewotCWludAkJ CWkgPSAwOwotCVJlbEZpbGVMb2NhdG9yQmFja2VuZCAqcmxvY2F0b3JzOwotCUZvcmtOdW1iZXIJ Zm9ya251bTsKLQotCWlmIChucmVscyA9PSAwKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIEdldCBy aWQgb2YgYW55IHJlbWFpbmluZyBidWZmZXJzIGZvciB0aGUgcmVsYXRpb25zLiAgYnVmbWdyIHdp bGwganVzdAotCSAqIGRyb3AgdGhlbSB3aXRob3V0IGJvdGhlcmluZyB0byB3cml0ZSB0aGUgY29u dGVudHMuCi0JICovCi0JRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMocmVscywgbnJlbHMpOwotCi0J LyoKLQkgKiBjcmVhdGUgYW4gYXJyYXkgd2hpY2ggY29udGFpbnMgYWxsIHJlbGF0aW9ucyB0byBi ZSBkcm9wcGVkLCBhbmQgY2xvc2UKLQkgKiBlYWNoIHJlbGF0aW9uJ3MgZm9ya3MgYXQgdGhlIHNt Z3IgbGV2ZWwgd2hpbGUgYXQgaXQKLQkgKi8KLQlybG9jYXRvcnMgPSBwYWxsb2Moc2l6ZW9mKFJl bEZpbGVMb2NhdG9yQmFja2VuZCkgKiBucmVscyk7Ci0JZm9yIChpID0gMDsgaSA8IG5yZWxzOyBp KyspCi0JewotCQlSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IgPSByZWxzW2ldLT5zbWdy X3Jsb2NhdG9yOwotCQlpbnQJCQl3aGljaCA9IHJlbHNbaV0tPnNtZ3Jfd2hpY2g7CisJU01nckZp bGVMb2NhdG9yIGxvY2F0b3I7CisJaW50CQkJd2hpY2g7CiAKLQkJcmxvY2F0b3JzW2ldID0gcmxv Y2F0b3I7CisJLyogcmVtZW1iZXIgYmVmb3JlIGNsb3NpbmcgKi8KKwl3aGljaCA9IHNmaWxlLT5z bWdyX3doaWNoOworCWxvY2F0b3IgPSBzZmlsZS0+c21ncl9sb2NhdG9yOwogCi0JCS8qIENsb3Nl IHRoZSBmb3JrcyBhdCBzbWdyIGxldmVsICovCi0JCWZvciAoZm9ya251bSA9IDA7IGZvcmtudW0g PD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykKLQkJCXNtZ3Jzd1t3aGljaF0uc21ncl9jbG9zZShy ZWxzW2ldLCBmb3JrbnVtKTsKLQl9CisJLyogQ2xvc2UgdGhlIGZpbGUgYXQgc21nciBsZXZlbCAq LworCXNtZ3JjbG9zZShzZmlsZSk7CiAKIAkvKgogCSAqIFNlbmQgYSBzaGFyZWQtaW52YWwgbWVz c2FnZSB0byBmb3JjZSBvdGhlciBiYWNrZW5kcyB0byBjbG9zZSBhbnkKQEAgLTQ1Nyw4ICs0NTMs NyBAQCBzbWdyZG91bmxpbmthbGwoU01nclJlbGF0aW9uICpyZWxzLCBpbnQgbnJlbHMsIGJvb2wg aXNSZWRvKQogCSAqIGJhY2sgdG8gdGhpcyBiYWNrZW5kLCB0b28sIGFuZCB0aGVyZWJ5IHByb3Zp ZGUgYSBiYWNrc3RvcCB0aGF0IHdlCiAJICogY2xvc2VkIG91ciBvd24gc21nciByZWwuCiAJICov Ci0JZm9yIChpID0gMDsgaSA8IG5yZWxzOyBpKyspCi0JCUNhY2hlSW52YWxpZGF0ZVNtZ3Iocmxv Y2F0b3JzW2ldKTsKKwlDYWNoZUludmFsaWRhdGVTbWdyKGxvY2F0b3IubG9jYXRvciwgbG9jYXRv ci5iYWNrZW5kKTsKIAogCS8qCiAJICogRGVsZXRlIHRoZSBwaHlzaWNhbCBmaWxlKHMpLgpAQCAt NDY3LDE2ICs0NjIsNyBAQCBzbWdyZG91bmxpbmthbGwoU01nclJlbGF0aW9uICpyZWxzLCBpbnQg bnJlbHMsIGJvb2wgaXNSZWRvKQogCSAqIEVSUk9SLCBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgZGVj aWRlZCB0byBjb21taXQgb3IgYWJvcnQgdGhlIGN1cnJlbnQKIAkgKiB4YWN0LgogCSAqLwotCi0J Zm9yIChpID0gMDsgaSA8IG5yZWxzOyBpKyspCi0JewotCQlpbnQJCQl3aGljaCA9IHJlbHNbaV0t PnNtZ3Jfd2hpY2g7Ci0KLQkJZm9yIChmb3JrbnVtID0gMDsgZm9ya251bSA8PSBNQVhfRk9SS05V TTsgZm9ya251bSsrKQotCQkJc21ncnN3W3doaWNoXS5zbWdyX3VubGluayhybG9jYXRvcnNbaV0s IGZvcmtudW0sIGlzUmVkbyk7Ci0JfQotCi0JcGZyZWUocmxvY2F0b3JzKTsKKwlzbWdyc3dbd2hp Y2hdLnNtZ3JfdW5saW5rKGxvY2F0b3IsIGlzUmVkbyk7CiB9CiAKIApAQCAtNDkwLDIxICs0NzYs MjEgQEAgc21ncmRvdW5saW5rYWxsKFNNZ3JSZWxhdGlvbiAqcmVscywgaW50IG5yZWxzLCBib29s IGlzUmVkbykKICAqCQljYXVzZXMgaW50ZXJ2ZW5pbmcgZmlsZSBzcGFjZSB0byBiZWNvbWUgZmls bGVkIHdpdGggemVyb2VzLgogICovCiB2b2lkCi1zbWdyZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAorc21ncmV4dGVuZChT TWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCSAgIGNoYXIgKmJ1 ZmZlciwgYm9vbCBza2lwRnN5bmMpCiB7Ci0Jc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3Jf ZXh0ZW5kKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLAotCQkJCQkJCQkJCSBidWZmZXIsIHNraXBG c3luYyk7CisJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX2V4dGVuZChzZmlsZSwgYmxv Y2tudW0sCisJCQkJCQkJCQkJICBidWZmZXIsIHNraXBGc3luYyk7CiAKIAkvKgogCSAqIE5vcm1h bGx5IHdlIGV4cGVjdCB0aGlzIHRvIGluY3JlYXNlIG5ibG9ja3MgYnkgb25lLCBidXQgaWYgdGhl IGNhY2hlZAogCSAqIHZhbHVlIGlzbid0IGFzIGV4cGVjdGVkLCBqdXN0IGludmFsaWRhdGUgaXQg c28gdGhlIG5leHQgY2FsbCBhc2tzIHRoZQogCSAqIGtlcm5lbC4KIAkgKi8KLQlpZiAocmVsbi0+ c21ncl9jYWNoZWRfbmJsb2Nrc1tmb3JrbnVtXSA9PSBibG9ja251bSkKLQkJcmVsbi0+c21ncl9j YWNoZWRfbmJsb2Nrc1tmb3JrbnVtXSA9IGJsb2NrbnVtICsgMTsKKwlpZiAoc2ZpbGUtPnNtZ3Jf Y2FjaGVkX25ibG9ja3MgPT0gYmxvY2tudW0pCisJCXNmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tz ID0gYmxvY2tudW0gKyAxOwogCWVsc2UKLQkJcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tmb3Jr bnVtXSA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3Mg PSBJbnZhbGlkQmxvY2tOdW1iZXI7CiB9CiAKIC8qCkBAIC01MTUsMTMgKzUwMSwxMyBAQCBzbWdy ZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVy IGJsb2NrbnVtLAogICoJCXJlY29yZCkuCiAgKi8KIGJvb2wKLXNtZ3JwcmVmZXRjaChTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSkKK3Nt Z3JwcmVmZXRjaChTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tudW0pCiB7 Ci0JcmV0dXJuIHNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX3ByZWZldGNoKHJlbG4sIGZv cmtudW0sIGJsb2NrbnVtKTsKKwlyZXR1cm4gc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdy X3ByZWZldGNoKHNmaWxlLCBibG9ja251bSk7CiB9CiAKIC8qCi0gKglzbWdycmVhZCgpIC0tIHJl YWQgYSBwYXJ0aWN1bGFyIGJsb2NrIGZyb20gYSByZWxhdGlvbiBpbnRvIHRoZSBzdXBwbGllZAor ICoJc21ncnJlYWQoKSAtLSByZWFkIGEgcGFydGljdWxhciBibG9jayBmcm9tIGEgZmlsZSBpbnRv IHRoZSBzdXBwbGllZAogICoJCQkJICBidWZmZXIuCiAgKgogICoJCVRoaXMgcm91dGluZSBpcyBj YWxsZWQgZnJvbSB0aGUgYnVmZmVyIG1hbmFnZXIgaW4gb3JkZXIgdG8KQEAgLTUyOSwxMCArNTE1 LDkgQEAgc21ncnByZWZldGNoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0s IEJsb2NrTnVtYmVyIGJsb2NrbnVtKQogICoJCXJldHVybiBwYWdlcyBpbiB0aGUgZm9ybWF0IHRo YXQgUE9TVEdSRVMgZXhwZWN0cy4KICAqLwogdm9pZAotc21ncnJlYWQoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCi0JCSBjaGFyICpi dWZmZXIpCitzbWdycmVhZChTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tu dW0sIGNoYXIgKmJ1ZmZlcikKIHsKLQlzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9yZWFk KHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBidWZmZXIpOworCXNtZ3Jzd1tzZmlsZS0+c21ncl93 aGljaF0uc21ncl9yZWFkKHNmaWxlLCBibG9ja251bSwgYnVmZmVyKTsKIH0KIAogLyoKQEAgLTU1 MSwxMSArNTM2LDExIEBAIHNtZ3JyZWFkKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogICoJCWRvIG5vdCByZXF1aXJlIGZzeW5jLgog ICovCiB2b2lkCi1zbWdyd3JpdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCitzbWdyd3JpdGUoU01nckZpbGVIYW5kbGUgc2ZpbGUs IEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCQkgIGNoYXIgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMp CiB7Ci0Jc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3Jfd3JpdGUocmVsbiwgZm9ya251bSwg YmxvY2tudW0sCi0JCQkJCQkJCQkJYnVmZmVyLCBza2lwRnN5bmMpOworCXNtZ3Jzd1tzZmlsZS0+ c21ncl93aGljaF0uc21ncl93cml0ZShzZmlsZSwgYmxvY2tudW0sCisJCQkJCQkJCQkJIGJ1ZmZl ciwgc2tpcEZzeW5jKTsKIH0KIAogCkBAIC01NjQsMTEgKzU0OSwxMSBAQCBzbWdyd3JpdGUoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0s CiAgKgkJCQkJICAgYmxvY2tzLgogICovCiB2b2lkCi1zbWdyd3JpdGViYWNrKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAorc21ncndy aXRlYmFjayhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCQkg IEJsb2NrTnVtYmVyIG5ibG9ja3MpCiB7Ci0Jc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3Jf d3JpdGViYWNrKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLAotCQkJCQkJCQkJCQluYmxvY2tzKTsK KwlzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNtZ3Jfd3JpdGViYWNrKHNmaWxlLCBibG9ja251 bSwKKwkJCQkJCQkJCQkJIG5ibG9ja3MpOwogfQogCiAvKgpAQCAtNTc2LDE4ICs1NjEsMTggQEAg c21ncndyaXRlYmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9j a051bWJlciBibG9ja251bSwKICAqCQkJCQkgc3VwcGxpZWQgcmVsYXRpb24uCiAgKi8KIEJsb2Nr TnVtYmVyCi1zbWdybmJsb2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt KQorc21ncm5ibG9ja3MoU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7CiAJQmxvY2tOdW1iZXIgcmVz dWx0OwogCiAJLyogQ2hlY2sgYW5kIHJldHVybiBpZiB3ZSBnZXQgdGhlIGNhY2hlZCB2YWx1ZSBm b3IgdGhlIG51bWJlciBvZiBibG9ja3MuICovCi0JcmVzdWx0ID0gc21ncm5ibG9ja3NfY2FjaGVk KHJlbG4sIGZvcmtudW0pOworCXJlc3VsdCA9IHNtZ3JuYmxvY2tzX2NhY2hlZChzZmlsZSk7CiAJ aWYgKHJlc3VsdCAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpCiAJCXJldHVybiByZXN1bHQ7CiAKLQly ZXN1bHQgPSBzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9uYmxvY2tzKHJlbG4sIGZvcmtu dW0pOworCXJlc3VsdCA9IHNtZ3Jzd1tzZmlsZS0+c21ncl93aGljaF0uc21ncl9uYmxvY2tzKHNm aWxlKTsKIAotCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbZm9ya251bV0gPSByZXN1bHQ7CisJ c2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSByZXN1bHQ7CiAKIAlyZXR1cm4gcmVzdWx0Owog fQpAQCAtNjAwLDM4ICs1ODUsNDEgQEAgc21ncm5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSkKICAqIGZvcmsgc2l6ZSBpcyBub3QgY2FjaGVkLgogICovCiBCbG9j a051bWJlcgotc21ncm5ibG9ja3NfY2FjaGVkKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0pCitzbWdybmJsb2Nrc19jYWNoZWQoU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7CiAJ LyoKIAkgKiBGb3Igbm93LCB3ZSBvbmx5IHVzZSBjYWNoZWQgdmFsdWVzIGluIHJlY292ZXJ5IGR1 ZSB0byBsYWNrIG9mIGEgc2hhcmVkCiAJICogaW52YWxpZGF0aW9uIG1lY2hhbmlzbSBmb3IgY2hh bmdlcyBpbiBmaWxlIHNpemUuCiAJICovCi0JaWYgKEluUmVjb3ZlcnkgJiYgcmVsbi0+c21ncl9j YWNoZWRfbmJsb2Nrc1tmb3JrbnVtXSAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpCi0JCXJldHVybiBy ZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dOworCWlmIChJblJlY292ZXJ5ICYmIHNm aWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzICE9IEludmFsaWRCbG9ja051bWJlcikKKwkJcmV0dXJu IHNmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzOwogCiAJcmV0dXJuIEludmFsaWRCbG9ja051bWJl cjsKIH0KIAogLyoKLSAqCXNtZ3J0cnVuY2F0ZSgpIC0tIFRydW5jYXRlIHRoZSBnaXZlbiBmb3Jr cyBvZiBzdXBwbGllZCByZWxhdGlvbiB0bwotICoJCQkJCSAgZWFjaCBzcGVjaWZpZWQgbnVtYmVy cyBvZiBibG9ja3MKKyAqCXNtZ3J0cnVuY2F0ZV9tdWx0aSgpIC0tIFRydW5jYXRlIHRoZSBnaXZl biBmb3JrcyBvZiBzdXBwbGllZCByZWxhdGlvbiB0bworICoJCQkJCQkJZWFjaCBzcGVjaWZpZWQg bnVtYmVycyBvZiBibG9ja3MKICAqCiAgKiBUaGUgdHJ1bmNhdGlvbiBpcyBkb25lIGltbWVkaWF0 ZWx5LCBzbyB0aGlzIGNhbid0IGJlIHJvbGxlZCBiYWNrLgogICoKICAqIFRoZSBjYWxsZXIgbXVz dCBob2xkIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sgb24gdGhlIHJlbGF0aW9uLCB0byBlbnN1cmUgdGhh dAogICogb3RoZXIgYmFja2VuZHMgcmVjZWl2ZSB0aGUgc21nciBpbnZhbGlkYXRpb24gZXZlbnQg dGhhdCB0aGlzIGZ1bmN0aW9uIHNlbmRzCiAgKiBiZWZvcmUgdGhleSBhY2Nlc3MgYW55IGZvcmtz IG9mIHRoZSByZWxhdGlvbiBhZ2Fpbi4KKyAqCisgKiBMaWtlIHNtZ3J1bmxpbmtfbXVsdGkoKSwg dGhpcyBoYW5kbGVzIG11bHRpcGxlIGZvcmtzIGluIG9uZSBjYWxsIGJlY2F1c2UKKyAqIHRoZSBj YWNoZSBpbnZhbGlkYXRpb24gaGFwcGVucyBhdCByZWxhdGlvbiBncmFudWxhcml0eS4KKyAqCisg KiBOQjogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZHJvcHBpbmcgYnVmZmVycyEgQmVm b3JlIHYxNiwgdGhpcworICogZnVuY3Rpb24gZGlkIGl0LgogICovCiB2b2lkCi1zbWdydHJ1bmNh dGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgKmZvcmtudW0sIGludCBuZm9ya3MsIEJs b2NrTnVtYmVyICpuYmxvY2tzKQorc21ncnRydW5jYXRlX211bHRpKFJlbEZpbGVMb2NhdG9yIHJs b2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCwgRm9ya051bWJlciAqZm9ya3MsCisJCQkJICAgaW50 IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5ibG9ja3MpCiB7CiAJaW50CQkJaTsKIAotCS8qCi0JICog R2V0IHJpZCBvZiBhbnkgYnVmZmVycyBmb3IgdGhlIGFib3V0LXRvLWJlLWRlbGV0ZWQgYmxvY2tz LiBidWZtZ3Igd2lsbAotCSAqIGp1c3QgZHJvcCB0aGVtIHdpdGhvdXQgYm90aGVyaW5nIHRvIHdy aXRlIHRoZSBjb250ZW50cy4KLQkgKi8KLQlEcm9wUmVsYXRpb25CdWZmZXJzKHJlbG4sIGZvcmtu dW0sIG5mb3JrcywgbmJsb2Nrcyk7CisJQXNzZXJ0KG5mb3JrcyA8IE1BWF9GT1JLTlVNICsgMSk7 CiAKIAkvKgogCSAqIFNlbmQgYSBzaGFyZWQtaW52YWwgbWVzc2FnZSB0byBmb3JjZSBvdGhlciBi YWNrZW5kcyB0byBjbG9zZSBhbnkgc21ncgpAQCAtNjQzLDE1ICs2MzEsMTkgQEAgc21ncnRydW5j YXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyICpmb3JrbnVtLCBpbnQgbmZvcmtzLCBC bG9ja051bWJlciAqbmIKIAkgKiBpcyBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGguKSAgQXMg aW4gdGhlIHVubGluayBjb2RlLCB3ZSB3YW50IHRvIGJlCiAJICogc3VyZSB0aGUgbWVzc2FnZSBp cyBzZW50IGJlZm9yZSB3ZSBzdGFydCBjaGFuZ2luZyB0aGluZ3Mgb24tZGlzay4KIAkgKi8KLQlD YWNoZUludmFsaWRhdGVTbWdyKHJlbG4tPnNtZ3JfcmxvY2F0b3IpOworCUNhY2hlSW52YWxpZGF0 ZVNtZ3IocmxvY2F0b3IsIGJhY2tlbmQpOwogCi0JLyogRG8gdGhlIHRydW5jYXRpb24gKi8KKwkv KiBEbyB0aGUgdHJ1bmNhdGlvbnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbmZvcmtzOyBpKyspCiAJ eworCQlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKKworCQlzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9y LCBiYWNrZW5kLCBmb3Jrc1tpXSk7CisKIAkJLyogTWFrZSB0aGUgY2FjaGVkIHNpemUgaXMgaW52 YWxpZCBpZiB3ZSBlbmNvdW50ZXIgYW4gZXJyb3IuICovCi0JCXJlbG4tPnNtZ3JfY2FjaGVkX25i bG9ja3NbZm9ya251bVtpXV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCXNmaWxlLT5zbWdyX2Nh Y2hlZF9uYmxvY2tzID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCi0JCXNtZ3Jzd1tyZWxuLT5zbWdy X3doaWNoXS5zbWdyX3RydW5jYXRlKHJlbG4sIGZvcmtudW1baV0sIG5ibG9ja3NbaV0pOworCQlz bWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNtZ3JfdHJ1bmNhdGUoc2ZpbGUsIG5ibG9ja3NbaV0p OwogCiAJCS8qCiAJCSAqIFdlIG1pZ2h0IGFzIHdlbGwgdXBkYXRlIHRoZSBsb2NhbCBzbWdyX2Nh Y2hlZF9uYmxvY2tzIHZhbHVlcy4gVGhlCkBAIC02NjAsNyArNjUyLDcgQEAgc21ncnRydW5jYXRl KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyICpmb3JrbnVtLCBpbnQgbmZvcmtzLCBCbG9j a051bWJlciAqbmIKIAkJICogc21ncl92bV9uYmxvY2tzLCBhbmQgdGhlc2Ugb25lcyB0b28gYXQg dGhlIG5leHQgY29tbWFuZCBib3VuZGFyeS4KIAkJICogQnV0IHRoZXNlIGVuc3VyZSB0aGV5IGFy ZW4ndCBvdXRyaWdodCB3cm9uZyB1bnRpbCB0aGVuLgogCQkgKi8KLQkJcmVsbi0+c21ncl9jYWNo ZWRfbmJsb2Nrc1tmb3JrbnVtW2ldXSA9IG5ibG9ja3NbaV07CisJCXNmaWxlLT5zbWdyX2NhY2hl ZF9uYmxvY2tzID0gbmJsb2Nrc1tpXTsKIAl9CiB9CiAKQEAgLTY4OCw5ICs2ODAsOSBAQCBzbWdy dHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgKmZvcmtudW0sIGludCBuZm9y a3MsIEJsb2NrTnVtYmVyICpuYgogICoJCW90aGVyd2lzZSB0aGUgc3luYyBpcyBub3QgdmVyeSBt ZWFuaW5nZnVsLgogICovCiB2b2lkCi1zbWdyaW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0pCitzbWdyaW1tZWRzeW5jKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKQog ewotCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX2ltbWVkc3luYyhyZWxuLCBmb3JrbnVt KTsKKwlzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNtZ3JfaW1tZWRzeW5jKHNmaWxlKTsKIH0K IAogLyoKQEAgLTcxNCwxNCArNzA2LDE0IEBAIEF0RU9YYWN0X1NNZ3Iodm9pZCkKIAkgKiBaYXAg YWxsIHVub3duZWQgU01nclJlbGF0aW9ucy4gIFdlIHJlbHkgb24gc21ncmNsb3NlKCkgdG8gcmVt b3ZlIGVhY2gKIAkgKiBvbmUgZnJvbSB0aGUgbGlzdC4KIAkgKi8KLQlkbGlzdF9mb3JlYWNoX21v ZGlmeShpdGVyLCAmdW5vd25lZF9yZWxucykKKwlkbGlzdF9mb3JlYWNoX21vZGlmeShpdGVyLCAm dW5vd25lZF9zZmlsZXMpCiAJewotCQlTTWdyUmVsYXRpb24gcmVsID0gZGxpc3RfY29udGFpbmVy KFNNZ3JSZWxhdGlvbkRhdGEsIG5vZGUsCi0JCQkJCQkJCQkJICAgaXRlci5jdXIpOworCQlTTWdy RmlsZUhhbmRsZSBzZmlsZSA9IGRsaXN0X2NvbnRhaW5lcihTTWdyRmlsZURhdGEsIG5vZGUsCisJ CQkJCQkJCQkJCSAgIGl0ZXIuY3VyKTsKIAotCQlBc3NlcnQocmVsLT5zbWdyX293bmVyID09IE5V TEwpOworCQlBc3NlcnQoc2ZpbGUtPnNtZ3Jfb3duZXIgPT0gTlVMTCk7CiAKLQkJc21ncmNsb3Nl KHJlbCk7CisJCXNtZ3JjbG9zZShzZmlsZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL3N5bmMvc3luYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMu YwppbmRleCA3NjhkMWRiZmM0MS4uNDE4ODYyODg2NDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2Uvc3luYy9zeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMu YwpAQCAtMTgsOSArMTgsNyBAQAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL2Zp bGUuaD4KIAotI2luY2x1ZGUgImFjY2Vzcy9jb21taXRfdHMuaCIKLSNpbmNsdWRlICJhY2Nlc3Mv Y2xvZy5oIgotI2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3QuaCIKKyNpbmNsdWRlICJhY2Nlc3Mv c2xydS5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1 dGlscy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKQEAgLTEwNiwyMiArMTA0 LDYgQEAgc3RhdGljIGNvbnN0IFN5bmNPcHMgc3luY3N3W10gPSB7CiAJCS5zeW5jX3VubGlua2Zp bGV0YWcgPSBtZHVubGlua2ZpbGV0YWcsCiAJCS5zeW5jX2ZpbGV0YWdtYXRjaGVzID0gbWRmaWxl dGFnbWF0Y2hlcwogCX0sCi0JLyogcGdfeGFjdCAqLwotCVtTWU5DX0hBTkRMRVJfQ0xPR10gPSB7 Ci0JCS5zeW5jX3N5bmNmaWxldGFnID0gY2xvZ3N5bmNmaWxldGFnCi0JfSwKLQkvKiBwZ19jb21t aXRfdHMgKi8KLQlbU1lOQ19IQU5ETEVSX0NPTU1JVF9UU10gPSB7Ci0JCS5zeW5jX3N5bmNmaWxl dGFnID0gY29tbWl0dHNzeW5jZmlsZXRhZwotCX0sCi0JLyogcGdfbXVsdGl4YWN0L29mZnNldHMg Ki8KLQlbU1lOQ19IQU5ETEVSX01VTFRJWEFDVF9PRkZTRVRdID0gewotCQkuc3luY19zeW5jZmls ZXRhZyA9IG11bHRpeGFjdG9mZnNldHNzeW5jZmlsZXRhZwotCX0sCi0JLyogcGdfbXVsdGl4YWN0 L21lbWJlcnMgKi8KLQlbU1lOQ19IQU5ETEVSX01VTFRJWEFDVF9NRU1CRVJdID0gewotCQkuc3lu Y19zeW5jZmlsZXRhZyA9IG11bHRpeGFjdG1lbWJlcnNzeW5jZmlsZXRhZwotCX0KIH07CiAKIC8q CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9pbnZhbC5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvaW52YWwuYwppbmRleCAwMDA4ODI2ZjY3Yy4uN2ExZDhjMDEyYzIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvaW52YWwuYwpAQCAtNjYxLDExICs2NjEsMTIgQEAgTG9jYWxFeGVjdXRl SW52YWxpZGF0aW9uTWVzc2FnZShTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlICptc2cpCiAJCSAq IFdlIGNvdWxkIGhhdmUgc21nciBlbnRyaWVzIGZvciByZWxhdGlvbnMgb2Ygb3RoZXIgZGF0YWJh c2VzLCBzbyBubwogCQkgKiBzaG9ydC1jaXJjdWl0IHRlc3QgaXMgcG9zc2libGUgaGVyZS4KIAkJ ICovCi0JCVJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvcjsKKwkJUmVsRmlsZUxvY2F0b3Ig cmxvY2F0b3I7CisJCUJhY2tlbmRJZCBiYWNrZW5kOwogCi0JCXJsb2NhdG9yLmxvY2F0b3IgPSBt c2ctPnNtLnJsb2NhdG9yOwotCQlybG9jYXRvci5iYWNrZW5kID0gKG1zZy0+c20uYmFja2VuZF9o aSA8PCAxNikgfCAoaW50KSBtc2ctPnNtLmJhY2tlbmRfbG87Ci0JCXNtZ3JjbG9zZXJlbGxvY2F0 b3IocmxvY2F0b3IpOworCQlybG9jYXRvciA9IG1zZy0+c20ucmxvY2F0b3I7CisJCWJhY2tlbmQg PSAobXNnLT5zbS5iYWNrZW5kX2hpIDw8IDE2KSB8IChpbnQpIG1zZy0+c20uYmFja2VuZF9sbzsK KwkJc21ncmNsb3NlcmVsbG9jYXRvcihybG9jYXRvciwgYmFja2VuZCk7CiAJfQogCWVsc2UgaWYg KG1zZy0+aWQgPT0gU0hBUkVESU5WQUxSRUxNQVBfSUQpCiAJewpAQCAtMTQ1OSwxNCArMTQ2MCwx NCBAQCBDYWNoZUludmFsaWRhdGVSZWxjYWNoZUJ5UmVsaWQoT2lkIHJlbGlkKQogICogVGh1cywg dGhlIG1heGltdW0gcG9zc2libGUgYmFja2VuZCBJRCBpcyAyXjIzLTEuCiAgKi8KIHZvaWQKLUNh Y2hlSW52YWxpZGF0ZVNtZ3IoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yKQorQ2FjaGVJ bnZhbGlkYXRlU21ncihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQp CiB7CiAJU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSBtc2c7CiAKIAltc2cuc20uaWQgPSBTSEFS RURJTlZBTFNNR1JfSUQ7Ci0JbXNnLnNtLmJhY2tlbmRfaGkgPSBybG9jYXRvci5iYWNrZW5kID4+ IDE2OwotCW1zZy5zbS5iYWNrZW5kX2xvID0gcmxvY2F0b3IuYmFja2VuZCAmIDB4ZmZmZjsKLQlt c2cuc20ucmxvY2F0b3IgPSBybG9jYXRvci5sb2NhdG9yOworCW1zZy5zbS5iYWNrZW5kX2hpID0g YmFja2VuZCA+PiAxNjsKKwltc2cuc20uYmFja2VuZF9sbyA9IGJhY2tlbmQgJiAweGZmZmY7CisJ bXNnLnNtLnJsb2NhdG9yID0gcmxvY2F0b3I7CiAJLyogY2hlY2sgQWRkQ2F0Y2FjaGVJbnZhbGlk YXRpb25NZXNzYWdlKCkgZm9yIGFuIGV4cGxhbmF0aW9uICovCiAJVkFMR1JJTkRfTUFLRV9NRU1f REVGSU5FRCgmbXNnLCBzaXplb2YobXNnKSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5j CmluZGV4IDEzZjc5ODczNzMzLi5jY2UzMDhhYjJkNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxj YWNoZS5jCkBAIC00MTksNyArNDE5LDcgQEAgQWxsb2NhdGVSZWxhdGlvbkRlc2MoRm9ybV9wZ19j bGFzcyByZWxwKQogCXJlbGF0aW9uID0gKFJlbGF0aW9uKSBwYWxsb2MwKHNpemVvZihSZWxhdGlv bkRhdGEpKTsKIAogCS8qIG1ha2Ugc3VyZSByZWxhdGlvbiBpcyBtYXJrZWQgYXMgaGF2aW5nIG5v IG9wZW4gZmlsZSB5ZXQgKi8KLQlyZWxhdGlvbi0+cmRfc21nciA9IE5VTEw7CisJTWVtU2V0KHJl bGF0aW9uLT5yZF9zbWdyLCAwLCBzaXplb2YocmVsYXRpb24tPnJkX3NtZ3IpKTsKIAogCS8qCiAJ ICogQ29weSB0aGUgcmVsYXRpb24gdHVwbGUgZm9ybQpAQCAtMTI0OCw3ICsxMjQ4LDcgQEAgcmV0 cnk6CiAJUmVsYXRpb25Jbml0UGh5c2ljYWxBZGRyKHJlbGF0aW9uKTsKIAogCS8qIG1ha2Ugc3Vy ZSByZWxhdGlvbiBpcyBtYXJrZWQgYXMgaGF2aW5nIG5vIG9wZW4gZmlsZSB5ZXQgKi8KLQlyZWxh dGlvbi0+cmRfc21nciA9IE5VTEw7CisJTWVtU2V0KHJlbGF0aW9uLT5yZF9zbWdyLCAwLCBzaXpl b2YocmVsYXRpb24tPnJkX3NtZ3IpKTsKIAogCS8qCiAJICogbm93IHdlIGNhbiBmcmVlIHRoZSBt ZW1vcnkgYWxsb2NhdGVkIGZvciBwZ19jbGFzc190dXBsZQpAQCAtMTg3Nyw3ICsxODc3LDcgQEAg Zm9ybXJkZXNjKGNvbnN0IGNoYXIgKnJlbGF0aW9uTmFtZSwgT2lkIHJlbGF0aW9uUmVsdHlwZSwK IAlyZWxhdGlvbiA9IChSZWxhdGlvbikgcGFsbG9jMChzaXplb2YoUmVsYXRpb25EYXRhKSk7CiAK IAkvKiBtYWtlIHN1cmUgcmVsYXRpb24gaXMgbWFya2VkIGFzIGhhdmluZyBubyBvcGVuIGZpbGUg eWV0ICovCi0JcmVsYXRpb24tPnJkX3NtZ3IgPSBOVUxMOworCU1lbVNldChyZWxhdGlvbi0+cmRf c21nciwgMCwgc2l6ZW9mKHJlbGF0aW9uLT5yZF9zbWdyKSk7CiAKIAkvKgogCSAqIGluaXRpYWxp emUgcmVmZXJlbmNlIGNvdW50OiAxIGJlY2F1c2UgaXQgaXMgbmFpbGVkIGluIGNhY2hlCkBAIC0y NzAxLDcgKzI3MDEsOCBAQCBSZWxhdGlvbkNsZWFyUmVsYXRpb24oUmVsYXRpb24gcmVsYXRpb24s IGJvb2wgcmVidWlsZCkKIAkJfQogCiAJCS8qIHJkX3NtZ3IgbXVzdCBub3QgYmUgc3dhcHBlZCwg ZHVlIHRvIGJhY2stbGlua3MgZnJvbSBzbWdyIGxldmVsICovCi0JCVNXQVBGSUVMRChTTWdyUmVs YXRpb24sIHJkX3NtZ3IpOworCQlmb3IgKGludCBpID0gMDsgaSA8PSBNQVhfRk9SS05VTTsgaSsr KQorCQkJU1dBUEZJRUxEKFNNZ3JGaWxlSGFuZGxlLCByZF9zbWdyW2ldKTsKIAkJLyogcmRfcmVm Y250IG11c3QgYmUgcHJlc2VydmVkICovCiAJCVNXQVBGSUVMRChpbnQsIHJkX3JlZmNudCk7CiAJ CS8qIGlzbmFpbGVkIHNob3VsZG4ndCBjaGFuZ2UgKi8KQEAgLTM1MzIsNyArMzUzMyw3IEBAIFJl bGF0aW9uQnVpbGRMb2NhbFJlbGF0aW9uKGNvbnN0IGNoYXIgKnJlbG5hbWUsCiAJcmVsID0gKFJl bGF0aW9uKSBwYWxsb2MwKHNpemVvZihSZWxhdGlvbkRhdGEpKTsKIAogCS8qIG1ha2Ugc3VyZSBy ZWxhdGlvbiBpcyBtYXJrZWQgYXMgaGF2aW5nIG5vIG9wZW4gZmlsZSB5ZXQgKi8KLQlyZWwtPnJk X3NtZ3IgPSBOVUxMOworCU1lbVNldChyZWwtPnJkX3NtZ3IsIDAsIHNpemVvZihyZWwtPnJkX3Nt Z3IpKTsKIAogCS8qIG1hcmsgaXQgbmFpbGVkIGlmIGFwcHJvcHJpYXRlICovCiAJcmVsLT5yZF9p c25haWxlZCA9IG5haWxpdDsKQEAgLTM3NjQsNyArMzc2NSw2IEBAIFJlbGF0aW9uU2V0TmV3UmVs ZmlsZW51bWJlcihSZWxhdGlvbiByZWxhdGlvbiwgY2hhciBwZXJzaXN0ZW5jZSkKIAkgKi8KIAlp ZiAoSXNCaW5hcnlVcGdyYWRlKQogCXsKLQkJU01nclJlbGF0aW9uCXNyZWw7CiAKIAkJLyoKIAkJ ICogRHVyaW5nIGEgYmluYXJ5IHVwZ3JhZGUsIHdlIHVzZSB0aGlzIGNvZGUgcGF0aCB0byBlbnN1 cmUgdGhhdApAQCAtMzc4MSw5ICszNzgxLDE0IEBAIFJlbGF0aW9uU2V0TmV3UmVsZmlsZW51bWJl cihSZWxhdGlvbiByZWxhdGlvbiwgY2hhciBwZXJzaXN0ZW5jZSkKIAkJICogZmFpbHMgYXQgdGhp cyBzdGFnZSwgdGhlIG5ldyBjbHVzdGVyIHdpbGwgbmVlZCB0byBiZSByZWNyZWF0ZWQKIAkJICog YW55d2F5LgogCQkgKi8KLQkJc3JlbCA9IHNtZ3JvcGVuKHJlbGF0aW9uLT5yZF9sb2NhdG9yLCBy ZWxhdGlvbi0+cmRfYmFja2VuZCk7Ci0JCXNtZ3Jkb3VubGlua2FsbCgmc3JlbCwgMSwgZmFsc2Up OwotCQlzbWdyY2xvc2Uoc3JlbCk7CisJCUZvcmtOdW1iZXIgZm9ya3NbTUFYX0ZPUktOVU0gKyAx XTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPD0gTUFYX0ZPUktOVU07IGkgKyspIAorCQl7CisJCQlz bWdyb3BlbihyZWxhdGlvbi0+cmRfbG9jYXRvciwgcmVsYXRpb24tPnJkX2JhY2tlbmQsIGkpOwor CQkJZm9ya3NbaV0gPSBpOworCQl9CisJCQorCQlzbWdydW5saW5rX211bHRpKHJlbGF0aW9uLT5y ZF9sb2NhdG9yLCByZWxhdGlvbi0+cmRfYmFja2VuZCwgZm9ya3MsIE1BWF9GT1JLTlVNICsgMSwg ZmFsc2UpOwogCX0KIAllbHNlCiAJewpAQCAtMzgxMSw3ICszODE2LDcgQEAgUmVsYXRpb25TZXRO ZXdSZWxmaWxlbnVtYmVyKFJlbGF0aW9uIHJlbGF0aW9uLCBjaGFyIHBlcnNpc3RlbmNlKQogCWVs c2UgaWYgKFJFTEtJTkRfSEFTX1NUT1JBR0UocmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCkpCiAJ ewogCQkvKiBoYW5kbGUgdGhlc2UgZGlyZWN0bHksIGF0IGxlYXN0IGZvciBub3cgKi8KLQkJU01n clJlbGF0aW9uIHNyZWw7CisJCVNNZ3JGaWxlSGFuZGxlIHNyZWw7CiAKIAkJc3JlbCA9IFJlbGF0 aW9uQ3JlYXRlU3RvcmFnZShuZXdybG9jYXRvciwgcGVyc2lzdGVuY2UsIHRydWUpOwogCQlzbWdy Y2xvc2Uoc3JlbCk7CkBAIC02Mjk4LDcgKzYzMDMsNyBAQCBsb2FkX3JlbGNhY2hlX2luaXRfZmls ZShib29sIHNoYXJlZCkKIAkJLyoKIAkJICogUmVzZXQgdHJhbnNpZW50LXN0YXRlIGZpZWxkcyBp biB0aGUgcmVsY2FjaGUgZW50cnkKIAkJICovCi0JCXJlbC0+cmRfc21nciA9IE5VTEw7CisJCU1l bVNldChyZWwtPnJkX3NtZ3IsIDAsIHNpemVvZihyZWwtPnJkX3NtZ3IpKTsKIAkJaWYgKHJlbC0+ cmRfaXNuYWlsZWQpCiAJCQlyZWwtPnJkX3JlZmNudCA9IDE7CiAJCWVsc2UKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9t Y3h0LmMKaW5kZXggMGIwMDgwMmRmNzAuLmU4NGMyYmMzYmUxIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9tbWdyL21jeHQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQu YwpAQCAtMTYyLDkgKzE2MiwyMCBAQCBzdGF0aWMgdm9pZCBNZW1vcnlDb250ZXh0U3RhdHNQcmlu dChNZW1vcnlDb250ZXh0IGNvbnRleHQsIHZvaWQgKnBhc3N0aHJ1LAogICogWW91IHNob3VsZCBu b3QgZG8gbWVtb3J5IGFsbG9jYXRpb25zIHdpdGhpbiBhIGNyaXRpY2FsIHNlY3Rpb24sIGJlY2F1 c2UKICAqIGFuIG91dC1vZi1tZW1vcnkgZXJyb3Igd2lsbCBiZSBlc2NhbGF0ZWQgdG8gYSBQQU5J Qy4gVG8gZW5mb3JjZSB0aGF0CiAgKiBydWxlLCB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbnMgQXNz ZXJ0IHRoYXQuCisgKgorICogRklYTUU6IGJ5cGFzcyB0aGlzIGZvciB0aGUgY3JpdGljYWwgc2Vj dGlvbiBpbiBSZWNvcmRUcmFuc2FjdGlvbkNvbW1pdCgpCisgKiBmb3Igbm93LiBJdCBkb2VzIGEg bG90IG9mIHRoaW5ncyB0aGF0IGNhbiBhbGxvY2F0ZToKKyAqIC0gY2FsbHMgVHJhbnNhY3Rpb25J ZENvbW1pdFRyZWUsIHdoaWNoIHBpbnMgYnVmZmVycywgd2hpY2ggcmVxdWlyZXMKKyAqICAgc3Bh Y2UgaW4gdGhlIFJlc291cmNlT3duZXIgZm9yIHRoZSBwaW4gKFJlc291cmNlT3duZXJFbmxhcmdl QnVmZmVycygpKQorICogLSBzYW1lIGZvciBUcmFuc2FjdGlvblRyZWVTZXRDb21taXRUc0RhdGEo KSBjYWxsLgorICogLSByZWFkaW5nIGEgcGFnZSBjYW4gcmVxdWlyZSBmbHVzaGluZyBvdGhlciBw YWdlcywgd2hpY2ggaW4gdHVybgorICogICBjYW4gY2FsbCBDb21wYWN0Q2hlY2twb2ludGVyUmVx dWVzdFF1ZXVlKCksIHdoaWNoIGFsbG9jYXRlcworICogLSByZWFkaW5nIGEgcGFnZSBjYWxscyBz bWdyb3BlbigpLCB3aGljaCBhbGxvY2F0ZXMgdGhlIFNNZ3JGaWxlIGVudHJ5CisgKiAgIGlmIGl0 J3Mgbm90IG9wZW4gYWxyZWFkeQogICovCiAjZGVmaW5lIEFzc2VydE5vdEluQ3JpdGljYWxTZWN0 aW9uKGNvbnRleHQpIFwKLQlBc3NlcnQoQ3JpdFNlY3Rpb25Db3VudCA9PSAwIHx8IChjb250ZXh0 KS0+YWxsb3dJbkNyaXRTZWN0aW9uKQorCUFzc2VydChDcml0U2VjdGlvbkNvdW50ID09IDAgfHwg KGNvbnRleHQpLT5hbGxvd0luQ3JpdFNlY3Rpb24gfHwgXAorCQkgICAoTXlQcm9jICE9IE5VTEwg JiYgKE15UHJvYy0+ZGVsYXlDaGtwdEZsYWdzICYgREVMQVlfQ0hLUFRfU1RBUlQgIT0gMCkpKQog CiAvKgogICogQ2FsbCB0aGUgZ2l2ZW4gZnVuY3Rpb24gaW4gdGhlIE1lbW9yeUNvbnRleHRNZXRo b2RzIGZvciB0aGUgbWVtb3J5IGNvbnRleHQKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFk ZS9maWxlLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvZmlsZS5jCmluZGV4IGVkODc0NTA3ZmY0Li4y N2YyNDA0NzBiYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRlL2ZpbGUuYworKysgYi9z cmMvYmluL3BnX3VwZ3JhZGUvZmlsZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjZW5kaWYKIAogI2lu Y2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vzcy9zbHJ1 ZGVmcy5oIgogI2luY2x1ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKICNpbmNsdWRlICJwZ191cGdy YWRlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCkBAIC0xMzksNyArMTQwLDYgQEAg Y29weUZpbGUoY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QsCiAjZW5kaWYJCQkJCQkJ LyogV0lOMzIgKi8KIH0KIAotCiAvKgogICogbGlua0ZpbGUoKQogICoKQEAgLTMxNiw2ICszMTYs MTc5IEBAIHJld3JpdGVWaXNpYmlsaXR5TWFwKGNvbnN0IGNoYXIgKmZyb21maWxlLCBjb25zdCBj aGFyICp0b2ZpbGUsCiAJY2xvc2Uoc3JjX2ZkKTsKIH0KIAorCisvL2NyZWF0ZSBuZXcgZmlsZSBh bmQgaW5pdGlhbGl6ZSB0byAyNTZLCitzdGF0aWMgaW50Citpbml0X25ld19zbHJ1X2ZpbGUoRklM RSAqIGZwKQoreyAKKwlpbnQgZmQ7CisJaW50IHJlczsKKwkKKwlmZCA9IGZpbGVubyhmcCk7CisJ cmVzID0gZnRydW5jYXRlKGZkLCBCTENLU1ogKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKTsKKwly ZXR1cm4gcmVzOworfQorCitpbnQgCitjb3B5X3RvX25ld19mb3JtYXQoY29uc3QgY2hhciAqb2xk X3N1YmRpciwgY29uc3QgY2hhciAqbmV3X3N1YmRpciwgaW50IGVsZW1lbnRfc2l6ZSkgCit7CisJ RElSICpkcjsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwkKKwlzaXplX3QgCXJlYWRfaXRlbXM7CisJ c2l6ZV90IAluX2l0ZW1zOworCXNpemVfdCAJdG9fcmVhZF9pdGVtczsKKwlzaXplX3QgCXdyaXRl X2l0ZW1zOworCXNpemVfdCAJcGFnZXNfd3JpdHRlbjsKKwlzaXplX3QgCXdyaXRlX29mZnNldDsK KworCWNoYXIgKiAJcmVhZF9maWxlOwkKKwljaGFyICogCXdyaXRlX2ZpbGU7CisJCisJaW50IAly ZXM7CisJaW50IAl3cml0ZV9maWxlX3NlZ25vOworCWludCAJdG90YWxfcmVhZF9maWxlczsKKwkK KwlGSUxFICogCW9sZF9mZDsgCisJRklMRSAqIAluZXdfZnA7CisKKyNkZWZpbmUgTUFYQlVGU0la RSAoQkxDS1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpCisKKwljaGFyCW9sZF9wYXRoW01BWFBH UEFUSF07CisJY2hhcgluZXdfcGF0aFtNQVhQR1BBVEhdOworCVBHQWxpZ25lZEJsb2NrIHBnX2J1 ZjsKKwlCbG9ja051bWJlciBibGtubzsgLy90cmFjayBhYm9zbHV0ZSBibG9jayBudW1iZXIKKwkK KworCXN0cnVjdCAJZGlyZW50KiogYWxsX2RpcmVudHM7CisKKworCXNucHJpbnRmKG9sZF9wYXRo LCBzaXplb2Yob2xkX3BhdGgpLCAiJXMvJXMiLCBvbGRfY2x1c3Rlci5wZ2RhdGEsIG9sZF9zdWJk aXIpOworCXNucHJpbnRmKG5ld19wYXRoLCBzaXplb2YobmV3X3BhdGgpLCAiJXMvJXMiLCBuZXdf Y2x1c3Rlci5wZ2RhdGEsIG5ld19zdWJkaXIpOworCisJLyogCisJICogY2FsY3VsYXRlIHRoZSBu dW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gZml0IAorCSAqIGluc2lkZSBCTENLU1ogLSBTaXplT2ZQ YWdlSGVhZGVyRGF0YQorCSAqLworCisJbl9pdGVtcyA9IChzaXplX3QpIChNQVhCVUZTSVpFIC8g ZWxlbWVudF9zaXplKTsgCisJCisJLyogbnVtYmVyIG9mIGl0ZW1zIHRvIHJlYWQgaW4gYXQgYSB0 aW1lICovCisJdG9fcmVhZF9pdGVtcyA9IG5faXRlbXM7CisJCisJLy9idWZzaXplID0gKHNpemVf dCkgKG5faXRlbXMgKiBlbGVtZW50X3NpemUpOyAKKwl3cml0ZV9maWxlX3NlZ25vID0gMDsgLyog dHJhY2sgd2hpY2ggc2VnbWVudCB3ZSBhcmUgd3JpdGluZyBpbnRvICovCisJd3JpdGVfb2Zmc2V0 ID0gKHNpemVfdCkgKFNpemVPZlBhZ2VIZWFkZXJEYXRhKTsgCisKKwlkciA9IG9wZW5kaXIoKGNo YXIgKilvbGRfcGF0aCk7CisJaWYgKGRyID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXdyaXRl X2ZpbGUgPSBwc3ByaW50ZigiJXMvJTA0WCIsIG5ld19wYXRoLCB3cml0ZV9maWxlX3NlZ25vKTsK KwkKKwluZXdfZnAgPSBmb3Blbih3cml0ZV9maWxlLCAid2IiKTsKKwkKKwlpZiAobmV3X2ZwID09 IE5VTEwpCisJCXJldHVybiAtMTsKKworCXJlcyA9IGluaXRfbmV3X3NscnVfZmlsZShuZXdfZnAp OworCWlmIChyZXMgPCAwKQkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlcyA8IDApCisJCXJldHVy biAtMTsKKworCXBhZ2VzX3dyaXR0ZW4gPSAwOworCWJsa25vID0gMDsgLyogYWJzb2x1dGUgYmxr bm8gKi8KKworCWFsbF9kaXJlbnRzID0gZ2V0X3NvcnRlZF9oZXhfZmlsZXMob2xkX3BhdGgsICZ0 b3RhbF9yZWFkX2ZpbGVzKTsKKworCXdyaXRlX2l0ZW1zID0gMDsKKwlmb3IgKGludCBpID0gMDsg aSA8IHRvdGFsX3JlYWRfZmlsZXM7IGkrKykKKwl7CisJCWRlID0gYWxsX2RpcmVudHNbaV07CisJ CQorCQlpZiAoKCFzdHJjbXAoKGNoYXIgKikgZGUtPmRfbmFtZSwgIi4iKSkgfHwgIXN0cmNtcCgo Y2hhciAqKSBkZS0+ZF9uYW1lLCAiLi4iKSkKKwkgCXsKKwkJCWNvbnRpbnVlOworCSAJfQorCisJ CXJlYWRfZmlsZSA9IHBzcHJpbnRmKCIlcy8lcyIsIChjaGFyICopIG9sZF9wYXRoLCAoY2hhciAq KSBkZS0+ZF9uYW1lKTsKKwkJCisJCW9sZF9mZCA9IGZvcGVuKHJlYWRfZmlsZSwgInJiIik7CisJ CXJlYWRfaXRlbXMgPSAwOworCQkKKwkJZG8gCisJCXsKKwkJCW1lbXNldChwZ19idWYuZGF0YSwg MCwgQkxDS1NaKTsJCQorCQkJcmVhZF9pdGVtcyA9IGZyZWFkKHBnX2J1Zi5kYXRhICsgd3JpdGVf b2Zmc2V0LCBlbGVtZW50X3NpemUsIHRvX3JlYWRfaXRlbXMsIG9sZF9mZCk7ICAvKiBob3cgbWFu eSBpdGVtcyB3ZSByZWFkICovCisKKwkJCWlmICh0b19yZWFkX2l0ZW1zID09IG5faXRlbXMpIC8q IG5vdCBmaW5pc2hpbmcgdXAgYSBwYXJ0aWFsIHJlYWQgKi8KKwkJCXsKKworCQkJCSgoUGFnZUhl YWRlcikgcGdfYnVmLmRhdGEpLT5wZF9sb3dlciA9IFNpemVPZlBhZ2VIZWFkZXJEYXRhOworCQkJ CSgoUGFnZUhlYWRlcikgcGdfYnVmLmRhdGEpLT5wZF91cHBlciA9IEJMQ0tTWjsKKwkJCQkoKFBh Z2VIZWFkZXIpIHBnX2J1Zi5kYXRhKS0+cGRfc3BlY2lhbCA9IEJMQ0tTWjsKKwkJCQkKKwkJCQko KFBhZ2VIZWFkZXIpIHBnX2J1Zi5kYXRhKS0+cGRfY2hlY2tzdW0gPQorCQkJCQlwZ19jaGVja3N1 bV9wYWdlKHBnX2J1Zi5kYXRhLCBibGtubyk7CisKKwkJCQlmd3JpdGUocGdfYnVmLmRhdGEsIFNp emVPZlBhZ2VIZWFkZXJEYXRhLCAxLCBuZXdfZnApOyAvKiB3cml0ZSBwYWdlIGhlYWRlciBkYXRh ICovCisJCQl9CisKKwkJCQorCQkJd3JpdGVfaXRlbXMgKz0gZndyaXRlKHBnX2J1Zi5kYXRhICsg d3JpdGVfb2Zmc2V0LCBlbGVtZW50X3NpemUsIHJlYWRfaXRlbXMsIG5ld19mcCk7ICAvKiBpbmNy ZW1lbnQgaG93IG1hbnkgaXRlbXMgd3JpdHRlbiAqLworCQkJCQkJCisJCQlpZiAod3JpdGVfaXRl bXMgJSBuX2l0ZW1zID09IDAgJiYgd3JpdGVfaXRlbXMgPiAwICYmIGVycm5vID09IDApIC8qIGZp bmlzaGVkIHdyaXRpbmcgaW50byBuZXcgcGFnZS4gKi8KKwkJCXsKKwkJCQlpZiAod3JpdGVfaXRl bXMgPT0gbl9pdGVtcyAqIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpIC8qIGVuZCBvZiBzZWdtZW50 ICovCisJCQkJeworCQkJCQlmY2xvc2UobmV3X2ZwKTsKKwkJCQkJcGFnZXNfd3JpdHRlbiA9IDA7 CisJCQkJCXdyaXRlX2ZpbGVfc2Vnbm8gKys7CisJCQkJCXdyaXRlX2l0ZW1zID0gMDsKKwkJCQkJ d3JpdGVfZmlsZSA9IHBzcHJpbnRmKCIlcy8lMDRYIiwgbmV3X3BhdGgsIHdyaXRlX2ZpbGVfc2Vn bm8pOworCQkJCQluZXdfZnAgPSBmb3BlbigoY2hhciAqKXdyaXRlX2ZpbGUsICJ3YiIpOworCQkJ CQlyZXMgPSBpbml0X25ld19zbHJ1X2ZpbGUobmV3X2ZwKTsKKwkJCQkJaWYgKHJlcyA8IDAgfHwg bmV3X2ZwID09IE5VTEwpCisJCQkJCXsKKwkJCQkJCWZjbG9zZShuZXdfZnApOworCQkJCQkJY2xl YW51cF9kaXJlbnRzKGFsbF9kaXJlbnRzLCB0b3RhbF9yZWFkX2ZpbGVzKTsKKwkJCQkJCQorCQkJ CQl9CisJCQkJfSBlbHNlIHsgLyogZW5kIG9mIHBhZ2UgYnV0IG5vdCBzZWdtZW50ICovCisJCQkJ CS8vZmZsdXNoKG5ld19mcCk7CisJCQkJCXBhZ2VzX3dyaXR0ZW4gKys7IAorCQkJCX0KKworCQkJ CWJsa25vKys7IAorCisJCQkJdG9fcmVhZF9pdGVtcyA9IG5faXRlbXM7IC8qIHRvX3JlYWRfaXRl bXMgPSBuICovCisJCQkJcmVzID0gZnNlZWsobmV3X2ZwLCAocGFnZXNfd3JpdHRlbiAqIEJMQ0tT WiksIFNFRUtfU0VUKTsKKwkJCQlpZiAocmVzIDwgMCkKKwkJCQl7CisJCQkJCWZjbG9zZShuZXdf ZnApOworCQkJCQljbGVhbnVwX2RpcmVudHMoYWxsX2RpcmVudHMsIHRvdGFsX3JlYWRfZmlsZXMp OworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKmVuZCBvZiBzZWdt ZW50IGluIHNvdXJjZSBkaXIqLworCQkJCWlmIChyZWFkX2l0ZW1zIDwgdG9fcmVhZF9pdGVtcykg CisJCQkJeworCQkJCQl0b19yZWFkX2l0ZW1zID0gbl9pdGVtcyAtIHJlYWRfaXRlbXM7IC8qIHJl YWQgcmVtYWluaW5nIGl0ZW1zICovCisJCQkJfQorCQkJfQorCQl9IHdoaWxlICghZmVvZihvbGRf ZmQpKTsgIC8qIHVudGlsIGVuZCBvZiBmaWxlICovCisJCWZjbG9zZShvbGRfZmQpOworCX0KKwlm Zmx1c2gobmV3X2ZwKTsKKwkKKwkvKiBmcmVlIG1lbW9yeSBtYWxsb2MnZCBieSBzY2FuZGlyIHdo aWxlIHNvcnRpbmcgKi8KKwljbGVhbnVwX2RpcmVudHMoYWxsX2RpcmVudHMsIHRvdGFsX3JlYWRf ZmlsZXMpOworCisJcmV0dXJuIDA7Cit9CisKIHZvaWQKIGNoZWNrX2ZpbGVfY2xvbmUodm9pZCkK IHsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9mdW5jdGlvbi5jIGIvc3JjL2Jpbi9w Z191cGdyYWRlL2Z1bmN0aW9uLmMKaW5kZXggZGM4ODAwYzdjZGUuLjEwYzdmY2FmYmQ1IDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvZnVuY3Rpb24uYworKysgYi9zcmMvYmluL3BnX3Vw Z3JhZGUvZnVuY3Rpb24uYwpAQCAtNyw2ICs3LDcgQEAKICAqCXNyYy9iaW4vcGdfdXBncmFkZS9m dW5jdGlvbi5jCiAgKi8KIAorCiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAogI2luY2x1ZGUg ImFjY2Vzcy90cmFuc2FtLmgiCkBAIC00Miw2ICs0Myw0MyBAQCBsaWJyYXJ5X25hbWVfY29tcGFy ZShjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCiAJCQkoKGNvbnN0IExpYnJhcnlJbmZv ICopIHAyKS0+ZGJudW07CiB9CiAKKy8qCisgKiBxc29ydCBjb21wYXJhdG9yIGZvciBoZXggZmls ZW5hbWVzCisgKi8KK3N0YXRpYyBpbnQKK2ZpbGVfbmFtZV9jb21wYXJlKGNvbnN0IHN0cnVjdCBk aXJlbnQgKiogZGVfMSwgY29uc3Qgc3RydWN0IGRpcmVudCAqKiBkZV8yKQoreworCWludCBuMTsK KwlpbnQgbjI7CisKKworCWNoYXIgKiBmbmFtZV8xOworCWNoYXIgKiBmbmFtZV8yOworCisJZm5h bWVfMSA9IChjaGFyICopICgqZGVfMSktPmRfbmFtZTsKKwlmbmFtZV8yID0gKGNoYXIgKikgKCpk ZV8yKS0+ZF9uYW1lOworCQorCWlmICgoc3RyY21wKGZuYW1lXzEsICIuIikpIHx8IHN0cmNtcChm bmFtZV8xLCAiLi4iKSkgCisJeworCQluMSA9IChpbnQpIHN0cnRvbChmbmFtZV8xLCBOVUxMLCAx Nik7CisJfSBlbHNlIHsKKwkJbjEgPSAtMTsKKwl9CisKKwlpZiAoKHN0cmNtcChmbmFtZV8yLCAi LiIpKSB8fCBzdHJjbXAoZm5hbWVfMiwgIi4uIikpCisJeworCQluMiA9IChpbnQpIHN0cnRvbChm bmFtZV8yLCBOVUxMLCAxNik7CisJfSBlbHNlIHsKKwkJbjIgPSAtMTsKKwl9CisKKwlpZiAobjEg PT0gbjIpIAorCXsKKwkJcmV0dXJuIDE7IC8vYXJiaXRyYXJpbHkgc2VsZWN0IHRoZSBmaXJzdCBp bnB1dAorCX0gZWxzZSB7CisJCXJldHVybiBuMSAtIG4yOworCX0KK30KIAogLyoKICAqIGdldF9s b2FkYWJsZV9saWJyYXJpZXMoKQpAQCAtMTA5LDYgKzE0NywzNCBAQCBnZXRfbG9hZGFibGVfbGli cmFyaWVzKHZvaWQpCiB9CiAKIAorLyoKKyAqIGdldF9zb3J0ZWRfaGV4X2ZpbGVzKCkKKyAqIGdp dmVuIHRoZSBmaWxlcGF0aCBvZiBhIGRpcmVjdG9yeSwKKyAqIHJldHVybiBhcnJheSBvZiBjaGls ZCBkaXJlbnRzIHdpdGggaGV4IGZpbGVuYW1lcyBlLmcgJzAwMEEnCisgKiBpbiBzb3J0ZWQgb3Jk ZXIKKyAqLworc3RydWN0IGRpcmVudCoqIAorZ2V0X3NvcnRlZF9oZXhfZmlsZXMoY2hhciAqIGRy LCBpbnQgKiBzaXplKQoreworCXN0cnVjdCBkaXJlbnQgKiplbnRyeV9saXN0OworCisJKnNpemUg PSBzY2FuZGlyKGRyLCAmZW50cnlfbGlzdCwgTlVMTCwgZmlsZV9uYW1lX2NvbXBhcmUpOworCWlm ICgqc2l6ZSA8IDApCisJeworCQlyZXR1cm4gTlVMTDsgLy9lcnJvcgorCX0KKwlyZXR1cm4gZW50 cnlfbGlzdDsKK30KKwordm9pZAorY2xlYW51cF9kaXJlbnRzKHN0cnVjdCBkaXJlbnQgKiogYWxs X2RpcmVudHMsIGludCB0b3RhbF9yZWFkX2ZpbGVzKQorewkKKwlmb3IgKGludCBpID0gMDsgaSA8 IHRvdGFsX3JlYWRfZmlsZXM7IGkrKykKKwl7CisJCSBmcmVlKChzdHJ1Y3QgZGlyZW50ICoqKSBh bGxfZGlyZW50c1tpXSk7CisJfQorCWZyZWUoKHN0cnVjdCBkaXJlbnQgKiopIGFsbF9kaXJlbnRz KTsKK30KIC8qCiAgKiBjaGVja19sb2FkYWJsZV9saWJyYXJpZXMoKQogICoKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdf dXBncmFkZS5jCmluZGV4IGU1NTk3ZDMxMDUyLi44YmIwNzgzNTg3NyAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuYworKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdf dXBncmFkZS5jCkBAIC0zOCwxOCArMzgsMjIgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgi CiAKKyNpbmNsdWRlIDxkaXJlbnQuaD4KICNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8dW5p c3RkLmg+CiAKICNpZmRlZiBIQVZFX0xBTkdJTkZPX0gKICNpbmNsdWRlIDxsYW5naW5mby5oPgog I2VuZGlmCiAKKyNpbmNsdWRlICJhY2Nlc3Mvc2xydWRlZnMuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX2NsYXNzX2QuaCIKICNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCiAjaW5jbHVkZSAi Y29tbW9uL2xvZ2dpbmcuaCIKICNpbmNsdWRlICJjb21tb24vcmVzdHJpY3RlZF90b2tlbi5oIgog I2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgInBnX3VwZ3JhZGUu aCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIKIAogc3RhdGljIHZvaWQgcHJlcGFyZV9u ZXdfY2x1c3Rlcih2b2lkKTsKIHN0YXRpYyB2b2lkIHByZXBhcmVfbmV3X2dsb2JhbHModm9pZCk7 CkBAIC01OSw2ICs2MywxMCBAQCBzdGF0aWMgdm9pZCBzZXRfZnJvemVueGlkcyhib29sIG1pbm14 aWRfb25seSk7CiBzdGF0aWMgdm9pZCBtYWtlX291dHB1dGRpcnMoY2hhciAqcGdkYXRhKTsKIHN0 YXRpYyB2b2lkIHNldHVwKGNoYXIgKmFyZ3YwLCBib29sICpsaXZlX2NoZWNrKTsKIAorCisjZGVm aW5lIE1BWEJVRlNJWkUgKEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFkZXJEYXRhKQorI2RlZmluZSBT TFJVX1BBR0VTX1BFUl9TRUdNRU5UIDMyCisKIENsdXN0ZXJJbmZvIG9sZF9jbHVzdGVyLAogCQkJ bmV3X2NsdXN0ZXI7CiBPU0luZm8JCW9zX2luZm87CkBAIC01NzMsMTEgKzU4MSwzNiBAQCBjb3B5 X3hhY3RfeGxvZ194aWQodm9pZCkKIAkgKiBDb3B5IG9sZCBjb21taXQgbG9ncyB0byBuZXcgZGF0 YSBkaXIuIHBnX2Nsb2cgaGFzIGJlZW4gcmVuYW1lZCB0bwogCSAqIHBnX3hhY3QgaW4gcG9zdC0x MCBjbHVzdGVycy4KIAkgKi8KLQljb3B5X3N1YmRpcl9maWxlcyhHRVRfTUFKT1JfVkVSU0lPTihv bGRfY2x1c3Rlci5tYWpvcl92ZXJzaW9uKSA8PSA5MDYgPwotCQkJCQkgICJwZ19jbG9nIiA6ICJw Z194YWN0IiwKLQkJCQkJICBHRVRfTUFKT1JfVkVSU0lPTihuZXdfY2x1c3Rlci5tYWpvcl92ZXJz aW9uKSA8PSA5MDYgPwotCQkJCQkgICJwZ19jbG9nIiA6ICJwZ194YWN0Iik7CisJIAorCWlmIChv bGRfY2x1c3Rlci5jb250cm9sZGF0YS5jYXRfdmVyIDw9IENMT0dfRk9STUFUQ0hBTkdFX0NBVF9W RVIgJiYKKwkJbmV3X2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBDTE9HX0ZPUk1BVENI QU5HRV9DQVRfVkVSKQorCXsKKwkJCWludCByZXQ7CisJCQlyZXQgPSBjb3B5X3RvX25ld19mb3Jt YXQoR0VUX01BSk9SX1ZFUlNJT04ob2xkX2NsdXN0ZXIubWFqb3JfdmVyc2lvbikgPD0gOTA2ID8K KwkJCSJwZ19jbG9nIiA6ICJwZ194YWN0IiwgCisJCQkicGdfeGFjdCIsIDEpOworCQkJCisJCQlp ZiAocmV0IDwgMCkKKwkJCXsKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlZm9ybWF0IGNsb2cg ZmlsZXMiKTsKKwkJCX0KKwl9CiAKKwlpZiAob2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3Zl ciA+PSBDTE9HX0ZPUk1BVENIQU5HRV9DQVRfVkVSICYmCisJCW5ld19jbHVzdGVyLmNvbnRyb2xk YXRhLmNhdF92ZXIgPj0gQ0xPR19GT1JNQVRDSEFOR0VfQ0FUX1ZFUikKKwl7CisJCWNvcHlfc3Vi ZGlyX2ZpbGVzKCJwZ194YWN0IiwgInBnX3hhY3QiKTsKKwl9CisKKwlpZiAob2xkX2NsdXN0ZXIu Y29udHJvbGRhdGEuY2F0X3ZlciA8PSBDTE9HX0ZPUk1BVENIQU5HRV9DQVRfVkVSICYmCisJCW5l d19jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPD0gQ0xPR19GT1JNQVRDSEFOR0VfQ0FUX1ZF UikKKwl7CisJCWNvcHlfc3ViZGlyX2ZpbGVzKEdFVF9NQUpPUl9WRVJTSU9OKG9sZF9jbHVzdGVy Lm1ham9yX3ZlcnNpb24pIDw9IDkwNiA/CisJCQkJCSJwZ19jbG9nIiA6ICJwZ194YWN0IiwKKwkJ CQkJR0VUX01BSk9SX1ZFUlNJT04obmV3X2NsdXN0ZXIubWFqb3JfdmVyc2lvbikgPD0gOTA2ID8K KwkJCQkJInBnX2Nsb2ciIDogInBnX3hhY3QiKTsKKwl9CisJCiAJcHJlcF9zdGF0dXMoIlNldHRp bmcgb2xkZXN0IFhJRCBmb3IgbmV3IGNsdXN0ZXIiKTsKIAlleGVjX3Byb2coVVRJTElUWV9MT0df RklMRSwgTlVMTCwgdHJ1ZSwgdHJ1ZSwKIAkJCSAgIlwiJXMvcGdfcmVzZXR3YWxcIiAtZiAtdSAl dSBcIiVzXCIiLApAQCAtNjMzLDIzICs2NjYsNDQgQEAgY29weV94YWN0X3hsb2dfeGlkKHZvaWQp CiAJfQogCWVsc2UgaWYgKG5ld19jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPj0gTVVMVElY QUNUX0ZPUk1BVENIQU5HRV9DQVRfVkVSKQogCXsKKwkJY29weV90b19uZXdfZm9ybWF0KCJwZ19t dWx0aXhhY3Qvb2Zmc2V0cyIsICJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsIE1VTFRJWEFDVF9NRU1C RVJfRU5UUllfU0laRSk7CisJCWNvcHlfdG9fbmV3X2Zvcm1hdCgicGdfbXVsdGl4YWN0L21lbWJl cnMiLCAicGdfbXVsdGl4YWN0L21lbWJlcnMiLCBNVUxUSVhBQ1RfT0ZGU0VUX0VOVFJZX1NJWkUp OwkgCisKKworCQlwcmVwX3N0YXR1cygiU2V0dGluZyBuZXh0IG11bHRpeGFjdCBJRCBhbmQgb2Zm c2V0IGZvciBuZXcgY2x1c3RlciIpOworCiAJCS8qCisJCSAqIHdlIHByZXNlcnZlIGFsbCBmaWxl cyBhbmQgY29udGVudHMsIHNvIHdlIG11c3QgcHJlc2VydmUgYm90aCAibmV4dCIKKwkJICogY291 bnRlcnMgaGVyZSBhbmQgdGhlIG9sZGVzdCBtdWx0aSBwcmVzZW50IG9uIHN5c3RlbS4KKwkJICov CisJCWV4ZWNfcHJvZyhVVElMSVRZX0xPR19GSUxFLCBOVUxMLCB0cnVlLCB0cnVlLAorCQkJCSAg IlwiJXMvcGdfcmVzZXR3YWxcIiAtTyAldSAtbSAldSwldSBcIiVzXCIiLAorCQkJCSAgbmV3X2Ns dXN0ZXIuYmluZGlyLAorCQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG14 b2ZmLAorCQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRpLAorCQkJ CSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X29sZHN0TXVsdGksCisJCQkJICBuZXdf Y2x1c3Rlci5wZ2RhdGEpOworCQljaGVja19vaygpOworCisJfQorCS8qZWxzZSBpZiAobmV3X2Ns dXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9W RVIpCisJeworCQkqCiAJCSAqIFJlbW92ZSBvZmZzZXRzLzAwMDAgZmlsZSBjcmVhdGVkIGJ5IGlu aXRkYiB0aGF0IG5vIGxvbmdlciBtYXRjaGVzCiAJCSAqIHRoZSBuZXcgbXVsdGkteGlkIHZhbHVl LiAgIm1lbWJlcnMiIHN0YXJ0cyBhdCB6ZXJvIHNvIG5vIG5lZWQgdG8KIAkJICogcmVtb3ZlIGl0 LgotCQkgKi8KKwkJICoKIAkJcmVtb3ZlX25ld19zdWJkaXIoInBnX211bHRpeGFjdC9vZmZzZXRz IiwgZmFsc2UpOwogCiAJCXByZXBfc3RhdHVzKCJTZXR0aW5nIG9sZGVzdCBtdWx0aXhhY3QgSUQg aW4gbmV3IGNsdXN0ZXIiKTsKLQotCQkvKgorIAkJKgogCQkgKiBXZSBkb24ndCBwcmVzZXJ2ZSBm aWxlcyBpbiB0aGlzIGNhc2UsIGJ1dCBpdCdzIGltcG9ydGFudCB0aGF0IHRoZQogCQkgKiBvbGRl c3QgbXVsdGkgaXMgc2V0IHRvIHRoZSBsYXRlc3QgdmFsdWUgdXNlZCBieSB0aGUgb2xkIHN5c3Rl bSwgc28KIAkJICogdGhhdCBtdWx0aXhhY3QuYyByZXR1cm5zIHRoZSBlbXB0eSBzZXQgZm9yIG11 bHRpcyB0aGF0IG1pZ2h0IGJlCiAJCSAqIHByZXNlbnQgb24gZGlzay4gIFdlIHNldCBuZXh0IG11 bHRpIHRvIHRoZSB2YWx1ZSBmb2xsb3dpbmcgdGhhdDsgaXQKIAkJICogbWlnaHQgZW5kIHVwIHdy YXBwZWQgYXJvdW5kIChpLmUuIDApIGlmIHRoZSBvbGQgY2x1c3RlciBoYWQKIAkJICogbmV4dD1N YXhNdWx0aVhhY3RJZCwgYnV0IG11bHRpeGFjdC5jIGNhbiBjb3BlIHdpdGggdGhhdCBqdXN0IGZp bmUuCi0JCSAqLworCQkgKgogCQlleGVjX3Byb2coVVRJTElUWV9MT0dfRklMRSwgTlVMTCwgdHJ1 ZSwgdHJ1ZSwKIAkJCQkgICJcIiVzL3BnX3Jlc2V0d2FsXCIgLW0gJXUsJXUgXCIlc1wiIiwKIAkJ CQkgIG5ld19jbHVzdGVyLmJpbmRpciwKQEAgLTY1Nyw3ICs3MTEsOCBAQCBjb3B5X3hhY3RfeGxv Z194aWQodm9pZCkKIAkJCQkgIG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHRtdWx0 aSwKIAkJCQkgIG5ld19jbHVzdGVyLnBnZGF0YSk7CiAJCWNoZWNrX29rKCk7Ci0JfQorCQkKKwl9 Ki8KIAogCS8qIG5vdyByZXNldCB0aGUgd2FsIGFyY2hpdmVzIGluIHRoZSBuZXcgY2x1c3RlciAq LwogCXByZXBfc3RhdHVzKCJSZXNldHRpbmcgV0FMIGFyY2hpdmVzIik7CkBAIC02NjksNyArNzI0 LDYgQEAgY29weV94YWN0X3hsb2dfeGlkKHZvaWQpCiAJY2hlY2tfb2soKTsKIH0KIAotCiAvKgog ICoJc2V0X2Zyb3plbnhpZHMoKQogICoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9w Z191cGdyYWRlLmggYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oCmluZGV4IDVmMmEx MTZmMjNlLi4xOWUxNmVkY2M1NSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3Vw Z3JhZGUuaAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oCkBAIC03LDYgKzcs NyBAQAogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVk ZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5o PgogCkBAIC0xMTMsNyArMTE0LDE2IEBAIGV4dGVybiBjaGFyICpvdXRwdXRfZmlsZXNbXTsKICAq IHZlcnNpb24gdG8gdGhpcyB2YWx1ZS4gIHBnX3VwZ3JhZGUgYmVoYXZpb3IgZGVwZW5kcyBvbiB3 aGV0aGVyIG9sZCBhbmQgbmV3CiAgKiBzZXJ2ZXIgdmVyc2lvbnMgYXJlIGJvdGggbmV3ZXIgdGhh biB0aGlzLCBvciBvbmx5IHRoZSBuZXcgb25lIGlzLgogICovCi0jZGVmaW5lIE1VTFRJWEFDVF9G T1JNQVRDSEFOR0VfQ0FUX1ZFUiAyMDEzMDEyMzEKKworLyoKKyAqIHBhZ2UgaGVhZGVyIGZvcm1h dCBjaGFuZ2UKKyAqLworI2RlZmluZSBNVUxUSVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIgMjAy MjA5MTQxCisKKy8qIAorICogcGFnZSBoZWFkZXIgZm9ybWF0IGNoYW5nZSAKKyAqLworI2RlZmlu ZSBDTE9HX0ZPUk1BVENIQU5HRV9DQVRfVkVSIDIwMjIxMDE0MQogCiAvKgogICogbGFyZ2Ugb2Jq ZWN0IGNodW5rIHNpemUgYWRkZWQgdG8gcGdfY29udHJvbGRhdGEsCkBAIC0xMjIsNyArMTMyLDcg QEAgZXh0ZXJuIGNoYXIgKm91dHB1dF9maWxlc1tdOwogI2RlZmluZSBMQVJHRV9PQkpFQ1RfU0la RV9QR19DT05UUk9MX1ZFUiA5NDIKIAogLyoKLSAqIGNoYW5nZSBpbiBKU09OQiBmb3JtYXQgZHVy aW5nIDkuNCBiZXRhCisgKiBhZGRpdGlvbiBvZiBwYWdlIGhlYWRlciAKICAqLwogI2RlZmluZSBK U09OQl9GT1JNQVRfQ0hBTkdFX0NBVF9WRVIgMjAxNDA5MjkxCiAKQEAgLTM3OCw2ICszODgsOSBA QCB2b2lkCQlyZXdyaXRlVmlzaWJpbGl0eU1hcChjb25zdCBjaGFyICpmcm9tZmlsZSwgY29uc3Qg Y2hhciAqdG9maWxlLAogdm9pZAkJY2hlY2tfZmlsZV9jbG9uZSh2b2lkKTsKIHZvaWQJCWNoZWNr X2hhcmRfbGluayh2b2lkKTsKIAorCitpbnQgCWNvcHlfdG9fbmV3X2Zvcm1hdChjb25zdCBjaGFy ICpvbGRfc3ViZGlyLCBjb25zdCBjaGFyICpuZXdfc3ViZGlyLCBpbnQgZWxlbWVudF9zaXplKTsK KwogLyogZm9wZW5fcHJpdigpIGlzIG5vIGxvbmdlciBkaWZmZXJlbnQgZnJvbSBmb3BlbigpICov CiAjZGVmaW5lIGZvcGVuX3ByaXYocGF0aCwgbW9kZSkJZm9wZW4ocGF0aCwgbW9kZSkKIApAQCAt Mzg1LDYgKzM5OCw4IEBAIHZvaWQJCWNoZWNrX2hhcmRfbGluayh2b2lkKTsKIAogdm9pZAkJZ2V0 X2xvYWRhYmxlX2xpYnJhcmllcyh2b2lkKTsKIHZvaWQJCWNoZWNrX2xvYWRhYmxlX2xpYnJhcmll cyh2b2lkKTsKK3ZvaWQgCQljbGVhbnVwX2RpcmVudHMoc3RydWN0IGRpcmVudCAqKiBhbGxfZGly ZW50cywgaW50IHRvdGFsX3JlYWRfZmlsZXMpOworc3RydWN0IGRpcmVudCoqIAlnZXRfc29ydGVk X2hleF9maWxlcyhjaGFyICogZHIsIGludCAqIHNpemUpOwogCiAvKiBpbmZvLmMgKi8KIApkaWZm IC0tZ2l0IGEvc3JjL2NvbW1vbi9yZWxwYXRoLmMgYi9zcmMvY29tbW9uL3JlbHBhdGguYwppbmRl eCA4N2RlNWY2Yzk2MC4uNDcxNWQwNmQyODcgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vcmVscGF0 aC5jCisrKyBiL3NyYy9jb21tb24vcmVscGF0aC5jCkBAIC0yMiw2ICsyMiwxNiBAQAogI2luY2x1 ZGUgImNvbW1vbi9yZWxwYXRoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9iYWNrZW5kaWQuaCIKIAor LyoKKyAqIFNMUlUgSUQgdG8gcGF0aCBtYXBwaW5nCisgKi8KKyNkZWZpbmUgUEdfU0xSVShzeW1u YW1lLG5hbWUscGF0aCxzeW5jaHJvbml6ZSkgXAorCXBhdGgsCisKK3N0YXRpYyBjaGFyICpzbHJ1 X2RpcnNbXSA9Cit7CisjaW5jbHVkZSAiYWNjZXNzL3NscnVsaXN0LmgiCit9OwogCiAvKgogICog TG9va3VwIHRhYmxlIG9mIGZvcmsgbmFtZSBieSBmb3JrIG51bWJlci4KQEAgLTEyOSw3ICsxMzks NyBAQCBHZXREYXRhYmFzZVBhdGgoT2lkIGRiT2lkLCBPaWQgc3BjT2lkKQogfQogCiAvKgotICog R2V0UmVsYXRpb25QYXRoIC0gY29uc3RydWN0IHBhdGggdG8gYSByZWxhdGlvbidzIGZpbGUKKyAq IEdldFNNZ3JGaWxlUGF0aCAtIGNvbnN0cnVjdCBwYXRoIHRvIGEgcmVsYXRpb24ncyBmaWxlCiAg KgogICogUmVzdWx0IGlzIGEgcGFsbG9jJ2Qgc3RyaW5nLgogICoKQEAgLTEzOCwxMiArMTQ4LDI3 IEBAIEdldERhdGFiYXNlUGF0aChPaWQgZGJPaWQsIE9pZCBzcGNPaWQpCiAgKiB0aGUgdHJvdWJs ZSBjb25zaWRlcmluZyBCYWNrZW5kSWQgaXMganVzdCBpbnQgYW55d2F5LgogICovCiBjaGFyICoK LUdldFJlbGF0aW9uUGF0aChPaWQgZGJPaWQsIE9pZCBzcGNPaWQsIFJlbEZpbGVOdW1iZXIgcmVs TnVtYmVyLAorR2V0U01nckZpbGVQYXRoKE9pZCBkYk9pZCwgT2lkIHNwY09pZCwgUmVsRmlsZU51 bWJlciByZWxOdW1iZXIsCiAJCQkJaW50IGJhY2tlbmRJZCwgRm9ya051bWJlciBmb3JrTnVtYmVy KQogewogCWNoYXIJICAgKnBhdGg7CiAKLQlpZiAoc3BjT2lkID09IEdMT0JBTFRBQkxFU1BBQ0Vf T0lEKQorCWlmIChzcGNPaWQgPT0gU0xSVV9TUENfT0lEKQorCXsKKwkJaWYgKGRiT2lkID49IGxl bmd0aG9mKHNscnVfZGlycykgfHwgZm9ya051bWJlciAhPSAwIHx8IGJhY2tlbmRJZCAhPSBJbnZh bGlkQmFja2VuZElkKQorCQl7CisjaWZuZGVmIEZST05URU5ECisJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVy cm1zZygiaW52YWxpZCBTTFJVIGZpbGUgbG9jYXRvciAldS8ldS8ldS8ldS8ldSIsCisJCQkJCQkJ c3BjT2lkLCBkYk9pZCwgcmVsTnVtYmVyLCBiYWNrZW5kSWQsIGZvcmtOdW1iZXIpKSk7CisjZWxz ZQorCQkJcmV0dXJuIE5VTEw7CisjZW5kaWYKKwkJfQorCQlwYXRoID0gcHNwcmludGYoIiVzLyUw NFgiLCBzbHJ1X2RpcnNbZGJPaWRdLCByZWxOdW1iZXIpOworCX0KKwllbHNlIGlmIChzcGNPaWQg PT0gR0xPQkFMVEFCTEVTUEFDRV9PSUQpCiAJewogCQkvKiBTaGFyZWQgc3lzdGVtIHJlbGF0aW9u cyBsaXZlIGluIHtkYXRhZGlyfS9nbG9iYWwgKi8KIAkJQXNzZXJ0KGRiT2lkID09IDApOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2Nsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9j bG9nLmgKaW5kZXggZDk5NDQ0ZjA3M2YuLmFhY2YxMGNhNTIyIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MvY2xvZy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9jbG9nLmgKQEAgLTQw LDE4ICs0MCwxMiBAQCBleHRlcm4gdm9pZCBUcmFuc2FjdGlvbklkU2V0VHJlZVN0YXR1cyhUcmFu c2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAogCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCAq c3VieGlkcywgWGlkU3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24pOwogZXh0ZXJuIFhpZFN0 YXR1cyBUcmFuc2FjdGlvbklkR2V0U3RhdHVzKFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRy ICpsc24pOwogCi1leHRlcm4gU2l6ZSBDTE9HU2htZW1CdWZmZXJzKHZvaWQpOwotZXh0ZXJuIFNp emUgQ0xPR1NobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIENMT0dTaG1lbUluaXQodm9pZCk7 CiBleHRlcm4gdm9pZCBCb290U3RyYXBDTE9HKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhcnR1cENM T0codm9pZCk7CiBleHRlcm4gdm9pZCBUcmltQ0xPRyh2b2lkKTsKLWV4dGVybiB2b2lkIENoZWNr UG9pbnRDTE9HKHZvaWQpOwogZXh0ZXJuIHZvaWQgRXh0ZW5kQ0xPRyhUcmFuc2FjdGlvbklkIG5l d2VzdFhhY3QpOwogZXh0ZXJuIHZvaWQgVHJ1bmNhdGVDTE9HKFRyYW5zYWN0aW9uSWQgb2xkZXN0 WGFjdCwgT2lkIG9sZGVzdHhpZF9kYXRvaWQpOwogCi1leHRlcm4gaW50CWNsb2dzeW5jZmlsZXRh Zyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKTsKLQogLyogWExPRyBzdHVmZiAqLwog I2RlZmluZSBDTE9HX1pFUk9QQUdFCQkweDAwCiAjZGVmaW5lIENMT0dfVFJVTkNBVEUJCTB4MTAK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9jb21taXRfdHMuaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9jb21taXRfdHMuaAppbmRleCA1MDg3Y2RjZTUxZS4uNjA1ZGM3NWIzYjAgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9jb21taXRfdHMuaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvY29tbWl0X3RzLmgKQEAgLTI3LDcgKzI3LDYgQEAgZXh0ZXJuIGJvb2wgVHJhbnNhY3Rp b25JZEdldENvbW1pdFRzRGF0YShUcmFuc2FjdGlvbklkIHhpZCwKIGV4dGVybiBUcmFuc2FjdGlv bklkIEdldExhdGVzdENvbW1pdFRzRGF0YShUaW1lc3RhbXBUeiAqdHMsCiAJCQkJCQkJCQkJICAg UmVwT3JpZ2luSWQgKm5vZGVpZCk7CiAKLWV4dGVybiBTaXplIENvbW1pdFRzU2htZW1CdWZmZXJz KHZvaWQpOwogZXh0ZXJuIFNpemUgQ29tbWl0VHNTaG1lbVNpemUodm9pZCk7CiBleHRlcm4gdm9p ZCBDb21taXRUc1NobWVtSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIEJvb3RTdHJhcENvbW1pdFRz KHZvaWQpOwpAQCAtNDEsOCArNDAsNiBAQCBleHRlcm4gdm9pZCBTZXRDb21taXRUc0xpbWl0KFRy YW5zYWN0aW9uSWQgb2xkZXN0WGFjdCwKIAkJCQkJCQkgVHJhbnNhY3Rpb25JZCBuZXdlc3RYYWN0 KTsKIGV4dGVybiB2b2lkIEFkdmFuY2VPbGRlc3RDb21taXRUc1hpZChUcmFuc2FjdGlvbklkIG9s ZGVzdFhhY3QpOwogCi1leHRlcm4gaW50CWNvbW1pdHRzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRh ZyAqZnRhZywgY2hhciAqcGF0aCk7Ci0KIC8qIFhMT0cgc3R1ZmYgKi8KICNkZWZpbmUgQ09NTUlU X1RTX1pFUk9QQUdFCQkweDAwCiAjZGVmaW5lIENPTU1JVF9UU19UUlVOQ0FURQkJMHgxMApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL211bHRpeGFjdC5oCmluZGV4IDI0NmY3NTdmNmFiLi41ODQ4ZTQwNzJiYSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9tdWx0aXhhY3QuaApAQCAtMTE4LDkgKzExOCw2IEBAIGV4dGVybiBib29sIE11bHRpWGFjdElk UHJlY2VkZXMoTXVsdGlYYWN0SWQgbXVsdGkxLCBNdWx0aVhhY3RJZCBtdWx0aTIpOwogZXh0ZXJu IGJvb2wgTXVsdGlYYWN0SWRQcmVjZWRlc09yRXF1YWxzKE11bHRpWGFjdElkIG11bHRpMSwKIAkJ CQkJCQkJCQlNdWx0aVhhY3RJZCBtdWx0aTIpOwogCi1leHRlcm4gaW50CW11bHRpeGFjdG9mZnNl dHNzeW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKTsKLWV4dGVybiBp bnQJbXVsdGl4YWN0bWVtYmVyc3N5bmNmaWxldGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIg KnBhdGgpOwotCiBleHRlcm4gdm9pZCBBdEVPWGFjdF9NdWx0aVhhY3Qodm9pZCk7CiBleHRlcm4g dm9pZCBBdFByZXBhcmVfTXVsdGlYYWN0KHZvaWQpOwogZXh0ZXJuIHZvaWQgUG9zdFByZXBhcmVf TXVsdGlYYWN0KFRyYW5zYWN0aW9uSWQgeGlkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9zbHJ1LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oCmluZGV4IGE4YTQyNGQ5MmRh Li40YjNlMmU0YTM0ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaAorKysg Yi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oCkBAIC0xLDcgKzEsNyBAQAogLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgKgogICogc2xydS5oCi0gKgkJU2ltcGxlIExSVSBidWZmZXJpbmcgZm9yIHRyYW5z YWN0aW9uIHN0YXR1cyBsb2dmaWxlcworICoJCUJ1ZmZlcmluZyBmb3IgdHJhbnNhY3Rpb24gc3Rh dHVzIGxvZ2ZpbGVzCiAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQpAQCAtMTQs OSArMTQsMzYgQEAKICNkZWZpbmUgU0xSVV9ICiAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RhYmxlc3BhY2VfZC5oIgorI2luY2x1ZGUgInN0b3Jh Z2UvYnVmLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdl L2x3bG9jay5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc21nci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv c3luYy5oIgogCisvKiBQc2V1ZG8gZGF0YWJhc2UgSUQgdXNlZCBmb3IgU0xSVSBkYXRhLiAqLwor I2RlZmluZSBTTFJVX1NQQ19JRCA5CisKKy8qIFBzZXVkbyBkYXRhYmFzZSBJRHMgdXNlZCBieSBl YWNoIGNhY2hlLiAqLworI2RlZmluZSBQR19TTFJVKHN5bW5hbWUsbmFtZSxwYXRoLCBzeW5jaHJv bml6ZSkgXAorCXN5bW5hbWUsCisKK3R5cGVkZWYgZW51bSBTbHJ1SWRzCit7CisjaW5jbHVkZSAi YWNjZXNzL3NscnVsaXN0LmgiCisJU0xSVV9ORVhUX0lECit9CQkJU2xydUlkczsKKyN1bmRlZiBQ R19TTFJVCisKK3R5cGVkZWYgYm9vbCAoKlNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbikgKGludCwg aW50KTsKKworc3RhdGljIGlubGluZSBSZWxGaWxlTG9jYXRvcgorU2xydVJlbEZpbGVMb2NhdG9y KHVpbnQzMiBzbHJ1X2RiX2lkLCB1aW50MzIgc2VnbWVudF9pZCkKK3sKKwlSZWxGaWxlTG9jYXRv ciBybG9jYXRvciA9IHtTTFJVX1NQQ19JRCwgc2xydV9kYl9pZCwgc2VnbWVudF9pZH07CisJcmV0 dXJuIHJsb2NhdG9yOworfQorCiAKIC8qCiAgKiBEZWZpbmUgU0xSVSBzZWdtZW50IHNpemUuICBB IHBhZ2UgaXMgdGhlIHNhbWUgQkxDS1NaIGFzIGlzIHVzZWQgZXZlcnl3aGVyZQpAQCAtMzMsMTQy ICs2MCw0MCBAQAogICovCiAjZGVmaW5lIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQJMzIKIAotLyoK LSAqIFBhZ2Ugc3RhdHVzIGNvZGVzLiAgTm90ZSB0aGF0IHRoZXNlIGRvIG5vdCBpbmNsdWRlIHRo ZSAiZGlydHkiIGJpdC4KLSAqIHBhZ2VfZGlydHkgY2FuIGJlIHRydWUgb25seSBpbiB0aGUgVkFM SUQgb3IgV1JJVEVfSU5fUFJPR1JFU1Mgc3RhdGVzOwotICogaW4gdGhlIGxhdHRlciBjYXNlIGl0 IGltcGxpZXMgdGhhdCB0aGUgcGFnZSBoYXMgYmVlbiByZS1kaXJ0aWVkIHNpbmNlCi0gKiB0aGUg d3JpdGUgc3RhcnRlZC4KLSAqLwotdHlwZWRlZiBlbnVtCi17Ci0JU0xSVV9QQUdFX0VNUFRZLAkJ CS8qIGJ1ZmZlciBpcyBub3QgaW4gdXNlICovCi0JU0xSVV9QQUdFX1JFQURfSU5fUFJPR1JFU1Ms IC8qIHBhZ2UgaXMgYmVpbmcgcmVhZCBpbiAqLwotCVNMUlVfUEFHRV9WQUxJRCwJCQkvKiBwYWdl IGlzIHZhbGlkIGFuZCBub3QgYmVpbmcgd3JpdHRlbiAqLwotCVNMUlVfUEFHRV9XUklURV9JTl9Q Uk9HUkVTUyAvKiBwYWdlIGlzIGJlaW5nIHdyaXR0ZW4gb3V0ICovCi19IFNscnVQYWdlU3RhdHVz OwotCi0vKgotICogU2hhcmVkLW1lbW9yeSBzdGF0ZQotICovCi10eXBlZGVmIHN0cnVjdCBTbHJ1 U2hhcmVkRGF0YQotewotCUxXTG9jawkgICAqQ29udHJvbExvY2s7Ci0KLQkvKiBOdW1iZXIgb2Yg YnVmZmVycyBtYW5hZ2VkIGJ5IHRoaXMgU0xSVSBzdHJ1Y3R1cmUgKi8KLQlpbnQJCQludW1fc2xv dHM7Ci0KLQkvKgotCSAqIEFycmF5cyBob2xkaW5nIGluZm8gZm9yIGVhY2ggYnVmZmVyIHNsb3Qu ICBQYWdlIG51bWJlciBpcyB1bmRlZmluZWQKLQkgKiB3aGVuIHN0YXR1cyBpcyBFTVBUWSwgYXMg aXMgcGFnZV9scnVfY291bnQuCi0JICovCi0JY2hhcgkgICoqcGFnZV9idWZmZXI7Ci0JU2xydVBh Z2VTdGF0dXMgKnBhZ2Vfc3RhdHVzOwotCWJvb2wJICAgKnBhZ2VfZGlydHk7Ci0JaW50CQkgICAq cGFnZV9udW1iZXI7Ci0JaW50CQkgICAqcGFnZV9scnVfY291bnQ7Ci0JTFdMb2NrUGFkZGVkICpi dWZmZXJfbG9ja3M7Ci0KLQkvKgotCSAqIE9wdGlvbmFsIGFycmF5IG9mIFdBTCBmbHVzaCBMU05z IGFzc29jaWF0ZWQgd2l0aCBlbnRyaWVzIGluIHRoZSBTTFJVCi0JICogcGFnZXMuICBJZiBub3Qg emVyby9OVUxMLCB3ZSBtdXN0IGZsdXNoIFdBTCBiZWZvcmUgd3JpdGluZyBwYWdlcyAodHJ1ZQot CSAqIGZvciBwZ194YWN0LCBmYWxzZSBmb3IgbXVsdGl4YWN0LCBwZ19zdWJ0cmFucywgcGdfbm90 aWZ5KS4gIGdyb3VwX2xzbltdCi0JICogaGFzIGxzbl9ncm91cHNfcGVyX3BhZ2UgZW50cmllcyBw ZXIgYnVmZmVyIHNsb3QsIGVhY2ggY29udGFpbmluZyB0aGUKLQkgKiBoaWdoZXN0IExTTiBrbm93 biBmb3IgYSBjb250aWd1b3VzIGdyb3VwIG9mIFNMUlUgZW50cmllcyBvbiB0aGF0IHNsb3Qncwot CSAqIHBhZ2UuCi0JICovCi0JWExvZ1JlY1B0ciAqZ3JvdXBfbHNuOwotCWludAkJCWxzbl9ncm91 cHNfcGVyX3BhZ2U7Ci0KLQkvKi0tLS0tLS0tLS0KLQkgKiBXZSBtYXJrIGEgcGFnZSAibW9zdCBy ZWNlbnRseSB1c2VkIiBieSBzZXR0aW5nCi0JICoJCXBhZ2VfbHJ1X2NvdW50W3Nsb3Rub10gPSAr K2N1cl9scnVfY291bnQ7Ci0JICogVGhlIG9sZGVzdCBwYWdlIGlzIHRoZXJlZm9yZSB0aGUgb25l IHdpdGggdGhlIGhpZ2hlc3QgdmFsdWUgb2YKLQkgKgkJY3VyX2xydV9jb3VudCAtIHBhZ2VfbHJ1 X2NvdW50W3Nsb3Rub10KLQkgKiBUaGUgY291bnRzIHdpbGwgZXZlbnR1YWxseSB3cmFwIGFyb3Vu ZCwgYnV0IHRoaXMgY2FsY3VsYXRpb24gc3RpbGwKLQkgKiB3b3JrcyBhcyBsb25nIGFzIG5vIHBh Z2UncyBhZ2UgZXhjZWVkcyBJTlRfTUFYIGNvdW50cy4KLQkgKi0tLS0tLS0tLS0KLQkgKi8KLQlp bnQJCQljdXJfbHJ1X2NvdW50OwotCi0JLyoKLQkgKiBsYXRlc3RfcGFnZV9udW1iZXIgaXMgdGhl IHBhZ2UgbnVtYmVyIG9mIHRoZSBjdXJyZW50IGVuZCBvZiB0aGUgbG9nOwotCSAqIHRoaXMgaXMg bm90IGNyaXRpY2FsIGRhdGEsIHNpbmNlIHdlIHVzZSBpdCBvbmx5IHRvIGF2b2lkIHN3YXBwaW5n IG91dAotCSAqIHRoZSBsYXRlc3QgcGFnZS4KLQkgKi8KLQlpbnQJCQlsYXRlc3RfcGFnZV9udW1i ZXI7Ci0KLQkvKiBTTFJVJ3MgaW5kZXggZm9yIHN0YXRpc3RpY3MgcHVycG9zZXMgKG1pZ2h0IG5v dCBiZSB1bmlxdWUpICovCi0JaW50CQkJc2xydV9zdGF0c19pZHg7Ci19IFNscnVTaGFyZWREYXRh OwotCi10eXBlZGVmIFNscnVTaGFyZWREYXRhICpTbHJ1U2hhcmVkOwotCi0vKgotICogU2xydUN0 bERhdGEgaXMgYW4gdW5zaGFyZWQgc3RydWN0dXJlIHRoYXQgcG9pbnRzIHRvIHRoZSBhY3RpdmUg aW5mb3JtYXRpb24KLSAqIGluIHNoYXJlZCBtZW1vcnkuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFNs cnVDdGxEYXRhCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQ7Ci0KLQkvKgotCSAqIFdoaWNoIHN5bmMg aGFuZGxlciBmdW5jdGlvbiB0byB1c2Ugd2hlbiBoYW5kaW5nIHN5bmMgcmVxdWVzdHMgb3ZlciB0 bwotCSAqIHRoZSBjaGVja3BvaW50ZXIuICBTWU5DX0hBTkRMRVJfTk9ORSB0byBkaXNhYmxlIGZz eW5jIChlZyBwZ19ub3RpZnkpLgotCSAqLwotCVN5bmNSZXF1ZXN0SGFuZGxlciBzeW5jX2hhbmRs ZXI7Ci0KLQkvKgotCSAqIERlY2lkZSB3aGV0aGVyIGEgcGFnZSBpcyAib2xkZXIiIGZvciB0cnVu Y2F0aW9uIGFuZCBhcyBhIGhpbnQgZm9yCi0JICogZXZpY3RpbmcgcGFnZXMgaW4gTFJVIG9yZGVy LiAgUmV0dXJuIHRydWUgaWYgZXZlcnkgZW50cnkgb2YgdGhlIGZpcnN0Ci0JICogYXJndW1lbnQg aXMgb2xkZXIgdGhhbiBldmVyeSBlbnRyeSBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50LiAgTm90ZSB0 aGF0Ci0JICogIVBhZ2VQcmVjZWRlcyhhLGIpICYmICFQYWdlUHJlY2VkZXMoYixhKSBuZWVkIG5v dCBpbXBseSBhPT1iOyBpdCBhbHNvCi0JICogYXJpc2VzIHdoZW4gc29tZSBlbnRyaWVzIGFyZSBv bGRlciBhbmQgc29tZSBhcmUgbm90LiAgRm9yIFNMUlVzIHVzaW5nCi0JICogU2ltcGxlTHJ1VHJ1 bmNhdGUoKSwgdGhpcyBtdXN0IHVzZSBtb2R1bGFyIGFyaXRobWV0aWMuICAoRm9yIG90aGVycywK LQkgKiB0aGUgYmVoYXZpb3Igb2YgdGhpcyBjYWxsYmFjayBoYXMgbm8gZnVuY3Rpb25hbCBpbXBs aWNhdGlvbnMuKSAgVXNlCi0JICogU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cygpIGluIFNMUlVz IG1lZXRpbmcgaXRzIGNyaXRlcmlhLgotCSAqLwotCWJvb2wJCSgqUGFnZVByZWNlZGVzKSAoaW50 LCBpbnQpOwotCi0JLyoKLQkgKiBEaXIgaXMgc2V0IGR1cmluZyBTaW1wbGVMcnVJbml0IGFuZCBk b2VzIG5vdCBjaGFuZ2UgdGhlcmVhZnRlci4gU2luY2UKLQkgKiBpdCdzIGFsd2F5cyB0aGUgc2Ft ZSwgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGluIHNoYXJlZCBtZW1vcnkuCi0JICovCi0JY2hhcgkJ RGlyWzY0XTsKLX0gU2xydUN0bERhdGE7Ci0KLXR5cGVkZWYgU2xydUN0bERhdGEgKlNscnVDdGw7 Ci0KLQotZXh0ZXJuIFNpemUgU2ltcGxlTHJ1U2htZW1TaXplKGludCBuc2xvdHMsIGludCBubHNu cyk7Ci1leHRlcm4gdm9pZCBTaW1wbGVMcnVJbml0KFNscnVDdGwgY3RsLCBjb25zdCBjaGFyICpu YW1lLCBpbnQgbnNsb3RzLCBpbnQgbmxzbnMsCi0JCQkJCQkgIExXTG9jayAqY3RsbG9jaywgY29u c3QgY2hhciAqc3ViZGlyLCBpbnQgdHJhbmNoZV9pZCwKLQkJCQkJCSAgU3luY1JlcXVlc3RIYW5k bGVyIHN5bmNfaGFuZGxlcik7Ci1leHRlcm4gaW50CVNpbXBsZUxydVplcm9QYWdlKFNscnVDdGwg Y3RsLCBpbnQgcGFnZW5vKTsKLWV4dGVybiBpbnQJU2ltcGxlTHJ1UmVhZFBhZ2UoU2xydUN0bCBj dGwsIGludCBwYWdlbm8sIGJvb2wgd3JpdGVfb2ssCi0JCQkJCQkJICBUcmFuc2FjdGlvbklkIHhp ZCk7Ci1leHRlcm4gaW50CVNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KFNscnVDdGwgY3RsLCBp bnQgcGFnZW5vLAotCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCB4aWQpOwotZXh0ZXJuIHZvaWQg U2ltcGxlTHJ1V3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKTsKLWV4dGVybiB2b2lk IFNpbXBsZUxydVdyaXRlQWxsKFNscnVDdGwgY3RsLCBib29sIGFsbG93X3JlZGlydGllZCk7CiAj aWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwotZXh0ZXJuIHZvaWQgU2xydVBhZ2VQcmVjZWRlc1Vu aXRUZXN0cyhTbHJ1Q3RsIGN0bCwgaW50IHBlcl9wYWdlKTsKK2V4dGVybiB2b2lkIFNscnVQYWdl UHJlY2VkZXNVbml0VGVzdHMoU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywK KwkJCQkJCQkJCSAgaW50IHBlcl9wYWdlKTsKICNlbHNlCiAjZGVmaW5lIFNscnVQYWdlUHJlY2Vk ZXNVbml0VGVzdHMoY3RsLCBwZXJfcGFnZSkgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKLWV4dGVy biB2b2lkIFNpbXBsZUxydVRydW5jYXRlKFNscnVDdGwgY3RsLCBpbnQgY3V0b2ZmUGFnZSk7Ci1l eHRlcm4gYm9vbCBTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3QoU2xydUN0bCBjdGwsIGlu dCBwYWdlbm8pOworZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1VHJ1bmNhdGUoaW50IHNscnVfaWQsIFNs cnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkJICBpbnQgY3V0b2Zm UGFnZSk7CitleHRlcm4gYm9vbCBTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3QoaW50IHNs cnVfaWQsIGludCBwYWdlbm8pOwogCi10eXBlZGVmIGJvb2wgKCpTbHJ1U2NhbkNhbGxiYWNrKSAo U2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwKK3R5cGVkZWYgYm9vbCAo KlNscnVTY2FuQ2FsbGJhY2spIChpbnQgc2xydV9pZCwKKwkJCQkJCQkJICBTbHJ1UGFnZVByZWNl ZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkJCQkgIGNoYXIgKmZpbGVuYW1lLCBpbnQg c2VncGFnZSwKIAkJCQkJCQkJICB2b2lkICpkYXRhKTsKLWV4dGVybiBib29sIFNscnVTY2FuRGly ZWN0b3J5KFNscnVDdGwgY3RsLCBTbHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRh KTsKLWV4dGVybiB2b2lkIFNscnVEZWxldGVTZWdtZW50KFNscnVDdGwgY3RsLCBpbnQgc2Vnbm8p OwotCi1leHRlcm4gaW50CVNscnVTeW5jRmlsZVRhZyhTbHJ1Q3RsIGN0bCwgY29uc3QgRmlsZVRh ZyAqZnRhZywgY2hhciAqcGF0aCk7CitleHRlcm4gYm9vbCBTbHJ1U2NhbkRpcmVjdG9yeShpbnQg c2xydV9pZCwgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQkg IFNscnVTY2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgU2xy dURlbGV0ZVNlZ21lbnQoaW50IHNscnVfaWQsIGludCBzZWdubyk7CiAKIC8qIFNscnVTY2FuRGly ZWN0b3J5IHB1YmxpYyBjYWxsYmFja3MgKi8KLWV4dGVybiBib29sIFNscnVTY2FuRGlyQ2JSZXBv cnRQcmVzZW5jZShTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsCitleHRlcm4gYm9vbCBTbHJ1 U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UoaW50IHNscnVfaWQsCisJCQkJCQkJCQkJU2xydVBhZ2VQ cmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQkJCQljaGFyICpmaWxlbmFtZSwK IAkJCQkJCQkJCQlpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSk7Ci1leHRlcm4gYm9vbCBTbHJ1U2Nh bkRpckNiRGVsZXRlQWxsKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2Us CitleHRlcm4gYm9vbCBTbHJ1U2NhbkRpckNiRGVsZXRlQWxsKGludCBzbHJ1X2lkLCBTbHJ1UGFn ZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkJCQkgICBjaGFyICpmaWxlbmFt ZSwgaW50IHNlZ3BhZ2UsCiAJCQkJCQkJCSAgIHZvaWQgKmRhdGEpOwogCisvKiBCdWZmZXIgYWNj ZXNzICovCitleHRlcm4gQnVmZmVyIFJlYWRTbHJ1QnVmZmVyKGludCBzbHJ1X2lkLCBpbnQgcGFn ZW5vLCBSZWFkQnVmZmVyTW9kZSBtb2RlKTsKK2V4dGVybiBCdWZmZXIgWmVyb1NscnVCdWZmZXIo aW50IHNscnVfaWQsIGludCBwYWdlbm8pOworZXh0ZXJuIGJvb2wgUHJvYmVTbHJ1QnVmZmVyKGlu dCBzbHJ1X2lkLCBpbnQgcGFnZW5vKTsKKworLyogSW50ZXJmYWNlcyB1c2UgYnkgc3RhdHMgdmll dyAqLworZXh0ZXJuIE9pZCBTbHJ1UmVsSWRCeU5hbWUoY29uc3QgY2hhciAqbmFtZSk7CitleHRl cm4gY29uc3QgY2hhciAqU2xydU5hbWUoaW50IHNscnVfaWQpOworCiAjZW5kaWYJCQkJCQkJLyog U0xSVV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWRlZnMuaCBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9zbHJ1ZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi40OWNkNzhkOTIzZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9zbHJ1ZGVmcy5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIHNscnVkZWZzLmgKKyAqCQltYWNyb3MgZm9yIGFjY2Vzc2luZyBjb250ZW50cyBvZiAic2xy dSIgcGFnZXMgCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyMS0yMDIyLCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1 ZGVmcy5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNkZWZpbmUgU0xSVV9QQUdF U19QRVJfU0VHTUVOVCAzMgorCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJfRU5UUllfU0laRSAy MCAKKworI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUX0VOVFJZX1NJWkUgOAorCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWxpc3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1 bGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMTI4OWExMzI2 YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1bGlzdC5oCkBAIC0w LDAgKzEsMzAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBzbHJ1bGlzdC5oCisgKgorICog VGhlIFNMUlUgbGlzdCBpcyBrZXB0IGluIGl0cyBvd24gc291cmNlIGZpbGUgZm9yIHBvc3NpYmxl CisgKiB1c2UgYnkgYXV0b21hdGljIHRvb2xzLiAgVGhlIGV4YWN0IHJlcHJlc2VudGF0aW9uIG9m IGEgcm1nciBpcyBkZXRlcm1pbmVkCisgKiBieSB0aGUgUEdfU0xSVSBtYWNybywgd2hpY2ggaXMg bm90IGRlZmluZWQgaW4gdGhpcyBmaWxlOyBpdCBjYW4gYmUKKyAqIGRlZmluZWQgYnkgdGhlIGNh bGxlciBmb3Igc3BlY2lhbCBwdXJwb3Nlcy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp Zm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvYWNjZXNzL3NscnVsaXN0LmgKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKworLyogdGhlcmUgaXMgZGVsaWJlcmF0ZWx5IG5vdCBhbiAjaWZuZGVm IFNMUlVMSVNUX0ggaGVyZSAqLworCisvKgorICogTGlzdCBvZiBTTFJVIGVudHJpZXMuICBOb3Rl IHRoYXQgb3JkZXIgb2YgZW50cmllcyBkZWZpbmVzIHRoZQorICogbnVtZXJpY2FsIHZhbHVlcyBv ZiBlYWNoIFNMUlUncyBJRCwgd2hpY2ggaXMgdXNlZCBpbiBpbi1tZW1vcnkgc3RydWN0dXMuCisg Ki8KKworLyogc3ltYm9sIG5hbWUsIHRleHR1YWwgbmFtZSwgcGF0aCwgc3luY2hyb25pemUgKi8K K1BHX1NMUlUoU0xSVV9DTE9HX0lELCAiWGFjdCIsICJwZ194YWN0IiwgdHJ1ZSkKK1BHX1NMUlUo U0xSVV9TVUJUUkFOU19JRCwgIlN1YnRyYW5zIiwgInBnX3N1YnRyYW5zIiwgZmFsc2UpCitQR19T TFJVKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgIk11bHRpWGFjdE9mZnNldCIsICJwZ19tdWx0 aXhhY3Qvb2Zmc2V0cyIsIHRydWUpCitQR19TTFJVKFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwg Ik11bHRpWGFjdE1lbWJlciIsICJwZ19tdWx0aXhhY3QvbWVtYmVycyIsIHRydWUpCitQR19TTFJV KFNMUlVfQ09NTUlUX1RTX0lELCAiQ29tbWl0VHMiLCAicGdfY29tbWl0X3RzIiwgdHJ1ZSkKK1BH X1NMUlUoU0xSVV9TRVJJQUxfSUQsICJTZXJpYWwiLCAicGdfc2VyaWFsIiwgZmFsc2UpCitQR19T TFJVKFNMUlVfTk9USUZZX0lELCAiTm90aWZ5IiwgInBnX25vdGlmeSIsIGZhbHNlKQpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3N1YnRyYW5zLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv c3VidHJhbnMuaAppbmRleCA0NmE0NzNjNzdmNS4uMTRlM2JmNzIwZmUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9zdWJ0cmFucy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zdWJ0 cmFucy5oCkBAIC0xOCwxMSArMTgsOCBAQCBleHRlcm4gdm9pZCBTdWJUcmFuc1NldFBhcmVudChU cmFuc2FjdGlvbklkIHhpZCwgVHJhbnNhY3Rpb25JZCBwYXJlbnQpOwogZXh0ZXJuIFRyYW5zYWN0 aW9uSWQgU3ViVHJhbnNHZXRQYXJlbnQoVHJhbnNhY3Rpb25JZCB4aWQpOwogZXh0ZXJuIFRyYW5z YWN0aW9uSWQgU3ViVHJhbnNHZXRUb3Btb3N0VHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25JZCB4aWQp OwogCi1leHRlcm4gU2l6ZSBTVUJUUkFOU1NobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFNV QlRSQU5TU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgQm9vdFN0cmFwU1VCVFJBTlModm9p ZCk7CiBleHRlcm4gdm9pZCBTdGFydHVwU1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBvbGRlc3RBY3Rp dmVYSUQpOwotZXh0ZXJuIHZvaWQgQ2hlY2tQb2ludFNVQlRSQU5TKHZvaWQpOwogZXh0ZXJuIHZv aWQgRXh0ZW5kU1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBuZXdlc3RYYWN0KTsKIGV4dGVybiB2b2lk IFRydW5jYXRlU1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0KTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9zdG9yYWdlLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3N0 b3JhZ2UuaAppbmRleCA0NWEzYzc4MzVjYi4uYzk2ZjQ0ODIyNWIgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvc3RvcmFnZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvc3RvcmFn ZS5oCkBAIC0yMiwxOSArMjIsMjAgQEAKIC8qIEdVQyB2YXJpYWJsZXMgKi8KIGV4dGVybiBQR0RM TElNUE9SVCBpbnQgd2FsX3NraXBfdGhyZXNob2xkOwogCi1leHRlcm4gU01nclJlbGF0aW9uIFJl bGF0aW9uQ3JlYXRlU3RvcmFnZShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwKLQkJCQkJCQkJCQkg IGNoYXIgcmVscGVyc2lzdGVuY2UsCi0JCQkJCQkJCQkJICBib29sIHJlZ2lzdGVyX2RlbGV0ZSk7 CitleHRlcm4gU01nckZpbGVIYW5kbGUgUmVsYXRpb25DcmVhdGVTdG9yYWdlKFJlbEZpbGVMb2Nh dG9yIHJsb2NhdG9yLAorCQkJCQkJCQkJCQljaGFyIHJlbHBlcnNpc3RlbmNlLAorCQkJCQkJCQkJ CQlib29sIHJlZ2lzdGVyX2RlbGV0ZSk7CiBleHRlcm4gdm9pZCBSZWxhdGlvbkRyb3BTdG9yYWdl KFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBSZWxhdGlvblByZXNlcnZlU3RvcmFnZShSZWxG aWxlTG9jYXRvciBybG9jYXRvciwgYm9vbCBhdENvbW1pdCk7CiBleHRlcm4gdm9pZCBSZWxhdGlv blByZVRydW5jYXRlKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBSZWxhdGlvblRydW5jYXRl KFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7Ci1leHRlcm4gdm9pZCBSZWxhdGlv bkNvcHlTdG9yYWdlKFNNZ3JSZWxhdGlvbiBzcmMsIFNNZ3JSZWxhdGlvbiBkc3QsCi0JCQkJCQkJ CUZvcmtOdW1iZXIgZm9ya051bSwgY2hhciByZWxwZXJzaXN0ZW5jZSk7CitleHRlcm4gdm9pZCBS ZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JGaWxlSGFuZGxlIHNyYywgU01nckZpbGVIYW5kbGUgZHN0 LAorCQkJCQkJCQljaGFyIHJlbHBlcnNpc3RlbmNlKTsKIGV4dGVybiBib29sIFJlbEZpbGVMb2Nh dG9yU2tpcHBpbmdXQUwoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IpOwogZXh0ZXJuIFNpemUgRXN0 aW1hdGVQZW5kaW5nU3luY3NTcGFjZSh2b2lkKTsKIGV4dGVybiB2b2lkIFNlcmlhbGl6ZVBlbmRp bmdTeW5jcyhTaXplIG1heFNpemUsIGNoYXIgKnN0YXJ0QWRkcmVzcyk7CiBleHRlcm4gdm9pZCBS ZXN0b3JlUGVuZGluZ1N5bmNzKGNoYXIgKnN0YXJ0QWRkcmVzcyk7CitleHRlcm4gdm9pZCBEcm9w UmVsYXRpb25GaWxlcyhSZWxGaWxlTG9jYXRvciAqZGVscmVscywgaW50IG5kZWxyZWxzLCBib29s IGlzUmVkbyk7CiAKIC8qCiAgKiBUaGVzZSBmdW5jdGlvbnMgdXNlZCB0byBiZSBpbiBzdG9yYWdl L3NtZ3Ivc21nci5jLCB3aGljaCBleHBsYWlucyB0aGUKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NvbW1vbi9yZWxwYXRoLmggYi9zcmMvaW5jbHVkZS9jb21tb24vcmVscGF0aC5oCmluZGV4IDUx MWMyMTY4MmVjLi43ZjEzMjg2NDU5MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbW9uL3Jl bHBhdGguaAorKysgYi9zcmMvaW5jbHVkZS9jb21tb24vcmVscGF0aC5oCkBAIC02Myw2ICs2Myw5 IEBAIHR5cGVkZWYgZW51bSBGb3JrTnVtYmVyCiAKICNkZWZpbmUgRk9SS05BTUVDSEFSUwk0CQkv KiBtYXggY2hhcnMgZm9yIGEgZm9yayBuYW1lICovCiAKKy8qIFBzZXVkbyB0YWJsZXNwYWNlIElE IHVzZWQgZm9yIFNMUlVzLiAqLworI2RlZmluZSBTTFJVX1NQQ19PSUQgOQorCiBleHRlcm4gUEdE TExJTVBPUlQgY29uc3QgY2hhciAqY29uc3QgZm9ya05hbWVzW107CiAKIGV4dGVybiBGb3JrTnVt YmVyIGZvcmtuYW1lX3RvX251bWJlcihjb25zdCBjaGFyICpmb3JrTmFtZSk7CkBAIC03MywyNSAr NzYsMjUgQEAgZXh0ZXJuIGludAlmb3JrbmFtZV9jaGFycyhjb25zdCBjaGFyICpzdHIsIEZvcmtO dW1iZXIgKmZvcmspOwogICovCiBleHRlcm4gY2hhciAqR2V0RGF0YWJhc2VQYXRoKE9pZCBkYk9p ZCwgT2lkIHNwY09pZCk7CiAKLWV4dGVybiBjaGFyICpHZXRSZWxhdGlvblBhdGgoT2lkIGRiT2lk LCBPaWQgc3BjT2lkLCBSZWxGaWxlTnVtYmVyIHJlbE51bWJlciwKK2V4dGVybiBjaGFyICpHZXRT TWdyRmlsZVBhdGgoT2lkIGRiT2lkLCBPaWQgc3BjT2lkLCBSZWxGaWxlTnVtYmVyIHJlbE51bWJl ciwKIAkJCQkJCQkgaW50IGJhY2tlbmRJZCwgRm9ya051bWJlciBmb3JrTnVtYmVyKTsKIAogLyoK ICAqIFdyYXBwZXIgbWFjcm9zIGZvciBHZXRSZWxhdGlvblBhdGguICBCZXdhcmUgb2YgbXVsdGlw bGUKLSAqIGV2YWx1YXRpb24gb2YgdGhlIFJlbEZpbGVMb2NhdG9yIG9yIFJlbEZpbGVMb2NhdG9y QmFja2VuZCBhcmd1bWVudCEKKyAqIGV2YWx1YXRpb24gb2YgdGhlIFJlbEZpbGVMb2NhdG9yIG9y IFNNZ3JGaWxlTG9jYXRvciBhcmd1bWVudCEKICAqLwogCiAvKiBGaXJzdCBhcmd1bWVudCBpcyBh IFJlbEZpbGVMb2NhdG9yICovCiAjZGVmaW5lIHJlbHBhdGhiYWNrZW5kKHJsb2NhdG9yLCBiYWNr ZW5kLCBmb3JrbnVtKSBcCi0JR2V0UmVsYXRpb25QYXRoKChybG9jYXRvcikuZGJPaWQsIChybG9j YXRvcikuc3BjT2lkLCAocmxvY2F0b3IpLnJlbE51bWJlciwgXAorCUdldFNNZ3JGaWxlUGF0aCgo cmxvY2F0b3IpLmRiT2lkLCAocmxvY2F0b3IpLnNwY09pZCwgKHJsb2NhdG9yKS5yZWxOdW1iZXIs IFwKIAkJCQkJYmFja2VuZCwgZm9ya251bSkKIAogLyogRmlyc3QgYXJndW1lbnQgaXMgYSBSZWxG aWxlTG9jYXRvciAqLwogI2RlZmluZSByZWxwYXRocGVybShybG9jYXRvciwgZm9ya251bSkgXAog CXJlbHBhdGhiYWNrZW5kKHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBmb3JrbnVtKQogCi0v KiBGaXJzdCBhcmd1bWVudCBpcyBhIFJlbEZpbGVMb2NhdG9yQmFja2VuZCAqLwotI2RlZmluZSBy ZWxwYXRoKHJsb2NhdG9yLCBmb3JrbnVtKSBcCi0JcmVscGF0aGJhY2tlbmQoKHJsb2NhdG9yKS5s b2NhdG9yLCAocmxvY2F0b3IpLmJhY2tlbmQsIGZvcmtudW0pCisvKiBGaXJzdCBhcmd1bWVudCBp cyBhIFNNZ3JGaWxlTG9jYXRvciAqLworI2RlZmluZSBzbWdyZmlsZXBhdGgoc2xvY2F0b3IpIFwK KwlHZXRTTWdyRmlsZVBhdGgoKHNsb2NhdG9yKS5sb2NhdG9yLmRiT2lkLCAoc2xvY2F0b3IpLmxv Y2F0b3Iuc3BjT2lkLCAoc2xvY2F0b3IpLmxvY2F0b3IucmVsTnVtYmVyLCAoc2xvY2F0b3IpLmJh Y2tlbmQsIChzbG9jYXRvcikuZm9ya251bSkKIAogI2VuZGlmCQkJCQkJCS8qIFJFTFBBVEhfSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmggYi9zcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaAppbmRleCBlZDhhYTI1MTljMC4uMmM4Y2Y4 NTYyMjQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCisr KyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCkBAIC0yODEsNiArMjgxLDEx IEBAIHR5cGVkZWYgdW5pb24gQnVmZmVyRGVzY1BhZGRlZAogCWNoYXIJCXBhZFtCVUZGRVJERVND X1BBRF9UT19TSVpFXTsKIH0gQnVmZmVyRGVzY1BhZGRlZDsKIAorI2RlZmluZSBCdWZmZXJHZXRF eHRlcm5hbExTTihidWZIZHIpIFwKKwlCdWZmZXJFeHRlcm5hbExTTnNbKGJ1ZkhkciktPmJ1Zl9p ZF0KKyNkZWZpbmUgQnVmZmVyU2V0RXh0ZXJuYWxMU04oYnVmSGRyLCBsc24pIFwKKwlCdWZmZXJF eHRlcm5hbExTTnNbKGJ1ZkhkciktPmJ1Zl9pZF0gPSAobHNuKQorCiAvKgogICogVGhlIFBlbmRp bmdXcml0ZWJhY2sgJiBXcml0ZWJhY2tDb250ZXh0IHN0cnVjdHVyZSBhcmUgdXNlZCB0byBrZWVw CiAgKiBpbmZvcm1hdGlvbiBhYm91dCBwZW5kaW5nIGZsdXNoIHJlcXVlc3RzIHRvIGJlIGlzc3Vl ZCB0byB0aGUgT1MuCkBAIC0zMDcsNiArMzEyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgV3JpdGViYWNr Q29udGV4dAogLyogaW4gYnVmX2luaXQuYyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIEJ1ZmZlckRl c2NQYWRkZWQgKkJ1ZmZlckRlc2NyaXB0b3JzOwogZXh0ZXJuIFBHRExMSU1QT1JUIENvbmRpdGlv blZhcmlhYmxlTWluaW1hbGx5UGFkZGVkICpCdWZmZXJJT0NWQXJyYXk7CitleHRlcm4gUEdETExJ TVBPUlQgWExvZ1JlY1B0ciAqQnVmZmVyRXh0ZXJuYWxMU05zOwogZXh0ZXJuIFBHRExMSU1QT1JU IFdyaXRlYmFja0NvbnRleHQgQmFja2VuZFdyaXRlYmFja0NvbnRleHQ7CiAKIC8qIGluIGxvY2Fs YnVmLmMgKi8KQEAgLTQxMywxMCArNDE5LDkgQEAgZXh0ZXJuIGludAlCdWZUYWJsZUluc2VydChC dWZmZXJUYWcgKnRhZ1B0ciwgdWludDMyIGhhc2hjb2RlLCBpbnQgYnVmX2lkKTsKIGV4dGVybiB2 b2lkIEJ1ZlRhYmxlRGVsZXRlKEJ1ZmZlclRhZyAqdGFnUHRyLCB1aW50MzIgaGFzaGNvZGUpOwog CiAvKiBsb2NhbGJ1Zi5jICovCi1leHRlcm4gUHJlZmV0Y2hCdWZmZXJSZXN1bHQgUHJlZmV0Y2hM b2NhbEJ1ZmZlcihTTWdyUmVsYXRpb24gc21nciwKLQkJCQkJCQkJCQkJCUZvcmtOdW1iZXIgZm9y a051bSwKK2V4dGVybiBQcmVmZXRjaEJ1ZmZlclJlc3VsdCBQcmVmZXRjaExvY2FsQnVmZmVyKFNN Z3JGaWxlSGFuZGxlIHNtZ3IsCiAJCQkJCQkJCQkJCQlCbG9ja051bWJlciBibG9ja051bSk7Ci1l eHRlcm4gQnVmZmVyRGVzYyAqTG9jYWxCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgRm9y a051bWJlciBmb3JrTnVtLAorZXh0ZXJuIEJ1ZmZlckRlc2MgKkxvY2FsQnVmZmVyQWxsb2MoU01n ckZpbGVIYW5kbGUgc21nciwKIAkJCQkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrTnVtLCBib29sICpm b3VuZFB0cik7CiBleHRlcm4gdm9pZCBNYXJrTG9jYWxCdWZmZXJEaXJ0eShCdWZmZXIgYnVmZmVy KTsKIGV4dGVybiB2b2lkIERyb3BSZWxhdGlvbkxvY2FsQnVmZmVycyhSZWxGaWxlTG9jYXRvciBy bG9jYXRvciwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggYi9zcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCmluZGV4IDMzZWFkYmMxMjkxLi5lNmFlZDE4ZjBmYyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAorKysgYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC00Miw4ICs0MiwxMSBAQCB0eXBlZGVmIGVudW0KIAlSQk1f WkVST19BTkRfQ0xFQU5VUF9MT0NLLAkvKiBMaWtlIFJCTV9aRVJPX0FORF9MT0NLLCBidXQgbG9j a3MgdGhlIHBhZ2UKIAkJCQkJCQkJICogaW4gImNsZWFudXAiIG1vZGUgKi8KIAlSQk1fWkVST19P Tl9FUlJPUiwJCQkvKiBSZWFkLCBidXQgcmV0dXJuIGFuIGFsbC16ZXJvcyBwYWdlIG9uIGVycm9y ICovCi0JUkJNX05PUk1BTF9OT19MT0cJCQkvKiBEb24ndCBsb2cgcGFnZSBhcyBpbnZhbGlkIGR1 cmluZyBXQUwKKwlSQk1fTk9STUFMX05PX0xPRywJCQkvKiBEb24ndCBsb2cgcGFnZSBhcyBpbnZh bGlkIGR1cmluZyBXQUwKIAkJCQkJCQkJICogcmVwbGF5OyBvdGhlcndpc2Ugc2FtZSBhcyBSQk1f Tk9STUFMICovCisKKwlSQk1fVFJJTQkJCQkvKlJlYWQgZm9yIFRSSU0gZnVuY3Rpb25zIGluIENM T0cgLyBNdWx0aVhhY3QuIAorCQkJCQkJICBEb24ndCB2YWxpZGF0ZSBjaGVja3N1bSAgb3IgemVy by4gKi8JCiB9IFJlYWRCdWZmZXJNb2RlOwogCiAvKgpAQCAtNTksNyArNjIsNyBAQCB0eXBlZGVm IHN0cnVjdCBQcmVmZXRjaEJ1ZmZlclJlc3VsdAogc3RydWN0IFdyaXRlYmFja0NvbnRleHQ7CiAK IC8qIGZvcndhcmQgZGVjbGFyZWQsIHRvIGF2b2lkIGluY2x1ZGluZyBzbWdyLmggaGVyZSAqLwot c3RydWN0IFNNZ3JSZWxhdGlvbkRhdGE7CitzdHJ1Y3QgU01nckZpbGVEYXRhOwogCiAvKiBpbiBn bG9iYWxzLmMgLi4uIHRoaXMgZHVwbGljYXRlcyBtaXNjYWRtaW4uaCAqLwogZXh0ZXJuIFBHRExM SU1QT1JUIGludCBOQnVmZmVyczsKQEAgLTExMCw4ICsxMTMsNyBAQCBleHRlcm4gUEdETExJTVBP UlQgaW50MzIgKkxvY2FsUmVmQ291bnQ7CiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25z IGluIGJ1Zm1nci5jCiAgKi8KLWV4dGVybiBQcmVmZXRjaEJ1ZmZlclJlc3VsdCBQcmVmZXRjaFNo YXJlZEJ1ZmZlcihzdHJ1Y3QgU01nclJlbGF0aW9uRGF0YSAqc21ncl9yZWxuLAotCQkJCQkJCQkJ CQkJIEZvcmtOdW1iZXIgZm9ya051bSwKK2V4dGVybiBQcmVmZXRjaEJ1ZmZlclJlc3VsdCBQcmVm ZXRjaFNoYXJlZEJ1ZmZlcihzdHJ1Y3QgU01nckZpbGVEYXRhICpzbWdyX2ZpbGUsCiAJCQkJCQkJ CQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tOdW0pOwogZXh0ZXJuIFByZWZldGNoQnVmZmVyUmVzdWx0 IFByZWZldGNoQnVmZmVyKFJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCQkJ CQkJCQkgICBCbG9ja051bWJlciBibG9ja051bSk7CkBAIC0xMjUsMTMgKzEyNywxOSBAQCBleHRl cm4gQnVmZmVyIFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUoUmVsRmlsZUxvY2F0b3IgcmxvY2F0 b3IsCiAJCQkJCQkJCQkJRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwK IAkJCQkJCQkJCQlSZWFkQnVmZmVyTW9kZSBtb2RlLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJh dGVneSwKIAkJCQkJCQkJCQlib29sIHBlcm1hbmVudCk7CitleHRlcm4gQnVmZmVyIFJlYWRCdWZm ZXJXaXRob3V0UmVsY2FjaGVXaXRoSGl0KFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLAorCQkJCQkJ CQkJCUZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCisJCQkJCQkJCQkJ UmVhZEJ1ZmZlck1vZGUgbW9kZSwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJ CQkJCQkJCSAgIGJvb2wgcGVybWFuZW50LCBib29sICpoaXQpOwogZXh0ZXJuIHZvaWQgUmVsZWFz ZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKIGV4dGVybiB2b2lkIFVubG9ja1JlbGVhc2VCdWZmZXIo QnVmZmVyIGJ1ZmZlcik7CiBleHRlcm4gdm9pZCBNYXJrQnVmZmVyRGlydHkoQnVmZmVyIGJ1ZmZl cik7CiBleHRlcm4gdm9pZCBJbmNyQnVmZmVyUmVmQ291bnQoQnVmZmVyIGJ1ZmZlcik7CiBleHRl cm4gQnVmZmVyIFJlbGVhc2VBbmRSZWFkQnVmZmVyKEJ1ZmZlciBidWZmZXIsIFJlbGF0aW9uIHJl bGF0aW9uLAogCQkJCQkJCQkgICBCbG9ja051bWJlciBibG9ja051bSk7Ci0KK2V4dGVybiBib29s IEJ1ZmZlclByb2JlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtOdW0s CisJCQkJCQlCbG9ja051bWJlciBibG9ja051bSk7CisgCiBleHRlcm4gdm9pZCBJbml0QnVmZmVy UG9vbEFjY2Vzcyh2b2lkKTsKIGV4dGVybiB2b2lkIEF0RU9YYWN0X0J1ZmZlcnMoYm9vbCBpc0Nv bW1pdCk7CiBleHRlcm4gdm9pZCBQcmludEJ1ZmZlckxlYWtXYXJuaW5nKEJ1ZmZlciBidWZmZXIp OwpAQCAtMTM5LDE4ICsxNDcsMjYgQEAgZXh0ZXJuIHZvaWQgQ2hlY2tQb2ludEJ1ZmZlcnMoaW50 IGZsYWdzKTsKIGV4dGVybiBCbG9ja051bWJlciBCdWZmZXJHZXRCbG9ja051bWJlcihCdWZmZXIg YnVmZmVyKTsKIGV4dGVybiBCbG9ja051bWJlciBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzSW5G b3JrKFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkJCQkJICAgRm9ya051bWJlciBmb3JrTnVt KTsKLWV4dGVybiB2b2lkIEZsdXNoT25lQnVmZmVyKEJ1ZmZlciBidWZmZXIpOwotZXh0ZXJuIHZv aWQgRmx1c2hSZWxhdGlvbkJ1ZmZlcnMoUmVsYXRpb24gcmVsKTsKLWV4dGVybiB2b2lkIEZsdXNo UmVsYXRpb25zQWxsQnVmZmVycyhzdHJ1Y3QgU01nclJlbGF0aW9uRGF0YSAqKnNtZ3JzLCBpbnQg bnJlbHMpOwogZXh0ZXJuIHZvaWQgQ3JlYXRlQW5kQ29weVJlbGF0aW9uRGF0YShSZWxGaWxlTG9j YXRvciBzcmNfcmxvY2F0b3IsCiAJCQkJCQkJCQkgIFJlbEZpbGVMb2NhdG9yIGRzdF9ybG9jYXRv ciwKIAkJCQkJCQkJCSAgYm9vbCBwZXJtYW5lbnQpOworCitleHRlcm4gdm9pZCBGbHVzaE9uZUJ1 ZmZlcihCdWZmZXIgYnVmZmVyKTsKK2V4dGVybiB2b2lkIEZsdXNoUmVsYXRpb25CdWZmZXJzKFJl bGF0aW9uIHJlbCk7CitleHRlcm4gdm9pZCBGbHVzaFJlbGF0aW9uc0FsbEJ1ZmZlcnMoUmVsRmls ZUxvY2F0b3IgKmxvY2F0b3JzLCBpbnQgbmxvY2F0b3JzKTsKIGV4dGVybiB2b2lkIEZsdXNoRGF0 YWJhc2VCdWZmZXJzKE9pZCBkYmlkKTsKLWV4dGVybiB2b2lkIERyb3BSZWxhdGlvbkJ1ZmZlcnMo c3RydWN0IFNNZ3JSZWxhdGlvbkRhdGEgKnNtZ3JfcmVsbiwKKworZXh0ZXJuIHZvaWQgRHJvcFJl bGF0aW9uQnVmZmVycyhSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQs CiAJCQkJCQkJCUZvcmtOdW1iZXIgKmZvcmtOdW0sCiAJCQkJCQkJCWludCBuZm9ya3MsIEJsb2Nr TnVtYmVyICpmaXJzdERlbEJsb2NrKTsKLWV4dGVybiB2b2lkIERyb3BSZWxhdGlvbnNBbGxCdWZm ZXJzKHN0cnVjdCBTTWdyUmVsYXRpb25EYXRhICoqc21ncl9yZWxuLAotCQkJCQkJCQkJaW50IG5s b2NhdG9ycyk7CisKK3R5cGVkZWYgc3RydWN0IFJlbEZpbGVMb2NhdG9yQmFja2VuZAoreworCVJl bEZpbGVMb2NhdG9yIGxvY2F0b3I7CisJQmFja2VuZElkCWJhY2tlbmQ7Cit9IFJlbEZpbGVMb2Nh dG9yQmFja2VuZDsKKworZXh0ZXJuIHZvaWQgRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMoUmVsRmls ZUxvY2F0b3JCYWNrZW5kICpsb2NhdG9ycywgaW50IG5sb2NhdG9ycyk7CiBleHRlcm4gdm9pZCBE cm9wRGF0YWJhc2VCdWZmZXJzKE9pZCBkYmlkKTsKIAogI2RlZmluZSBSZWxhdGlvbkdldE51bWJl ck9mQmxvY2tzKHJlbG4pIFwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmcGFn ZS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdlLmgKaW5kZXggNDI0ZWNiYTAyOGYuLmM5 NDRlM2RjOTI4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1ZnBhZ2UuaAorKysg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1ZnBhZ2UuaApAQCAtMjAxLDYgKzIwMSw3IEBAIHR5cGVk ZWYgUGFnZUhlYWRlckRhdGEgKlBhZ2VIZWFkZXI7CiAgKiBoYW5kbGluZyBwYWdlcy4KICAqLwog I2RlZmluZSBQR19QQUdFX0xBWU9VVF9WRVJTSU9OCQk0CisjZGVmaW5lIFBHX01FVEFQQUdFX0xB WU9VVF9WRVJTSU9OICAxCiAjZGVmaW5lIFBHX0RBVEFfQ0hFQ0tTVU1fVkVSU0lPTgkxCiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KQEAgLTMwMiw2ICszMDMsMjAgQEAgUGFnZVNldFBhZ2VTaXplQW5kVmVyc2lvbihQ YWdlIHBhZ2UsIFNpemUgc2l6ZSwgdWludDggdmVyc2lvbikKIAkoKFBhZ2VIZWFkZXIpIHBhZ2Up LT5wZF9wYWdlc2l6ZV92ZXJzaW9uID0gc2l6ZSB8IHZlcnNpb247CiB9CiAKKy8qCisgKiBQYWdl U2V0SGVhZGVyRGF0YU1pbmltYWwgCisgKiBTZXRzIHRoZSBMU04sIHBhZ2Ugc2l6ZSBhbmQgdmVy c2lvbiwgYW5kIGNoZWNrc3VtCisgKi8KKyNkZWZpbmUgUGFnZVNldEhlYWRlckRhdGFOb25SZWwo cGFnZSwgcGFnZW5vLCBsc24sIHNpemUsIHZlcnNpb24pIFwKKyggXAorCVBhZ2VTZXRMU04ocGFn ZSwgbHNuKSwgXAorCVBhZ2VTZXRQYWdlU2l6ZUFuZFZlcnNpb24ocGFnZSwgc2l6ZSwgdmVyc2lv biksIFwKKwlQYWdlQ2xlYXJIYXNGcmVlTGluZVBvaW50ZXJzKHBhZ2UpLCBcCisJUGFnZVNldENo ZWNrc3VtSW5wbGFjZShwYWdlLCBwYWdlbm8pIFwKKykKKworCisKIC8qIC0tLS0tLS0tLS0tLS0t LS0KICAqCQlwYWdlIHNwZWNpYWwgZGF0YSBmdW5jdGlvbnMKICAqIC0tLS0tLS0tLS0tLS0tLS0K QEAgLTQ4Niw2ICs1MDEsOCBAQCBTdGF0aWNBc3NlcnREZWNsKEJMQ0tTWiA9PSAoKEJMQ0tTWiAv IHNpemVvZihzaXplX3QpKSAqIHNpemVvZihzaXplX3QpKSwKIAkJCQkgIkJMQ0tTWiBoYXMgdG8g YmUgYSBtdWx0aXBsZSBvZiBzaXplb2Yoc2l6ZV90KSIpOwogCiBleHRlcm4gdm9pZCBQYWdlSW5p dChQYWdlIHBhZ2UsIFNpemUgcGFnZVNpemUsIFNpemUgc3BlY2lhbFNpemUpOworZXh0ZXJuIHZv aWQgUGFnZUluaXRTTFJVKFBhZ2UgcGFnZSwgU2l6ZSBwYWdlU2l6ZSwgU2l6ZSBzcGVjaWFsU2l6 ZSk7CisKIGV4dGVybiBib29sIFBhZ2VJc1ZlcmlmaWVkRXh0ZW5kZWQoUGFnZSBwYWdlLCBCbG9j a051bWJlciBibGtubywgaW50IGZsYWdzKTsKIGV4dGVybiBPZmZzZXROdW1iZXIgUGFnZUFkZEl0 ZW1FeHRlbmRlZChQYWdlIHBhZ2UsIEl0ZW0gaXRlbSwgU2l6ZSBzaXplLAogCQkJCQkJCQkJCU9m ZnNldE51bWJlciBvZmZzZXROdW1iZXIsIGludCBmbGFncyk7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9zdG9yYWdlL21kLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL21kLmgKaW5kZXggYmNhZGE5 ZmYyMjEuLmEwNTI5NDU2ODVjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL21kLmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oCkBAIC0yMSwyOCArMjEsMjYgQEAKIAogLyog bWQgc3RvcmFnZSBtYW5hZ2VyIGZ1bmN0aW9uYWxpdHkgKi8KIGV4dGVybiB2b2lkIG1kaW5pdCh2 b2lkKTsKLWV4dGVybiB2b2lkIG1kb3BlbihTTWdyUmVsYXRpb24gcmVsbik7Ci1leHRlcm4gdm9p ZCBtZGNsb3NlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwotZXh0ZXJu IHZvaWQgbWRjcmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9v bCBpc1JlZG8pOwotZXh0ZXJuIGJvb2wgbWRleGlzdHMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSk7Ci1leHRlcm4gdm9pZCBtZHVubGluayhSZWxGaWxlTG9jYXRvckJhY2tl bmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pOwotZXh0ZXJuIHZv aWQgbWRleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK2V4dGVy biB2b2lkIG1kb3BlbihTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBtZGNsb3Nl KFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKK2V4dGVybiB2b2lkIG1kY3JlYXRlKFNNZ3JGaWxlSGFu ZGxlIHNmaWxlLCBib29sIGlzUmVkbyk7CitleHRlcm4gYm9vbCBtZGV4aXN0cyhTTWdyRmlsZUhh bmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBtZHVubGluayhTTWdyRmlsZUxvY2F0b3Igc2xvY2F0 b3IsIGJvb2wgaXNSZWRvKTsKK2V4dGVybiB2b2lkIG1kZXh0ZW5kKFNNZ3JGaWxlSGFuZGxlIHNm aWxlLAogCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNoYXIgKmJ1ZmZlciwgYm9vbCBza2lw RnN5bmMpOwotZXh0ZXJuIGJvb2wgbWRwcmVmZXRjaChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLAorZXh0ZXJuIGJvb2wgbWRwcmVmZXRjaChTTWdyRmlsZUhhbmRsZSBzZmls ZSwKIAkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tudW0pOwotZXh0ZXJuIHZvaWQgbWRyZWFkKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVt LAorZXh0ZXJuIHZvaWQgbWRyZWFkKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBi bG9ja251bSwKIAkJCQkgICBjaGFyICpidWZmZXIpOwotZXh0ZXJuIHZvaWQgbWR3cml0ZShTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorZXh0ZXJuIHZvaWQgbWR3cml0ZShT TWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNoYXIgKmJ1 ZmZlciwgYm9vbCBza2lwRnN5bmMpOwotZXh0ZXJuIHZvaWQgbWR3cml0ZWJhY2soU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK2V4dGVybiB2b2lkIG1kd3JpdGViYWNrKFNN Z3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIEJsb2NrTnVt YmVyIG5ibG9ja3MpOwotZXh0ZXJuIEJsb2NrTnVtYmVyIG1kbmJsb2NrcyhTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKLWV4dGVybiB2b2lkIG1kdHJ1bmNhdGUoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJICAgQmxvY2tOdW1iZXIgbmJs b2Nrcyk7Ci1leHRlcm4gdm9pZCBtZGltbWVkc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtKTsKK2V4dGVybiBCbG9ja051bWJlciBtZG5ibG9ja3MoU01nckZpbGVIYW5k bGUgc2ZpbGUpOworZXh0ZXJuIHZvaWQgbWR0cnVuY2F0ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwg QmxvY2tOdW1iZXIgbmJsb2Nrcyk7CitleHRlcm4gdm9pZCBtZGltbWVkc3luYyhTTWdyRmlsZUhh bmRsZSBzZmlsZSk7CiAKIGV4dGVybiB2b2lkIEZvcmdldERhdGFiYXNlU3luY1JlcXVlc3RzKE9p ZCBkYmlkKTsKLWV4dGVybiB2b2lkIERyb3BSZWxhdGlvbkZpbGVzKFJlbEZpbGVMb2NhdG9yICpk ZWxyZWxzLCBpbnQgbmRlbHJlbHMsIGJvb2wgaXNSZWRvKTsKIAogLyogbWQgc3luYyBjYWxsYmFj a3MgKi8KIGV4dGVybiBpbnQJbWRzeW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFy ICpwYXRoKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcmVsZmlsZWxvY2F0b3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaAppbmRleCA2MWNmMDE2OWJk Ny4uZTJjMjJiOGU2ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcmVsZmlsZWxv Y2F0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3JlbGZpbGVsb2NhdG9yLmgKQEAgLTUz LDYgKzUzLDggQEAKICAqIE5vdGU6IHZhcmlvdXMgcGxhY2VzIHVzZSBSZWxGaWxlTG9jYXRvciBp biBoYXNodGFibGUga2V5cy4gIFRoZXJlZm9yZSwKICAqIHRoZXJlICptdXN0IG5vdCogYmUgYW55 IHVudXNlZCBwYWRkaW5nIGJ5dGVzIGluIHRoaXMgc3RydWN0LiAgVGhhdAogICogc2hvdWxkIGJl IHNhZmUgYXMgbG9uZyBhcyBhbGwgdGhlIGZpZWxkcyBhcmUgb2YgdHlwZSBPaWQuCisgKgorICog U2VlIGFsc28gU01nckZpbGVMb2NhdG9yIGluIHNtZ3IuaC4KICAqLwogdHlwZWRlZiBzdHJ1Y3Qg UmVsRmlsZUxvY2F0b3IKIHsKQEAgLTYyLDM4ICs2NCwxNSBAQCB0eXBlZGVmIHN0cnVjdCBSZWxG aWxlTG9jYXRvcgogfSBSZWxGaWxlTG9jYXRvcjsKIAogLyoKLSAqIEF1Z21lbnRpbmcgYSByZWxm aWxlbG9jYXRvciB3aXRoIHRoZSBiYWNrZW5kIElEIHByb3ZpZGVzIGFsbCB0aGUgaW5mb3JtYXRp b24KLSAqIHdlIG5lZWQgdG8gbG9jYXRlIHRoZSBwaHlzaWNhbCBzdG9yYWdlLiAgVGhlIGJhY2tl bmQgSUQgaXMgSW52YWxpZEJhY2tlbmRJZAotICogZm9yIHJlZ3VsYXIgcmVsYXRpb25zICh0aG9z ZSBhY2Nlc3NpYmxlIHRvIG1vcmUgdGhhbiBvbmUgYmFja2VuZCksIG9yIHRoZQotICogb3duaW5n IGJhY2tlbmQncyBJRCBmb3IgYmFja2VuZC1sb2NhbCByZWxhdGlvbnMuICBCYWNrZW5kLWxvY2Fs IHJlbGF0aW9ucwotICogYXJlIGFsd2F5cyB0cmFuc2llbnQgYW5kIHJlbW92ZWQgaW4gY2FzZSBv ZiBhIGRhdGFiYXNlIGNyYXNoOyB0aGV5IGFyZQotICogbmV2ZXIgV0FMLWxvZ2dlZCBvciBmc3lu YydkLgotICovCi10eXBlZGVmIHN0cnVjdCBSZWxGaWxlTG9jYXRvckJhY2tlbmQKLXsKLQlSZWxG aWxlTG9jYXRvciBsb2NhdG9yOwotCUJhY2tlbmRJZAliYWNrZW5kOwotfSBSZWxGaWxlTG9jYXRv ckJhY2tlbmQ7Ci0KLSNkZWZpbmUgUmVsRmlsZUxvY2F0b3JCYWNrZW5kSXNUZW1wKHJsb2NhdG9y KSBcCi0JKChybG9jYXRvcikuYmFja2VuZCAhPSBJbnZhbGlkQmFja2VuZElkKQotCi0vKgotICog Tm90ZTogUmVsRmlsZUxvY2F0b3JFcXVhbHMgYW5kIFJlbEZpbGVMb2NhdG9yQmFja2VuZEVxdWFs cyBjb21wYXJlIHJlbE51bWJlcgorICogTm90ZTogUmVsRmlsZUxvY2F0b3JFcXVhbHMgY29tcGFy ZXMgcmVsTnVtYmVyCiAgKiBmaXJzdCBzaW5jZSB0aGF0IGlzIG1vc3QgbGlrZWx5IHRvIGJlIGRp ZmZlcmVudCBpbiB0d28gdW5lcXVhbAogICogUmVsRmlsZUxvY2F0b3JzLiAgSXQgaXMgcHJvYmFi bHkgcmVkdW5kYW50IHRvIGNvbXBhcmUgc3BjT2lkIGlmIHRoZSBvdGhlcgogICogZmllbGRzIGFy ZSBmb3VuZCBlcXVhbCwgYnV0IGRvIGl0IGFueXdheSB0byBiZSBzdXJlLiAgTGlrZXdpc2UgZm9y IGNoZWNraW5nCi0gKiB0aGUgYmFja2VuZCBJRCBpbiBSZWxGaWxlTG9jYXRvckJhY2tlbmRFcXVh bHMuCisgKiB0aGUgYmFja2VuZCBJRCBpbiBTTWdyRmlsZUxvY2F0b3JCYWNrZW5kRXF1YWxzLgog ICovCiAjZGVmaW5lIFJlbEZpbGVMb2NhdG9yRXF1YWxzKGxvY2F0b3IxLCBsb2NhdG9yMikgXAog CSgobG9jYXRvcjEpLnJlbE51bWJlciA9PSAobG9jYXRvcjIpLnJlbE51bWJlciAmJiBcCiAJIChs b2NhdG9yMSkuZGJPaWQgPT0gKGxvY2F0b3IyKS5kYk9pZCAmJiBcCiAJIChsb2NhdG9yMSkuc3Bj T2lkID09IChsb2NhdG9yMikuc3BjT2lkKQogCi0jZGVmaW5lIFJlbEZpbGVMb2NhdG9yQmFja2Vu ZEVxdWFscyhsb2NhdG9yMSwgbG9jYXRvcjIpIFwKLQkoKGxvY2F0b3IxKS5sb2NhdG9yLnJlbE51 bWJlciA9PSAobG9jYXRvcjIpLmxvY2F0b3IucmVsTnVtYmVyICYmIFwKLQkgKGxvY2F0b3IxKS5s b2NhdG9yLmRiT2lkID09IChsb2NhdG9yMikubG9jYXRvci5kYk9pZCAmJiBcCi0JIChsb2NhdG9y MSkuYmFja2VuZCA9PSAobG9jYXRvcjIpLmJhY2tlbmQgJiYgXAotCSAobG9jYXRvcjEpLmxvY2F0 b3Iuc3BjT2lkID09IChsb2NhdG9yMikubG9jYXRvci5zcGNPaWQpCi0KICNlbmRpZgkJCQkJCQkv KiBSRUxGSUxFTE9DQVRPUl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Nt Z3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oCmluZGV4IDU2MjMzYzRkMjE2Li44M2M0 YTc1NmNlNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zbWdyLmgKKysrIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9zbWdyLmgKQEAgLTE4LDMxICsxOCw1NiBAQAogI2luY2x1ZGUgInN0 b3JhZ2UvYmxvY2suaCIKICNpbmNsdWRlICJzdG9yYWdlL3JlbGZpbGVsb2NhdG9yLmgiCiAKKwog LyoKLSAqIHNtZ3IuYyBtYWludGFpbnMgYSB0YWJsZSBvZiBTTWdyUmVsYXRpb24gb2JqZWN0cywg d2hpY2ggYXJlIGVzc2VudGlhbGx5Ci0gKiBjYWNoZWQgZmlsZSBoYW5kbGVzLiAgQW4gU01nclJl bGF0aW9uIGlzIGNyZWF0ZWQgKGlmIG5vdCBhbHJlYWR5IHByZXNlbnQpCisgKiBTTWdyRmlsZUxv Y2F0b3IgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gbG9jYXRlIHRoZSBw aHlzaWNhbAorICogc3RvcmFnZSBvZiBhIHJlbGF0aW9uIGZvcmssIG9yIHNvbWUgb3RoZXIgZmls ZSB0aGF0IGlzIG1hbmFnZWQgYnkgdGhlIGJ1ZmZlcgorICogbWFuYWdlci4KKyAqCisgKiBUaGUg YmFja2VuZCBJRCBpcyBJbnZhbGlkQmFja2VuZElkIGZvciByZWd1bGFyIHJlbGF0aW9ucyAodGhv c2UgYWNjZXNzaWJsZQorICogdG8gbW9yZSB0aGFuIG9uZSBiYWNrZW5kKSwgb3IgdGhlIG93bmlu ZyBiYWNrZW5kJ3MgSUQgZm9yIGJhY2tlbmQtbG9jYWwKKyAqIHJlbGF0aW9ucy4gQmFja2VuZC1s b2NhbCByZWxhdGlvbnMgYXJlIGFsd2F5cyB0cmFuc2llbnQgYW5kIHJlbW92ZWQgaW4KKyAqIGNh c2Ugb2YgYSBkYXRhYmFzZSBjcmFzaDsgdGhleSBhcmUgbmV2ZXIgV0FMLWxvZ2dlZCBvciBmc3lu YydkLgorICovCit0eXBlZGVmIHN0cnVjdCBTTWdyRmlsZUxvY2F0b3IKK3sKKwlSZWxGaWxlTG9j YXRvciBsb2NhdG9yOworCUJhY2tlbmRJZAliYWNrZW5kOworCUZvcmtOdW1iZXIJZm9ya251bTsK K30gU01nckZpbGVMb2NhdG9yOworCisjZGVmaW5lIFNNZ3JGaWxlTG9jYXRvcklzVGVtcChzbG9j YXRvcikgXAorCSgoc2xvY2F0b3IpLmJhY2tlbmQgIT0gSW52YWxpZEJhY2tlbmRJZCkKKworLyoK KyAqIHNtZ3IuYyBtYWludGFpbnMgYSB0YWJsZSBvZiBTTWdyRmlsZURhdGEgb2JqZWN0cywgd2hp Y2ggYXJlIGVzc2VudGlhbGx5CisgKiBjYWNoZWQgZmlsZSBoYW5kbGVzLiAgQW4gU01nckZpbGUg aXMgY3JlYXRlZCAoaWYgbm90IGFscmVhZHkgcHJlc2VudCkKICAqIGJ5IHNtZ3JvcGVuKCksIGFu ZCBkZXN0cm95ZWQgYnkgc21ncmNsb3NlKCkuICBOb3RlIHRoYXQgbmVpdGhlciBvZiB0aGVzZQog ICogb3BlcmF0aW9ucyBpbXBseSBJL08sIHRoZXkganVzdCBjcmVhdGUgb3IgZGVzdHJveSBhIGhh c2h0YWJsZSBlbnRyeS4KICAqIChCdXQgc21ncmNsb3NlKCkgbWF5IHJlbGVhc2UgYXNzb2NpYXRl ZCByZXNvdXJjZXMsIHN1Y2ggYXMgT1MtbGV2ZWwgZmlsZQogICogZGVzY3JpcHRvcnMuKQogICoK LSAqIEFuIFNNZ3JSZWxhdGlvbiBtYXkgaGF2ZSBhbiAib3duZXIiLCB3aGljaCBpcyBqdXN0IGEg cG9pbnRlciB0byBpdCBmcm9tCi0gKiBzb21ld2hlcmUgZWxzZTsgc21nci5jIHdpbGwgY2xlYXIg dGhpcyBwb2ludGVyIGlmIHRoZSBTTWdyUmVsYXRpb24gaXMKKyAqIEFuIFNNZ3JGaWxlIG1heSBo YXZlIGFuICJvd25lciIsIHdoaWNoIGlzIGp1c3QgYSBwb2ludGVyIHRvIGl0IGZyb20KKyAqIHNv bWV3aGVyZSBlbHNlOyBzbWdyLmMgd2lsbCBjbGVhciB0aGlzIHBvaW50ZXIgaWYgdGhlIFNNZ3JG aWxlIGlzCiAgKiBjbG9zZWQuICBXZSB1c2UgdGhpcyB0byBhdm9pZCBkYW5nbGluZyBwb2ludGVy cyBmcm9tIHJlbGNhY2hlIHRvIHNtZ3IKICAqIHdpdGhvdXQgaGF2aW5nIHRvIG1ha2UgdGhlIHNt Z3IgZXhwbGljaXRseSBhd2FyZSBvZiByZWxjYWNoZS4gIFRoZXJlCiAgKiBjYW4ndCBiZSBtb3Jl IHRoYW4gb25lICJvd25lciIgcG9pbnRlciBwZXIgU01nclJlbGF0aW9uLCBidXQgdGhhdCdzCiAg KiBhbGwgd2UgbmVlZC4KICAqCi0gKiBTTWdyUmVsYXRpb25zIHRoYXQgZG8gbm90IGhhdmUgYW4g Im93bmVyIiBhcmUgY29uc2lkZXJlZCB0byBiZSB0cmFuc2llbnQsCisgKiBTTWdyRmlsZXMgdGhh dCBkbyBub3QgaGF2ZSBhbiAib3duZXIiIGFyZSBjb25zaWRlcmVkIHRvIGJlIHRyYW5zaWVudCwK ICAqIGFuZCBhcmUgZGVsZXRlZCBhdCBlbmQgb2YgdHJhbnNhY3Rpb24uCisgKgorICogQSBmaWxl IHRoYXQgaXMgcmVwcmVzZW50ZWQgYnkgYW4gU01nckZpbGUgY2FuIGJlIG1hbmFnZWQgYnkgdGhl IGJ1ZmZlcgorICogbWFuYWdlci4gQ3VycmVudGx5LCBpdCdzIG9ubHkgdXNlZCBmb3IgcmVsYXRp b24gZmlsZXMsIGJ1dCBjb3VsZCBiZSB1c2VkCisgKiBmb3IgU0xSVXMgYW5kIG90aGVyIHRoaW5n cyBpbiB0aGUgZnV0dXJlLgogICovCi10eXBlZGVmIHN0cnVjdCBTTWdyUmVsYXRpb25EYXRhCit0 eXBlZGVmIHN0cnVjdCBTTWdyRmlsZURhdGEKIHsKLQkvKiBybG9jYXRvciBpcyB0aGUgaGFzaHRh YmxlIGxvb2t1cCBrZXksIHNvIGl0IG11c3QgYmUgZmlyc3QhICovCi0JUmVsRmlsZUxvY2F0b3JC YWNrZW5kIHNtZ3JfcmxvY2F0b3I7CS8qIHJlbGF0aW9uIHBoeXNpY2FsIGlkZW50aWZpZXIgKi8K KwkvKiBsb2NhdG9yIGlzIHRoZSBoYXNodGFibGUgbG9va3VwIGtleSwgc28gbXVzdCBiZSBmaXJz dCEgKi8KKwlTTWdyRmlsZUxvY2F0b3Igc21ncl9sb2NhdG9yOwkvKiBmaWxlIHBoeXNpY2FsIGlk ZW50aWZpZXIgKi8KIAogCS8qIHBvaW50ZXIgdG8gb3duaW5nIHBvaW50ZXIsIG9yIE5VTEwgaWYg bm9uZSAqLwotCXN0cnVjdCBTTWdyUmVsYXRpb25EYXRhICoqc21ncl9vd25lcjsKKwlzdHJ1Y3Qg U01nckZpbGVEYXRhICoqc21ncl9vd25lcjsKIAogCS8qCiAJICogVGhlIGZvbGxvd2luZyBmaWVs ZHMgYXJlIHJlc2V0IHRvIEludmFsaWRCbG9ja051bWJlciB1cG9uIGEgY2FjaGUgZmx1c2gKQEAg LTUxLDcgKzc2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU01nclJlbGF0aW9uRGF0YQogCSAqIGludmFs aWRhdGlvbiBmb3IgZm9yayBleHRlbnNpb24uCiAJICovCiAJQmxvY2tOdW1iZXIgc21ncl90YXJn YmxvY2s7IC8qIGN1cnJlbnQgaW5zZXJ0aW9uIHRhcmdldCBibG9jayAqLwotCUJsb2NrTnVtYmVy IHNtZ3JfY2FjaGVkX25ibG9ja3NbTUFYX0ZPUktOVU0gKyAxXTsJLyogbGFzdCBrbm93biBzaXpl ICovCisJQmxvY2tOdW1iZXIgc21ncl9jYWNoZWRfbmJsb2NrczsJLyogbGFzdCBrbm93biBzaXpl ICovCiAKIAkvKiBhZGRpdGlvbmFsIHB1YmxpYyBmaWVsZHMgbWF5IHNvbWVkYXkgZXhpc3QgaGVy ZSAqLwogCkBAIC02NSw0NiArOTAsNDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU01nclJlbGF0aW9uRGF0 YQogCSAqIGZvciBtZC5jOyBwZXItZm9yayBhcnJheXMgb2YgdGhlIG51bWJlciBvZiBvcGVuIHNl Z21lbnRzCiAJICogKG1kX251bV9vcGVuX3NlZ3MpIGFuZCB0aGUgc2VnbWVudHMgdGhlbXNlbHZl cyAobWRfc2VnX2ZkcykuCiAJICovCi0JaW50CQkJbWRfbnVtX29wZW5fc2Vnc1tNQVhfRk9SS05V TSArIDFdOwotCXN0cnVjdCBfTWRmZFZlYyAqbWRfc2VnX2Zkc1tNQVhfRk9SS05VTSArIDFdOwor CWludAkJCW1kX251bV9vcGVuX3NlZ3M7CisJc3RydWN0IF9NZGZkVmVjICptZF9zZWdfZmRzOwog Ci0JLyogaWYgdW5vd25lZCwgbGlzdCBsaW5rIGluIGxpc3Qgb2YgYWxsIHVub3duZWQgU01nclJl bGF0aW9ucyAqLworCS8qIGlmIHVub3duZWQsIGxpc3QgbGluayBpbiBsaXN0IG9mIGFsbCB1bm93 bmVkIFNNZ3JGaWxlcyAqLwogCWRsaXN0X25vZGUJbm9kZTsKLX0gU01nclJlbGF0aW9uRGF0YTsK K30gU01nckZpbGVEYXRhOwogCi10eXBlZGVmIFNNZ3JSZWxhdGlvbkRhdGEgKlNNZ3JSZWxhdGlv bjsKK3R5cGVkZWYgU01nckZpbGVEYXRhICpTTWdyRmlsZUhhbmRsZTsKIAogI2RlZmluZSBTbWdy SXNUZW1wKHNtZ3IpIFwKLQlSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAoKHNtZ3IpLT5zbWdy X3Jsb2NhdG9yKQorCVNNZ3JGaWxlTG9jYXRvcklzVGVtcCgoc21nciktPnNtZ3JfbG9jYXRvcikK IAogZXh0ZXJuIHZvaWQgc21ncmluaXQodm9pZCk7Ci1leHRlcm4gU01nclJlbGF0aW9uIHNtZ3Jv cGVuKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCk7Ci1leHRlcm4g Ym9vbCBzbWdyZXhpc3RzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwot ZXh0ZXJuIHZvaWQgc21ncnNldG93bmVyKFNNZ3JSZWxhdGlvbiAqb3duZXIsIFNNZ3JSZWxhdGlv biByZWxuKTsKLWV4dGVybiB2b2lkIHNtZ3JjbGVhcm93bmVyKFNNZ3JSZWxhdGlvbiAqb3duZXIs IFNNZ3JSZWxhdGlvbiByZWxuKTsKLWV4dGVybiB2b2lkIHNtZ3JjbG9zZShTTWdyUmVsYXRpb24g cmVsbik7CitleHRlcm4gU01nckZpbGVIYW5kbGUgc21ncm9wZW4oUmVsRmlsZUxvY2F0b3Igcmxv Y2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kLCBGb3JrTnVtYmVyIGZvcmtOdW0pOworZXh0ZXJuIGJv b2wgc21ncmV4aXN0cyhTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBzbWdyc2V0 b3duZXIoU01nckZpbGVIYW5kbGUgKm93bmVyLCBTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRl cm4gdm9pZCBzbWdyY2xlYXJvd25lcihTTWdyRmlsZUhhbmRsZSAqb3duZXIsIFNNZ3JGaWxlSGFu ZGxlIHNmaWxlKTsKK2V4dGVybiB2b2lkIHNtZ3JjbG9zZShTTWdyRmlsZUhhbmRsZSBzZmlsZSk7 CiBleHRlcm4gdm9pZCBzbWdyY2xvc2VhbGwodm9pZCk7Ci1leHRlcm4gdm9pZCBzbWdyY2xvc2Vy ZWxsb2NhdG9yKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvcik7Ci1leHRlcm4gdm9pZCBz bWdycmVsZWFzZShTTWdyUmVsYXRpb24gcmVsbik7CiBleHRlcm4gdm9pZCBzbWdycmVsZWFzZWFs bCh2b2lkKTsKLWV4dGVybiB2b2lkIHNtZ3JjcmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pOwotZXh0ZXJuIHZvaWQgc21ncmRvc3luY2FsbChT TWdyUmVsYXRpb24gKnJlbHMsIGludCBucmVscyk7Ci1leHRlcm4gdm9pZCBzbWdyZG91bmxpbmth bGwoU01nclJlbGF0aW9uICpyZWxzLCBpbnQgbnJlbHMsIGJvb2wgaXNSZWRvKTsKLWV4dGVybiB2 b2lkIHNtZ3JleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK2V4 dGVybiB2b2lkIHNtZ3JjcmVhdGUoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGJvb2wgaXNSZWRvKTsK K2V4dGVybiB2b2lkIHNtZ3JleHRlbmQoU01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCSAgIEJs b2NrTnVtYmVyIGJsb2NrbnVtLCBjaGFyICpidWZmZXIsIGJvb2wgc2tpcEZzeW5jKTsKLWV4dGVy biBib29sIHNtZ3JwcmVmZXRjaChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LAotCQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrbnVtKTsKLWV4dGVybiB2b2lkIHNtZ3JyZWFkKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCitleHRlcm4gYm9vbCBzbWdycHJl ZmV0Y2goU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2NrbnVtKTsKK2V4dGVy biB2b2lkIHNtZ3JyZWFkKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkgQmxvY2tOdW1iZXIg YmxvY2tudW0sIGNoYXIgKmJ1ZmZlcik7Ci1leHRlcm4gdm9pZCBzbWdyd3JpdGUoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK2V4dGVybiB2b2lkIHNtZ3J3cml0ZShTTWdy RmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJICBCbG9ja051bWJlciBibG9ja251bSwgY2hhciAqYnVm ZmVyLCBib29sIHNraXBGc3luYyk7Ci1leHRlcm4gdm9pZCBzbWdyd3JpdGViYWNrKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCitleHRlcm4gdm9pZCBzbWdyd3JpdGViYWNr KFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJICBCbG9ja051bWJlciBibG9ja251bSwgQmxv Y2tOdW1iZXIgbmJsb2Nrcyk7Ci1leHRlcm4gQmxvY2tOdW1iZXIgc21ncm5ibG9ja3MoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci1leHRlcm4gQmxvY2tOdW1iZXIgc21n cm5ibG9ja3NfY2FjaGVkKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwot ZXh0ZXJuIHZvaWQgc21ncnRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyICpm b3JrbnVtLAotCQkJCQkJIGludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpuYmxvY2tzKTsKLWV4dGVy biB2b2lkIHNtZ3JpbW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSk7CitleHRlcm4gQmxvY2tOdW1iZXIgc21ncm5ibG9ja3MoU01nckZpbGVIYW5kbGUgc2ZpbGUp OworZXh0ZXJuIEJsb2NrTnVtYmVyIHNtZ3JuYmxvY2tzX2NhY2hlZChTTWdyRmlsZUhhbmRsZSBz ZmlsZSk7CitleHRlcm4gdm9pZCBzbWdyaW1tZWRzeW5jKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsK K2V4dGVybiB2b2lkIHNtZ3J1bmxpbmsoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGJvb2wgaXNSZWRv KTsKKworZXh0ZXJuIHZvaWQgc21ncnRydW5jYXRlX211bHRpKFJlbEZpbGVMb2NhdG9yIHJsb2Nh dG9yLCBCYWNrZW5kSWQgYmFja2VuZCwgRm9ya051bWJlciAqZm9ya3MsIGludCBuZm9ya3MsIEJs b2NrTnVtYmVyICpuYmxvY2tzKTsKK2V4dGVybiB2b2lkIHNtZ3J1bmxpbmtfbXVsdGkoUmVsRmls ZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kLCBGb3JrTnVtYmVyICpmb3Jrcywg aW50IG5mb3JrcywgYm9vbCBpc1JlZG8pOworCitleHRlcm4gdm9pZCBzbWdyY2xvc2VyZWxsb2Nh dG9yKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCk7CisKIGV4dGVy biB2b2lkIEF0RU9YYWN0X1NNZ3Iodm9pZCk7CiBleHRlcm4gYm9vbCBQcm9jZXNzQmFycmllclNt Z3JSZWxlYXNlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9pbnZhbC5o IGIvc3JjL2luY2x1ZGUvdXRpbHMvaW52YWwuaAppbmRleCAxNGI0ZWFjMDYzMC4uNmMyNzk0MjJi MmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2ludmFsLmgKKysrIGIvc3JjL2luY2x1 ZGUvdXRpbHMvaW52YWwuaApAQCAtNDgsNyArNDgsNyBAQCBleHRlcm4gdm9pZCBDYWNoZUludmFs aWRhdGVSZWxjYWNoZUJ5VHVwbGUoSGVhcFR1cGxlIGNsYXNzVHVwbGUpOwogCiBleHRlcm4gdm9p ZCBDYWNoZUludmFsaWRhdGVSZWxjYWNoZUJ5UmVsaWQoT2lkIHJlbGlkKTsKIAotZXh0ZXJuIHZv aWQgQ2FjaGVJbnZhbGlkYXRlU21ncihSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IpOwor ZXh0ZXJuIHZvaWQgQ2FjaGVJbnZhbGlkYXRlU21ncihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwg QmFja2VuZElkIGJhY2tlbmQpOwogCiBleHRlcm4gdm9pZCBDYWNoZUludmFsaWRhdGVSZWxtYXAo T2lkIGRhdGFiYXNlSWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaCBi L3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IGFmOTc4NTAzOGQzLi5iZDdiOThkZWU5OSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvcmVsLmgKQEAgLTU0LDcgKzU0LDcgQEAgdHlwZWRlZiBMb2NrSW5mb0RhdGEgKkxvY2tJbmZv OwogdHlwZWRlZiBzdHJ1Y3QgUmVsYXRpb25EYXRhCiB7CiAJUmVsRmlsZUxvY2F0b3IgcmRfbG9j YXRvcjsJLyogcmVsYXRpb24gcGh5c2ljYWwgaWRlbnRpZmllciAqLwotCVNNZ3JSZWxhdGlvbiBy ZF9zbWdyOwkJLyogY2FjaGVkIGZpbGUgaGFuZGxlLCBvciBOVUxMICovCisJU01nckZpbGVIYW5k bGUgcmRfc21ncltNQVhfRk9SS05VTSArIDFdOwkJLyogY2FjaGVkIGZpbGUgaGFuZGxlcywgb3Ig TlVMTHMgKi8KIAlpbnQJCQlyZF9yZWZjbnQ7CQkvKiByZWZlcmVuY2UgY291bnQgKi8KIAlCYWNr ZW5kSWQJcmRfYmFja2VuZDsJCS8qIG93bmluZyBiYWNrZW5kIGlkLCBpZiB0ZW1wb3JhcnkgcmVs YXRpb24gKi8KIAlib29sCQlyZF9pc2xvY2FsdGVtcDsgLyogcmVsIGlzIGEgdGVtcCByZWwgb2Yg dGhpcyBzZXNzaW9uICovCkBAIC01NjIsMTYgKzU2MiwxNyBAQCB0eXBlZGVmIHN0cnVjdCBWaWV3 T3B0aW9ucwogICogTm90ZTogc2luY2UgYSByZWxjYWNoZSBmbHVzaCBjYW4gY2F1c2UgdGhlIGZp bGUgaGFuZGxlIHRvIGJlIGNsb3NlZCBhZ2FpbiwKICAqIGl0J3MgdW53aXNlIHRvIGhvbGQgb250 byB0aGUgcG9pbnRlciByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGZvciBhbnkKICAqIGxvbmcg cGVyaW9kLiAgUmVjb21tZW5kZWQgcHJhY3RpY2UgaXMgdG8ganVzdCByZS1leGVjdXRlIFJlbGF0 aW9uR2V0U21ncgotICogZWFjaCB0aW1lIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgU01nclJlbGF0 aW9uLiAgSXQncyBxdWl0ZSBjaGVhcCBpbgorICogZWFjaCB0aW1lIHlvdSBuZWVkIHRvIGFjY2Vz cyB0aGUgU01nckZpbGVIYW5kbGUuICBJdCdzIHF1aXRlIGNoZWFwIGluCiAgKiBjb21wYXJpc29u IHRvIHdoYXRldmVyIGFuIHNtZ3IgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZG8uCiAgKi8KLXN0YXRp YyBpbmxpbmUgU01nclJlbGF0aW9uCi1SZWxhdGlvbkdldFNtZ3IoUmVsYXRpb24gcmVsKQorc3Rh dGljIGlubGluZSBTTWdyRmlsZUhhbmRsZQorUmVsYXRpb25HZXRTbWdyKFJlbGF0aW9uIHJlbCwg Rm9ya051bWJlciBmb3JrTnVtKQogewotCWlmICh1bmxpa2VseShyZWwtPnJkX3NtZ3IgPT0gTlVM TCkpCi0JCXNtZ3JzZXRvd25lcigmKHJlbC0+cmRfc21nciksIHNtZ3JvcGVuKHJlbC0+cmRfbG9j YXRvciwgcmVsLT5yZF9iYWNrZW5kKSk7Ci0JcmV0dXJuIHJlbC0+cmRfc21ncjsKKwlpZiAodW5s aWtlbHkocmVsLT5yZF9zbWdyW2ZvcmtOdW1dID09IE5VTEwpKQorCQlzbWdyc2V0b3duZXIoJihy ZWwtPnJkX3NtZ3JbZm9ya051bV0pLCBzbWdyb3BlbihyZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRf YmFja2VuZCwgZm9ya051bSkpOworCXJldHVybiByZWwtPnJkX3NtZ3JbZm9ya051bV07CiB9Cisj ZW5kaWYKIAogLyoKICAqIFJlbGF0aW9uQ2xvc2VTbWdyCkBAIC01ODAsMTMgKzU4MSwxNSBAQCBS ZWxhdGlvbkdldFNtZ3IoUmVsYXRpb24gcmVsKQogc3RhdGljIGlubGluZSB2b2lkCiBSZWxhdGlv bkNsb3NlU21ncihSZWxhdGlvbiByZWxhdGlvbikKIHsKLQlpZiAocmVsYXRpb24tPnJkX3NtZ3Ig IT0gTlVMTCkKLQkJc21ncmNsb3NlKHJlbGF0aW9uLT5yZF9zbWdyKTsKLQotCS8qIHNtZ3JjbG9z ZSBzaG91bGQgdW5ob29rIGZyb20gb3duZXIgcG9pbnRlciAqLwotCUFzc2VydChyZWxhdGlvbi0+ cmRfc21nciA9PSBOVUxMKTsKKwlmb3IgKGludCBpID0gMDsgaSA8PSBNQVhfRk9SS05VTTsgaSsr KQorCXsKKwkJaWYgKHJlbGF0aW9uLT5yZF9zbWdyW2ldICE9IE5VTEwpCisJCXsKKwkJCXNtZ3Jj bG9zZShyZWxhdGlvbi0+cmRfc21ncltpXSk7CisJCQlBc3NlcnQocmVsYXRpb24tPnJkX3NtZ3Jb aV0gPT0gTlVMTCk7CisJCX0KKwl9CiB9Ci0jZW5kaWYJCQkJCQkJLyogIUZST05URU5EICovCiAK IC8qCiAgKiBSZWxhdGlvbkdldFRhcmdldEJsb2NrCkBAIC01OTcsNyArNjAwLDcgQEAgUmVsYXRp b25DbG9zZVNtZ3IoUmVsYXRpb24gcmVsYXRpb24pCiAgKiBzbyB0aGVyZSdzIG5vIG5lZWQgdG8g cmUtb3BlbiB0aGUgc21nciBoYW5kbGUgaWYgaXQncyBub3QgY3VycmVudGx5IG9wZW4uCiAgKi8K ICNkZWZpbmUgUmVsYXRpb25HZXRUYXJnZXRCbG9jayhyZWxhdGlvbikgXAotCSggKHJlbGF0aW9u KS0+cmRfc21nciAhPSBOVUxMID8gKHJlbGF0aW9uKS0+cmRfc21nci0+c21ncl90YXJnYmxvY2sg OiBJbnZhbGlkQmxvY2tOdW1iZXIgKQorCSggKHJlbGF0aW9uKS0+cmRfc21ncltNQUlOX0ZPUktO VU1dICE9IE5VTEwgPyAocmVsYXRpb24pLT5yZF9zbWdyW01BSU5fRk9SS05VTV0tPnNtZ3JfdGFy Z2Jsb2NrIDogSW52YWxpZEJsb2NrTnVtYmVyICkKIAogLyoKICAqIFJlbGF0aW9uU2V0VGFyZ2V0 QmxvY2sKQEAgLTYwNSw3ICs2MDgsNyBAQCBSZWxhdGlvbkNsb3NlU21ncihSZWxhdGlvbiByZWxh dGlvbikKICAqLwogI2RlZmluZSBSZWxhdGlvblNldFRhcmdldEJsb2NrKHJlbGF0aW9uLCB0YXJn YmxvY2spIFwKIAlkbyB7IFwKLQkJUmVsYXRpb25HZXRTbWdyKHJlbGF0aW9uKS0+c21ncl90YXJn YmxvY2sgPSAodGFyZ2Jsb2NrKTsgXAorCQlSZWxhdGlvbkdldFNtZ3IocmVsYXRpb24sIE1BSU5f Rk9SS05VTSktPnNtZ3JfdGFyZ2Jsb2NrID0gKHRhcmdibG9jayk7IFwKIAl9IHdoaWxlICgwKQog CiAvKgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL3N0YXRzLm91dCBi L3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9zdGF0cy5vdXQKaW5kZXggNjFiNWE3MTBlYzgu LjA1MDljYWNmYWJjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvc3Rh dHMub3V0CisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9zdGF0cy5vdXQKQEAgLTMw MzIsMTYgKzMwMzIsMTIgQEAgc2VxX3NjYW58c2VxX3R1cF9yZWFkfG5fdHVwX2luc3xuX3R1cF91 cGR8bl90dXBfZGVsfG5fbGl2ZV90dXB8bl9kZWFkX3R1cHx2YWN1dW0KICgxIHJvdykKIAogCi1z dGFydGluZyBwZXJtdXRhdGlvbjogczFfc2xydV9zYXZlX3N0YXRzIHMxX2xpc3RlbiBzMV9iZWdp biBzMV9iaWdfbm90aWZ5IHMxX2ZmIHMxX3NscnVfY2hlY2tfc3RhdHMgczFfY29tbWl0IHMxX3Ns cnVfY2hlY2tfc3RhdHMKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzMV9saXN0ZW4gczFfYmVnaW4g czFfYmlnX25vdGlmeSBzMV9mZiBzMV9jb21taXQKIHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaAog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAKICgxIHJv dykKIAotc3RlcCBzMV9zbHJ1X3NhdmVfc3RhdHM6IAotCUlOU0VSVCBJTlRPIHRlc3Rfc2xydV9z dGF0cyBWQUxVRVMoJ05vdGlmeScsICdibGtzX3plcm9lZCcsCi0gICAgKFNFTEVDVCBibGtzX3pl cm9lZCBGUk9NIHBnX3N0YXRfc2xydSBXSEVSRSBuYW1lID0gJ05vdGlmeScpKTsKLQogc3RlcCBz MV9saXN0ZW46IExJU1RFTiBzdGF0c190ZXN0X25vdGhpbmc7CiBzdGVwIHMxX2JlZ2luOiBCRUdJ TjsKIHN0ZXAgczFfYmlnX25vdGlmeTogU0VMRUNUIHBnX25vdGlmeSgnc3RhdHNfdGVzdF91c2Un LApAQCAtMzA2MCw0MiArMzA1NiwxNCBAQCBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2gKICAgICAg ICAgICAgICAgICAgICAgICAgIAogKDEgcm93KQogCi1zdGVwIHMxX3NscnVfY2hlY2tfc3RhdHM6 IAotCVNFTEVDVCBjdXJyZW50LmJsa3NfemVyb2VkID4gYmVmb3JlLnZhbHVlCi0gIEZST00gdGVz dF9zbHJ1X3N0YXRzIGJlZm9yZQotICBJTk5FUiBKT0lOIHBnX3N0YXRfc2xydSBjdXJyZW50Ci0g IE9OIGJlZm9yZS5zbHJ1ID0gY3VycmVudC5uYW1lCi0gIFdIRVJFIGJlZm9yZS5zdGF0ID0gJ2Js a3NfemVyb2VkJzsKLQotP2NvbHVtbj8KLS0tLS0tLS0tCi1mICAgICAgIAotKDEgcm93KQotCiBz dGVwIHMxX2NvbW1pdDogQ09NTUlUOwotc3RlcCBzMV9zbHJ1X2NoZWNrX3N0YXRzOiAKLQlTRUxF Q1QgY3VycmVudC5ibGtzX3plcm9lZCA+IGJlZm9yZS52YWx1ZQotICBGUk9NIHRlc3Rfc2xydV9z dGF0cyBiZWZvcmUKLSAgSU5ORVIgSk9JTiBwZ19zdGF0X3NscnUgY3VycmVudAotICBPTiBiZWZv cmUuc2xydSA9IGN1cnJlbnQubmFtZQotICBXSEVSRSBiZWZvcmUuc3RhdCA9ICdibGtzX3plcm9l ZCc7Ci0KLT9jb2x1bW4/Ci0tLS0tLS0tLQotdCAgICAgICAKLSgxIHJvdykKIAotCi1zdGFydGlu ZyBwZXJtdXRhdGlvbjogczFfc2xydV9zYXZlX3N0YXRzIHMxX2xpc3RlbiBzMl9iaWdfbm90aWZ5 IHMyX2ZmIHMxX3NscnVfY2hlY2tfc3RhdHMKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzMV9saXN0 ZW4gczJfYmlnX25vdGlmeSBzMl9mZgogcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoCiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgIAogKDEgcm93KQogCi1z dGVwIHMxX3NscnVfc2F2ZV9zdGF0czogCi0JSU5TRVJUIElOVE8gdGVzdF9zbHJ1X3N0YXRzIFZB TFVFUygnTm90aWZ5JywgJ2Jsa3NfemVyb2VkJywKLSAgICAoU0VMRUNUIGJsa3NfemVyb2VkIEZS T00gcGdfc3RhdF9zbHJ1IFdIRVJFIG5hbWUgPSAnTm90aWZ5JykpOwotCiBzdGVwIHMxX2xpc3Rl bjogTElTVEVOIHN0YXRzX3Rlc3Rfbm90aGluZzsKIHN0ZXAgczJfYmlnX25vdGlmeTogU0VMRUNU IHBnX25vdGlmeSgnc3RhdHNfdGVzdF91c2UnLAogICAgICAgICAgICAgICAgIHJlcGVhdChpOjp0 ZXh0LCBjdXJyZW50X3NldHRpbmcoJ2Jsb2NrX3NpemUnKTo6aW50IC8gMikpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDMpIGcoaSk7CkBAIC0zMTEzLDI5ICszMDgxLDEzIEBAIHBnX3N0YXRfZm9y Y2VfbmV4dF9mbHVzaAogICAgICAgICAgICAgICAgICAgICAgICAgCiAoMSByb3cpCiAKLXN0ZXAg czFfc2xydV9jaGVja19zdGF0czogCi0JU0VMRUNUIGN1cnJlbnQuYmxrc196ZXJvZWQgPiBiZWZv cmUudmFsdWUKLSAgRlJPTSB0ZXN0X3NscnVfc3RhdHMgYmVmb3JlCi0gIElOTkVSIEpPSU4gcGdf c3RhdF9zbHJ1IGN1cnJlbnQKLSAgT04gYmVmb3JlLnNscnUgPSBjdXJyZW50Lm5hbWUKLSAgV0hF UkUgYmVmb3JlLnN0YXQgPSAnYmxrc196ZXJvZWQnOwotCi0/Y29sdW1uPwotLS0tLS0tLS0KLXQg ICAgICAgCi0oMSByb3cpCi0KIAotc3RhcnRpbmcgcGVybXV0YXRpb246IHMxX3NscnVfc2F2ZV9z dGF0cyBzMV9saXN0ZW4gczJfYmVnaW4gczJfYmlnX25vdGlmeSBzMl9mZiBzMV9zbHJ1X2NoZWNr X3N0YXRzIHMyX2NvbW1pdAorc3RhcnRpbmcgcGVybXV0YXRpb246IHMxX2xpc3RlbiBzMl9iZWdp biBzMl9iaWdfbm90aWZ5IHMyX2ZmIHMyX2NvbW1pdAogcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNo CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgIAogKDEg cm93KQogCi1zdGVwIHMxX3NscnVfc2F2ZV9zdGF0czogCi0JSU5TRVJUIElOVE8gdGVzdF9zbHJ1 X3N0YXRzIFZBTFVFUygnTm90aWZ5JywgJ2Jsa3NfemVyb2VkJywKLSAgICAoU0VMRUNUIGJsa3Nf emVyb2VkIEZST00gcGdfc3RhdF9zbHJ1IFdIRVJFIG5hbWUgPSAnTm90aWZ5JykpOwotCiBzdGVw IHMxX2xpc3RlbjogTElTVEVOIHN0YXRzX3Rlc3Rfbm90aGluZzsKIHN0ZXAgczJfYmVnaW46IEJF R0lOOwogc3RlcCBzMl9iaWdfbm90aWZ5OiBTRUxFQ1QgcGdfbm90aWZ5KCdzdGF0c190ZXN0X3Vz ZScsCkBAIC0zMTU0LDQ1ICszMTA2LDE3IEBAIHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaAogICAg ICAgICAgICAgICAgICAgICAgICAgCiAoMSByb3cpCiAKLXN0ZXAgczFfc2xydV9jaGVja19zdGF0 czogCi0JU0VMRUNUIGN1cnJlbnQuYmxrc196ZXJvZWQgPiBiZWZvcmUudmFsdWUKLSAgRlJPTSB0 ZXN0X3NscnVfc3RhdHMgYmVmb3JlCi0gIElOTkVSIEpPSU4gcGdfc3RhdF9zbHJ1IGN1cnJlbnQK LSAgT04gYmVmb3JlLnNscnUgPSBjdXJyZW50Lm5hbWUKLSAgV0hFUkUgYmVmb3JlLnN0YXQgPSAn Ymxrc196ZXJvZWQnOwotCi0/Y29sdW1uPwotLS0tLS0tLS0KLWYgICAgICAgCi0oMSByb3cpCi0K IHN0ZXAgczJfY29tbWl0OiBDT01NSVQ7CiAKLXN0YXJ0aW5nIHBlcm11dGF0aW9uOiBzMV9mZXRj aF9jb25zaXN0ZW5jeV9ub25lIHMxX3NscnVfc2F2ZV9zdGF0cyBzMV9saXN0ZW4gczFfYmVnaW4g czFfc2xydV9jaGVja19zdGF0cyBzMl9iaWdfbm90aWZ5IHMyX2ZmIHMxX3NscnVfY2hlY2tfc3Rh dHMgczFfY29tbWl0IHMxX3NscnVfY2hlY2tfc3RhdHMKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBz MV9mZXRjaF9jb25zaXN0ZW5jeV9ub25lIHMxX2xpc3RlbiBzMV9iZWdpbiBzMl9iaWdfbm90aWZ5 IHMyX2ZmIHMxX2NvbW1pdAogcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoCiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgIAogKDEgcm93KQogCiBzdGVwIHMx X2ZldGNoX2NvbnNpc3RlbmN5X25vbmU6IFNFVCBzdGF0c19mZXRjaF9jb25zaXN0ZW5jeSA9ICdu b25lJzsKLXN0ZXAgczFfc2xydV9zYXZlX3N0YXRzOiAKLQlJTlNFUlQgSU5UTyB0ZXN0X3NscnVf c3RhdHMgVkFMVUVTKCdOb3RpZnknLCAnYmxrc196ZXJvZWQnLAotICAgIChTRUxFQ1QgYmxrc196 ZXJvZWQgRlJPTSBwZ19zdGF0X3NscnUgV0hFUkUgbmFtZSA9ICdOb3RpZnknKSk7Ci0KIHN0ZXAg czFfbGlzdGVuOiBMSVNURU4gc3RhdHNfdGVzdF9ub3RoaW5nOwogc3RlcCBzMV9iZWdpbjogQkVH SU47Ci1zdGVwIHMxX3NscnVfY2hlY2tfc3RhdHM6IAotCVNFTEVDVCBjdXJyZW50LmJsa3NfemVy b2VkID4gYmVmb3JlLnZhbHVlCi0gIEZST00gdGVzdF9zbHJ1X3N0YXRzIGJlZm9yZQotICBJTk5F UiBKT0lOIHBnX3N0YXRfc2xydSBjdXJyZW50Ci0gIE9OIGJlZm9yZS5zbHJ1ID0gY3VycmVudC5u YW1lCi0gIFdIRVJFIGJlZm9yZS5zdGF0ID0gJ2Jsa3NfemVyb2VkJzsKLQotP2NvbHVtbj8KLS0t LS0tLS0tCi1mICAgICAgIAotKDEgcm93KQotCiBzdGVwIHMyX2JpZ19ub3RpZnk6IFNFTEVDVCBw Z19ub3RpZnkoJ3N0YXRzX3Rlc3RfdXNlJywKICAgICAgICAgICAgICAgICByZXBlYXQoaTo6dGV4 dCwgY3VycmVudF9zZXR0aW5nKCdibG9ja19zaXplJyk6OmludCAvIDIpKSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAzKSBnKGkpOwogCkBAIC0zMjA5LDU3ICszMTMzLDE3IEBAIHBnX3N0YXRfZm9y Y2VfbmV4dF9mbHVzaAogICAgICAgICAgICAgICAgICAgICAgICAgCiAoMSByb3cpCiAKLXN0ZXAg czFfc2xydV9jaGVja19zdGF0czogCi0JU0VMRUNUIGN1cnJlbnQuYmxrc196ZXJvZWQgPiBiZWZv cmUudmFsdWUKLSAgRlJPTSB0ZXN0X3NscnVfc3RhdHMgYmVmb3JlCi0gIElOTkVSIEpPSU4gcGdf c3RhdF9zbHJ1IGN1cnJlbnQKLSAgT04gYmVmb3JlLnNscnUgPSBjdXJyZW50Lm5hbWUKLSAgV0hF UkUgYmVmb3JlLnN0YXQgPSAnYmxrc196ZXJvZWQnOwotCi0/Y29sdW1uPwotLS0tLS0tLS0KLXQg ICAgICAgCi0oMSByb3cpCi0KIHN0ZXAgczFfY29tbWl0OiBDT01NSVQ7Ci1zdGVwIHMxX3NscnVf Y2hlY2tfc3RhdHM6IAotCVNFTEVDVCBjdXJyZW50LmJsa3NfemVyb2VkID4gYmVmb3JlLnZhbHVl Ci0gIEZST00gdGVzdF9zbHJ1X3N0YXRzIGJlZm9yZQotICBJTk5FUiBKT0lOIHBnX3N0YXRfc2xy dSBjdXJyZW50Ci0gIE9OIGJlZm9yZS5zbHJ1ID0gY3VycmVudC5uYW1lCi0gIFdIRVJFIGJlZm9y ZS5zdGF0ID0gJ2Jsa3NfemVyb2VkJzsKIAotP2NvbHVtbj8KLS0tLS0tLS0tCi10ICAgICAgIAot KDEgcm93KQotCi0KLXN0YXJ0aW5nIHBlcm11dGF0aW9uOiBzMV9mZXRjaF9jb25zaXN0ZW5jeV9j YWNoZSBzMV9zbHJ1X3NhdmVfc3RhdHMgczFfbGlzdGVuIHMxX2JlZ2luIHMxX3NscnVfY2hlY2tf c3RhdHMgczJfYmlnX25vdGlmeSBzMl9mZiBzMV9zbHJ1X2NoZWNrX3N0YXRzIHMxX2NvbW1pdCBz MV9zbHJ1X2NoZWNrX3N0YXRzCitzdGFydGluZyBwZXJtdXRhdGlvbjogczFfZmV0Y2hfY29uc2lz dGVuY3lfY2FjaGUgczFfbGlzdGVuIHMxX2JlZ2luIHMyX2JpZ19ub3RpZnkgczJfZmYgczFfY29t bWl0CiBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2gKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog ICAgICAgICAgICAgICAgICAgICAgICAgCiAoMSByb3cpCiAKIHN0ZXAgczFfZmV0Y2hfY29uc2lz dGVuY3lfY2FjaGU6IFNFVCBzdGF0c19mZXRjaF9jb25zaXN0ZW5jeSA9ICdjYWNoZSc7Ci1zdGVw IHMxX3NscnVfc2F2ZV9zdGF0czogCi0JSU5TRVJUIElOVE8gdGVzdF9zbHJ1X3N0YXRzIFZBTFVF UygnTm90aWZ5JywgJ2Jsa3NfemVyb2VkJywKLSAgICAoU0VMRUNUIGJsa3NfemVyb2VkIEZST00g cGdfc3RhdF9zbHJ1IFdIRVJFIG5hbWUgPSAnTm90aWZ5JykpOwotCiBzdGVwIHMxX2xpc3Rlbjog TElTVEVOIHN0YXRzX3Rlc3Rfbm90aGluZzsKIHN0ZXAgczFfYmVnaW46IEJFR0lOOwotc3RlcCBz MV9zbHJ1X2NoZWNrX3N0YXRzOiAKLQlTRUxFQ1QgY3VycmVudC5ibGtzX3plcm9lZCA+IGJlZm9y ZS52YWx1ZQotICBGUk9NIHRlc3Rfc2xydV9zdGF0cyBiZWZvcmUKLSAgSU5ORVIgSk9JTiBwZ19z dGF0X3NscnUgY3VycmVudAotICBPTiBiZWZvcmUuc2xydSA9IGN1cnJlbnQubmFtZQotICBXSEVS RSBiZWZvcmUuc3RhdCA9ICdibGtzX3plcm9lZCc7Ci0KLT9jb2x1bW4/Ci0tLS0tLS0tLQotZiAg ICAgICAKLSgxIHJvdykKLQogc3RlcCBzMl9iaWdfbm90aWZ5OiBTRUxFQ1QgcGdfbm90aWZ5KCdz dGF0c190ZXN0X3VzZScsCiAgICAgICAgICAgICAgICAgcmVwZWF0KGk6OnRleHQsIGN1cnJlbnRf c2V0dGluZygnYmxvY2tfc2l6ZScpOjppbnQgLyAyKSkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwg MykgZyhpKTsKIApAQCAtMzI3Niw1NyArMzE2MCwxNyBAQCBwZ19zdGF0X2ZvcmNlX25leHRfZmx1 c2gKICAgICAgICAgICAgICAgICAgICAgICAgIAogKDEgcm93KQogCi1zdGVwIHMxX3NscnVfY2hl Y2tfc3RhdHM6IAotCVNFTEVDVCBjdXJyZW50LmJsa3NfemVyb2VkID4gYmVmb3JlLnZhbHVlCi0g IEZST00gdGVzdF9zbHJ1X3N0YXRzIGJlZm9yZQotICBJTk5FUiBKT0lOIHBnX3N0YXRfc2xydSBj dXJyZW50Ci0gIE9OIGJlZm9yZS5zbHJ1ID0gY3VycmVudC5uYW1lCi0gIFdIRVJFIGJlZm9yZS5z dGF0ID0gJ2Jsa3NfemVyb2VkJzsKLQotP2NvbHVtbj8KLS0tLS0tLS0tCi1mICAgICAgIAotKDEg cm93KQotCiBzdGVwIHMxX2NvbW1pdDogQ09NTUlUOwotc3RlcCBzMV9zbHJ1X2NoZWNrX3N0YXRz OiAKLQlTRUxFQ1QgY3VycmVudC5ibGtzX3plcm9lZCA+IGJlZm9yZS52YWx1ZQotICBGUk9NIHRl c3Rfc2xydV9zdGF0cyBiZWZvcmUKLSAgSU5ORVIgSk9JTiBwZ19zdGF0X3NscnUgY3VycmVudAot ICBPTiBiZWZvcmUuc2xydSA9IGN1cnJlbnQubmFtZQotICBXSEVSRSBiZWZvcmUuc3RhdCA9ICdi bGtzX3plcm9lZCc7CiAKLT9jb2x1bW4/Ci0tLS0tLS0tLQotdCAgICAgICAKLSgxIHJvdykKLQot Ci1zdGFydGluZyBwZXJtdXRhdGlvbjogczFfZmV0Y2hfY29uc2lzdGVuY3lfc25hcHNob3QgczFf c2xydV9zYXZlX3N0YXRzIHMxX2xpc3RlbiBzMV9iZWdpbiBzMV9zbHJ1X2NoZWNrX3N0YXRzIHMy X2JpZ19ub3RpZnkgczJfZmYgczFfc2xydV9jaGVja19zdGF0cyBzMV9jb21taXQgczFfc2xydV9j aGVja19zdGF0cworc3RhcnRpbmcgcGVybXV0YXRpb246IHMxX2ZldGNoX2NvbnNpc3RlbmN5X3Nu YXBzaG90IHMxX2xpc3RlbiBzMV9iZWdpbiBzMl9iaWdfbm90aWZ5IHMyX2ZmIHMxX2NvbW1pdAog cGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAg ICAgICAgICAgICAgICAgICAgIAogKDEgcm93KQogCiBzdGVwIHMxX2ZldGNoX2NvbnNpc3RlbmN5 X3NuYXBzaG90OiBTRVQgc3RhdHNfZmV0Y2hfY29uc2lzdGVuY3kgPSAnc25hcHNob3QnOwotc3Rl cCBzMV9zbHJ1X3NhdmVfc3RhdHM6IAotCUlOU0VSVCBJTlRPIHRlc3Rfc2xydV9zdGF0cyBWQUxV RVMoJ05vdGlmeScsICdibGtzX3plcm9lZCcsCi0gICAgKFNFTEVDVCBibGtzX3plcm9lZCBGUk9N IHBnX3N0YXRfc2xydSBXSEVSRSBuYW1lID0gJ05vdGlmeScpKTsKLQogc3RlcCBzMV9saXN0ZW46 IExJU1RFTiBzdGF0c190ZXN0X25vdGhpbmc7CiBzdGVwIHMxX2JlZ2luOiBCRUdJTjsKLXN0ZXAg czFfc2xydV9jaGVja19zdGF0czogCi0JU0VMRUNUIGN1cnJlbnQuYmxrc196ZXJvZWQgPiBiZWZv cmUudmFsdWUKLSAgRlJPTSB0ZXN0X3NscnVfc3RhdHMgYmVmb3JlCi0gIElOTkVSIEpPSU4gcGdf c3RhdF9zbHJ1IGN1cnJlbnQKLSAgT04gYmVmb3JlLnNscnUgPSBjdXJyZW50Lm5hbWUKLSAgV0hF UkUgYmVmb3JlLnN0YXQgPSAnYmxrc196ZXJvZWQnOwotCi0/Y29sdW1uPwotLS0tLS0tLS0KLWYg ICAgICAgCi0oMSByb3cpCi0KIHN0ZXAgczJfYmlnX25vdGlmeTogU0VMRUNUIHBnX25vdGlmeSgn c3RhdHNfdGVzdF91c2UnLAogICAgICAgICAgICAgICAgIHJlcGVhdChpOjp0ZXh0LCBjdXJyZW50 X3NldHRpbmcoJ2Jsb2NrX3NpemUnKTo6aW50IC8gMikpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDMpIGcoaSk7CiAKQEAgLTMzNDMsNTcgKzMxODcsMTcgQEAgcGdfc3RhdF9mb3JjZV9uZXh0X2Zs dXNoCiAgICAgICAgICAgICAgICAgICAgICAgICAKICgxIHJvdykKIAotc3RlcCBzMV9zbHJ1X2No ZWNrX3N0YXRzOiAKLQlTRUxFQ1QgY3VycmVudC5ibGtzX3plcm9lZCA+IGJlZm9yZS52YWx1ZQot ICBGUk9NIHRlc3Rfc2xydV9zdGF0cyBiZWZvcmUKLSAgSU5ORVIgSk9JTiBwZ19zdGF0X3NscnUg Y3VycmVudAotICBPTiBiZWZvcmUuc2xydSA9IGN1cnJlbnQubmFtZQotICBXSEVSRSBiZWZvcmUu c3RhdCA9ICdibGtzX3plcm9lZCc7Ci0KLT9jb2x1bW4/Ci0tLS0tLS0tLQotZiAgICAgICAKLSgx IHJvdykKLQogc3RlcCBzMV9jb21taXQ6IENPTU1JVDsKLXN0ZXAgczFfc2xydV9jaGVja19zdGF0 czogCi0JU0VMRUNUIGN1cnJlbnQuYmxrc196ZXJvZWQgPiBiZWZvcmUudmFsdWUKLSAgRlJPTSB0 ZXN0X3NscnVfc3RhdHMgYmVmb3JlCi0gIElOTkVSIEpPSU4gcGdfc3RhdF9zbHJ1IGN1cnJlbnQK LSAgT04gYmVmb3JlLnNscnUgPSBjdXJyZW50Lm5hbWUKLSAgV0hFUkUgYmVmb3JlLnN0YXQgPSAn Ymxrc196ZXJvZWQnOwogCi0/Y29sdW1uPwotLS0tLS0tLS0KLXQgICAgICAgCi0oMSByb3cpCi0K LQotc3RhcnRpbmcgcGVybXV0YXRpb246IHMxX2ZldGNoX2NvbnNpc3RlbmN5X25vbmUgczFfc2xy dV9zYXZlX3N0YXRzIHMxX2xpc3RlbiBzMV9iZWdpbiBzMV9zbHJ1X2NoZWNrX3N0YXRzIHMyX2Jp Z19ub3RpZnkgczJfZmYgczFfc2xydV9jaGVja19zdGF0cyBzMV9jbGVhcl9zbmFwc2hvdCBzMV9z bHJ1X2NoZWNrX3N0YXRzIHMxX2NvbW1pdAorc3RhcnRpbmcgcGVybXV0YXRpb246IHMxX2ZldGNo X2NvbnNpc3RlbmN5X25vbmUgczFfbGlzdGVuIHMxX2JlZ2luIHMyX2JpZ19ub3RpZnkgczJfZmYg czFfY2xlYXJfc25hcHNob3QgczFfY29tbWl0CiBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2gKIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgCiAoMSByb3cp CiAKIHN0ZXAgczFfZmV0Y2hfY29uc2lzdGVuY3lfbm9uZTogU0VUIHN0YXRzX2ZldGNoX2NvbnNp c3RlbmN5ID0gJ25vbmUnOwotc3RlcCBzMV9zbHJ1X3NhdmVfc3RhdHM6IAotCUlOU0VSVCBJTlRP IHRlc3Rfc2xydV9zdGF0cyBWQUxVRVMoJ05vdGlmeScsICdibGtzX3plcm9lZCcsCi0gICAgKFNF TEVDVCBibGtzX3plcm9lZCBGUk9NIHBnX3N0YXRfc2xydSBXSEVSRSBuYW1lID0gJ05vdGlmeScp KTsKLQogc3RlcCBzMV9saXN0ZW46IExJU1RFTiBzdGF0c190ZXN0X25vdGhpbmc7CiBzdGVwIHMx X2JlZ2luOiBCRUdJTjsKLXN0ZXAgczFfc2xydV9jaGVja19zdGF0czogCi0JU0VMRUNUIGN1cnJl bnQuYmxrc196ZXJvZWQgPiBiZWZvcmUudmFsdWUKLSAgRlJPTSB0ZXN0X3NscnVfc3RhdHMgYmVm b3JlCi0gIElOTkVSIEpPSU4gcGdfc3RhdF9zbHJ1IGN1cnJlbnQKLSAgT04gYmVmb3JlLnNscnUg PSBjdXJyZW50Lm5hbWUKLSAgV0hFUkUgYmVmb3JlLnN0YXQgPSAnYmxrc196ZXJvZWQnOwotCi0/ Y29sdW1uPwotLS0tLS0tLS0KLWYgICAgICAgCi0oMSByb3cpCi0KIHN0ZXAgczJfYmlnX25vdGlm eTogU0VMRUNUIHBnX25vdGlmeSgnc3RhdHNfdGVzdF91c2UnLAogICAgICAgICAgICAgICAgIHJl cGVhdChpOjp0ZXh0LCBjdXJyZW50X3NldHRpbmcoJ2Jsb2NrX3NpemUnKTo6aW50IC8gMikpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGcoaSk7CiAKQEAgLTM0MTAsNjMgKzMyMTQsMjMgQEAg cGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoCiAgICAgICAgICAgICAgICAgICAgICAgICAKICgxIHJv dykKIAotc3RlcCBzMV9zbHJ1X2NoZWNrX3N0YXRzOiAKLQlTRUxFQ1QgY3VycmVudC5ibGtzX3pl cm9lZCA+IGJlZm9yZS52YWx1ZQotICBGUk9NIHRlc3Rfc2xydV9zdGF0cyBiZWZvcmUKLSAgSU5O RVIgSk9JTiBwZ19zdGF0X3NscnUgY3VycmVudAotICBPTiBiZWZvcmUuc2xydSA9IGN1cnJlbnQu bmFtZQotICBXSEVSRSBiZWZvcmUuc3RhdCA9ICdibGtzX3plcm9lZCc7Ci0KLT9jb2x1bW4/Ci0t LS0tLS0tLQotdCAgICAgICAKLSgxIHJvdykKLQogc3RlcCBzMV9jbGVhcl9zbmFwc2hvdDogU0VM RUNUIHBnX3N0YXRfY2xlYXJfc25hcHNob3QoKTsKIHBnX3N0YXRfY2xlYXJfc25hcHNob3QKIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAKICgxIHJvdykKIAot c3RlcCBzMV9zbHJ1X2NoZWNrX3N0YXRzOiAKLQlTRUxFQ1QgY3VycmVudC5ibGtzX3plcm9lZCA+ IGJlZm9yZS52YWx1ZQotICBGUk9NIHRlc3Rfc2xydV9zdGF0cyBiZWZvcmUKLSAgSU5ORVIgSk9J TiBwZ19zdGF0X3NscnUgY3VycmVudAotICBPTiBiZWZvcmUuc2xydSA9IGN1cnJlbnQubmFtZQot ICBXSEVSRSBiZWZvcmUuc3RhdCA9ICdibGtzX3plcm9lZCc7Ci0KLT9jb2x1bW4/Ci0tLS0tLS0t LQotdCAgICAgICAKLSgxIHJvdykKLQogc3RlcCBzMV9jb21taXQ6IENPTU1JVDsKIAotc3RhcnRp bmcgcGVybXV0YXRpb246IHMxX2ZldGNoX2NvbnNpc3RlbmN5X2NhY2hlIHMxX3NscnVfc2F2ZV9z dGF0cyBzMV9saXN0ZW4gczFfYmVnaW4gczFfc2xydV9jaGVja19zdGF0cyBzMl9iaWdfbm90aWZ5 IHMyX2ZmIHMxX3NscnVfY2hlY2tfc3RhdHMgczFfY2xlYXJfc25hcHNob3QgczFfc2xydV9jaGVj a19zdGF0cyBzMV9jb21taXQKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzMV9mZXRjaF9jb25zaXN0 ZW5jeV9jYWNoZSBzMV9saXN0ZW4gczFfYmVnaW4gczJfYmlnX25vdGlmeSBzMl9mZiBzMV9jbGVh cl9zbmFwc2hvdCBzMV9jb21taXQKIHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaAogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAKICgxIHJvdykKIAogc3Rl cCBzMV9mZXRjaF9jb25zaXN0ZW5jeV9jYWNoZTogU0VUIHN0YXRzX2ZldGNoX2NvbnNpc3RlbmN5 ID0gJ2NhY2hlJzsKLXN0ZXAgczFfc2xydV9zYXZlX3N0YXRzOiAKLQlJTlNFUlQgSU5UTyB0ZXN0 X3NscnVfc3RhdHMgVkFMVUVTKCdOb3RpZnknLCAnYmxrc196ZXJvZWQnLAotICAgIChTRUxFQ1Qg Ymxrc196ZXJvZWQgRlJPTSBwZ19zdGF0X3NscnUgV0hFUkUgbmFtZSA9ICdOb3RpZnknKSk7Ci0K IHN0ZXAgczFfbGlzdGVuOiBMSVNURU4gc3RhdHNfdGVzdF9ub3RoaW5nOwogc3RlcCBzMV9iZWdp bjogQkVHSU47Ci1zdGVwIHMxX3NscnVfY2hlY2tfc3RhdHM6IAotCVNFTEVDVCBjdXJyZW50LmJs a3NfemVyb2VkID4gYmVmb3JlLnZhbHVlCi0gIEZST00gdGVzdF9zbHJ1X3N0YXRzIGJlZm9yZQot ICBJTk5FUiBKT0lOIHBnX3N0YXRfc2xydSBjdXJyZW50Ci0gIE9OIGJlZm9yZS5zbHJ1ID0gY3Vy cmVudC5uYW1lCi0gIFdIRVJFIGJlZm9yZS5zdGF0ID0gJ2Jsa3NfemVyb2VkJzsKLQotP2NvbHVt bj8KLS0tLS0tLS0tCi1mICAgICAgIAotKDEgcm93KQotCiBzdGVwIHMyX2JpZ19ub3RpZnk6IFNF TEVDVCBwZ19ub3RpZnkoJ3N0YXRzX3Rlc3RfdXNlJywKICAgICAgICAgICAgICAgICByZXBlYXQo aTo6dGV4dCwgY3VycmVudF9zZXR0aW5nKCdibG9ja19zaXplJyk6OmludCAvIDIpKSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCAzKSBnKGkpOwogCkBAIC0zNDgzLDYzICszMjQ3LDIzIEBAIHBnX3N0 YXRfZm9yY2VfbmV4dF9mbHVzaAogICAgICAgICAgICAgICAgICAgICAgICAgCiAoMSByb3cpCiAK LXN0ZXAgczFfc2xydV9jaGVja19zdGF0czogCi0JU0VMRUNUIGN1cnJlbnQuYmxrc196ZXJvZWQg PiBiZWZvcmUudmFsdWUKLSAgRlJPTSB0ZXN0X3NscnVfc3RhdHMgYmVmb3JlCi0gIElOTkVSIEpP SU4gcGdfc3RhdF9zbHJ1IGN1cnJlbnQKLSAgT04gYmVmb3JlLnNscnUgPSBjdXJyZW50Lm5hbWUK LSAgV0hFUkUgYmVmb3JlLnN0YXQgPSAnYmxrc196ZXJvZWQnOwotCi0/Y29sdW1uPwotLS0tLS0t LS0KLWYgICAgICAgCi0oMSByb3cpCi0KIHN0ZXAgczFfY2xlYXJfc25hcHNob3Q6IFNFTEVDVCBw Z19zdGF0X2NsZWFyX3NuYXBzaG90KCk7CiBwZ19zdGF0X2NsZWFyX3NuYXBzaG90CiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgCiAoMSByb3cpCiAKLXN0ZXAg czFfc2xydV9jaGVja19zdGF0czogCi0JU0VMRUNUIGN1cnJlbnQuYmxrc196ZXJvZWQgPiBiZWZv cmUudmFsdWUKLSAgRlJPTSB0ZXN0X3NscnVfc3RhdHMgYmVmb3JlCi0gIElOTkVSIEpPSU4gcGdf c3RhdF9zbHJ1IGN1cnJlbnQKLSAgT04gYmVmb3JlLnNscnUgPSBjdXJyZW50Lm5hbWUKLSAgV0hF UkUgYmVmb3JlLnN0YXQgPSAnYmxrc196ZXJvZWQnOwotCi0/Y29sdW1uPwotLS0tLS0tLS0KLXQg ICAgICAgCi0oMSByb3cpCi0KIHN0ZXAgczFfY29tbWl0OiBDT01NSVQ7CiAKLXN0YXJ0aW5nIHBl cm11dGF0aW9uOiBzMV9mZXRjaF9jb25zaXN0ZW5jeV9zbmFwc2hvdCBzMV9zbHJ1X3NhdmVfc3Rh dHMgczFfbGlzdGVuIHMxX2JlZ2luIHMxX3NscnVfY2hlY2tfc3RhdHMgczJfYmlnX25vdGlmeSBz Ml9mZiBzMV9zbHJ1X2NoZWNrX3N0YXRzIHMxX2NsZWFyX3NuYXBzaG90IHMxX3NscnVfY2hlY2tf c3RhdHMgczFfY29tbWl0CitzdGFydGluZyBwZXJtdXRhdGlvbjogczFfZmV0Y2hfY29uc2lzdGVu Y3lfc25hcHNob3QgczFfbGlzdGVuIHMxX2JlZ2luIHMyX2JpZ19ub3RpZnkgczJfZmYgczFfY2xl YXJfc25hcHNob3QgczFfY29tbWl0CiBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2gKIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgCiAoMSByb3cpCiAKIHN0 ZXAgczFfZmV0Y2hfY29uc2lzdGVuY3lfc25hcHNob3Q6IFNFVCBzdGF0c19mZXRjaF9jb25zaXN0 ZW5jeSA9ICdzbmFwc2hvdCc7Ci1zdGVwIHMxX3NscnVfc2F2ZV9zdGF0czogCi0JSU5TRVJUIElO VE8gdGVzdF9zbHJ1X3N0YXRzIFZBTFVFUygnTm90aWZ5JywgJ2Jsa3NfemVyb2VkJywKLSAgICAo U0VMRUNUIGJsa3NfemVyb2VkIEZST00gcGdfc3RhdF9zbHJ1IFdIRVJFIG5hbWUgPSAnTm90aWZ5 JykpOwotCiBzdGVwIHMxX2xpc3RlbjogTElTVEVOIHN0YXRzX3Rlc3Rfbm90aGluZzsKIHN0ZXAg czFfYmVnaW46IEJFR0lOOwotc3RlcCBzMV9zbHJ1X2NoZWNrX3N0YXRzOiAKLQlTRUxFQ1QgY3Vy cmVudC5ibGtzX3plcm9lZCA+IGJlZm9yZS52YWx1ZQotICBGUk9NIHRlc3Rfc2xydV9zdGF0cyBi ZWZvcmUKLSAgSU5ORVIgSk9JTiBwZ19zdGF0X3NscnUgY3VycmVudAotICBPTiBiZWZvcmUuc2xy dSA9IGN1cnJlbnQubmFtZQotICBXSEVSRSBiZWZvcmUuc3RhdCA9ICdibGtzX3plcm9lZCc7Ci0K LT9jb2x1bW4/Ci0tLS0tLS0tLQotZiAgICAgICAKLSgxIHJvdykKLQogc3RlcCBzMl9iaWdfbm90 aWZ5OiBTRUxFQ1QgcGdfbm90aWZ5KCdzdGF0c190ZXN0X3VzZScsCiAgICAgICAgICAgICAgICAg cmVwZWF0KGk6OnRleHQsIGN1cnJlbnRfc2V0dGluZygnYmxvY2tfc2l6ZScpOjppbnQgLyAyKSkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgZyhpKTsKIApAQCAtMzU1Niw0OSArMzI4MCwyMSBA QCBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2gKICAgICAgICAgICAgICAgICAgICAgICAgIAogKDEg cm93KQogCi1zdGVwIHMxX3NscnVfY2hlY2tfc3RhdHM6IAotCVNFTEVDVCBjdXJyZW50LmJsa3Nf emVyb2VkID4gYmVmb3JlLnZhbHVlCi0gIEZST00gdGVzdF9zbHJ1X3N0YXRzIGJlZm9yZQotICBJ Tk5FUiBKT0lOIHBnX3N0YXRfc2xydSBjdXJyZW50Ci0gIE9OIGJlZm9yZS5zbHJ1ID0gY3VycmVu dC5uYW1lCi0gIFdIRVJFIGJlZm9yZS5zdGF0ID0gJ2Jsa3NfemVyb2VkJzsKLQotP2NvbHVtbj8K LS0tLS0tLS0tCi1mICAgICAgIAotKDEgcm93KQotCiBzdGVwIHMxX2NsZWFyX3NuYXBzaG90OiBT RUxFQ1QgcGdfc3RhdF9jbGVhcl9zbmFwc2hvdCgpOwogcGdfc3RhdF9jbGVhcl9zbmFwc2hvdAog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgIAogKDEgcm93KQog Ci1zdGVwIHMxX3NscnVfY2hlY2tfc3RhdHM6IAotCVNFTEVDVCBjdXJyZW50LmJsa3NfemVyb2Vk ID4gYmVmb3JlLnZhbHVlCi0gIEZST00gdGVzdF9zbHJ1X3N0YXRzIGJlZm9yZQotICBJTk5FUiBK T0lOIHBnX3N0YXRfc2xydSBjdXJyZW50Ci0gIE9OIGJlZm9yZS5zbHJ1ID0gY3VycmVudC5uYW1l Ci0gIFdIRVJFIGJlZm9yZS5zdGF0ID0gJ2Jsa3NfemVyb2VkJzsKLQotP2NvbHVtbj8KLS0tLS0t LS0tCi10ICAgICAgIAotKDEgcm93KQotCiBzdGVwIHMxX2NvbW1pdDogQ09NTUlUOwogCi1zdGFy dGluZyBwZXJtdXRhdGlvbjogczFfZmV0Y2hfY29uc2lzdGVuY3lfc25hcHNob3QgczFfc2xydV9z YXZlX3N0YXRzIHMxX2xpc3RlbiBzMV9iZWdpbiBzMV9mdW5jX3N0YXRzIHMyX2JpZ19ub3RpZnkg czJfZmYgczFfc2xydV9jaGVja19zdGF0cyBzMV9jb21taXQKK3N0YXJ0aW5nIHBlcm11dGF0aW9u OiBzMV9mZXRjaF9jb25zaXN0ZW5jeV9zbmFwc2hvdCBzMV9saXN0ZW4gczFfYmVnaW4gczFfZnVu Y19zdGF0cyBzMl9iaWdfbm90aWZ5IHMyX2ZmIHMxX2NvbW1pdAogcGdfc3RhdF9mb3JjZV9uZXh0 X2ZsdXNoCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAg IAogKDEgcm93KQogCiBzdGVwIHMxX2ZldGNoX2NvbnNpc3RlbmN5X3NuYXBzaG90OiBTRVQgc3Rh dHNfZmV0Y2hfY29uc2lzdGVuY3kgPSAnc25hcHNob3QnOwotc3RlcCBzMV9zbHJ1X3NhdmVfc3Rh dHM6IAotCUlOU0VSVCBJTlRPIHRlc3Rfc2xydV9zdGF0cyBWQUxVRVMoJ05vdGlmeScsICdibGtz X3plcm9lZCcsCi0gICAgKFNFTEVDVCBibGtzX3plcm9lZCBGUk9NIHBnX3N0YXRfc2xydSBXSEVS RSBuYW1lID0gJ05vdGlmeScpKTsKLQogc3RlcCBzMV9saXN0ZW46IExJU1RFTiBzdGF0c190ZXN0 X25vdGhpbmc7CiBzdGVwIHMxX2JlZ2luOiBCRUdJTjsKIHN0ZXAgczFfZnVuY19zdGF0czogCkBA IC0zNjMxLDMxICszMzI3LDE1IEBAIHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaAogICAgICAgICAg ICAgICAgICAgICAgICAgCiAoMSByb3cpCiAKLXN0ZXAgczFfc2xydV9jaGVja19zdGF0czogCi0J U0VMRUNUIGN1cnJlbnQuYmxrc196ZXJvZWQgPiBiZWZvcmUudmFsdWUKLSAgRlJPTSB0ZXN0X3Ns cnVfc3RhdHMgYmVmb3JlCi0gIElOTkVSIEpPSU4gcGdfc3RhdF9zbHJ1IGN1cnJlbnQKLSAgT04g YmVmb3JlLnNscnUgPSBjdXJyZW50Lm5hbWUKLSAgV0hFUkUgYmVmb3JlLnN0YXQgPSAnYmxrc196 ZXJvZWQnOwotCi0/Y29sdW1uPwotLS0tLS0tLS0KLWYgICAgICAgCi0oMSByb3cpCi0KIHN0ZXAg czFfY29tbWl0OiBDT01NSVQ7CiAKLXN0YXJ0aW5nIHBlcm11dGF0aW9uOiBzMV9mZXRjaF9jb25z aXN0ZW5jeV9zbmFwc2hvdCBzMV9zbHJ1X3NhdmVfc3RhdHMgczFfbGlzdGVuIHMxX2JlZ2luIHMy X2JpZ19ub3RpZnkgczJfZmYgczFfc2xydV9jaGVja19zdGF0cyBzMl9mdW5jX2NhbGwgczJfZmYg czFfZnVuY19zdGF0cyBzMV9jbGVhcl9zbmFwc2hvdCBzMV9mdW5jX3N0YXRzIHMxX2NvbW1pdAor c3RhcnRpbmcgcGVybXV0YXRpb246IHMxX2ZldGNoX2NvbnNpc3RlbmN5X3NuYXBzaG90IHMxX2xp c3RlbiBzMV9iZWdpbiBzMl9iaWdfbm90aWZ5IHMyX2ZmIHMyX2Z1bmNfY2FsbCBzMl9mZiBzMV9m dW5jX3N0YXRzIHMxX2NsZWFyX3NuYXBzaG90IHMxX2Z1bmNfc3RhdHMgczFfY29tbWl0CiBwZ19z dGF0X2ZvcmNlX25leHRfZmx1c2gKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAg ICAgICAgICAgICAgICAgCiAoMSByb3cpCiAKIHN0ZXAgczFfZmV0Y2hfY29uc2lzdGVuY3lfc25h cHNob3Q6IFNFVCBzdGF0c19mZXRjaF9jb25zaXN0ZW5jeSA9ICdzbmFwc2hvdCc7Ci1zdGVwIHMx X3NscnVfc2F2ZV9zdGF0czogCi0JSU5TRVJUIElOVE8gdGVzdF9zbHJ1X3N0YXRzIFZBTFVFUygn Tm90aWZ5JywgJ2Jsa3NfemVyb2VkJywKLSAgICAoU0VMRUNUIGJsa3NfemVyb2VkIEZST00gcGdf c3RhdF9zbHJ1IFdIRVJFIG5hbWUgPSAnTm90aWZ5JykpOwotCiBzdGVwIHMxX2xpc3RlbjogTElT VEVOIHN0YXRzX3Rlc3Rfbm90aGluZzsKIHN0ZXAgczFfYmVnaW46IEJFR0lOOwogc3RlcCBzMl9i aWdfbm90aWZ5OiBTRUxFQ1QgcGdfbm90aWZ5KCdzdGF0c190ZXN0X3VzZScsCkBAIC0zNjc0LDE4 ICszMzU0LDYgQEAgcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoCiAgICAgICAgICAgICAgICAgICAg ICAgICAKICgxIHJvdykKIAotc3RlcCBzMV9zbHJ1X2NoZWNrX3N0YXRzOiAKLQlTRUxFQ1QgY3Vy cmVudC5ibGtzX3plcm9lZCA+IGJlZm9yZS52YWx1ZQotICBGUk9NIHRlc3Rfc2xydV9zdGF0cyBi ZWZvcmUKLSAgSU5ORVIgSk9JTiBwZ19zdGF0X3NscnUgY3VycmVudAotICBPTiBiZWZvcmUuc2xy dSA9IGN1cnJlbnQubmFtZQotICBXSEVSRSBiZWZvcmUuc3RhdCA9ICdibGtzX3plcm9lZCc7Ci0K LT9jb2x1bW4/Ci0tLS0tLS0tLQotdCAgICAgICAKLSgxIHJvdykKLQogc3RlcCBzMl9mdW5jX2Nh bGw6IFNFTEVDVCB0ZXN0X3N0YXRfZnVuYygpCiB0ZXN0X3N0YXRfZnVuYwogLS0tLS0tLS0tLS0t LS0KQEAgLTM3MDksNyArMzM3Nyw3IEBAIHN0ZXAgczFfZnVuY19zdGF0czoKIAogbmFtZSAgICAg ICAgICB8cGdfc3RhdF9nZXRfZnVuY3Rpb25fY2FsbHN8dG90YWxfYWJvdmVfemVyb3xzZWxmX2Fi b3ZlX3plcm8KIC0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCi10ZXN0X3N0YXRfZnVuY3wgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIAordGVzdF9zdGF0 X2Z1bmN8ICAgICAgICAgICAgICAgICAgICAgICAgIDF8dCAgICAgICAgICAgICAgIHx0ICAgICAg ICAgICAgICAKICgxIHJvdykKIAogc3RlcCBzMV9jbGVhcl9zbmFwc2hvdDogU0VMRUNUIHBnX3N0 YXRfY2xlYXJfc25hcHNob3QoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVj cy9zdGF0cy5zcGVjIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL3N0YXRzLnNwZWMKaW5kZXgg NWI5MjJkNzg4Y2MuLmNhMzU4ZDU3YjZlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9pc29sYXRpb24v c3BlY3Mvc3RhdHMuc3BlYworKysgYi9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3Mvc3RhdHMuc3Bl YwpAQCAtMTIsOCArMTIsNiBAQCBzZXR1cAogICAgIENSRUFURSBGVU5DVElPTiB0ZXN0X3N0YXRf ZnVuYzIoKSBSRVRVUk5TIFZPSUQgTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJEJFR0lOIEVORDskJDsK ICAgICBJTlNFUlQgSU5UTyB0ZXN0X3N0YXRfb2lkKG5hbWUsIG9pZCkgVkFMVUVTKCd0ZXN0X3N0 YXRfZnVuYzInLCAndGVzdF9zdGF0X2Z1bmMyJzo6cmVncHJvYyk7CiAKLSAgICBDUkVBVEUgVEFC TEUgdGVzdF9zbHJ1X3N0YXRzKHNscnUgVEVYVCwgc3RhdCBURVhULCB2YWx1ZSBJTlQpOwotCiAg ICAgLS0gY2FsbHMgdGVzdF9zdGF0X2Z1bmMsIGJ1dCBoaWRlcyBlcnJvciBpZiBpdCBkb2Vzbid0 IGV4aXN0CiAgICAgQ1JFQVRFIEZVTkNUSU9OIHRlc3Rfc3RhdF9mdW5jX2lmZXhpc3RzKCkgUkVU VVJOUyBWT0lEIExBTkdVQUdFIHBscGdzcWwgQVMgJCQKICAgICBCRUdJTgpAQCAtMjcsNyArMjUs NiBAQCBzZXR1cAogdGVhcmRvd24KIHsKICAgICBEUk9QIFRBQkxFIHRlc3Rfc3RhdF9vaWQ7Ci0g ICAgRFJPUCBUQUJMRSB0ZXN0X3NscnVfc3RhdHM7CiAKICAgICBEUk9QIFRBQkxFIElGIEVYSVNU UyB0ZXN0X3N0YXRfdGFiOwogICAgIERST1AgRlVOQ1RJT04gSUYgRVhJU1RTIHRlc3Rfc3RhdF9m dW5jKCk7CkBAIC0xMDUsMjMgKzEwMiwxMyBAQCBzdGVwIHMxX3RhYmxlX3N0YXRzIHsKICAgICBX SEVSRSB0c28ubmFtZSA9ICd0ZXN0X3N0YXRfdGFiJwogfQogCi0jIFNMUlUgc3RhdHMgc3RlcHMK LXN0ZXAgczFfc2xydV9zYXZlX3N0YXRzIHsKLQlJTlNFUlQgSU5UTyB0ZXN0X3NscnVfc3RhdHMg VkFMVUVTKCdOb3RpZnknLCAnYmxrc196ZXJvZWQnLAotICAgIChTRUxFQ1QgYmxrc196ZXJvZWQg RlJPTSBwZ19zdGF0X3NscnUgV0hFUkUgbmFtZSA9ICdOb3RpZnknKSk7Ci19CisKIHN0ZXAgczFf bGlzdGVuIHsgTElTVEVOIHN0YXRzX3Rlc3Rfbm90aGluZzsgfQogc3RlcCBzMV9iaWdfbm90aWZ5 IHsgU0VMRUNUIHBnX25vdGlmeSgnc3RhdHNfdGVzdF91c2UnLAogICAgICAgICAgICAgICAgIHJl cGVhdChpOjp0ZXh0LCBjdXJyZW50X3NldHRpbmcoJ2Jsb2NrX3NpemUnKTo6aW50IC8gMikpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGcoaSk7CiAgICAgICAgICAgICAgICAgfQogCi1zdGVw IHMxX3NscnVfY2hlY2tfc3RhdHMgewotCVNFTEVDVCBjdXJyZW50LmJsa3NfemVyb2VkID4gYmVm b3JlLnZhbHVlCi0gIEZST00gdGVzdF9zbHJ1X3N0YXRzIGJlZm9yZQotICBJTk5FUiBKT0lOIHBn X3N0YXRfc2xydSBjdXJyZW50Ci0gIE9OIGJlZm9yZS5zbHJ1ID0gY3VycmVudC5uYW1lCi0gIFdI RVJFIGJlZm9yZS5zdGF0ID0gJ2Jsa3NfemVyb2VkJzsKLQl9CisKIAogCiBzZXNzaW9uIHMyCkBA IC02MzcsMzEgKzYyNCwyNCBAQCBwZXJtdXRhdGlvbgogCiAjIFZlcmlmeSBTTFJVIHN0YXRzIGdl bmVyYXRlZCBpbiBvd24gdHJhbnNhY3Rpb24KIHBlcm11dGF0aW9uCi0gIHMxX3NscnVfc2F2ZV9z dGF0cwogICBzMV9saXN0ZW4KICAgczFfYmVnaW4KICAgczFfYmlnX25vdGlmeQogICBzMV9mZgot ICBzMV9zbHJ1X2NoZWNrX3N0YXRzCiAgIHMxX2NvbW1pdAotICBzMV9zbHJ1X2NoZWNrX3N0YXRz CiAKICMgVmVyaWZ5IFNMUlUgc3RhdHMgZ2VuZXJhdGVkIGluIHNlcGFyYXRlIHRyYW5zYWN0aW9u CiBwZXJtdXRhdGlvbgotICBzMV9zbHJ1X3NhdmVfc3RhdHMKICAgczFfbGlzdGVuCiAgIHMyX2Jp Z19ub3RpZnkKICAgczJfZmYKLSAgczFfc2xydV9jaGVja19zdGF0cwogCiAjIHNob3VsZG4ndCBz ZWUgc3RhdHMgeWV0LCBub3QgY29tbWl0dGVkCiBwZXJtdXRhdGlvbgotICBzMV9zbHJ1X3NhdmVf c3RhdHMKICAgczFfbGlzdGVuCiAgIHMyX2JlZ2luCiAgIHMyX2JpZ19ub3RpZnkKICAgczJfZmYK LSAgczFfc2xydV9jaGVja19zdGF0cwogICBzMl9jb21taXQKIAogCkBAIC02NjksODkgKzY0OSw2 OSBAQCBwZXJtdXRhdGlvbgogCiBwZXJtdXRhdGlvbgogICBzMV9mZXRjaF9jb25zaXN0ZW5jeV9u b25lCi0gIHMxX3NscnVfc2F2ZV9zdGF0cyBzMV9saXN0ZW4KKyAgczFfbGlzdGVuCiAgIHMxX2Jl Z2luCi0gIHMxX3NscnVfY2hlY2tfc3RhdHMKICAgczJfYmlnX25vdGlmeQogICBzMl9mZgotICBz MV9zbHJ1X2NoZWNrX3N0YXRzCiAgIHMxX2NvbW1pdAotICBzMV9zbHJ1X2NoZWNrX3N0YXRzCiBw ZXJtdXRhdGlvbgogICBzMV9mZXRjaF9jb25zaXN0ZW5jeV9jYWNoZQotICBzMV9zbHJ1X3NhdmVf c3RhdHMgczFfbGlzdGVuCisgIHMxX2xpc3RlbgogICBzMV9iZWdpbgotICBzMV9zbHJ1X2NoZWNr X3N0YXRzCiAgIHMyX2JpZ19ub3RpZnkKICAgczJfZmYKLSAgczFfc2xydV9jaGVja19zdGF0cwog ICBzMV9jb21taXQKLSAgczFfc2xydV9jaGVja19zdGF0cwogcGVybXV0YXRpb24KICAgczFfZmV0 Y2hfY29uc2lzdGVuY3lfc25hcHNob3QKLSAgczFfc2xydV9zYXZlX3N0YXRzIHMxX2xpc3Rlbgor ICBzMV9saXN0ZW4KICAgczFfYmVnaW4KLSAgczFfc2xydV9jaGVja19zdGF0cwogICBzMl9iaWdf bm90aWZ5CiAgIHMyX2ZmCi0gIHMxX3NscnVfY2hlY2tfc3RhdHMKICAgczFfY29tbWl0Ci0gIHMx X3NscnVfY2hlY2tfc3RhdHMKIAogIyBjaGVjayB0aGF0IHBnX3N0YXRfY2xlYXJfc25hcHNob3Qo KSwgd2VsbCAuLi4KIHBlcm11dGF0aW9uCiAgIHMxX2ZldGNoX2NvbnNpc3RlbmN5X25vbmUKLSAg czFfc2xydV9zYXZlX3N0YXRzIHMxX2xpc3RlbgorICBzMV9saXN0ZW4KICAgczFfYmVnaW4KLSAg czFfc2xydV9jaGVja19zdGF0cwogICBzMl9iaWdfbm90aWZ5CiAgIHMyX2ZmCi0gIHMxX3NscnVf Y2hlY2tfc3RhdHMKICAgczFfY2xlYXJfc25hcHNob3QKLSAgczFfc2xydV9jaGVja19zdGF0cwog ICBzMV9jb21taXQKIHBlcm11dGF0aW9uCiAgIHMxX2ZldGNoX2NvbnNpc3RlbmN5X2NhY2hlCi0g IHMxX3NscnVfc2F2ZV9zdGF0cyBzMV9saXN0ZW4KKyAgczFfbGlzdGVuCiAgIHMxX2JlZ2luCi0g IHMxX3NscnVfY2hlY2tfc3RhdHMKICAgczJfYmlnX25vdGlmeQogICBzMl9mZgotICBzMV9zbHJ1 X2NoZWNrX3N0YXRzCiAgIHMxX2NsZWFyX3NuYXBzaG90Ci0gIHMxX3NscnVfY2hlY2tfc3RhdHMK ICAgczFfY29tbWl0CiBwZXJtdXRhdGlvbgogICBzMV9mZXRjaF9jb25zaXN0ZW5jeV9zbmFwc2hv dAotICBzMV9zbHJ1X3NhdmVfc3RhdHMgczFfbGlzdGVuCisgIHMxX2xpc3RlbgogICBzMV9iZWdp bgotICBzMV9zbHJ1X2NoZWNrX3N0YXRzCiAgIHMyX2JpZ19ub3RpZnkKICAgczJfZmYKLSAgczFf c2xydV9jaGVja19zdGF0cwogICBzMV9jbGVhcl9zbmFwc2hvdAotICBzMV9zbHJ1X2NoZWNrX3N0 YXRzCiAgIHMxX2NvbW1pdAogCiAjIGNoZWNrIHRoYXQgYSB2YXJpYWJsZS1hbW91bnQgc3RhdHMg YWNjZXNzIGNhY2hlcyBmaXhlZC1hbW91bnQgc3RhdCB0b28KIHBlcm11dGF0aW9uCiAgIHMxX2Zl dGNoX2NvbnNpc3RlbmN5X3NuYXBzaG90Ci0gIHMxX3NscnVfc2F2ZV9zdGF0cyBzMV9saXN0ZW4K KyAgczFfbGlzdGVuCiAgIHMxX2JlZ2luCiAgIHMxX2Z1bmNfc3RhdHMKICAgczJfYmlnX25vdGlm eQogICBzMl9mZgotICBzMV9zbHJ1X2NoZWNrX3N0YXRzCiAgIHMxX2NvbW1pdAogCiAjIGFuZCB0 aGUgb3RoZXIgd2F5IHJvdW5kCiBwZXJtdXRhdGlvbgogICBzMV9mZXRjaF9jb25zaXN0ZW5jeV9z bmFwc2hvdAotICBzMV9zbHJ1X3NhdmVfc3RhdHMgczFfbGlzdGVuCisgIHMxX2xpc3RlbgogICBz MV9iZWdpbgogICBzMl9iaWdfbm90aWZ5CiAgIHMyX2ZmCi0gIHMxX3NscnVfY2hlY2tfc3RhdHMK ICAgczJfZnVuY19jYWxsCiAgIHMyX2ZmCiAgIHMxX2Z1bmNfc3RhdHMKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCmluZGV4 IGM2MjljYmUzODMwLi4yZWZlYjdkNGY5ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9N YWtlZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCkBAIC0zMiw3ICszMiw2IEBA IFNVQkRJUlMgPSBcCiAJCSAgdGVzdF9yZWdleCBcCiAJCSAgdGVzdF9ybHNfaG9va3MgXAogCQkg IHRlc3Rfc2htX21xIFwKLQkJICB0ZXN0X3NscnUgXAogCQkgIHVuc2FmZV90ZXN0cyBcCiAJCSAg d29ya2VyX3NwaQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRz Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHMub3V0CmluZGV4IDFkODQ0MDdh MDM5Li4xNWFjODEyZGExMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z dGF0cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0cy5vdXQKQEAgLTgx Niw0NCArODE2LDYgQEAgV0hFUkUgcGdfc3RhdF9nZXRfYmFja2VuZF9waWQoYmVpZCkgPSBwZ19i YWNrZW5kX3BpZCgpOwogIHQKICgxIHJvdykKIAotLS0tLS0KLS0tIFRlc3QgdGhhdCByZXNldHRp bmcgc3RhdHMgd29ya3MgZm9yIHJlc2V0IHRpbWVzdGFtcAotLS0tLS0KLS0tIFRlc3QgdGhhdCBy ZXNldF9zbHJ1IHdpdGggYSBzcGVjaWZpZWQgU0xSVSB3b3Jrcy4KLVNFTEVDVCBzdGF0c19yZXNl dCBBUyBzbHJ1X2NvbW1pdF90c19yZXNldF90cyBGUk9NIHBnX3N0YXRfc2xydSBXSEVSRSBuYW1l ID0gJ0NvbW1pdFRzJyBcZ3NldAotU0VMRUNUIHN0YXRzX3Jlc2V0IEFTIHNscnVfbm90aWZ5X3Jl c2V0X3RzIEZST00gcGdfc3RhdF9zbHJ1IFdIRVJFIG5hbWUgPSAnTm90aWZ5JyBcZ3NldAotU0VM RUNUIHBnX3N0YXRfcmVzZXRfc2xydSgnQ29tbWl0VHMnKTsKLSBwZ19zdGF0X3Jlc2V0X3NscnUg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIAotKDEgcm93KQotCi1TRUxFQ1Qgc3RhdHNfcmVzZXQg PiA6J3NscnVfY29tbWl0X3RzX3Jlc2V0X3RzJzo6dGltZXN0YW1wdHogRlJPTSBwZ19zdGF0X3Ns cnUgV0hFUkUgbmFtZSA9ICdDb21taXRUcyc7Ci0gP2NvbHVtbj8gCi0tLS0tLS0tLS0tCi0gdAot KDEgcm93KQotCi1TRUxFQ1Qgc3RhdHNfcmVzZXQgQVMgc2xydV9jb21taXRfdHNfcmVzZXRfdHMg RlJPTSBwZ19zdGF0X3NscnUgV0hFUkUgbmFtZSA9ICdDb21taXRUcycgXGdzZXQKLS0tIFRlc3Qg dGhhdCBtdWx0aXBsZSBTTFJVcyBhcmUgcmVzZXQgd2hlbiBubyBzcGVjaWZpYyBTTFJVIHByb3Zp ZGVkIHRvIHJlc2V0IGZ1bmN0aW9uCi1TRUxFQ1QgcGdfc3RhdF9yZXNldF9zbHJ1KE5VTEwpOwot IHBnX3N0YXRfcmVzZXRfc2xydSAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gCi0oMSByb3cpCi0K LVNFTEVDVCBzdGF0c19yZXNldCA+IDonc2xydV9jb21taXRfdHNfcmVzZXRfdHMnOjp0aW1lc3Rh bXB0eiBGUk9NIHBnX3N0YXRfc2xydSBXSEVSRSBuYW1lID0gJ0NvbW1pdFRzJzsKLSA/Y29sdW1u PyAKLS0tLS0tLS0tLS0KLSB0Ci0oMSByb3cpCi0KLVNFTEVDVCBzdGF0c19yZXNldCA+IDonc2xy dV9ub3RpZnlfcmVzZXRfdHMnOjp0aW1lc3RhbXB0eiBGUk9NIHBnX3N0YXRfc2xydSBXSEVSRSBu YW1lID0gJ05vdGlmeSc7Ci0gP2NvbHVtbj8gCi0tLS0tLS0tLS0tCi0gdAotKDEgcm93KQotCiAt LSBUZXN0IHRoYXQgcmVzZXRfc2hhcmVkIHdpdGggYXJjaGl2ZXIgc3BlY2lmaWVkIGFzIHRoZSBz dGF0cyB0eXBlIHdvcmtzCiBTRUxFQ1Qgc3RhdHNfcmVzZXQgQVMgYXJjaGl2ZXJfcmVzZXRfdHMg RlJPTSBwZ19zdGF0X2FyY2hpdmVyIFxnc2V0CiBTRUxFQ1QgcGdfc3RhdF9yZXNldF9zaGFyZWQo J2FyY2hpdmVyJyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3Zp ZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IDAw MWM2ZTdlYjlkLi42NGZlYjliYmM3OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3 cy5vdXQKQEAgLTg1LDEzICs4NSw2IEBAIHNlbGVjdCBjb3VudCgqKSA+PSAwIGFzIG9rIGZyb20g cGdfcHJlcGFyZWRfeGFjdHM7CiAgdAogKDEgcm93KQogCi0tLSBUaGVyZSB3aWxsIHN1cmVseSBi ZSBhdCBsZWFzdCBvbmUgU0xSVSBjYWNoZQotc2VsZWN0IGNvdW50KCopID4gMCBhcyBvayBmcm9t IHBnX3N0YXRfc2xydTsKLSBvayAKLS0tLS0KLSB0Ci0oMSByb3cpCi0KIC0tIFRoZXJlIG11c3Qg YmUgb25seSBvbmUgcmVjb3JkCiBzZWxlY3QgY291bnQoKikgPSAxIGFzIG9rIGZyb20gcGdfc3Rh dF93YWw7CiAgb2sgCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0cy5zcWwg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0cy5zcWwKaW5kZXggYjRkNjc1M2M3MTAuLjc0ZDIx OTlkNWRmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0cy5zcWwKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHMuc3FsCkBAIC00MTIsMjEgKzQxMiw2IEBAIFNFTEVD VCAoY3VycmVudF9zY2hlbWFzKHRydWUpKVsxXSA9ICgncGdfdGVtcF8nIHx8IGJlaWQ6OnRleHQp IEFTIG1hdGNoCiBGUk9NIHBnX3N0YXRfZ2V0X2JhY2tlbmRfaWRzZXQoKSBiZWlkCiBXSEVSRSBw Z19zdGF0X2dldF9iYWNrZW5kX3BpZChiZWlkKSA9IHBnX2JhY2tlbmRfcGlkKCk7CiAKLS0tLS0t Ci0tLSBUZXN0IHRoYXQgcmVzZXR0aW5nIHN0YXRzIHdvcmtzIGZvciByZXNldCB0aW1lc3RhbXAK LS0tLS0tCi0KLS0tIFRlc3QgdGhhdCByZXNldF9zbHJ1IHdpdGggYSBzcGVjaWZpZWQgU0xSVSB3 b3Jrcy4KLVNFTEVDVCBzdGF0c19yZXNldCBBUyBzbHJ1X2NvbW1pdF90c19yZXNldF90cyBGUk9N IHBnX3N0YXRfc2xydSBXSEVSRSBuYW1lID0gJ0NvbW1pdFRzJyBcZ3NldAotU0VMRUNUIHN0YXRz X3Jlc2V0IEFTIHNscnVfbm90aWZ5X3Jlc2V0X3RzIEZST00gcGdfc3RhdF9zbHJ1IFdIRVJFIG5h bWUgPSAnTm90aWZ5JyBcZ3NldAotU0VMRUNUIHBnX3N0YXRfcmVzZXRfc2xydSgnQ29tbWl0VHMn KTsKLVNFTEVDVCBzdGF0c19yZXNldCA+IDonc2xydV9jb21taXRfdHNfcmVzZXRfdHMnOjp0aW1l c3RhbXB0eiBGUk9NIHBnX3N0YXRfc2xydSBXSEVSRSBuYW1lID0gJ0NvbW1pdFRzJzsKLVNFTEVD VCBzdGF0c19yZXNldCBBUyBzbHJ1X2NvbW1pdF90c19yZXNldF90cyBGUk9NIHBnX3N0YXRfc2xy dSBXSEVSRSBuYW1lID0gJ0NvbW1pdFRzJyBcZ3NldAotCi0tLSBUZXN0IHRoYXQgbXVsdGlwbGUg U0xSVXMgYXJlIHJlc2V0IHdoZW4gbm8gc3BlY2lmaWMgU0xSVSBwcm92aWRlZCB0byByZXNldCBm dW5jdGlvbgotU0VMRUNUIHBnX3N0YXRfcmVzZXRfc2xydShOVUxMKTsKLVNFTEVDVCBzdGF0c19y ZXNldCA+IDonc2xydV9jb21taXRfdHNfcmVzZXRfdHMnOjp0aW1lc3RhbXB0eiBGUk9NIHBnX3N0 YXRfc2xydSBXSEVSRSBuYW1lID0gJ0NvbW1pdFRzJzsKLVNFTEVDVCBzdGF0c19yZXNldCA+IDon c2xydV9ub3RpZnlfcmVzZXRfdHMnOjp0aW1lc3RhbXB0eiBGUk9NIHBnX3N0YXRfc2xydSBXSEVS RSBuYW1lID0gJ05vdGlmeSc7CiAKIC0tIFRlc3QgdGhhdCByZXNldF9zaGFyZWQgd2l0aCBhcmNo aXZlciBzcGVjaWZpZWQgYXMgdGhlIHN0YXRzIHR5cGUgd29ya3MKIFNFTEVDVCBzdGF0c19yZXNl dCBBUyBhcmNoaXZlcl9yZXNldF90cyBGUk9NIHBnX3N0YXRfYXJjaGl2ZXIgXGdzZXQKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N5c3ZpZXdzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3N5c3ZpZXdzLnNxbAppbmRleCAzNTFlNDY5Yzc3Yi4uNTNiYjVjZWYwM2QgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N5c3ZpZXdzLnNxbAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9zeXN2aWV3cy5zcWwKQEAgLTQyLDkgKzQyLDYgQEAgc2VsZWN0IGNvdW50KCop ID0gMCBhcyBvayBmcm9tIHBnX3ByZXBhcmVkX3N0YXRlbWVudHM7CiAtLSBTZWUgYWxzbyBwcmVw YXJlZF94YWN0cy5zcWwKIHNlbGVjdCBjb3VudCgqKSA+PSAwIGFzIG9rIGZyb20gcGdfcHJlcGFy ZWRfeGFjdHM7CiAKLS0tIFRoZXJlIHdpbGwgc3VyZWx5IGJlIGF0IGxlYXN0IG9uZSBTTFJVIGNh Y2hlCi1zZWxlY3QgY291bnQoKikgPiAwIGFzIG9rIGZyb20gcGdfc3RhdF9zbHJ1OwotCiAtLSBU aGVyZSBtdXN0IGJlIG9ubHkgb25lIHJlY29yZAogc2VsZWN0IGNvdW50KCopID0gMSBhcyBvayBm cm9tIHBnX3N0YXRfd2FsOwogCi0tIAoyLjM4LjEKCg== --_002_BBA4E674ABCC4788AE1C8EB295B217FEamazoncom_--