Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w8pCr-000upy-0T for pgsql-hackers@arkaria.postgresql.org; Sat, 04 Apr 2026 00:49:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w8pCp-00EopO-2Y for pgsql-hackers@arkaria.postgresql.org; Sat, 04 Apr 2026 00:49:44 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w8pCp-00EopF-0K for pgsql-hackers@lists.postgresql.org; Sat, 04 Apr 2026 00:49:43 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1w8pCg-00000000TD8-1uJC for pgsql-hackers@postgresql.org; Sat, 04 Apr 2026 00:49:43 +0000 Received: from [10.0.2.15] (unknown [130.41.208.1]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4fncRp6R24z49Q1q; Sat, 04 Apr 2026 03:49:26 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1775263769; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=7KMb0aaTSw3fXrHXeQfeHfE1Olg2lj4QAqxBU9faQys=; b=oZiqHQfWtc6BLCSX8aR79/4iae/DdiQBLFF8tVYVirURmF4IBn2q1u3hcegslmqLH39UqU kgxOqtIKovWdic5vOdF40B6iItg6/0s0JV7jPofSmEvJG2rirUyU/3aWKesBFh7OzAMwoz Fpvm0CXUNzzfRF4tDfUkHhFCvF9XQCvri0cAe5b9UrvdrkkZqFAoG8RHqrnya+xGh7Of0S 6Cnyj6pWShxHRiRskihghAKjfyrEVLIryXtar7eb3aOy4/qeHwwXkswLLmiK3atXGdq7Xx X/LvNunc8AAeTkhdo33QrijwDGUcN0dpg1GMc51uAoj5ad/HTJT3gy9L6tqQbg== ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1775263769; b=BgBeekvctfIJE54EZQRi3lsz1u0oAd5Bx0pj3Jqri7enrSgktzVCSU+Fyr9AZYEJP5+B/i NvZjhoDJyfEImagTtunLg74chax/w7ZKZpczUS6n6opiEFTkUbHWS+EtlwBBOCsv7rIV2x qo05zRF9wdynzU8nH+SBKzALJMM08E016ZDjhrhOj5b6DoU4mk5dPxZBBHZn1K2TkZoSlU 8GXig39vgDKWNn6oGHRLnNIAQSpExbR4PE1lWv19H/+Zg9edsSMgAds/QMoeitn6s2mWDY xSLhlLZROueQan8pboTB6WYQ2SM/SKe7cEGGEjjrOyyEGew26jEFJQwCI2RpWg== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1775263769; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=7KMb0aaTSw3fXrHXeQfeHfE1Olg2lj4QAqxBU9faQys=; b=ByY+KujmVFjGB7/d6WJTM8cnHdsHDsEI4de4Tm/I2YX7Kedevjg796mhzlz8gpynUfjJUJ fJ9gEnjUlAcLZ/DL9W8tCYxt5MhlRQdGIfwUGhmahE/DNyVlGeh5ElcOmkyb7VYL+Og5Mk H4gS1YhAmKA4ZtZZuUkEUe0gy5ItPAo0Uf+P2BHcN28VYYFwXYvJmY3PQQk6m9sGacN7hb DykSUZKfckpJ1pbDGfG4XW1JP17qyikufKbRh4zTduY5IvK1JpR+mOmmISsmZxB6lpj47t 9GrXAGOPOaJh1Q5qPX7HsGNDvw18um4uEKfrxXDCS9sRVkln30zz3mXvht8M4A== Content-Type: multipart/mixed; boundary="------------ilO2of90F4UvkC4IFxh0ppYz" Message-ID: <470e7ebe-0971-49f6-8e46-9b8f6395f88b@iki.fi> Date: Sat, 4 Apr 2026 03:49:25 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Better shared data structure management and resizable shared data structures To: Ashutosh Bapat Cc: Robert Haas , Andres Freund , pgsql-hackers , chaturvedipalak1911@gmail.com References: <8a6799be-bd42-49fb-8914-856c97bb1977@iki.fi> <113724ab-0028-493f-9605-6e8570f0939f@iki.fi> <791c3f18-f4de-4d84-ac6b-c7ccc074dd38@iki.fi> <9d919bd9-94dd-4bda-8ccf-ebced4178c53@iki.fi> Content-Language: en-US From: Heikki Linnakangas In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------ilO2of90F4UvkC4IFxh0ppYz Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 02/04/2026 09:58, Ashutosh Bapat wrote: > On Wed, Apr 1, 2026 at 11:47 PM Heikki Linnakangas wrote: >>> + /* >>> + * Extra space to reserve in the shared memory segment, but it's not part >>> + * of the struct itself. This is used for shared memory hash tables that >>> + * can grow beyond the initial size when more buckets are allocated. >>> + */ >>> + size_t extra_size; >>> >>> When we introduce resizable structures (where even the hash table >>> directly itself could be resizable), we will introduce a new field >>> max_size which is easy to get confused with extra_size. Maybe we can >>> rename extra_size to something like "auxilliary_size" to mean size of >>> the auxiliary parts of the structure which are not part of the main >>> struct itself. >>> >>> + /* >>> + * max_size is the estimated maximum number of hashtable entries. This is >>> + * not a hard limit, but the access efficiency will degrade if it is >>> + * exceeded substantially (since it's used to compute directory size and >>> + * the hash table buckets will get overfull). >>> + */ >>> + size_t max_size; >>> + >>> + /* >>> + * init_size is the number of hashtable entries to preallocate. For a >>> + * table whose maximum size is certain, this should be equal to max_size; >>> + * that ensures that no run-time out-of-shared-memory failures can occur. >>> + */ >>> + size_t init_size; >>> >>> Everytime I look at these two fields, I question whether those are the >>> number of entries (i.e. size of the hash table) or number of bytes >>> (size of the memory). I know it's the former, but it indicates that >>> something needs to be changed here, like changing the names to have >>> _entries instead of _size, or changing the type to int64 or some such. >>> Renaming to _entries would conflict with dynahash APIs since they use >>> _size, so maybe the latter? >> >> I hear you, but I didn't change these yet. If we go with the patches >> from the "Shared hash table allocations" thread, max_size and init_size >> will be merged into one. I'll try to settle that thread before making >> changes here. > > Will review those patches next. Those are now committed, and here's a new version rebased over those changes. The hash options is now called 'nelems', and the 'extra_size' in ShmemStructOpts is gone. Plus a bunch of other fixes and cleanups. I also reordered and re-grouped the patches a little, into more logical increments I hope. - Heikki --------------ilO2of90F4UvkC4IFxh0ppYz Content-Type: text/x-patch; charset=UTF-8; name="0001-refactor-Move-ShmemInitHash-to-separate-file.patch" Content-Disposition: attachment; filename="0001-refactor-Move-ShmemInitHash-to-separate-file.patch" Content-Transfer-Encoding: base64 RnJvbSBjMTFiNTM1ZTdhYTA1NDUzMDU5ZDJjYWI3YmU3OWZhODAzNzUzZjZmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMTM6MDc6MjggKzAyMDAK U3ViamVjdDogW1BBVENIIDAxLzE0XSByZWZhY3RvcjogTW92ZSBTaG1lbUluaXRIYXNoIHRv IHNlcGFyYXRlIGZpbGUKCkluIHByZXBhcmF0aW9uIGZvciBuZXh0IGNvbW1pdHMKLS0tCiBz cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9NYWtlZmlsZSAgICAgfCAgIDEgKwogc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvbWVzb24uYnVpbGQgIHwgICAxICsKIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL3NobWVtLmMgICAgICB8IDEwOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbV9oYXNoLmMgfCAxMzAgKysrKysrKysrKysrKysr KysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmggICAgICAgICAgfCAg IDkgKy0KIDUgZmlsZXMgY2hhbmdlZCwgMTM5IGluc2VydGlvbnMoKyksIDExMCBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1l bV9oYXNoLmMKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9NYWtlZmls ZSBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL01ha2VmaWxlCmluZGV4IDlhMDdmNmUxZDky Li5mNzE2NTNiYmU0OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvTWFr ZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvTWFrZWZpbGUKQEAgLTIyLDYg KzIyLDcgQEAgT0JKUyA9IFwKIAlzaG1fbXEubyBcCiAJc2htX3RvYy5vIFwKIAlzaG1lbS5v IFwKKwlzaG1lbV9oYXNoLm8gXAogCXNpZ25hbGZ1bmNzLm8gXAogCXNpbnZhbC5vIFwKIAlz aW52YWxhZHQubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9tZXNv bi5idWlsZCBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL21lc29uLmJ1aWxkCmluZGV4IDlj MWNhOTU0ZDlkLi5iOGMzMWUyOTk2NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvbWVzb24u YnVpbGQKQEAgLTE0LDYgKzE0LDcgQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAn c2htX21xLmMnLAogICAnc2htX3RvYy5jJywKICAgJ3NobWVtLmMnLAorICAnc2htZW1faGFz aC5jJywKICAgJ3NpZ25hbGZ1bmNzLmMnLAogICAnc2ludmFsLmMnLAogICAnc2ludmFsYWR0 LmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKaW5kZXggM2NiNTFhZDYyZjguLmM5OTRm NzY3NGVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKQEAgLTk2LDkgKzk2LDYgQEAg dHlwZWRlZiBzdHJ1Y3QgU2htZW1BbGxvY2F0b3JEYXRhCiAKICNkZWZpbmUgU2htZW1JbmRl eExvY2sgKCZTaG1lbUFsbG9jYXRvci0+aW5kZXhfbG9jaykKIAotc3RhdGljIEhUQUIgKnNo bWVtX2hhc2hfY3JlYXRlKHZvaWQgKmxvY2F0aW9uLCBzaXplX3Qgc2l6ZSwgYm9vbCBmb3Vu ZCwKLQkJCQkJCQkgICBjb25zdCBjaGFyICpuYW1lLCBpbnQ2NCBuZWxlbXMsIEhBU0hDVEwg KmluZm9QLCBpbnQgaGFzaF9mbGFncyk7Ci1zdGF0aWMgdm9pZCAqU2htZW1IYXNoQWxsb2Mo U2l6ZSBzaXplLCB2b2lkICphbGxvY19hcmcpOwogc3RhdGljIHZvaWQgKlNobWVtQWxsb2NS YXcoU2l6ZSBzaXplLCBTaXplICphbGxvY2F0ZWRfc2l6ZSk7CiAKIC8qIHNoYXJlZCBtZW1v cnkgZ2xvYmFsIHZhcmlhYmxlcyAqLwpAQCAtMjU3LDI5ICsyNTQsNiBAQCBTaG1lbUFsbG9j Tm9FcnJvcihTaXplIHNpemUpCiAJcmV0dXJuIFNobWVtQWxsb2NSYXcoc2l6ZSwgJmFsbG9j YXRlZF9zaXplKTsKIH0KIAotLyoKLSAqIFNobWVtSGFzaEFsbG9jIC0tIGFsbG9jIGNhbGxi YWNrIGZvciBzaGFyZWQgbWVtb3J5IGhhc2ggdGFibGVzCi0gKgotICogQ2FydmUgb3V0IHRo ZSBhbGxvY2F0aW9uIGZyb20gYSBwcmUtYWxsb2NhdGVkIHJlZ2lvbi4gIEFsbCBzaGFyZWQg bWVtb3J5Ci0gKiBoYXNoIHRhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBIQVNIX0ZJWEVE X1NJWkUsIHNvIGFsbCB0aGUgYWxsb2NhdGlvbnMKLSAqIGhhcHBlbiB1cGZyb250IGR1cmlu ZyBpbml0aWFsaXphdGlvbiBhbmQgbm8gbG9ja2luZyBpcyByZXF1aXJlZC4KLSAqLwotc3Rh dGljIHZvaWQgKgotU2htZW1IYXNoQWxsb2MoU2l6ZSBzaXplLCB2b2lkICphbGxvY19hcmcp Ci17Ci0Jc2htZW1faGFzaF9hbGxvY2F0b3IgKmFsbG9jYXRvciA9IChzaG1lbV9oYXNoX2Fs bG9jYXRvciAqKSBhbGxvY19hcmc7Ci0Jdm9pZAkgICAqcmVzdWx0OwotCi0Jc2l6ZSA9IE1B WEFMSUdOKHNpemUpOwotCi0JaWYgKGFsbG9jYXRvci0+ZW5kIC0gYWxsb2NhdG9yLT5uZXh0 IDwgc2l6ZSkKLQkJcmV0dXJuIE5VTEw7Ci0JcmVzdWx0ID0gYWxsb2NhdG9yLT5uZXh0Owot CWFsbG9jYXRvci0+bmV4dCArPSBzaXplOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQogLyoK ICAqIFNobWVtQWxsb2NSYXcgLS0gYWxsb2NhdGUgYWxpZ24gY2h1bmsgYW5kIHJldHVybiBh bGxvY2F0ZWQgc2l6ZQogICoKQEAgLTM0MSw4OCArMzE1LDYgQEAgU2htZW1BZGRySXNWYWxp ZChjb25zdCB2b2lkICphZGRyKQogCXJldHVybiAoYWRkciA+PSBTaG1lbUJhc2UpICYmIChh ZGRyIDwgU2htZW1FbmQpOwogfQogCi0vKgotICogU2htZW1Jbml0SGFzaCAtLSBDcmVhdGUg YW5kIGluaXRpYWxpemUsIG9yIGF0dGFjaCB0bywgYQotICoJCXNoYXJlZCBtZW1vcnkgaGFz aCB0YWJsZS4KLSAqCi0gKiBXZSBhc3N1bWUgY2FsbGVyIGlzIGRvaW5nIHNvbWUga2luZCBv ZiBzeW5jaHJvbml6YXRpb24KLSAqIHNvIHRoYXQgdHdvIHByb2Nlc3NlcyBkb24ndCB0cnkg dG8gY3JlYXRlL2luaXRpYWxpemUgdGhlIHNhbWUKLSAqIHRhYmxlIGF0IG9uY2UuICAoSW4g cHJhY3RpY2UsIGFsbCBjcmVhdGlvbnMgYXJlIGRvbmUgaW4gdGhlIHBvc3RtYXN0ZXIKLSAq IHByb2Nlc3M7IGNoaWxkIHByb2Nlc3NlcyBzaG91bGQgYWx3YXlzIGJlIGF0dGFjaGluZyB0 byBleGlzdGluZyB0YWJsZXMuKQotICoKLSAqIG5lbGVtcyBpcyB0aGUgbWF4aW11bSBudW1i ZXIgb2YgaGFzaHRhYmxlIGVudHJpZXMuCi0gKgotICogKmluZm9QIGFuZCBoYXNoX2ZsYWdz IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCB0aGUgZW50cnkgc2l6ZXMgYW5kIGtleQotICogY29t cGFyaXNvbiBzZW1hbnRpY3MgKHNlZSBoYXNoX2NyZWF0ZSgpKS4gIEZsYWcgYml0cyBhbmQg dmFsdWVzIHNwZWNpZmljCi0gKiB0byBzaGFyZWQtbWVtb3J5IGhhc2ggdGFibGVzIGFyZSBh ZGRlZCBoZXJlLCBleGNlcHQgdGhhdCBjYWxsZXJzIG1heQotICogY2hvb3NlIHRvIHNwZWNp ZnkgSEFTSF9QQVJUSVRJT04uCi0gKgotICogTm90ZTogYmVmb3JlIFBvc3RncmVzIDkuMCwg dGhpcyBmdW5jdGlvbiByZXR1cm5lZCBOVUxMIGZvciBzb21lIGZhaWx1cmUKLSAqIGNhc2Vz LiAgTm93LCBpdCBhbHdheXMgdGhyb3dzIGVycm9yIGluc3RlYWQsIHNvIGNhbGxlcnMgbmVl ZCBub3QgY2hlY2sKLSAqIGZvciBOVUxMLgotICovCi1IVEFCICoKLVNobWVtSW5pdEhhc2go Y29uc3QgY2hhciAqbmFtZSwJCS8qIHRhYmxlIHN0cmluZyBuYW1lIGZvciBzaG1lbSBpbmRl eCAqLwotCQkJICBpbnQ2NCBuZWxlbXMsCQkvKiBzaXplIG9mIHRoZSB0YWJsZSAqLwotCQkJ ICBIQVNIQ1RMICppbmZvUCwJLyogaW5mbyBhYm91dCBrZXkgYW5kIGJ1Y2tldCBzaXplICov Ci0JCQkgIGludCBoYXNoX2ZsYWdzKQkvKiBpbmZvIGFib3V0IGluZm9QICovCi17Ci0JYm9v bAkJZm91bmQ7Ci0Jc2l6ZV90CQlzaXplOwotCXZvaWQJICAgKmxvY2F0aW9uOwotCi0Jc2l6 ZSA9IGhhc2hfZXN0aW1hdGVfc2l6ZShuZWxlbXMsIGluZm9QLT5lbnRyeXNpemUpOwotCi0J LyogbG9vayBpdCB1cCBpbiB0aGUgc2htZW0gaW5kZXggb3IgYWxsb2NhdGUgKi8KLQlsb2Nh dGlvbiA9IFNobWVtSW5pdFN0cnVjdChuYW1lLCBzaXplLCAmZm91bmQpOwotCi0JcmV0dXJu IHNobWVtX2hhc2hfY3JlYXRlKGxvY2F0aW9uLCBzaXplLCBmb3VuZCwKLQkJCQkJCQkgbmFt ZSwgbmVsZW1zLCBpbmZvUCwgaGFzaF9mbGFncyk7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXpl IG9yIGF0dGFjaCB0byBhIHNoYXJlZCBoYXNoIHRhYmxlIGluIHRoZSBnaXZlbiBzaG1lbSBy ZWdpb24uCi0gKgotICogVGhpcyBpcyBleHRyYWN0ZWQgZnJvbSBTaG1lbUluaXRIYXNoKCkg dG8gYWxsb3cgSW5pdFNobWVtQWxsb2NhdG9yKCkgdG8KLSAqIHNoYXJlIHRoZSBsb2dpYyBm b3IgYm9vdHN0cmFwcGluZyB0aGUgU2htZW1JbmRleCBoYXNoIHRhYmxlLgotICovCi1zdGF0 aWMgSFRBQiAqCi1zaG1lbV9oYXNoX2NyZWF0ZSh2b2lkICpsb2NhdGlvbiwgc2l6ZV90IHNp emUsIGJvb2wgZm91bmQsCi0JCQkJICBjb25zdCBjaGFyICpuYW1lLCBpbnQ2NCBuZWxlbXMs IEhBU0hDVEwgKmluZm9QLCBpbnQgaGFzaF9mbGFncykKLXsKLQlzaG1lbV9oYXNoX2FsbG9j YXRvciBhbGxvY2F0b3I7Ci0KLQkvKgotCSAqIEhhc2ggdGFibGVzIGFsbG9jYXRlZCBpbiBz aGFyZWQgbWVtb3J5IGhhdmUgYSBmaXhlZCBkaXJlY3RvcnkgYW5kIGhhdmUKLQkgKiBhbGwg ZWxlbWVudHMgYWxsb2NhdGVkIHVwZnJvbnQuICBXZSBkb24ndCBzdXBwb3J0IGdyb3dpbmcg YmVjYXVzZSB3ZSdkCi0JICogbmVlZCB0byBncm93IHRoZSB1bmRlcmx5aW5nIHNobWVtIHJl Z2lvbiB3aXRoIGl0LgotCSAqCi0JICogVGhlIHNoYXJlZCBtZW1vcnkgYWxsb2NhdG9yIG11 c3QgYmUgc3BlY2lmaWVkIHRvby4KLQkgKi8KLQlpbmZvUC0+YWxsb2MgPSBTaG1lbUhhc2hB bGxvYzsKLQlpbmZvUC0+YWxsb2NfYXJnID0gTlVMTDsKLQloYXNoX2ZsYWdzIHw9IEhBU0hf U0hBUkVEX01FTSB8IEhBU0hfQUxMT0MgfCBIQVNIX0ZJWEVEX1NJWkU7Ci0KLQkvKgotCSAq IGlmIGl0IGFscmVhZHkgZXhpc3RzLCBhdHRhY2ggdG8gaXQgcmF0aGVyIHRoYW4gYWxsb2Nh dGUgYW5kIGluaXRpYWxpemUKLQkgKiBuZXcgc3BhY2UKLQkgKi8KLQlpZiAoIWZvdW5kKQot CXsKLQkJYWxsb2NhdG9yLm5leHQgPSAoY2hhciAqKSBsb2NhdGlvbjsKLQkJYWxsb2NhdG9y LmVuZCA9IChjaGFyICopIGxvY2F0aW9uICsgc2l6ZTsKLQkJaW5mb1AtPmFsbG9jX2FyZyA9 ICZhbGxvY2F0b3I7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qIFBhc3MgbG9jYXRpb24gb2YgaGFz aHRhYmxlIGhlYWRlciB0byBoYXNoX2NyZWF0ZSAqLwotCQlpbmZvUC0+aGN0bCA9IChIQVNI SERSICopIGxvY2F0aW9uOwotCQloYXNoX2ZsYWdzIHw9IEhBU0hfQVRUQUNIOwotCX0KLQot CXJldHVybiBoYXNoX2NyZWF0ZShuYW1lLCBuZWxlbXMsIGluZm9QLCBoYXNoX2ZsYWdzKTsK LX0KLQogLyoKICAqIFNobWVtSW5pdFN0cnVjdCAtLSBDcmVhdGUvYXR0YWNoIHRvIGEgc3Ry dWN0dXJlIGluIHNoYXJlZCBtZW1vcnkuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvc2htZW1faGFzaC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ht ZW1faGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wYjA1 NzMwMTI5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3No bWVtX2hhc2guYwpAQCAtMCwwICsxLDEzMCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogc2htZW1faGFzaC5jCisgKgkgIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gaW4g c2hhcmVkIG1lbW9yeQorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKKyAqCisgKiBBIHNoYXJlZCBtZW1vcnkgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbiBv biB0b3Agb2YgdGhlIG5hbWVkLCBmaXhlZC1zaXplCisgKiBzaGFyZWQgbWVtb3J5IGFyZWFz IG1hbmFnZWQgYnkgc2htZW0uYy4gIEhhc2ggdGFibGVzIGhhdmUgYSBmaXhlZCBtYXhpbXVt CisgKiBzaXplLCBidXQgdGhlaXIgYWN0dWFsIHNpemUgY2FuIHZhcnkgZHluYW1pY2FsbHku ICBXaGVuIGVudHJpZXMgYXJlIGFkZGVkCisgKiB0byB0aGUgdGFibGUsIG1vcmUgc3BhY2Ug aXMgYWxsb2NhdGVkLiAgRWFjaCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUgYW5kIGhhc2gKKyAq IGhhcyBhIHN0cmluZyBuYW1lIHRvIGlkZW50aWZ5IGl0LgorICoKKyAqIElERU5USUZJQ0FU SU9OCisgKgkgIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtX2hhc2guYworICoKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisj aW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorCitzdGF0aWMgdm9pZCAqU2htZW1IYXNoQWxs b2MoU2l6ZSBzaXplLCB2b2lkICphbGxvY19hcmcpOworCisvKgorICogU2htZW1Jbml0SGFz aCAtLSBDcmVhdGUgYW5kIGluaXRpYWxpemUsIG9yIGF0dGFjaCB0bywgYQorICoJCXNoYXJl ZCBtZW1vcnkgaGFzaCB0YWJsZS4KKyAqCisgKiBXZSBhc3N1bWUgY2FsbGVyIGlzIGRvaW5n IHNvbWUga2luZCBvZiBzeW5jaHJvbml6YXRpb24KKyAqIHNvIHRoYXQgdHdvIHByb2Nlc3Nl cyBkb24ndCB0cnkgdG8gY3JlYXRlL2luaXRpYWxpemUgdGhlIHNhbWUKKyAqIHRhYmxlIGF0 IG9uY2UuICAoSW4gcHJhY3RpY2UsIGFsbCBjcmVhdGlvbnMgYXJlIGRvbmUgaW4gdGhlIHBv c3RtYXN0ZXIKKyAqIHByb2Nlc3M7IGNoaWxkIHByb2Nlc3NlcyBzaG91bGQgYWx3YXlzIGJl IGF0dGFjaGluZyB0byBleGlzdGluZyB0YWJsZXMuKQorICoKKyAqIG5lbGVtcyBpcyB0aGUg bWF4aW11bSBudW1iZXIgb2YgaGFzaHRhYmxlIGVudHJpZXMuCisgKgorICogKmluZm9QIGFu ZCBoYXNoX2ZsYWdzIG11c3Qgc3BlY2lmeSBhdCBsZWFzdCB0aGUgZW50cnkgc2l6ZXMgYW5k IGtleQorICogY29tcGFyaXNvbiBzZW1hbnRpY3MgKHNlZSBoYXNoX2NyZWF0ZSgpKS4gIEZs YWcgYml0cyBhbmQgdmFsdWVzIHNwZWNpZmljCisgKiB0byBzaGFyZWQtbWVtb3J5IGhhc2gg dGFibGVzIGFyZSBhZGRlZCBoZXJlLCBleGNlcHQgdGhhdCBjYWxsZXJzIG1heQorICogY2hv b3NlIHRvIHNwZWNpZnkgSEFTSF9QQVJUSVRJT04uCisgKgorICogTm90ZTogYmVmb3JlIFBv c3RncmVzIDkuMCwgdGhpcyBmdW5jdGlvbiByZXR1cm5lZCBOVUxMIGZvciBzb21lIGZhaWx1 cmUKKyAqIGNhc2VzLiAgTm93LCBpdCBhbHdheXMgdGhyb3dzIGVycm9yIGluc3RlYWQsIHNv IGNhbGxlcnMgbmVlZCBub3QgY2hlY2sKKyAqIGZvciBOVUxMLgorICovCitIVEFCICoKK1No bWVtSW5pdEhhc2goY29uc3QgY2hhciAqbmFtZSwJCS8qIHRhYmxlIHN0cmluZyBuYW1lIGZv ciBzaG1lbSBpbmRleCAqLworCQkJICBpbnQ2NCBuZWxlbXMsCQkvKiBzaXplIG9mIHRoZSB0 YWJsZSAqLworCQkJICBIQVNIQ1RMICppbmZvUCwJLyogaW5mbyBhYm91dCBrZXkgYW5kIGJ1 Y2tldCBzaXplICovCisJCQkgIGludCBoYXNoX2ZsYWdzKQkvKiBpbmZvIGFib3V0IGluZm9Q ICovCit7CisJYm9vbAkJZm91bmQ7CisJc2l6ZV90CQlzaXplOworCXZvaWQJICAgKmxvY2F0 aW9uOworCisJc2l6ZSA9IGhhc2hfZXN0aW1hdGVfc2l6ZShuZWxlbXMsIGluZm9QLT5lbnRy eXNpemUpOworCisJLyogbG9vayBpdCB1cCBpbiB0aGUgc2htZW0gaW5kZXggb3IgYWxsb2Nh dGUgKi8KKwlsb2NhdGlvbiA9IFNobWVtSW5pdFN0cnVjdChuYW1lLCBzaXplLCAmZm91bmQp OworCisJcmV0dXJuIHNobWVtX2hhc2hfY3JlYXRlKGxvY2F0aW9uLCBzaXplLCBmb3VuZCwK KwkJCQkJCQkgbmFtZSwgbmVsZW1zLCBpbmZvUCwgaGFzaF9mbGFncyk7Cit9CisKKy8qCisg KiBJbml0aWFsaXplIG9yIGF0dGFjaCB0byBhIHNoYXJlZCBoYXNoIHRhYmxlIGluIHRoZSBn aXZlbiBzaG1lbSByZWdpb24uCisgKgorICogVGhpcyBpcyBleHRyYWN0ZWQgZnJvbSBTaG1l bUluaXRIYXNoKCkgdG8gYWxsb3cgSW5pdFNobWVtQWxsb2NhdG9yKCkgdG8KKyAqIHNoYXJl IHRoZSBsb2dpYyBmb3IgYm9vdHN0cmFwcGluZyB0aGUgU2htZW1JbmRleCBoYXNoIHRhYmxl LgorICovCitIVEFCICoKK3NobWVtX2hhc2hfY3JlYXRlKHZvaWQgKmxvY2F0aW9uLCBzaXpl X3Qgc2l6ZSwgYm9vbCBmb3VuZCwKKwkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGludDY0IG5l bGVtcywgSEFTSENUTCAqaW5mb1AsIGludCBoYXNoX2ZsYWdzKQoreworCXNobWVtX2hhc2hf YWxsb2NhdG9yIGFsbG9jYXRvcjsKKworCS8qCisJICogSGFzaCB0YWJsZXMgYWxsb2NhdGVk IGluIHNoYXJlZCBtZW1vcnkgaGF2ZSBhIGZpeGVkIGRpcmVjdG9yeSBhbmQgaGF2ZQorCSAq IGFsbCBlbGVtZW50cyBhbGxvY2F0ZWQgdXBmcm9udC4gIFdlIGRvbid0IHN1cHBvcnQgZ3Jv d2luZyBiZWNhdXNlIHdlJ2QKKwkgKiBuZWVkIHRvIGdyb3cgdGhlIHVuZGVybHlpbmcgc2ht ZW0gcmVnaW9uIHdpdGggaXQuCisJICoKKwkgKiBUaGUgc2hhcmVkIG1lbW9yeSBhbGxvY2F0 b3IgbXVzdCBiZSBzcGVjaWZpZWQgdG9vLgorCSAqLworCWluZm9QLT5hbGxvYyA9IFNobWVt SGFzaEFsbG9jOworCWluZm9QLT5hbGxvY19hcmcgPSBOVUxMOworCWhhc2hfZmxhZ3MgfD0g SEFTSF9TSEFSRURfTUVNIHwgSEFTSF9BTExPQyB8IEhBU0hfRklYRURfU0laRTsKKworCS8q CisJICogaWYgaXQgYWxyZWFkeSBleGlzdHMsIGF0dGFjaCB0byBpdCByYXRoZXIgdGhhbiBh bGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZQorCSAqIG5ldyBzcGFjZQorCSAqLworCWlmICghZm91 bmQpCisJeworCQlhbGxvY2F0b3IubmV4dCA9IChjaGFyICopIGxvY2F0aW9uOworCQlhbGxv Y2F0b3IuZW5kID0gKGNoYXIgKikgbG9jYXRpb24gKyBzaXplOworCQlpbmZvUC0+YWxsb2Nf YXJnID0gJmFsbG9jYXRvcjsKKwl9CisJZWxzZQorCXsKKwkJLyogUGFzcyBsb2NhdGlvbiBv ZiBoYXNodGFibGUgaGVhZGVyIHRvIGhhc2hfY3JlYXRlICovCisJCWluZm9QLT5oY3RsID0g KEhBU0hIRFIgKikgbG9jYXRpb247CisJCWhhc2hfZmxhZ3MgfD0gSEFTSF9BVFRBQ0g7CisJ fQorCisJcmV0dXJuIGhhc2hfY3JlYXRlKG5hbWUsIG5lbGVtcywgaW5mb1AsIGhhc2hfZmxh Z3MpOworfQorCisvKgorICogU2htZW1IYXNoQWxsb2MgLS0gYWxsb2MgY2FsbGJhY2sgZm9y IHNoYXJlZCBtZW1vcnkgaGFzaCB0YWJsZXMKKyAqCisgKiBDYXJ2ZSBvdXQgdGhlIGFsbG9j YXRpb24gZnJvbSBhIHByZS1hbGxvY2F0ZWQgcmVnaW9uLiAgQWxsIHNoYXJlZCBtZW1vcnkK KyAqIGhhc2ggdGFibGVzIGFyZSBpbml0aWFsaXplZCB3aXRoIEhBU0hfRklYRURfU0laRSwg c28gYWxsIHRoZSBhbGxvY2F0aW9ucworICogaGFwcGVuIHVwZnJvbnQgZHVyaW5nIGluaXRp YWxpemF0aW9uIGFuZCBubyBsb2NraW5nIGlzIHJlcXVpcmVkLgorICovCitzdGF0aWMgdm9p ZCAqCitTaG1lbUhhc2hBbGxvYyhTaXplIHNpemUsIHZvaWQgKmFsbG9jX2FyZykKK3sKKwlz aG1lbV9oYXNoX2FsbG9jYXRvciAqYWxsb2NhdG9yID0gKHNobWVtX2hhc2hfYWxsb2NhdG9y ICopIGFsbG9jX2FyZzsKKwl2b2lkCSAgICpyZXN1bHQ7CisKKwlzaXplID0gTUFYQUxJR04o c2l6ZSk7CisKKwlpZiAoYWxsb2NhdG9yLT5lbmQgLSBhbGxvY2F0b3ItPm5leHQgPCBzaXpl KQorCQlyZXR1cm4gTlVMTDsKKwlyZXN1bHQgPSBhbGxvY2F0b3ItPm5leHQ7CisJYWxsb2Nh dG9yLT5uZXh0ICs9IHNpemU7CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1l bS5oCmluZGV4IDJmY2NiZGI1MzRjLi5iYmYzMjUyM2MwYiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9zaG1lbS5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0u aApAQCAtMzEsMTUgKzMxLDIwIEBAIHR5cGVkZWYgc3RydWN0IFBHU2htZW1IZWFkZXIgUEdT aG1lbUhlYWRlcjsgLyogYXZvaWQgaW5jbHVkaW5nCiBleHRlcm4gdm9pZCBJbml0U2htZW1B bGxvY2F0b3IoUEdTaG1lbUhlYWRlciAqc2VnaGRyKTsKIGV4dGVybiB2b2lkICpTaG1lbUFs bG9jKFNpemUgc2l6ZSk7CiBleHRlcm4gdm9pZCAqU2htZW1BbGxvY05vRXJyb3IoU2l6ZSBz aXplKTsKK2V4dGVybiB2b2lkICpTaG1lbUhhc2hBbGxvYyhTaXplIHNpemUsIHZvaWQgKmFs bG9jX2FyZyk7CiBleHRlcm4gYm9vbCBTaG1lbUFkZHJJc1ZhbGlkKGNvbnN0IHZvaWQgKmFk ZHIpOwotZXh0ZXJuIEhUQUIgKlNobWVtSW5pdEhhc2goY29uc3QgY2hhciAqbmFtZSwgaW50 NjQgbmVsZW1zLAotCQkJCQkJICAgSEFTSENUTCAqaW5mb1AsIGludCBoYXNoX2ZsYWdzKTsK IGV4dGVybiB2b2lkICpTaG1lbUluaXRTdHJ1Y3QoY29uc3QgY2hhciAqbmFtZSwgU2l6ZSBz aXplLCBib29sICpmb3VuZFB0cik7CiBleHRlcm4gU2l6ZSBhZGRfc2l6ZShTaXplIHMxLCBT aXplIHMyKTsKIGV4dGVybiBTaXplIG11bF9zaXplKFNpemUgczEsIFNpemUgczIpOwogCiBl eHRlcm4gUEdETExJTVBPUlQgU2l6ZSBwZ19nZXRfc2htZW1fcGFnZXNpemUodm9pZCk7CiAK Ky8qIHNobWVtX2hhc2guYyAqLworZXh0ZXJuIEhUQUIgKlNobWVtSW5pdEhhc2goY29uc3Qg Y2hhciAqbmFtZSwgaW50NjQgbmVsZW1zLAorCQkJCQkJICAgSEFTSENUTCAqaW5mb1AsIGlu dCBoYXNoX2ZsYWdzKTsKK2V4dGVybiBIVEFCICpzaG1lbV9oYXNoX2NyZWF0ZSh2b2lkICps b2NhdGlvbiwgc2l6ZV90IHNpemUsIGJvb2wgZm91bmQsCisJCQkJCQkJICAgY29uc3QgY2hh ciAqbmFtZSwgaW50NjQgbmVsZW1zLCBIQVNIQ1RMICppbmZvUCwgaW50IGhhc2hfZmxhZ3Mp CisKIC8qIGlwY2kuYyAqLwogZXh0ZXJuIHZvaWQgUmVxdWVzdEFkZGluU2htZW1TcGFjZShT aXplIHNpemUpOwogCi0tIAoyLjQ3LjMKCg== --------------ilO2of90F4UvkC4IFxh0ppYz Content-Type: text/x-patch; charset=UTF-8; name="0002-Introduce-a-new-mechanism-for-registering-shared-mem.patch" Content-Disposition: attachment; filename*0="0002-Introduce-a-new-mechanism-for-registering-shared-mem.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmYWM2ODJhZTUwM2E1ZDAzNzk1MTQ1MzI4ZTJiYzRiYmNhZTJmZWI5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMSBBcHIgMjAyNiAyMDowMTozOSArMDMwMApT dWJqZWN0OiBbUEFUQ0ggMDIvMTRdIEludHJvZHVjZSBhIG5ldyBtZWNoYW5pc20gZm9yIHJl Z2lzdGVyaW5nIHNoYXJlZCBtZW1vcnkKIGFyZWFzCgpUaGlzIG1lcmdlcyB0aGUgc2VwYXJh dGUgW1N1YnN5c3RlbV1TaG1lbVNpemUoKSBhbmQKW1N1YnN5c3RlbV1TaG1lbUluaXQoKSBw aGFzZXMgYXQgcG9zdG1hc3RlciBzdGFydHVwLiBFYWNoIHN1YnN5c3RlbSBpcwpub3cgY2Fs bGVkIGludG8ganVzdCBvbmNlLCBiZWZvcmUgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBo YXMgYmVlbgphbGxvY2F0ZWQsIHRvIHJlZ2lzdGVyIG9yICJyZXF1ZXN0IiB0aGUgc3Vic3lz dGVtJ3Mgc2hhcmVkIG1lbW9yeQpuZWVkcy4gVGhpcyBpcyBtb3JlIGVyZ29ub21pYywgYXMg eW91IG9ubHkgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHNpemUKb25jZS4KClRoaXMgcmVwbGFj ZXMgU2htZW1Jbml0U3RydWN0KCkgYW5kIFNobWVtSW5pdEhhc2goKSwgd2hpY2ggYmVjb21l IGp1c3QKYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd3JhcHBlcnMgYXJvdW5kIHRoZSBuZXcg ZnVuY3Rpb25zLiBJbiBmdXR1cmUKY29tbWl0cywgSSBwbGFuIHRvIHJlcGxhY2UgYWxsIFNo bWVtSW5pdFN0cnVjdCgpIGFuZCBTaG1lbUluaXRIYXNoKCkKY2FsbHMgd2l0aCB0aGUgbmV3 IGZ1bmN0aW9ucywgYWx0aG91Z2ggd2UnbGwgc3RpbGwgbmVlZCB0byBrZWVwIHRoZW0KYXJv dW5kIGZvciBleHRlbnNpb25zLgoKUmV2aWV3ZWQtYnk6IEFzaHV0b3NoIEJhcGF0IDxhc2h1 dG9zaC5iYXBhdC5vc3NAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogWnNvbHQgUGFycmFnaSA8 enNvbHQucGFycmFnaUBwZXJjb25hLmNvbT4KUmV2aWV3ZWQtYnk6IFJvYmVydCBIYWFzIDxy b2JlcnRtaGFhc0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBEYW5pZWwgR3VzdGFmc3NvbiA8 ZGFuaWVsQHllc3FsLnNlPgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9y Zy9tZXNzYWdlLWlkL0NBRXhIVzV2TTFibmVMWWZnMHdHZUFhPTUyVWlKM3o0dktkM0FKNzJY OEZ3NmszS0tyZ0BtYWlsLmdtYWlsLmNvbQotLS0KIGRvYy9zcmMvc2dtbC9zeXN0ZW0tdmll d3Muc2dtbCAgICAgICAgICB8ICAgNCArLQogZG9jL3NyYy9zZ21sL3hmdW5jLnNnbWwgICAg ICAgICAgICAgICAgIHwgMTYyICsrKy0tCiBzcmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHN0 cmFwLmMgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFj a2VuZC5jIHwgICA0ICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jICAg ICB8ICAxOCArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jICAgICAgICAgIHwg IDI5ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jICAgICAgICAgfCA3OTgg KysrKysrKysrKysrKysrKysrKystLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1l bV9oYXNoLmMgICAgfCAgNzcgKystCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5j ICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAg ICAgIHwgICA5ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmggICAgICAgICAgICAg fCAyMTMgKysrKysrLQogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jICAg IHwgICAxIC0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICB8ICAg OSArLQogMTMgZmlsZXMgY2hhbmdlZCwgMTEyOSBpbnNlcnRpb25zKCspLCAxOTkgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sIGIv ZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCmluZGV4IDllZTFhMmJmYzZhLi4yZWJl YzY5MjhkNSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbApAQCAtNDI1NCw4ICs0MjU0LDgg QEAgU0VMRUNUICogRlJPTSBwZ19sb2NrcyBwbCBMRUZUIEpPSU4gcGdfcHJlcGFyZWRfeGFj dHMgcHB4CiAgIDxwYXJhPgogICAgQW5vbnltb3VzIGFsbG9jYXRpb25zIGFyZSBhbGxvY2F0 aW9ucyB0aGF0IGhhdmUgYmVlbiBtYWRlCiAgICB3aXRoIDxsaXRlcmFsPlNobWVtQWxsb2Mo KTwvbGl0ZXJhbD4gZGlyZWN0bHksIHJhdGhlciB0aGFuIHZpYQotICAgPGxpdGVyYWw+U2ht ZW1Jbml0U3RydWN0KCk8L2xpdGVyYWw+IG9yCi0gICA8bGl0ZXJhbD5TaG1lbUluaXRIYXNo KCk8L2xpdGVyYWw+LgorICAgPGxpdGVyYWw+U2htZW1SZXF1ZXN0U3RydWN0KCk8L2xpdGVy YWw+IG9yCisgICA8bGl0ZXJhbD5TaG1lbVJlcXVlc3RIYXNoKCk8L2xpdGVyYWw+LgogICA8 L3BhcmE+CiAKICAgPHBhcmE+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwveGZ1bmMuc2dt bCBiL2RvYy9zcmMvc2dtbC94ZnVuYy5zZ21sCmluZGV4IDcwZTgxNWI4YTJjLi5hZWQzZjJm MDA3MSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3hmdW5jLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL3hmdW5jLnNnbWwKQEAgLTM2MjgsNzEgKzM2MjgsMTMyIEBAIENSRUFURSBGVU5D VElPTiBtYWtlX2FycmF5KGFueWVsZW1lbnQpIFJFVFVSTlMgYW55YXJyYXkKICAgICAgIEFk ZC1pbnMgY2FuIHJlc2VydmUgc2hhcmVkIG1lbW9yeSBvbiBzZXJ2ZXIgc3RhcnR1cC4gIFRv IGRvIHNvLCB0aGUKICAgICAgIGFkZC1pbidzIHNoYXJlZCBsaWJyYXJ5IG11c3QgYmUgcHJl bG9hZGVkIGJ5IHNwZWNpZnlpbmcgaXQgaW4KICAgICAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1z aGFyZWQtcHJlbG9hZC1saWJyYXJpZXMiLz48aW5kZXh0ZXJtPjxwcmltYXJ5PnNoYXJlZF9w cmVsb2FkX2xpYnJhcmllczwvcHJpbWFyeT48L2luZGV4dGVybT4uCi0gICAgICBUaGUgc2hh cmVkIGxpYnJhcnkgc2hvdWxkIGFsc28gcmVnaXN0ZXIgYQotICAgICAgPGxpdGVyYWw+c2ht ZW1fcmVxdWVzdF9ob29rPC9saXRlcmFsPiBpbiBpdHMKLSAgICAgIDxmdW5jdGlvbj5fUEdf aW5pdDwvZnVuY3Rpb24+IGZ1bmN0aW9uLiAgVGhpcwotICAgICAgPGxpdGVyYWw+c2htZW1f cmVxdWVzdF9ob29rPC9saXRlcmFsPiBjYW4gcmVzZXJ2ZSBzaGFyZWQgbWVtb3J5IGJ5Ci0g ICAgICBjYWxsaW5nOgorICAgICAgVGhlIHNoYXJlZCBsaWJyYXJ5IHNob3VsZCByZWdpc3Rl ciBjYWxsYmFja3MgaW4KKyAgICAgIGl0cyA8ZnVuY3Rpb24+X1BHX2luaXQ8L2Z1bmN0aW9u PiBmdW5jdGlvbiwgd2hpY2ggdGhlbiBnZXQgY2FsbGVkIGF0IHRoZQorICAgICAgcmlnaHQg c3RhZ2VzIG9mIHRoZSBzeXN0ZW0gc3RhcnR1cCB0byBpbml0aWFsaXplIHRoZSBzaGFyZWQg bWVtb3J5LgorICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgogPHByb2dyYW1saXN0aW5nPgot dm9pZCBSZXF1ZXN0QWRkaW5TaG1lbVNwYWNlKFNpemUgc2l6ZSkKLTwvcHJvZ3JhbWxpc3Rp bmc+Ci0gICAgICBFYWNoIGJhY2tlbmQgc2hvdWxkIG9idGFpbiBhIHBvaW50ZXIgdG8gdGhl IHJlc2VydmVkIHNoYXJlZCBtZW1vcnkgYnkKLSAgICAgIGNhbGxpbmc6Ci08cHJvZ3JhbWxp c3Rpbmc+Ci12b2lkICpTaG1lbUluaXRTdHJ1Y3QoY29uc3QgY2hhciAqbmFtZSwgU2l6ZSBz aXplLCBib29sICpmb3VuZFB0cikKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICBJZiB0aGlz IGZ1bmN0aW9uIHNldHMgPGxpdGVyYWw+Zm91bmRQdHI8L2xpdGVyYWw+IHRvCi0gICAgICA8 bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4sIHRoZSBjYWxsZXIgc2hvdWxkIHByb2NlZWQgdG8g aW5pdGlhbGl6ZSB0aGUKLSAgICAgIGNvbnRlbnRzIG9mIHRoZSByZXNlcnZlZCBzaGFyZWQg bWVtb3J5LiAgSWYgPGxpdGVyYWw+Zm91bmRQdHI8L2xpdGVyYWw+Ci0gICAgICBpcyBzZXQg dG8gPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4sIHRoZSBzaGFyZWQgbWVtb3J5IHdhcyBhbHJl YWR5Ci0gICAgICBpbml0aWFsaXplZCBieSBhbm90aGVyIGJhY2tlbmQsIGFuZCB0aGUgY2Fs bGVyIG5lZWQgbm90IGluaXRpYWxpemUKLSAgICAgIGZ1cnRoZXIuCi0gICAgIDwvcGFyYT4K K3R5cGVkZWYgc3RydWN0IE15U2htZW1EYXRhIHsKKyAgICBMV0xvY2sgICAgICBsb2NrOyAg ICAvKiBwcm90ZWN0cyB0aGUgZmllbGRzIGJlbG93ICovCiAKLSAgICAgPHBhcmE+Ci0gICAg ICBUbyBhdm9pZCByYWNlIGNvbmRpdGlvbnMsIGVhY2ggYmFja2VuZCBzaG91bGQgdXNlIHRo ZSBMV0xvY2sKLSAgICAgIDxmdW5jdGlvbj5BZGRpblNobWVtSW5pdExvY2s8L2Z1bmN0aW9u PiB3aGVuIGluaXRpYWxpemluZyBpdHMgYWxsb2NhdGlvbgotICAgICAgb2Ygc2hhcmVkIG1l bW9yeSwgYXMgc2hvd24gaGVyZToKLTxwcm9ncmFtbGlzdGluZz4KLXN0YXRpYyBteXN0cnVj dCAqcHRyID0gTlVMTDsKLWJvb2wgICAgICAgIGZvdW5kOworICAgIC4uLiBzaGFyZWQgbWVt b3J5IGNvbnRlbnRzIC4uLgorfSBNeVNobWVtRGF0YTsKKworc3RhdGljIE15U2htZW1EYXRh ICpNeVNobWVtOyAgICAvKiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9y eSAqLworCitzdGF0aWMgdm9pZCBteV9zaG1lbV9yZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0 aWMgdm9pZCBteV9zaG1lbV9pbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJh Y2tzIG15X3NobWVtX2NhbGxiYWNrcyA9IHsKKyAgICAucmVxdWVzdF9mbiA9IG15X3NobWVt X3JlcXVlc3QsCisgICAgLmluaXRfZm4gPSBteV9zaG1lbV9pbml0LAorfTsKKworLyoKKyAq IE1vZHVsZSBsb2FkIGNhbGxiYWNrCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7Cisg ICAgLyoKKyAgICAgKiBJbiBvcmRlciB0byBjcmVhdGUgb3VyIHNoYXJlZCBtZW1vcnkgYXJl YSwgd2UgaGF2ZSB0byBiZSBsb2FkZWQgdmlhCisgICAgICogc2hhcmVkX3ByZWxvYWRfbGli cmFyaWVzLgorICAgICAqLworICAgIGlmICghcHJvY2Vzc19zaGFyZWRfcHJlbG9hZF9saWJy YXJpZXNfaW5fcHJvZ3Jlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIC8qIFJlZ2lzdGVy IG91ciBzaGFyZWQgbWVtb3J5IG5lZWRzICovCisgICAgUmVnaXN0ZXJTaG1lbUNhbGxiYWNr cygmYW1wO215X3NobWVtX2NhbGxiYWNrcyk7Cit9CisKKy8qIGNhbGxiYWNrIHRvIHJlcXVl c3QgICovCitzdGF0aWMgdm9pZAorbXlfc2htZW1fcmVxdWVzdCh2b2lkICphcmcpCit7Cisg ICAgLyogQSBwZXJzaXN0ZW50IGhhbmRsZSB0byB0aGUgc2hhcmVkIG1lbW9yeSBhcmVhIGlu IHRoaXMgYmFja2VuZCAqLworICAgIHN0YXRpYyBTaG1lbVN0cnVjdERlc2MgTXlTaG1lbURl c2M7CisKKyAgICBTaG1lbVJlcXVlc3RTdHJ1Y3QoJmFtcDtNeVNobWVtRGVzYywKKyAgICAg ICAgICAgICAgICAgICAgICAgLm5hbWUgPSAiTXkgc2htZW0gYXJlYSIsCisgICAgICAgICAg ICAgICAgICAgICAgIC5zaXplID0gc2l6ZW9mKE15U2htZW1EYXRhKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgLnB0ciA9ICh2b2lkICoqKSAmYW1wO015U2htZW0sCisgICAgICAgICk7 Cit9CiAKLUxXTG9ja0FjcXVpcmUoQWRkaW5TaG1lbUluaXRMb2NrLCBMV19FWENMVVNJVkUp OwotcHRyID0gU2htZW1Jbml0U3RydWN0KCJteSBzdHJ1Y3QgbmFtZSIsIHNpemUsICZhbXA7 Zm91bmQpOwotaWYgKCFmb3VuZCkKKy8qIGNhbGxiYWNrIHRvIGluaXRpYWxpemUgdGhlIGNv bnRlbnRzIG9mIHRoZSBNeVNobWVtIGFyZWEgYXQgc3RhcnR1cCAqLworc3RhdGljIHZvaWQK K215X3NobWVtX2luaXQodm9pZCAqYXJnKQogewotICAgIC4uLiBpbml0aWFsaXplIGNvbnRl bnRzIG9mIHNoYXJlZCBtZW1vcnkgLi4uCi0gICAgcHRyLT5sb2NrcyA9IEdldE5hbWVkTFdM b2NrVHJhbmNoZSgibXkgdHJhbmNoZSBuYW1lIik7CisgICAgaW50ICAgICAgICAgdHJhbmNo ZV9pZDsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIGxvY2sgKi8KKyAgICB0cmFuY2hlX2lk ID0gTFdMb2NrTmV3VHJhbmNoZUlkKCJteSB0cmFuY2hlIG5hbWUiKTsKKyAgICBMV0xvY2tJ bml0aWFsaXplKCZhbXA7TXlTaG1lbS0+bG9jaywgdHJhbmNoZV9pZCk7CisKKyAgICAuLi4g aW5pdGlhbGl6ZSB0aGUgcmVzdCBvZiBNeVNobWVtIGZpZWxkcyAuLi4KIH0KLUxXTG9ja1Jl bGVhc2UoQWRkaW5TaG1lbUluaXRMb2NrKTsKKwogPC9wcm9ncmFtbGlzdGluZz4KLSAgICAg IDxsaXRlcmFsPnNobWVtX3N0YXJ0dXBfaG9vazwvbGl0ZXJhbD4gcHJvdmlkZXMgYSBjb252 ZW5pZW50IHBsYWNlIGZvciB0aGUKLSAgICAgIGluaXRpYWxpemF0aW9uIGNvZGUsIGJ1dCBp dCBpcyBub3Qgc3RyaWN0bHkgcmVxdWlyZWQgdGhhdCBhbGwgc3VjaCBjb2RlCi0gICAgICBi ZSBwbGFjZWQgaW4gdGhpcyBob29rLiAgT24gV2luZG93cyAoYW5kIGFueXdoZXJlIGVsc2Ug d2hlcmUKLSAgICAgIDxsaXRlcmFsPkVYRUNfQkFDS0VORDwvbGl0ZXJhbD4gaXMgZGVmaW5l ZCksIGVhY2ggYmFja2VuZCBleGVjdXRlcyB0aGUKLSAgICAgIHJlZ2lzdGVyZWQgPGxpdGVy YWw+c2htZW1fc3RhcnR1cF9ob29rPC9saXRlcmFsPiBzaG9ydGx5IGFmdGVyIGl0Ci0gICAg ICBhdHRhY2hlcyB0byBzaGFyZWQgbWVtb3J5LCBzbyBhZGQtaW5zIHNob3VsZCBzdGlsbCBh Y3F1aXJlCi0gICAgICA8ZnVuY3Rpb24+QWRkaW5TaG1lbUluaXRMb2NrPC9mdW5jdGlvbj4g d2l0aGluIHRoaXMgaG9vaywgYXMgc2hvd24gaW4gdGhlCi0gICAgICBleGFtcGxlIGFib3Zl LiAgT24gb3RoZXIgcGxhdGZvcm1zLCBvbmx5IHRoZSBwb3N0bWFzdGVyIHByb2Nlc3MgZXhl Y3V0ZXMKLSAgICAgIHRoZSA8bGl0ZXJhbD5zaG1lbV9zdGFydHVwX2hvb2s8L2xpdGVyYWw+ LCBhbmQgZWFjaCBiYWNrZW5kIGF1dG9tYXRpY2FsbHkKLSAgICAgIGluaGVyaXRzIHRoZSBw b2ludGVycyB0byBzaGFyZWQgbWVtb3J5LgorICAgICAgVGhlIDxmdW5jdGlvbj5yZXF1ZXN0 X2ZuPC9mdW5jdGlvbj4gY2FsbGJhY2sgaXMgY2FsbGVkIGR1cmluZyBzeXN0ZW0KKyAgICAg IHN0YXJ0dXAsIGJlZm9yZSB0aGUgc2hhcmVkIG1lbW9yeSBoYXMgYmVlbiBhbGxvY2F0ZWQu IEl0IHNob3VsZCBjYWxsCisgICAgICA8ZnVuY3Rpb24+U2htZW1SZXF1ZXN0U3RydWN0KCk8 L2Z1bmN0aW9uPiB0byByZWdpc3RlciB0aGUgYWRkLWluJ3MKKyAgICAgIHNoYXJlZCBtZW1v cnkgbmVlZHMuIE5vdGUgdGhhdCA8ZnVuY3Rpb24+U2htZW1SZXF1ZXN0U3RydWN0KCk8L2Z1 bmN0aW9uPgorICAgICAgZG9lc24ndCBpbW1lZGlhdGVseSBhbGxvY2F0ZSBvciBpbml0aWFs aXplIHRoZSBtZW1vcnksIGl0IG1lcmVseQorICAgICAgcmVnaXN0ZXJzIHRoZSBzcGFjZSB0 byBiZSBhbGxvY2F0ZWQgbGF0ZXIgaW4gdGhlIHN0YXJ0dXAgc2VxdWVuY2UuICBXaGVuCisg ICAgICB0aGUgbWVtb3J5IGlzIGFsbG9jYXRlZCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gemVy by4gIEZvciBhbnkgbW9yZQorICAgICAgY29tcGxleCBpbml0aWFsaXphdGlvbiwgc2V0IHRo ZSA8ZnVuY3Rpb24+aW5pdF9mbigpPC9mdW5jdGlvbj4gY2FsbGJhY2ssCisgICAgICB3aGlj aCB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgbWVtb3J5IGhhcyBiZWVuIGFsbG9jYXRlZCBh bmQgaW5pdGlhbGl6ZWQKKyAgICAgIHRvIHplcm8sIGJ1dCBiZWZvcmUgYW55IG90aGVyIHBy b2Nlc3NlcyBhcmUgcnVubmluZywgYW5kIHRodXMgbm8gbG9ja2luZworICAgICAgaXMgcmVx dWlyZWQuCiAgICAgIDwvcGFyYT4KLQogICAgICA8cGFyYT4KLSAgICAgIEFuIGV4YW1wbGUg b2YgYSA8bGl0ZXJhbD5zaG1lbV9yZXF1ZXN0X2hvb2s8L2xpdGVyYWw+IGFuZAotICAgICAg PGxpdGVyYWw+c2htZW1fc3RhcnR1cF9ob29rPC9saXRlcmFsPiBjYW4gYmUgZm91bmQgaW4K KyAgICAgIE9uIFdpbmRvd3MsIHRoZSA8ZnVuY3Rpb24+YXR0YWNoX2ZuPC9mdW5jdGlvbj4g Y2FsbGJhY2ssIGlmIGFueSwgaXMKKyAgICAgIGFkZGl0aW9uYWxseSBjYWxsZWQgYXQgZXZl cnkgYmFja2VuZCBzdGFydHVwLiAgSXQgY2FuIGJlIHVzZWQgdG8KKyAgICAgIGluaXRpYWxp emUgYWRkaXRpb25hbCBwZXItYmFja2VuZCBzdGF0ZSByZWxhdGVkIHRvIHRoZSBzaGFyZWQg bWVtb3J5CisgICAgICBhcmVhIHRoYXQgaXMgaW5oZXJpdGVkIHZpYSA8ZnVuY3Rpb24+Zm9y aygpPC9mdW5jdGlvbj4gb24gb3RoZXIgc3lzdGVtcy4KKyAgICAgPC9wYXJhPgorICAgICA8 cGFyYT4KKyAgICAgIEFuIGV4YW1wbGUgb2YgYWxsb2NhdGluZyBzaGFyZWQgbWVtb3J5IGNh biBiZSBmb3VuZCBpbgogICAgICAgPGZpbGVuYW1lPmNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1l bnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jPC9maWxlbmFtZT4gaW4KICAgICAgIHRoZSA8cHJv ZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHNvdXJjZSB0cmVlLgogICAgICA8 L3BhcmE+CiAgICAgPC9zZWN0Mz4KIAogICAgIDxzZWN0MyBpZD0ieGZ1bmMtc2hhcmVkLWFk ZGluLWFmdGVyLXN0YXJ0dXAiPgotICAgICA8dGl0bGU+UmVxdWVzdGluZyBTaGFyZWQgTWVt b3J5IEFmdGVyIFN0YXJ0dXA8L3RpdGxlPgorICAgICA8dGl0bGU+UmVxdWVzdGluZyBTaGFy ZWQgTWVtb3J5IEFmdGVyIFN0YXJ0dXAgd2l0aCA8ZnVuY3Rpb24+U2htZW1SZXF1ZXN0U3Ry dWN0PC9mdW5jdGlvbj48L3RpdGxlPgorCisgICAgIDxwYXJhPgorICAgICAgVGhlIDxmdW5j dGlvbj5TaG1lbVJlcXVlc3RTdHJ1Y3QoKTwvZnVuY3Rpb24+IGNhbiBhbHNvIGJlIGNhbGxl ZCBhZnRlcgorICAgICAgc3lzdGVtIHN0YXJ0dXAsIHdoaWNoIGlzIHVzZWZ1bCB0byBhbGxv dyBzbWFsbCBhbGxvY2F0aW9ucyBpbiBhZGQtaW4KKyAgICAgIGxpYnJhcmllcyB0aGF0IGFy ZSBub3Qgc3BlY2lmaWVkIGluCisgICAgICA8eHJlZiBsaW5rZW5kPSJndWMtc2hhcmVkLXBy ZWxvYWQtbGlicmFyaWVzIi8+PGluZGV4dGVybT48cHJpbWFyeT5zaGFyZWRfcHJlbG9hZF9s aWJyYXJpZXM8L3ByaW1hcnk+PC9pbmRleHRlcm0+LgorICAgICAgSG93ZXZlciwgYWZ0ZXIg c3RhcnR1cCB0aGUgYWxsb2NhdGlvbiBjYW4gZmFpbCBpZiB0aGVyZSBpcyBub3QgZW5vdWdo CisgICAgICBzaGFyZWQgbWVtb3J5IGF2YWlsYWJsZS4gVGhlIHN5c3RlbSByZXNlcnZlcyBz b21lIG1lbW9yeSBmb3IgYWxsb2NhdGlvbnMKKyAgICAgIGFmdGVyIHN0YXJ0dXAsIGJ1dCB0 aGF0IHJlc2VydmF0aW9uIGlzIHNtYWxsLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgor ICAgICAgQnkgZGVmYXVsdCwgPGZ1bmN0aW9uPlJlZ2lzdGVyU2htZW1DYWxsYmFja3MoKTwv ZnVuY3Rpb24+IGZhaWxzIHdpdGggYW4KKyAgICAgIGVycm9yIGlmIGNhbGxlZCBhZnRlciBz eXN0ZW0gc3RhcnR1cC4gVG8gdXNlIGl0IGFmdGVyIHN0YXJ0dXAsIHlvdSBtdXN0CisgICAg ICBzZXQgdGhlIDxsaXRlcmFsPlNITUVNX0NBTExCQUNLU19BTExPV19BRlRFUl9TVEFSVFVQ PC9saXRlcmFsPiBmbGFnIGluCisgICAgICB0aGUgYXJndW1lbnQgPHN0cnVjdG5hbWU+U2ht ZW1DYWxsYmFja3M8L3N0cnVjdG5hbWU+IHN0cnVjdCB0bworICAgICAgYWNrbm93bGVkZ2Ug dGhlIHJpc2suCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBXaGVuIDxmdW5j dGlvbj5SZWdpc3RlclNobWVtQ2FsbGJhY2tzKCk8L2Z1bmN0aW9uPiBpcyBjYWxsZWQgYWZ0 ZXIKKyAgICAgIHN0YXJ0dXAsIGl0IHdpbGwgaW1tZWRpYXRlbHkgY2FsbCB0aGUgYXBwcm9w cmlhdGUgY2FsbGJhY2tzLCBkZXBlbmRpbmcKKyAgICAgIG9uIHdoZXRoZXIgdGhlIHJlcXVl c3RlZCBtZW1vcnkgYXJlYXMgd2VyZSBhbHJlYWR5IGluaXRpYWxpemVkIGJ5CisgICAgICBh bm90aGVyIGJhY2tlbmQuIFRoZSBjYWxsYmFja3Mgd2lsbCBiZSBjYWxsZWQgd2hpbGUgaG9s ZGluZyBhbiBpbnRlcm5hbAorICAgICAgbG9jaywgd2hpY2ggcHJldmVudHMgY29uY3VycmVu dCB0d28gYmFja2VuZHMgZnJvbSBpbml0aWFsaXphdGluZyB0aGUKKyAgICAgIG1lbW9yeSBh cmVhIGNvbmN1cnJlbnRseS4KKyAgICAgPC9wYXJhPgorICAgIDwvc2VjdDM+CisKKyAgICA8 c2VjdDMgaWQ9InhmdW5jLXNoYXJlZC1hZGRpbi1keW5hbWljIj4KKyAgICAgPHRpdGxlPkFs bG9jYXRpbmcgRHluYW1pYyBTaGFyZWQgTWVtb3J5IEFmdGVyIFN0YXJ0dXA8L3RpdGxlPgog CiAgICAgIDxwYXJhPgogICAgICAgVGhlcmUgaXMgYW5vdGhlciwgbW9yZSBmbGV4aWJsZSBt ZXRob2Qgb2YgcmVzZXJ2aW5nIHNoYXJlZCBtZW1vcnkgdGhhdAotICAgICAgY2FuIGJlIGRv bmUgYWZ0ZXIgc2VydmVyIHN0YXJ0dXAgYW5kIG91dHNpZGUgYQotICAgICAgPGxpdGVyYWw+ c2htZW1fcmVxdWVzdF9ob29rPC9saXRlcmFsPi4gIFRvIGRvIHNvLCBlYWNoIGJhY2tlbmQg dGhhdCB3aWxsCisgICAgICBjYW4gYmUgZG9uZSBhZnRlciBzZXJ2ZXIgc3RhcnR1cC4gIFRv IGRvIHNvLCBlYWNoIGJhY2tlbmQgdGhhdCB3aWxsCiAgICAgICB1c2UgdGhlIHNoYXJlZCBt ZW1vcnkgc2hvdWxkIG9idGFpbiBhIHBvaW50ZXIgdG8gaXQgYnkgY2FsbGluZzoKIDxwcm9n cmFtbGlzdGluZz4KIHZvaWQgKkdldE5hbWVkRFNNU2VnbWVudChjb25zdCBjaGFyICpuYW1l LCBzaXplX3Qgc2l6ZSwKQEAgLTM3MTEsMTAgKzM3NzIsNyBAQCB2b2lkICpHZXROYW1lZERT TVNlZ21lbnQoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsCiAgICAgIDwvcGFyYT4K IAogICAgICA8cGFyYT4KLSAgICAgIFVubGlrZSBzaGFyZWQgbWVtb3J5IHJlc2VydmVkIGF0 IHNlcnZlciBzdGFydHVwLCB0aGVyZSBpcyBubyBuZWVkIHRvCi0gICAgICBhY3F1aXJlIDxm dW5jdGlvbj5BZGRpblNobWVtSW5pdExvY2s8L2Z1bmN0aW9uPiBvciBvdGhlcndpc2UgdGFr ZSBhY3Rpb24KLSAgICAgIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlc2Vydmlu ZyBzaGFyZWQgbWVtb3J5IHdpdGgKLSAgICAgIDxmdW5jdGlvbj5HZXROYW1lZERTTVNlZ21l bnQ8L2Z1bmN0aW9uPi4gIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IG9ubHkKKyAgICAg IDxmdW5jdGlvbj5HZXROYW1lZERTTVNlZ21lbnQ8L2Z1bmN0aW9uPiBlbnN1cmVzIHRoYXQg b25seQogICAgICAgb25lIGJhY2tlbmQgYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUg c2VnbWVudCBhbmQgdGhhdCBhbGwgb3RoZXIKICAgICAgIGJhY2tlbmRzIHJlY2VpdmUgYSBw b2ludGVyIHRvIHRoZSBmdWxseSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkCiAgICAgICBz ZWdtZW50LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5j IGIvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCmluZGV4IGM1MmMwYTYwMjNk Li4yNmQzNzE3YzJjYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3Rz dHJhcC5jCisrKyBiL3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290c3RyYXAuYwpAQCAtMzcz LDYgKzM3Myw3IEBAIEJvb3RzdHJhcE1vZGVNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10s IGJvb2wgY2hlY2tfb25seSkKIAogCUluaXRpYWxpemVGYXN0UGF0aExvY2tzKCk7CiAKKwlT aG1lbUNhbGxSZXF1ZXN0Q2FsbGJhY2tzKCk7CiAJQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2Vt YXBob3JlcygpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv bGF1bmNoX2JhY2tlbmQuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tl bmQuYwppbmRleCA0MzRlMDY0MzAyMi4uNzU0MjMxMDRiZTggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYworKysgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZHNtLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9pb193b3JrZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2lw Yy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNsdWRlICJ0Y29wL2Jh Y2tlbmRfc3RhcnR1cC5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBAIC02NzIs NyArNjczLDEwIEBAIFN1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p CiAKIAkvKiBSZXN0b3JlIGJhc2ljIHNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KIAlpZiAo VXNlZFNobWVtU2VnQWRkciAhPSBOVUxMKQorCXsKIAkJSW5pdFNobWVtQWxsb2NhdG9yKFVz ZWRTaG1lbVNlZ0FkZHIpOworCQlTaG1lbUNhbGxSZXF1ZXN0Q2FsbGJhY2tzKCk7CisJfQog CiAJLyoKIAkgKiBSdW4gdGhlIGFwcHJvcHJpYXRlIE1haW4gZnVuY3Rpb24KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jIGIvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXggZWI0ZjNlYjcyZDQuLjAxYjA2NGQ2MmVh IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYworKysg Yi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAtOTUxLDcgKzk1MSwx NCBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCUluaXRpYWxp emVGYXN0UGF0aExvY2tzKCk7CiAKIAkvKgotCSAqIEdpdmUgcHJlbG9hZGVkIGxpYnJhcmll cyBhIGNoYW5jZSB0byByZXF1ZXN0IGFkZGl0aW9uYWwgc2hhcmVkIG1lbW9yeS4KKwkgKiBB c2sgYWxsIHN1YnN5c3RlbXMsIGluY2x1ZGluZyBwcmVsb2FkZWQgbGlicmFyaWVzLCB0byBy ZWdpc3RlciB0aGVpcgorCSAqIHNoYXJlZCBtZW1vcnkgbmVlZHMuCisJICovCisJU2htZW1D YWxsUmVxdWVzdENhbGxiYWNrcygpOworCisJLyoKKwkgKiBBbHNvIGNhbGwgYW55IGxlZ2Fj eSBzaG1lbSByZXF1ZXN0IGhvb2tzIHRoYXQgbWlnaHQnYmUgYmVlbiBpbnN0YWxsZWQKKwkg KiBieSBwcmVsb2FkZWQgbGlicmFyaWVzLgogCSAqLwogCXByb2Nlc3Nfc2htZW1fcmVxdWVz dHMoKTsKIApAQCAtMzIzMiw3ICszMjM5LDE0IEBAIFBvc3RtYXN0ZXJTdGF0ZU1hY2hpbmUo dm9pZCkKIAkJLyogcmUtcmVhZCBjb250cm9sIGZpbGUgaW50byBsb2NhbCBtZW1vcnkgKi8K IAkJTG9jYWxQcm9jZXNzQ29udHJvbEZpbGUodHJ1ZSk7CiAKLQkJLyogcmUtY3JlYXRlIHNo YXJlZCBtZW1vcnkgYW5kIHNlbWFwaG9yZXMgKi8KKwkJLyoKKwkJICogUmUtaW5pdGlhbGl6 ZSBzaGFyZWQgbWVtb3J5IGFuZCBzZW1hcGhvcmVzLiAgTm90ZTogV2UgZG9uJ3QgY2FsbAor CQkgKiBSZWdpc3RlckJ1aWx0aW5TaG1lbUNhbGxiYWNrcygpLCB3ZSBrZWVwIHRoZSBvbGQg cmVnaXN0cmF0aW9ucy4gIEluCisJCSAqIG9yZGVyIHRvIHJlLXJlZ2lzdGVyIHN0cnVjdHMg aW4gZXh0ZW5zaW9ucywgd2UnZCBuZWVkIHRvIHJlbG9hZAorCQkgKiBzaGFyZWQgcHJlbG9h ZCBsaWJyYXJpZXMsIGFuZCB3ZSBkb24ndCB3YW50IHRvIGRvIHRoYXQuCisJCSAqLworCQlS ZXNldFNobWVtQWxsb2NhdG9yKCk7CisJCVNobWVtQ2FsbFJlcXVlc3RDYWxsYmFja3MoKTsK IAkJQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlcygpOwogCiAJCVVwZGF0ZVBNU3Rh dGUoUE1fU1RBUlRVUCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9p cGNpLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKaW5kZXggN2FhYjVkYTMz ODYuLjUzMzNlNTI4ZTFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9p cGNpLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBAIC0xMDAsOCAr MTAwLDkgQEAgQ2FsY3VsYXRlU2htZW1TaXplKHZvaWQpCiAJICogZHVyaW5nIHRoZSBhY3R1 YWwgYWxsb2NhdGlvbiBwaGFzZS4KIAkgKi8KIAlzaXplID0gMTAwMDAwOwotCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBoYXNoX2VzdGltYXRlX3NpemUoU0hNRU1fSU5ERVhfU0laRSwKLQkJ CQkJCQkJCQkJIHNpemVvZihTaG1lbUluZGV4RW50KSkpOworCXNpemUgPSBhZGRfc2l6ZShz aXplLCBTaG1lbUdldFJlcXVlc3RlZFNpemUoKSk7CisKKwkvKiBsZWdhY3kgc3Vic3lzdGVt cyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBkc21fZXN0aW1hdGVfc2l6ZSgpKTsKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgRFNNUmVnaXN0cnlTaG1lbVNpemUoKSk7CiAJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIEJ1ZmZlck1hbmFnZXJTaG1lbVNpemUoKSk7CkBAIC0xNzYsNiAr MTc3LDEzIEBAIEF0dGFjaFNoYXJlZE1lbW9yeVN0cnVjdHModm9pZCkKIAkgKi8KIAlJbml0 aWFsaXplRmFzdFBhdGhMb2NrcygpOwogCisJLyoKKwkgKiBBdHRhY2ggdG8gTFdMb2NrcyBm aXJzdC4gVGhleSBhcmUgbmVlZGVkIGJ5IG1vc3Qgb3RoZXIgc3Vic3lzdGVtcy4KKwkgKi8K KwlMV0xvY2tTaG1lbUluaXQoKTsKKworCS8qIEVzdGFibGlzaCBwb2ludGVycyB0byBhbGwg c2hhcmVkIG1lbW9yeSBhcmVhcyBpbiB0aGlzIGJhY2tlbmQgKi8KKwlTaG1lbUF0dGFjaFJl cXVlc3RlZCgpOwogCUNyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKCk7CiAKIAkvKgpAQCAt MjIwLDcgKzIyOCwxNyBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQp CiAJICovCiAJSW5pdFNobWVtQWxsb2NhdG9yKHNlZ2hkcik7CiAKLQkvKiBJbml0aWFsaXpl IHN1YnN5c3RlbXMgKi8KKwkvKgorCSAqIEluaXRpYWxpemUgTFdMb2NrcyBmaXJzdCwgaW4g Y2FzZSBhbnkgb2YgdGhlIHNobWVtIGluaXQgZnVuY3Rpb24gdXNlCisJICogTFdMb2Nrcy4g IChOb3RoaW5nIGVsc2UgY2FuIGJlIHJ1bm5pbmcgZHVyaW5nIHN0YXJ0dXAsIHNvIHRoZXkg ZG9uJ3QKKwkgKiBuZWVkIHRvIGRvIGFueSBsb2NraW5nIHlldCwgYnV0IHdlIG5ldmVydGhl bGVzcyBhbGxvdyBpdC4pCisJICovCisJTFdMb2NrU2htZW1Jbml0KCk7CisKKwkvKiBJbml0 aWFsaXplIGFsbCBzaG1lbSBhcmVhcyAqLworCVNobWVtSW5pdFJlcXVlc3RlZCgpOworCisJ LyogSW5pdGlhbGl6ZSBsZWdhY3kgc3Vic3lzdGVtcyAqLwogCUNyZWF0ZU9yQXR0YWNoU2ht ZW1TdHJ1Y3RzKCk7CiAKIAkvKiBJbml0aWFsaXplIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBm YWNpbGl0aWVzLiAqLwpAQCAtMjUxLDExICsyNjksNiBAQCBDcmVhdGVTaGFyZWRNZW1vcnlB bmRTZW1hcGhvcmVzKHZvaWQpCiBzdGF0aWMgdm9pZAogQ3JlYXRlT3JBdHRhY2hTaG1lbVN0 cnVjdHModm9pZCkKIHsKLQkvKgotCSAqIFNldCB1cCBMV0xvY2tzLiAgVGhleSBhcmUgbmVl ZGVkIGJ5IG1vc3Qgb3RoZXIgc3Vic3lzdGVtcy4KLQkgKi8KLQlMV0xvY2tTaG1lbUluaXQo KTsKLQogCWRzbV9zaG1lbV9pbml0KCk7CiAJRFNNUmVnaXN0cnlTaG1lbUluaXQoKTsKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKaW5kZXggYzk5NGY3Njc0ZWMuLjYwNmI1NDVlOGZl IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKQEAgLTE5LDQzICsxOSwxMTUgQEAKICAq IG1ldGhvZHMpLiAgVGhlIHJvdXRpbmVzIGluIHRoaXMgZmlsZSBhcmUgdXNlZCBmb3IgYWxs b2NhdGluZyBhbmQKICAqIGJpbmRpbmcgdG8gc2hhcmVkIG1lbW9yeSBkYXRhIHN0cnVjdHVy ZXMuCiAgKgotICogTk9URVM6Ci0gKgkJKGEpIFRoZXJlIGFyZSB0aHJlZSBraW5kcyBvZiBz aGFyZWQgbWVtb3J5IGRhdGEgc3RydWN0dXJlcwotICoJYXZhaWxhYmxlIHRvIFBPU1RHUkVT OiBmaXhlZC1zaXplIHN0cnVjdHVyZXMsIHF1ZXVlcyBhbmQgaGFzaAotICoJdGFibGVzLiAg Rml4ZWQtc2l6ZSBzdHJ1Y3R1cmVzIGNvbnRhaW4gdGhpbmdzIGxpa2UgZ2xvYmFsIHZhcmlh YmxlcwotICoJZm9yIGEgbW9kdWxlIGFuZCBzaG91bGQgbmV2ZXIgYmUgYWxsb2NhdGVkIGFm dGVyIHRoZSBzaGFyZWQgbWVtb3J5Ci0gKglpbml0aWFsaXphdGlvbiBwaGFzZS4gIEhhc2gg dGFibGVzIGhhdmUgYSBmaXhlZCBtYXhpbXVtIHNpemUgYW5kCi0gKgljYW5ub3QgZ3JvdyBi ZXlvbmQgdGhhdC4gIFF1ZXVlcyBsaW5rIGRhdGEgc3RydWN0dXJlcwotICoJdGhhdCBoYXZl IGJlZW4gYWxsb2NhdGVkIGVpdGhlciB3aXRoaW4gZml4ZWQtc2l6ZSBzdHJ1Y3R1cmVzIG9y IGFzIGhhc2gKLSAqCWJ1Y2tldHMuICBFYWNoIHNoYXJlZCBkYXRhIHN0cnVjdHVyZSBoYXMg YSBzdHJpbmcgbmFtZSB0byBpZGVudGlmeQotICoJaXQgKGFzc2lnbmVkIGluIHRoZSBtb2R1 bGUgdGhhdCBkZWNsYXJlcyBpdCkuCi0gKgotICoJCShiKSBEdXJpbmcgaW5pdGlhbGl6YXRp b24sIGVhY2ggbW9kdWxlIGxvb2tzIGZvciBpdHMKLSAqCXNoYXJlZCBkYXRhIHN0cnVjdHVy ZXMgaW4gYSBoYXNoIHRhYmxlIGNhbGxlZCB0aGUgIlNobWVtIEluZGV4Ii4KLSAqCUlmIHRo ZSBkYXRhIHN0cnVjdHVyZSBpcyBub3QgcHJlc2VudCwgdGhlIGNhbGxlciBjYW4gYWxsb2Nh dGUKLSAqCWEgbmV3IG9uZSBhbmQgaW5pdGlhbGl6ZSBpdC4gIElmIHRoZSBkYXRhIHN0cnVj dHVyZSBpcyBwcmVzZW50LAotICoJdGhlIGNhbGxlciAiYXR0YWNoZXMiIHRvIHRoZSBzdHJ1 Y3R1cmUgYnkgaW5pdGlhbGl6aW5nIGEgcG9pbnRlcgotICoJaW4gdGhlIGxvY2FsIGFkZHJl c3Mgc3BhY2UuCi0gKgkJVGhlIHNobWVtIGluZGV4IGhhcyB0d28gcHVycG9zZXM6IGZpcnN0 LCBpdCBnaXZlcyB1cwotICoJYSBzaW1wbGUgbW9kZWwgb2YgaG93IHRoZSB3b3JsZCBsb29r cyB3aGVuIGEgYmFja2VuZCBwcm9jZXNzCi0gKglpbml0aWFsaXplcy4gIElmIHNvbWV0aGlu ZyBpcyBwcmVzZW50IGluIHRoZSBzaG1lbSBpbmRleCwKLSAqCWl0IGlzIGluaXRpYWxpemVk LiAgSWYgaXQgaXMgbm90LCBpdCBpcyB1bmluaXRpYWxpemVkLiAgU2Vjb25kLAotICoJdGhl IHNobWVtIGluZGV4IGFsbG93cyB1cyB0byBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5IG9uIGRl bWFuZAotICoJaW5zdGVhZCBvZiB0cnlpbmcgdG8gcHJlYWxsb2NhdGUgc3RydWN0dXJlcyBh bmQgaGFyZC13aXJlIHRoZQotICoJc2l6ZXMgYW5kIGxvY2F0aW9ucyBpbiBoZWFkZXIgZmls ZXMuICBJZiB5b3UgYXJlIHVzaW5nIGEgbG90Ci0gKglvZiBzaGFyZWQgbWVtb3J5IGluIGEg bG90IG9mIGRpZmZlcmVudCBwbGFjZXMgKGFuZCBjaGFuZ2luZwotICoJdGhpbmdzIGR1cmlu ZyBkZXZlbG9wbWVudCksIHRoaXMgaXMgaW1wb3J0YW50LgotICoKLSAqCQkoYykgSW4gc3Rh bmRhcmQgVW5peC1pc2ggZW52aXJvbm1lbnRzLCBpbmRpdmlkdWFsIGJhY2tlbmRzIGRvIG5v dAotICoJbmVlZCB0byByZS1lc3RhYmxpc2ggdGhlaXIgbG9jYWwgcG9pbnRlcnMgaW50byBz aGFyZWQgbWVtb3J5LCBiZWNhdXNlCi0gKgl0aGV5IGluaGVyaXQgY29ycmVjdCB2YWx1ZXMg b2YgdGhvc2UgdmFyaWFibGVzIHZpYSBmb3JrKCkgZnJvbSB0aGUKLSAqCXBvc3RtYXN0ZXIu ICBIb3dldmVyLCB0aGlzIGRvZXMgbm90IHdvcmsgaW4gdGhlIEVYRUNfQkFDS0VORCBjYXNl LgotICoJSW4gcG9ydHMgdXNpbmcgRVhFQ19CQUNLRU5ELCBuZXcgYmFja2VuZHMgaGF2ZSB0 byBzZXQgdXAgdGhlaXIgbG9jYWwKLSAqCXBvaW50ZXJzIHVzaW5nIHRoZSBtZXRob2QgZGVz Y3JpYmVkIGluIChiKSBhYm92ZS4KLSAqCi0gKgkJKGQpIG1lbW9yeSBhbGxvY2F0aW9uIG1v ZGVsOiBzaGFyZWQgbWVtb3J5IGNhbiBuZXZlciBiZQotICoJZnJlZWQsIG9uY2UgYWxsb2Nh dGVkLiAgIEVhY2ggaGFzaCB0YWJsZSBoYXMgaXRzIG93biBmcmVlIGxpc3QsCi0gKglzbyBo YXNoIGJ1Y2tldHMgY2FuIGJlIHJldXNlZCB3aGVuIGFuIGl0ZW0gaXMgZGVsZXRlZC4KKyAq IFRoaXMgbW9kdWxlIHByb3ZpZGVzIGZhY2lsaXRpZXMgdG8gYWxsb2NhdGUgZml4ZWQtc2l6 ZSBzdHJ1Y3R1cmVzIGluIHNoYXJlZAorICogbWVtb3J5LCBmb3IgdGhpbmdzIGxpa2UgdmFy aWFibGVzIHNoYXJlZCBiZXR3ZWVuIGFsbCBiYWNrZW5kIHByb2Nlc3Nlcy4KKyAqIEVhY2gg c3VjaCBzdHJ1Y3R1cmUgaGFzIGEgc3RyaW5nIG5hbWUgdG8gaWRlbnRpZnkgaXQsIHNwZWNp ZmllZCB3aGVuIGl0IGlzCisgKiByZXF1ZXN0ZWQuICBzaG1lbV9oYXNoLmMgcHJvdmlkZXMg YSBzaGFyZWQgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbiBvbiB0b3AKKyAqIG9mIHRoYXQu CisgKgorICogU2hhcmVkIG1lbW9yeSBhcmVhcyBzaG91bGQgdXN1YWxseSBub3QgYmUgYWxs b2NhdGVkIGFmdGVyIHBvc3RtYXN0ZXIKKyAqIHN0YXJ0dXAsIGFsdGhvdWdoIHdlIGRvIGFs bG93IHNtYWxsIGFsbG9jYXRpb25zIGxhdGVyIGZvciB0aGUgYmVuZWZpdCBvZgorICogZXh0 ZW5zaW9uIG1vZHVsZXMgdGhhdCBhcmUgbG9hZGVkIGFmdGVyIHN0YXJ0dXAuICBEZXNwaXRl IHRoYXQgYWxsb3dhbmNlLAorICogZXh0ZW5zaW9ucyB0aGF0IG5lZWQgc2hhcmVkIG1lbW9y eSBzaG91bGQgYmUgYWRkZWQgaW4KKyAqIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcywgYmVj YXVzZSB0aGUgYWxsb3dhbmNlIGlzIHF1aXRlIHNtYWxsIGFuZCB0aGVyZSBpcworICogbm8g Z3VhcmFudGVlIHRoYXQgYW55IG1lbW9yeSBpcyBhdmFpbGFibGUgYWZ0ZXIgc3RhcnR1cC4K KyAqCisgKiBOb3dhZGF5cywgdGhlcmUgaXMgYWxzbyBhIHRoaXJkIHdheSB0byBhbGxvY2F0 ZSBzaGFyZWQgbWVtb3J5IGNhbGxlZAorICogRHluYW1pYyBTaGFyZWQgTWVtb3J5LiAgU2Vl IGRzbS5jIGZvciB0aGF0IGZhY2lsaXR5LiAgT25lIGJpZyBkaWZmZXJlbmNlCisgKiBiZXR3 ZWVuIHRyYWRpdGlvbmFsIHNoYXJlZCBtZW1vcnkgaGFuZGxlZCBieSBzaG1lbS5jIGFuZCBk eW5hbWljIHNoYXJlZAorICogbWVtb3J5IGlzIHRoYXQgdHJhZGl0aW9uYWwgc2hhcmVkIG1l bW9yeSBhcmVhcyBhcmUgbWFwcGVkIHRvIHRoZSBzYW1lCisgKiBhZGRyZXNzIGluIGFsbCBw cm9jZXNzZXMsIHNvIHlvdSBjYW4gdXNlIG5vcm1hbCBwb2ludGVycyBpbiBzaGFyZWQgbWVt b3J5CisgKiBzdHJ1Y3RzLiAgV2l0aCBEeW5hbWljIFNoYXJlZCBNZW1vcnksIHlvdSBtdXN0 IHVzZSBvZmZzZXRzIG9yIERTQSBwb2ludGVycworICogaW5zdGVhZC4KKyAqCisgKiBTaGFy ZWQgbWVtb3J5IG1hbmFnZWQgYnkgc2htZW0uYyBjYW4gbmV2ZXIgYmUgZnJlZWQsIG9uY2Ug YWxsb2NhdGVkLiAgRWFjaAorICogaGFzaCB0YWJsZSBoYXMgaXRzIG93biBmcmVlIGxpc3Qs IHNvIGhhc2ggYnVja2V0cyBjYW4gYmUgcmV1c2VkIHdoZW4gYW4KKyAqIGl0ZW0gaXMgZGVs ZXRlZC4gIEhvd2V2ZXIsIGlmIG9uZSBoYXNoIHRhYmxlIGdyb3dzIHZlcnkgbGFyZ2UgYW5k IHRoZW4KKyAqIHNocmlua3MsIGl0cyBzcGFjZSBjYW5ub3QgYmUgcmVkaXN0cmlidXRlZCB0 byBvdGhlciB0YWJsZXMuICBXZSBjb3VsZCBidWlsZAorICogYSBzaW1wbGUgaGFzaCBidWNr ZXQgZ2FyYmFnZSBjb2xsZWN0b3IgaWYgbmVlZCBiZS4gIFJpZ2h0IG5vdywgaXQgc2VlbXMK KyAqIHVubmVjZXNzYXJ5LgorICoKKyAqIFVzYWdlCisgKiAtLS0tLQorICoKKyAqIFRvIGFs bG9jYXRlIHNoYXJlZCBtZW1vcnksIHlvdSBuZWVkIHRvIHJlZ2lzdGVyIGEgc2V0IG9mIGNh bGxiYWNrIGZ1bmN0aW9ucworICogd2hpY2ggaGFuZGxlIHRoZSBsaWZlY3ljbGUgb2YgdGhl IGFsbG9jYXRpb24uICBJbiB0aGUgcmVxdWVzdF9mbiBjYWxsYmFjaywKKyAqIGZpbGwgaW4g YSBTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzIHN0cnVjdCB3aXRoIHRoZSBuYW1lLCBzaXplLCBh bmQgYW55IG90aGVyCisgKiBvcHRpb25zLCBhbmQgY2FsbCBTaG1lbVJlcXVlc3RTdHJ1Y3Qo KS4gIExlYXZlIGFueSB1bnVzZWQgZmllbGRzIGFzIHplcm9zLgorICoKKyAqCXR5cGVkZWYg c3RydWN0IE15U2htZW1EYXRhIHsKKyAqCQkuLi4KKyAqCX0gTXlTaG1lbURhdGE7CisgKgor ICoJc3RhdGljIE15U2htZW1EYXRhICpNeVNobWVtOworICoKKyAqCXN0YXRpYyB2b2lkIG15 X3NobWVtX3JlcXVlc3Qodm9pZCAqYXJnKTsKKyAqCXN0YXRpYyB2b2lkIG15X3NobWVtX2lu aXQodm9pZCAqYXJnKTsKKyAqCisgKiAgY29uc3QgU2htZW1DYWxsYmFja3MgTXlTaG1lbUNh bGxiYWNrcyA9IHsKKyAqCQkucmVxdWVzdF9mbiA9IG15X3NobWVtX3JlcXVlc3QsCisgKgkJ LmluaXRfZm4gPSBteV9zaG1lbV9pbml0LAorICoJfTsKKyAqCisgKglzdGF0aWMgdm9pZAor ICoJbXlfc2htZW1fcmVxdWVzdCh2b2lkICphcmcpCisgKgl7CisgKgkJc3RhdGljIFNobWVt U3RydWN0RGVzYyBNeVNobWVtRGVzYzsKKyAqCisgKgkJU2htZW1SZXF1ZXN0U3RydWN0KCZN eVNobWVtRGVzYywgJihTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzKSB7CisgKgkJCS5uYW1lID0g Ik15IHNobWVtIGFyZWEiLAorICoJCQkuc2l6ZSA9IHNpemVvZihNeVNobWVtRGF0YSksCisg KgkJCS5wdHIgPSAodm9pZCAqKikgJk15U2htZW0sCisgKgkJfSk7CisgKgl9CisgKgorICog SW4gYnVpbHRpbiBQb3N0Z3JlU1FMIGNvZGUsIGFkZCB0aGUgY2FsbGJhY2tzIHRvIHRoZSBs aXN0IGluCisgKiBzcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaC4gSW4gYW4g YWRkLWluIG1vZHVsZSwgeW91IGNhbiByZWdpc3RlcgorICogdGhlIGNhbGxiYWNrcyBieSBj YWxsaW5nIFJlZ2lzdGVyU2htZW1DYWxsYmFja3MoJk15U2htZW1DYWxsYmFja3MpIGluIHRo ZQorICogZXh0ZW5zaW9uJ3MgX1BHX2luaXQoKSBmdW5jdGlvbi4KKyAqCisgKiBMaWZlY3lj bGUKKyAqIC0tLS0tLS0tLQorICoKKyAqIEluaXRpYWxpemluZyBzaGFyZWQgbWVtb3J5IGhh cHBlbnMgaW4gbXVsdGlwbGUgcGhhc2VzLiBJbiB0aGUgZmlyc3QgcGhhc2UsCisgKiBkdXJp bmcgcG9zdG1hc3RlciBzdGFydHVwLCBhbGwgdGhlIHJlcXVlc3RfZm4gY2FsbGJhY2tzIGFy ZSBjYWxsZWQuICBPbmx5CisgKiBhZnRlciBhbGwgdGhlIHJlcXVlc3RfZm4gY2FsbGJhY2tz IGhhdmUgYmVlbiBjYWxsZWQgYW5kIGFsbCB0aGUgc2htZW0gYXJlYXMKKyAqIGhhdmUgYmVl biByZXF1ZXN0ZWQgYnkgdGhlIFNobWVtUmVxdWVzdFN0cnVjdCgpIGNhbGxzIHdlIGtub3cg aG93IG11Y2gKKyAqIHNoYXJlZCBtZW1vcnkgd2UgbmVlZCBpbiB0b3RhbC4gQWZ0ZXIgdGhh dCwgcG9zdG1hc3RlciBhbGxvY2F0ZXMgZ2xvYmFsCisgKiBzaGFyZWQgbWVtb3J5IHNlZ21l bnQsIGFuZCBjYWxscyBhbGwgdGhlIGluaXRfZm4gY2FsbGJhY2tzIHRvIGluaXRpYWxpemUK KyAqIGFsbCB0aGUgcmVxdWVzdGVkIHNobWVtIGFyZWFzLgorICoKKyAqIEluIHN0YW5kYXJk IFVuaXgtaXNoIGVudmlyb25tZW50cywgaW5kaXZpZHVhbCBiYWNrZW5kcyBkbyBub3QgbmVl ZCB0bworICogcmUtZXN0YWJsaXNoIHRoZWlyIGxvY2FsIHBvaW50ZXJzIGludG8gc2hhcmVk IG1lbW9yeSwgYmVjYXVzZSB0aGV5IGluaGVyaXQKKyAqIGNvcnJlY3QgdmFsdWVzIG9mIHRo b3NlIHZhcmlhYmxlcyB2aWEgZm9yaygpIGZyb20gdGhlIHBvc3RtYXN0ZXIuICBIb3dldmVy LAorICogdGhpcyBkb2VzIG5vdCB3b3JrIGluIHRoZSBFWEVDX0JBQ0tFTkQgY2FzZS4gIElu IHBvcnRzIHVzaW5nIEVYRUNfQkFDS0VORCwKKyAqIGJhY2tlbmQgc3RhcnR1cCBhbHNvIGNh bGxzIHRoZSBzaG1lbV9yZXF1ZXN0IGNhbGxiYWNrcyB0byByZS1lc3RhYmxpc2ggdGhlCisg KiBrbm93bGVkZ2UgYWJvdXQgZWFjaCBzaGFyZWQgbWVtb3J5IGFyZWEsIHNldHMgdGhlIHBv aW50ZXIgdmFyaWFibGVzCisgKiAoKlNobWVtU3RydWN0RGVzYy0+cHRyKSwgYW5kIGNhbGxz IHRoZSBhdHRhY2hfZm4gY2FsbGJhY2ssIGlmIGFueSwgZm9yCisgKiBhZGRpdGlvbmFsIHBl ci1iYWNrZW5kIHNldHVwLgorICoKKyAqIExlZ2FjeSBTaG1lbUluaXRTdHJ1Y3QoKS9TaG1l bUluaXRIYXNoKCkgZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNobWVtSW5pdFN0cnVjdCgpL1NobWVt SW5pdEhhc2goKSBpcyBhbm90aGVyIHdheSBvZiByZWdpc3RlcmluZyBzaG1lbQorICogYXJl YXMuICBJdCBwcmUtZGF0ZXMgdGhlIFNobWVtUmVxdWVzdFN0cnVjdCgpL1NobWVtUmVxdWVz dEhhc2goKSBmdW5jdGlvbnMsCisgKiBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG5ldyBj b2RlLCBidXQgYXMgb2YgdGhpcyB3cml0aW5nIGl0IGlzIHN0aWxsCisgKiB3aWRlbHkgdXNl ZCBpbiBleHRlbnNpb25zLgorICoKKyAqIFRvIGFsbG9jYXRlIGEgc2htZW0gYXJlYSB3aXRo IFNobWVtSW5pdFN0cnVjdCgpLCB5b3UgbmVlZCB0byBzZXBhcmF0ZWx5CisgKiByZWdpc3Rl ciB0aGUgc2l6ZSBuZWVkZWQgZm9yIHRoZSBhcmVhIGJ5IGNhbGxpbmcgUmVxdWVzdEFkZGlu U2htZW1TcGFjZSgpCisgKiBmcm9tIHRoZSBleHRlbnNpb24ncyBzaG1lbV9yZXF1ZXN0X2hv b2ssIGFuZCBhbGxvY2F0ZSB0aGUgYXJlYSBieSBjYWxsaW5nCisgKiBTaG1lbUluaXRTdHJ1 Y3QoKSBmcm9tIHRoZSBleHRlbnNpb24ncyBzaG1lbV9zdGFydHVwX2hvb2suICBUaGVyZSBh cmUgbm8KKyAqIGluaXQvYXR0YWNoIGNhbGxiYWNrcy4gIEluc3RlYWQsIHRoZSBjYWxsZXIg b2YgU2htZW1Jbml0U3RydWN0KCkgbXVzdCBjaGVjaworICogdGhlIHJldHVybiBzdGF0dXMg b2YgU2htZW1Jbml0U3RydWN0KCkgYW5kIGluaXRpYWxpemUgdGhlIHN0cnVjdCBpZiBpdCB3 YXMKKyAqIG5vdCBwcmV2aW91c2x5IGluaXRpYWxpemVkLgorICoKKyAqIENhbGxpbmcgU2ht ZW1BbGxvYygpIGRpcmVjdGx5CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIFRoZXJlJ3MgYSBtb3JlIGxvdy1sZXZlbCB3YXkgb2YgYWxsb2NhdGluZyBzaGFy ZWQgbWVtb3J5IHRvbzogeW91IGNhbiBjYWxsCisgKiBTaG1lbUFsbG9jKCkgZGlyZWN0bHku ICBJdCdzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBoaWdoZXIgbGV2ZWwgbWVjaGFuaXNtcywK KyAqIGFuZCBzaG91bGQgZ2VuZXJhbGx5IG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuCiAgKi8K IAogI2luY2x1ZGUgInBvc3RncmVzLmgiCkBAIC03NCw2ICsxNDYsNzYgQEAKICNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIKIAor LyoKKyAqIFJlZ2lzdGVyZWQgY2FsbGJhY2tzLgorICoKKyAqIER1cmluZyBwb3N0bWFzdGVy IHN0YXJ0dXAsIHdlIGFjY3VtdWxhdGUgdGhlIGNhbGxiYWNrcyBmcm9tIGFsbCBzdWJzeXN0 ZW1zCisgKiBpbiB0aGlzIGxpc3QuCisgKgorICogVGhpcyBpcyBpbiBwcm9jZXNzIHByaXZh dGUgbWVtb3J5LCBhbHRob3VnaCBvbiBVbml4LWxpa2Ugc3lzdGVtcywgd2UgZXhwZWN0Cisg KiBhbGwgdGhlIHJlZ2lzdHJhdGlvbnMgdG8gaGFwcGVuIGF0IHBvc3RtYXN0ZXIgc3RhcnR1 cCB0aW1lIGFuZCBiZSBpbmhlcml0ZWQKKyAqIGJ5IGFsbCB0aGUgY2hpbGQgcHJvY2Vzc2Vz IHZpYSBmb3JrKCkuCisgKi8KK3N0YXRpYyBMaXN0ICpyZWdpc3RlcmVkX3NobWVtX2NhbGxi YWNrczsKKworLyoKKyAqIEluIHRoZSBzaG1lbSByZXF1ZXN0IHBoYXNlLCBhbGwgdGhlIHNo bWVtIGFyZWFzIHJlcXVlc3RlZCB3aXRoIHRoZQorICogU2htZW1SZXF1ZXN0KigpIGZ1bmN0 aW9ucyBhcmUgYWNjdW11bGF0ZWQgaGVyZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlT aG1lbVN0cnVjdERlc2MgKmRlc2M7CisJU2htZW1TdHJ1Y3RPcHRzICpvcHRpb25zOworCVNo bWVtQXJlYUtpbmQga2luZDsKK30gU2htZW1SZXF1ZXN0OworCitzdGF0aWMgTGlzdCAqcGVu ZGluZ19zaG1lbV9yZXF1ZXN0czsKKworLyoKKyAqIFBlci1wcm9jZXNzIHN0YXRlIG1hY2hp bmUsIGZvciBzYW5pdHkgY2hlY2tpbmcgdGhhdCB3ZSBkbyB0aGluZ3MgaW4gdGhlCisgKiBy aWdodCBvcmRlci4KKyAqCisgKiBQb3N0bWFzdGVyOgorICogICBJTklUSUFMIC0+IFJFUVVF U1RJTkcgLT4gSU5JVElBTElaSU5HIC0+IERPTkUKKyAqCisgKiBCYWNrZW5kcyBpbiBFWEVD X0JBQ0tFTkQgbW9kZToKKyAqICAgSU5JVElBTCAtPiBSRVFVRVNUSU5HIC0+IEFUVEFDSElO RyAtPiBET05FCisgKgorICogTGF0ZSByZXF1ZXN0OgorICogICBET05FIC0+IFJFUVVFU1RJ TkcgLT4gQUZURVJfU1RBUlRVUF9BVFRBQ0hfT1JfSU5JVCAtPiBET05FCisgKi8KK2VudW0g c2htZW1fcmVxdWVzdF9zdGF0ZQoreworCS8qIEluaXRpYWwgc3RhdGUgKi8KKwlTUlNfSU5J VElBTCwKKworCS8qCisJICogV2hlbiB3ZSBzdGFydCBjYWxsaW5nIHRoZSBzaG1lbV9yZXF1 ZXN0IGNhbGxiYWNrcywgd2UgZW50ZXIgdGhlCisJICogU1JTX1JFUVVFU1RJTkcgcGhhc2Uu ICBBbGwgU2htZW1SZXF1ZXN0U3RydWN0IGNhbGxzIGhhcHBlbiBpbiB0aGlzCisJICogc3Rh dGUuCisJICovCisJU1JTX1JFUVVFU1RJTkcsCisKKwkvKgorCSAqIFBvc3RtYXN0ZXIgaGFz IGZpbmlzaGVkIGFsbCBzaG1lbSByZXF1ZXN0cywgYW5kIGlzIG5vdyBpbml0aWFsaXppbmcg dGhlCisJICogc2hhcmVkIG1lbW9yeSBzZWdtZW50LiAgaW5pdF9mbiBjYWxsYmFja3MgYXJl IGNhbGxlZCBpbiB0aGlzIHN0YXRlLgorCSAqLworCVNSU19JTklUSUFMSVpJTkcsCisKKwkv KgorCSAqIEEgcG9zdG1hc3RlciBjaGlsZCBwcm9jZXNzIGlzIHN0YXJ0aW5nIHVwLiAgYXR0 YWNoX2ZuIGNhbGxiYWNrcyBhcmUKKwkgKiBjYWxsZWQgaW4gdGhpcyBzdGF0ZS4KKwkgKi8K KwlTUlNfQVRUQUNISU5HLAorCisJLyogQW4gYWZ0ZXItc3RhcnR1cCBhbGxvY2F0aW9uIG9y IGF0dGFjaG1lbnQgaXMgaW4gcHJvZ3Jlc3MuICovCisJU1JTX0FGVEVSX1NUQVJUVVBfQVRU QUNIX09SX0lOSVQsCisKKwkvKiBOb3JtYWwgc3RhdGUgYWZ0ZXIgc2htZW0gaW5pdGlhbGl6 YXRpb24gLyBhdHRhY2htZW50ICovCisJU1JTX0RPTkUsCit9Oworc3RhdGljIGVudW0gc2ht ZW1fcmVxdWVzdF9zdGF0ZSBzaG1lbV9yZXF1ZXN0X3N0YXRlID0gU1JTX0lOSVRJQUw7CisK IC8qCiAgKiBUaGlzIGlzIHRoZSBmaXJzdCBkYXRhIHN0cnVjdHVyZSBzdG9yZWQgaW4gdGhl IHNoYXJlZCBtZW1vcnkgc2VnbWVudCwgYXQKICAqIHRoZSBvZmZzZXQgdGhhdCBQR1NobWVt SGVhZGVyLT5jb250ZW50X29mZnNldCBwb2ludHMgdG8uICBBbGxvY2F0aW9ucyBieQpAQCAt MTA1LDM1ICsyNDcsMzkzIEBAIHN0YXRpYyB2b2lkICpTaG1lbUJhc2U7CQkJLyogc3RhcnQg YWRkcmVzcyBvZiBzaGFyZWQgbWVtb3J5ICovCiBzdGF0aWMgdm9pZCAqU2htZW1FbmQ7CQkJ LyogZW5kKzEgYWRkcmVzcyBvZiBzaGFyZWQgbWVtb3J5ICovCiAKIHN0YXRpYyBTaG1lbUFs bG9jYXRvckRhdGEgKlNobWVtQWxsb2NhdG9yOwotc3RhdGljIEhUQUIgKlNobWVtSW5kZXgg PSBOVUxMOyAvKiBwcmltYXJ5IGluZGV4IGhhc2h0YWJsZSBmb3Igc2htZW0gKi8KKworLyoK KyAqIFNobWVtSW5kZXggaXMgYSBnbG9iYWwgZGlyZWN0b3J5IG9mIHNobWVtIGFyZWFzLCBp dHNlbGYgYWxzbyBzdG9yZWQgaW4gdGhlCisgKiBzaGFyZWQgbWVtb3J5LgorICovCitzdGF0 aWMgSFRBQiAqU2htZW1JbmRleDsKKworIC8qIG1heCBzaXplIG9mIGRhdGEgc3RydWN0dXJl IHN0cmluZyBuYW1lICovCisjZGVmaW5lIFNITUVNX0lOREVYX0tFWVNJWkUJCSAoNDgpCisK Ky8qCisgKiAjIG9mIGFkZGl0aW9uYWwgZW50cmllcyB0byByZXNlcnZlIGluIHRoZSBzaG1l bSBpbmRleCB0YWJsZSwgZm9yCisgKiBhbGxvY2F0aW9ucyBhZnRlciBwb3N0bWFzdGVyIHN0 YXJ0dXAuICAoVGhpcyBpcyBub3QgYSBoYXJkIGxpbWl0LCB0aGUgaGFzaAorICogdGFibGUg Y2FuIGdyb3cgbGFyZ2VyIHRoYW4gdGhhdCBpZiB0aGVyZSBpcyBzaGFyZWQgbWVtb3J5IGF2 YWlsYWJsZSkKKyAqLworI2RlZmluZSBTSE1FTV9JTkRFWF9BRERJVElPTkFMX1NJWkUJCSAo NjQpCisKKy8qIHRoaXMgaXMgYSBoYXNoIGJ1Y2tldCBpbiB0aGUgc2htZW0gaW5kZXggdGFi bGUgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJY2hhcgkJa2V5W1NITUVNX0lOREVYX0tFWVNJ WkVdOwkvKiBzdHJpbmcgbmFtZSAqLworCXZvaWQJICAgKmxvY2F0aW9uOwkJLyogbG9jYXRp b24gaW4gc2hhcmVkIG1lbSAqLworCVNpemUJCXNpemU7CQkJLyogIyBieXRlcyByZXF1ZXN0 ZWQgZm9yIHRoZSBzdHJ1Y3R1cmUgKi8KKwlTaXplCQlhbGxvY2F0ZWRfc2l6ZTsgLyogIyBi eXRlcyBhY3R1YWxseSBhbGxvY2F0ZWQgKi8KK30gU2htZW1JbmRleEVudDsKIAogLyogVG8g Z2V0IHJlbGlhYmxlIHJlc3VsdHMgZm9yIE5VTUEgaW5xdWlyeSB3ZSBuZWVkIHRvICJ0b3Vj aCBwYWdlcyIgb25jZSAqLwogc3RhdGljIGJvb2wgZmlyc3ROdW1hVG91Y2ggPSB0cnVlOwog CitzdGF0aWMgYm9vbCBBdHRhY2hPckluaXRTaG1lbUluZGV4RW50cnkoU2htZW1SZXF1ZXN0 ICpyZXF1ZXN0LAorCQkJCQkJCQkJCWJvb2wgbWF5X2luaXQsIGJvb2wgbWF5X2F0dGFjaCk7 CisKIERhdHVtCQlwZ19udW1hX2F2YWlsYWJsZShQR19GVU5DVElPTl9BUkdTKTsKIAogLyoK LSAqIEEgdmVyeSBzaW1wbGUgYWxsb2NhdG9yIHVzZWQgdG8gY2FydmUgb3V0IGRpZmZlcmVu dCBwYXJ0cyBvZiBhIGhhc2ggdGFibGUKLSAqIGZyb20gYSBwcmV2aW91c2x5IGFsbG9jYXRl ZCBjb250aWd1b3VzIHNoYXJlZCBtZW1vcnkgYXJlYS4KKyAqCVNobWVtUmVxdWVzdFN0cnVj dCgpIC0tLSByZXF1ZXN0IGEgbmFtZWQgc2hhcmVkIG1lbW9yeSBhcmVhCisgKgorICogU3Vi c3lzdGVtcyBjYWxsIHRoaXMgdG8gcmVnaXN0ZXIgdGhlaXIgc2hhcmVkIG1lbW9yeSBuZWVk cy4gIFRoaXMgaXMKKyAqIHVzdWFsbHkgZG9uZSBlYXJseSBpbiBwb3N0bWFzdGVyIHN0YXJ0 dXAsIGJlZm9yZSB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50CisgKiBoYXMgYmVlbiBjcmVh dGVkLCBzbyB0aGF0IHRoZSBzaXplIGNhbiBiZSBpbmNsdWRlZCBpbiB0aGUgZXN0aW1hdGUg Zm9yCisgKiB0b3RhbCBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSBuZWVkZWQuICBXZSBzZXQg YXNpZGUgYSBzbWFsbCBhbW91bnQgb2YKKyAqIG1lbW9yeSBmb3IgYWxsb2NhdGlvbnMgdGhh dCBoYXBwZW4gbGF0ZXIsIGZvciB0aGUgYmVuZWZpdCBvZiBub24tcHJlbG9hZGVkCisgKiBl eHRlbnNpb25zLCBidXQgdGhhdCBzaG91bGQgbm90IGJlIHJlbGllZCB1cG9uLgorICoKKyAq IFRoaXMgZG9lcyBub3QgeWV0IGFsbG9jYXRlIHRoZSBtZW1vcnksIGJ1dCBtZXJlbHkgcmVn aXN0ZXIgdGhlIG5lZWQgZm9yIGl0LgorICogVGhlIGFjdHVhbCBhbGxvY2F0aW9uIGhhcHBl bnMgbGF0ZXIgaW4gdGhlIHBvc3RtYXN0ZXIgc3RhcnR1cCBzZXF1ZW5jZS4KKyAqCisgKiBU aGlzIG11c3QgYmUgY2FsbGVkIGZyb20gYSBzaG1lbV9yZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0 aW9uLCByZWdpc3RlcmVkIHdpdGgKKyAqIFJlZ2lzdGVyU2htZW1DYWxsYmFja3MoKS4gIFRo aXMgZW5mb3JjZXMgYSBjb2RpbmcgcGF0dGVybiB0aGF0IHdvcmtzIHRoZQorICogc2FtZSBp biBub3JtYWwgVW5peCBzeXN0ZW1zIGFuZCB3aXRoIEVYRUNfQkFDS0VORC4gIE9uIFVuaXgg c3lzdGVtcywgdGhlCisgKiBzaG1lbV9yZXF1ZXN0IGNhbGxiYWNrcyBhcmUgY2FsbGVkIG9u Y2UsIGVhcmx5IGluIHBvc3RtYXN0ZXIgc3RhcnR1cCwgYW5kCisgKiB0aGUgY2hpbGQgcHJv Y2Vzc2VzIGluaGVyaXQgdGhlIHN0cnVjdCBkZXNjcmlwdG9ycyBhbmQgYW55IG90aGVyCisg KiBwZXItcHJvY2VzcyBzdGF0ZSBmcm9tIHRoZSBwb3N0bWFzdGVyLiAgSW4gRVhFQ19CQUNL RU5EIG1vZGUsIHNobWVtX3JlcXVlc3QKKyAqIGNhbGxiYWNrcyBhcmUgKmFsc28qIGNhbGxl ZCBpbiBlYWNoIGJhY2tlbmQsIGF0IGJhY2tlbmQgc3RhcnR1cCwgdG8KKyAqIHJlLWVzdGFi bGlzaCB0aGUgc3RydWN0IGRlc2NyaXB0b3JzLiAgQnkgY2FsbGluZyB0aGUgc2FtZSBmdW5j dGlvbiBpbiBib3RoCisgKiBjYXNlcywgd2UgZW5zdXJlIHRoYXQgYWxsIHRoZSBzaG1lbSBh cmVhcyBhcmUgcmVnaXN0ZXJlZCB0aGUgc2FtZSB3YXkgaW4KKyAqIGFsbCBwcm9jZXNzZXMu CisgKgorICogJ2Rlc2MnIGlzIGEgYmFja2VuZC1wcml2YXRlIGhhbmRsZSBmb3IgdGhlIHNo YXJlZCBtZW1vcnkgYXJlYS4KKyAqCisgKiAnb3B0aW9ucycgZGVmaW5lcyB0aGUgbmFtZSBh bmQgc2l6ZSBvZiB0aGUgYXJlYSwgYW5kIGFueSBvdGhlciBvcHRpb25hbAorICogZmVhdHVy ZXMuICBMZWF2ZSB1bnVzZWQgb3B0aW9ucyBhcyB6ZXJvcy4gIFRoZSBvcHRpb25zIGFyZSBj b3BpZWQgdG8KKyAqIGxvbmdlci1saXZlZCBtZW1vcnksIHNvIGl0IGRvZXNuJ3QgbmVlZCB0 byBsaXZlIGFmdGVyIHRoZQorICogU2htZW1SZXF1ZXN0U3RydWN0KCkgY2FsbCBhbmQgY2Fu IHBvaW50IHRvIGEgbG9jYWwgdmFyaWFibGUgaW4gdGhlIGNhbGxpbmcKKyAqIGZ1bmN0aW9u LiAgVGhlICduYW1lJyBtdXN0IHBvaW50IHRvIGEgbG9uZy1saXZlZCBzdHJpbmcgdGhvdWdo LCBvbmx5IHRoZQorICogcG9pbnRlciB0byBpdCBpcyBjb3BpZWQuCisgKi8KK3ZvaWQKK1No bWVtUmVxdWVzdFN0cnVjdFdpdGhPcHRzKFNobWVtU3RydWN0RGVzYyAqZGVzYywgY29uc3Qg U2htZW1TdHJ1Y3RPcHRzICpvcHRpb25zKQoreworCVNobWVtU3RydWN0T3B0cyAqb3B0aW9u c19jb3B5OworCisJb3B0aW9uc19jb3B5ID0gTWVtb3J5Q29udGV4dEFsbG9jKFRvcE1lbW9y eUNvbnRleHQsCisJCQkJCQkJCQkgIHNpemVvZihTaG1lbVN0cnVjdE9wdHMpKTsKKwltZW1j cHkob3B0aW9uc19jb3B5LCBvcHRpb25zLCBzaXplb2YoU2htZW1TdHJ1Y3RPcHRzKSk7CisK KwlTaG1lbVJlcXVlc3RJbnRlcm5hbChkZXNjLCBvcHRpb25zX2NvcHksIFNITUVNX0tJTkRf U1RSVUNUKTsKK30KKworLyoKKyAqIEludGVybmFsIHdvcmtob3JzZSBvZiBTaG1lbVJlcXVl c3RTdHJ1Y3QoKSBhbmQgU2htZW1SZXF1ZXN0SGFzaCgpLgorICoKKyAqIE5vdGU6ICdkZXNj JyBhbmQgJ29wdGlvbnMnIG11c3QgbGl2ZSB1bnRpbCB0aGUgaW5pdC9hdHRhY2ggY2FsbGJh Y2tzIGhhdmUKKyAqIGJlZW4gY2FsbGVkLiAgVW5saWtlIGluIHRoZSBwdWJsaWMgU2htZW1S ZXF1ZXN0U3RydWN0KCkgYW5kCisgKiBTaG1lbVJlcXVlc3RIYXNoKCkgZnVuY3Rpb25zLCAn b3B0aW9ucycgaXMgKm5vdCogY29waWVkLiAgVGhpcyBhbGxvd3MKKyAqIFNobWVtUmVxdWVz dEhhc2goKSB0byBwYXNzIGEgcG9pbnRlciB0byB0aGUgZXh0ZW5kZWQgU2htZW1SZXF1ZXN0 SGFzaE9wdHMKKyAqIHN0cnVjdCBpbnN0ZWFkLgorICovCit2b2lkCitTaG1lbVJlcXVlc3RJ bnRlcm5hbChTaG1lbVN0cnVjdERlc2MgKmRlc2MsIFNobWVtU3RydWN0T3B0cyAqb3B0aW9u cywKKwkJCQkJIFNobWVtQXJlYUtpbmQga2luZCkKK3sKKwlTaG1lbVJlcXVlc3QgKnJlcXVl c3Q7CisKKwlpZiAob3B0aW9ucy0+bmFtZSA9PSBOVUxMKQorCQllbG9nKEVSUk9SLCAic2hh cmVkIG1lbW9yeSByZXF1ZXN0IGlzIG1pc3NpbmcgJ25hbWUnIG9wdGlvbiIpOworCisJaWYg KElzVW5kZXJQb3N0bWFzdGVyKQorCXsKKwkJaWYgKG9wdGlvbnMtPnNpemUgPD0gMCAmJiBv cHRpb25zLT5zaXplICE9IFNITUVNX0FUVEFDSF9VTktOT1dOX1NJWkUpCisJCQllbG9nKEVS Uk9SLCAiaW52YWxpZCBzaXplICV6ZCBmb3Igc2hhcmVkIG1lbW9yeSByZXF1ZXN0IGZvciBc IiVzXCIiLAorCQkJCSBvcHRpb25zLT5zaXplLCBvcHRpb25zLT5uYW1lKTsKKwl9CisJZWxz ZQorCXsKKwkJaWYgKG9wdGlvbnMtPnNpemUgPT0gU0hNRU1fQVRUQUNIX1VOS05PV05fU0la RSkKKwkJCWVsb2coRVJST1IsICJTSE1FTV9BVFRBQ0hfVU5LTk9XTl9TSVpFIGNhbm5vdCBi ZSB1c2VkIGR1cmluZyBzdGFydHVwIik7CisJCWlmIChvcHRpb25zLT5zaXplIDw9IDApCisJ CQllbG9nKEVSUk9SLCAiaW52YWxpZCBzaXplICV6ZCBmb3Igc2hhcmVkIG1lbW9yeSByZXF1 ZXN0IGZvciBcIiVzXCIiLAorCQkJCSBvcHRpb25zLT5zaXplLCBvcHRpb25zLT5uYW1lKTsK Kwl9CisKKwlpZiAoc2htZW1fcmVxdWVzdF9zdGF0ZSAhPSBTUlNfUkVRVUVTVElORykKKwkJ ZWxvZyhFUlJPUiwgIlNobWVtUmVxdWVzdFN0cnVjdCBjYW4gb25seSBiZSBjYWxsZWQgZnJv bSBhIHNobWVtX3JlcXVlc3QgY2FsbGJhY2siKTsKKworCS8qIENoZWNrIHRoYXQgaXQncyBu b3QgYWxyZWFkeSByZWdpc3RlcmVkIGluIHRoaXMgcHJvY2VzcyAqLworCWZvcmVhY2hfcHRy KFNobWVtU3RydWN0RGVzYywgZXhpc3RpbmcsIHBlbmRpbmdfc2htZW1fcmVxdWVzdHMpCisJ eworCQlpZiAoc3RyY21wKGV4aXN0aW5nLT5uYW1lLCBvcHRpb25zLT5uYW1lKSA9PSAwKQor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycm1zZygic2hhcmVkIG1lbW9yeSBzdHJ1Y3Qg XCIlc1wiIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCIsCisJCQkJCQkJb3B0aW9ucy0+bmFtZSkp KTsKKwl9CisKKwlyZXF1ZXN0ID0gcGFsbG9jKHNpemVvZihTaG1lbVJlcXVlc3QpKTsKKwly ZXF1ZXN0LT5vcHRpb25zID0gb3B0aW9uczsKKwlyZXF1ZXN0LT5kZXNjID0gZGVzYzsKKwly ZXF1ZXN0LT5raW5kID0ga2luZDsKKwlwZW5kaW5nX3NobWVtX3JlcXVlc3RzID0gbGFwcGVu ZChwZW5kaW5nX3NobWVtX3JlcXVlc3RzLCByZXF1ZXN0KTsKK30KKworLyoKKyAqCVNobWVt R2V0UmVxdWVzdGVkU2l6ZSgpIC0tLSBlc3RpbWF0ZSB0aGUgdG90YWwgc2l6ZSBvZiBhbGwg cmVnaXN0ZXJlZCBzaGFyZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVt b3J5IHN0cnVjdHVyZXMuCisgKgorICogVGhpcyBpcyBjYWxsZWQgb25jZSBhdCBwb3N0bWFz dGVyIHN0YXJ0dXAsIGJlZm9yZSB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50CisgKiBoYXMg YmVlbiBjcmVhdGVkLgorICovCitzaXplX3QKK1NobWVtR2V0UmVxdWVzdGVkU2l6ZSh2b2lk KQoreworCXNpemVfdAkJc2l6ZTsKKworCS8qIG1lbW9yeSBuZWVkZWQgZm9yIHRoZSBTaG1l bUluZGV4ICovCisJc2l6ZSA9IGhhc2hfZXN0aW1hdGVfc2l6ZShsaXN0X2xlbmd0aChwZW5k aW5nX3NobWVtX3JlcXVlc3RzKSArIFNITUVNX0lOREVYX0FERElUSU9OQUxfU0laRSwKKwkJ CQkJCQkgIHNpemVvZihTaG1lbUluZGV4RW50KSk7CisKKwkvKiBtZW1vcnkgbmVlZGVkIGZv ciBhbGwgdGhlIHJlcXVlc3RlZCBhcmVhcyAqLworCWZvcmVhY2hfcHRyKFNobWVtUmVxdWVz dCwgcmVxdWVzdCwgcGVuZGluZ19zaG1lbV9yZXF1ZXN0cykKKwl7CisJCXNpemUgPSBhZGRf c2l6ZShzaXplLCByZXF1ZXN0LT5vcHRpb25zLT5zaXplKTsKKwl9CisKKwlyZXR1cm4gc2l6 ZTsKK30KKworLyoKKyAqCVNobWVtSW5pdFJlcXVlc3RlZCgpIC0tLSBhbGxvY2F0ZSBhbmQg aW5pdGlhbGl6ZSByZXF1ZXN0ZWQgc2hhcmVkIG1lbW9yeQorICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0dXJlcy4KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBvbmNlIGF0 IHBvc3RtYXN0ZXIgc3RhcnR1cCwgYWZ0ZXIgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudAor ICogaGFzIGJlZW4gY3JlYXRlZC4KKyAqLwordm9pZAorU2htZW1Jbml0UmVxdWVzdGVkKHZv aWQpCit7CisJLyogU2hvdWxkIGJlIGNhbGxlZCBvbmx5IGJ5IHRoZSBwb3N0bWFzdGVyIG9y IGEgc3RhbmRhbG9uZSBiYWNrZW5kLiAqLworCUFzc2VydCghSXNVbmRlclBvc3RtYXN0ZXIp OworCUFzc2VydChzaG1lbV9yZXF1ZXN0X3N0YXRlID09IFNSU19JTklUSUFMSVpJTkcpOwor CisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBTaG1lbUluZGV4IGVudHJpZXMgYW5kIHBlcmZv cm0gYmFzaWMgaW5pdGlhbGl6YXRpb24gb2YKKwkgKiBhbGwgdGhlIHJlcXVlc3RlZCBtZW1v cnkgYXJlYXMuICBUaGVyZSBhcmUgbm8gY29uY3VycmVudCBwcm9jZXNzZXMgeWV0LAorCSAq IHNvIG5vIG5lZWQgZm9yIGxvY2tpbmcuCisJICovCisJZm9yZWFjaF9wdHIoU2htZW1SZXF1 ZXN0LCByZXF1ZXN0LCBwZW5kaW5nX3NobWVtX3JlcXVlc3RzKQorCXsKKwkJQXR0YWNoT3JJ bml0U2htZW1JbmRleEVudHJ5KHJlcXVlc3QsIHRydWUsIGZhbHNlKTsKKwl9CisJbGlzdF9m cmVlX2RlZXAocGVuZGluZ19zaG1lbV9yZXF1ZXN0cyk7CisJcGVuZGluZ19zaG1lbV9yZXF1 ZXN0cyA9IE5JTDsKKworCS8qCisJICogQ2FsbCB0aGUgc3Vic3lzdGVtLXNwZWNpZmljIGlu aXQgY2FsbGJhY2tzIHRvIGZpbmlzaCBpbml0aWFsaXphdGlvbiBvZgorCSAqIGFsbCB0aGUg YXJlYXMuCisJICovCisJZm9yZWFjaF9wdHIoY29uc3QgU2htZW1DYWxsYmFja3MsIGNhbGxi YWNrcywgcmVnaXN0ZXJlZF9zaG1lbV9jYWxsYmFja3MpCisJeworCQlpZiAoY2FsbGJhY2tz LT5pbml0X2ZuKQorCQkJY2FsbGJhY2tzLT5pbml0X2ZuKGNhbGxiYWNrcy0+aW5pdF9mbl9h cmcpOworCX0KKworCXNobWVtX3JlcXVlc3Rfc3RhdGUgPSBTUlNfRE9ORTsKK30KKworLyoK KyAqIFJlLWVzdGFibGlzaCBwcm9jZXNzIHByaXZhdGUgc3RhdGUgcmVsYXRlZCB0byBzaG1l bSBhcmVhcy4KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBhdCBiYWNrZW5kIHN0YXJ0dXAgaW4g RVhFQ19CQUNLRU5EIG1vZGUsIGluIGV2ZXJ5IGJhY2tlbmQuCisgKi8KKyNpZmRlZiBFWEVD X0JBQ0tFTkQKK3ZvaWQKK1NobWVtQXR0YWNoUmVxdWVzdGVkKHZvaWQpCit7CisJTGlzdENl bGwgICAqbGM7CisKKwkvKiBNdXN0IGJlIGluaXRpYWxpemluZyBhIChub24tc3RhbmRhbG9u ZSkgYmFja2VuZCAqLworCUFzc2VydChJc1VuZGVyUG9zdG1hc3Rlcik7CisJQXNzZXJ0KFNo bWVtQWxsb2NhdG9yLT5pbmRleCAhPSBOVUxMKTsKKwlBc3NlcnQoc2htZW1fcmVxdWVzdF9z dGF0ZSA9PSBTUlNfUkVRVUVTVElORyk7CisJc2htZW1fcmVxdWVzdF9zdGF0ZSA9IFNSU19B VFRBQ0hJTkc7CisKKwlMV0xvY2tBY3F1aXJlKFNobWVtSW5kZXhMb2NrLCBMV19TSEFSRUQp OworCisJLyoKKwkgKiBBdHRhY2ggdG8gYWxsIHRoZSByZXF1ZXN0ZWQgbWVtb3J5IGFyZWFz LgorCSAqLworCWZvcmVhY2hfcHRyKFNobWVtUmVxdWVzdCwgcmVxdWVzdCwgcGVuZGluZ19z aG1lbV9yZXF1ZXN0cykKKwl7CisJCUF0dGFjaE9ySW5pdFNobWVtSW5kZXhFbnRyeShyZXF1 ZXN0LCBmYWxzZSwgdHJ1ZSk7CisJfQorCWxpc3RfZnJlZV9kZWVwKHBlbmRpbmdfc2htZW1f cmVxdWVzdHMpOworCXBlbmRpbmdfc2htZW1fcmVxdWVzdHMgPSBOSUw7CisKKwkvKiBDYWxs IGF0dGFjaCBjYWxsYmFja3MgKi8KKwlmb3JlYWNoKGxjLCByZWdpc3RlcmVkX3NobWVtX2Nh bGxiYWNrcykKKwl7CisJCWNvbnN0IFNobWVtQ2FsbGJhY2tzICpjYWxsYmFja3MgPSAoY29u c3QgU2htZW1DYWxsYmFja3MgKikgbGZpcnN0KGxjKTsKKworCQlpZiAoY2FsbGJhY2tzLT5h dHRhY2hfZm4pCisJCQljYWxsYmFja3MtPmF0dGFjaF9mbihjYWxsYmFja3MtPmF0dGFjaF9m bl9hcmcpOworCX0KKworCUxXTG9ja1JlbGVhc2UoU2htZW1JbmRleExvY2spOworCisJc2ht ZW1fcmVxdWVzdF9zdGF0ZSA9IFNSU19ET05FOworfQorI2VuZGlmCisKKy8qCisgKiBXb3Jr aG9yc2UgdG8gaW5zZXJ0IG9yIGxvb2sgdXAgYSBuYW1lZCBzaG1lbSBhcmVhIGluIHRoZSBz aGFyZWQgbWVtb3J5CisgKiBpbmRleCwgYW5kIGluaXRpYWxpemUgb3IgYXR0YWNoIHRvIGl0 LgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIG9ubHkgZG9lcyB0aGUgYmFzaWMgaW5pdGlhbGl6 YXRpb24gZGVwZW5kaW5nIFNobWVtQXJlYUtpbmQsCisgKiBsaWtlIHNldHRpbmcgdGhlIGds b2JhbCBwb2ludGVyIHZhcmlhYmxlIHRvIHRoZSBhcmVhIGZvciBTSE1FTV9LSU5EX1NUUlVD VAorICogb3Igc2V0dGluZyB1cCB0aGUgYmFja2VuZC1wcml2YXRlIEhUQUIgY29udHJvbCBz dHJ1Y3QuICBUaGlzIGRvZXMgKm5vdCoKKyAqIGNhbGwgdGhlIGNhbGxiYWNrcyBzcGVjaWZp YyB0byB0aGUgc3Vic3lzdGVtIHRoYXQgcmVxdWVzdGVkIGl0LiAgVGhhdCdzCisgKiBkb25l IGxhdGVyIGFmdGVyIGFsbCB0aGUgc2htZW0gYXJlYXMgaGF2ZSBiZWVuIGluaXRpYWxpemVk IG9yIGF0dGFjaGVkIHRvLgorICoKKyAqIG1heV9pbml0ID09IHRydWUgJiYgbWF5X2F0dGFj aCA9PSBmYWxzZSBpcyB1c2VkIGF0IHBvc3RtYXN0ZXIgc3RhcnR1cCB0bworICogYWxsb2Nh dGUgYWxsIHRoZSBhcmVhcy4gIEFuIGVycm9yIGlzIHRocm93biBpZiB0aGUgYXJlYSBhbHJl YWR5IGV4aXN0cy4KKyAqCisgKiBtYXlfaW5pdCA9PSBmYWxzZSAmJiBtYXlfYXR0YWNoID09 IHRydWUgaXMgdXNlZCBhdCBiYWNrZW5kIHN0YXJ0dXAgaW4KKyAqIEVYRUNfQkFDS0VORCBt b2RlIHRvIGF0dGFjaCB0byBhbGwgdGhlIGFyZWFzLiAgVGhlIGFyZWEgaXMgZXhwZWN0ZWQg dG8KKyAqIGFscmVhZHkgYmUgaW5pdGlhbGl6ZWQsIGFuIGVycm9yIGlzIHRocm93biBpZiBu b3QuCisgKgorICogbWF5X2luaXQgPT0gdHJ1ZSAmJiBtYXlfYXR0YWNoID09IHRydWUgaXMg dXNlZCB3aGVuIGEgc2hhcmVkIG1lbW9yeSBpcworICogcmVxdWVzdGVkIGFmdGVyIHN0YXJ0 dXAsIHdpdGggU0hNRU1fQ0FMTEJBQ0tTX0FMTE9XX0FGVEVSX1NUQVJUVVAuCisgKgorICog KG1heV9pbml0ID09IGZhbHNlICYmIG1heV9hdHRhY2ggPT0gZmFsc2UgaXMgbm90IHVzZWQs IGl0IHdvdWxkIGFsd2F5cworICogcmFpc2UgYW4gZXJyb3IpCiAgKi8KLXR5cGVkZWYgc3Ry dWN0IHNobWVtX2hhc2hfYWxsb2NhdG9yCitzdGF0aWMgYm9vbAorQXR0YWNoT3JJbml0U2ht ZW1JbmRleEVudHJ5KFNobWVtUmVxdWVzdCAqcmVxdWVzdCwKKwkJCQkJCQlib29sIG1heV9p bml0LCBib29sIG1heV9hdHRhY2gpCiB7Ci0JY2hhcgkgICAqbmV4dDsJCQkvKiBzdGFydCBv ZiBmcmVlIHNwYWNlIGluIHRoZSBhcmVhICovCi0JY2hhcgkgICAqZW5kOwkJCS8qIGVuZCBv ZiB0aGUgc2htZW0gYXJlYSAqLwotfSBzaG1lbV9oYXNoX2FsbG9jYXRvcjsKKwkvKgorCSAq IElmIGNhbGxlZCBhZnRlciBwb3N0bWFzdGVyIHN0YXJ0dXAsIHdlIG5lZWQgdG8gaW1tZWRp YXRlbHkgYWxzbworCSAqIGluaXRpYWxpemUgb3IgYXR0YWNoIHRvIHRoZSBhcmVhLgorCSAq LworCVNobWVtU3RydWN0RGVzYyAqZGVzYyA9IHJlcXVlc3QtPmRlc2M7CisJU2htZW1JbmRl eEVudCAqaW5kZXhfZW50cnk7CisJYm9vbAkJZm91bmQ7CisKKwkvKiBJZiBib3RoIGFyZSBm YWxzZSwgd2UnbGwgZmFpbCBubyBtYXR0ZXIgd2hhdCAqLworCUFzc2VydChtYXlfaW5pdCB8 fCBtYXlfYXR0YWNoKTsKKworCWRlc2MtPm5hbWUgPSByZXF1ZXN0LT5vcHRpb25zLT5uYW1l OworCWRlc2MtPnB0ciA9IE5VTEw7CisKKwkvKiBsb29rIGl0IHVwIGluIHRoZSBzaG1lbSBp bmRleCAqLworCWluZGV4X2VudHJ5ID0gKFNobWVtSW5kZXhFbnQgKikKKwkJaGFzaF9zZWFy Y2goU2htZW1JbmRleCwgcmVxdWVzdC0+b3B0aW9ucy0+bmFtZSwKKwkJCQkJbWF5X2luaXQg PyBIQVNIX0VOVEVSX05VTEwgOiBIQVNIX0ZJTkQsICZmb3VuZCk7CisJaWYgKGZvdW5kKQor CXsKKwkJLyogQWxyZWFkeSBwcmVzZW50LCBqdXN0IGF0dGFjaCB0byBpdCAqLworCQlpZiAo IW1heV9hdHRhY2gpCisJCQllbG9nKEVSUk9SLCAic2hhcmVkIG1lbW9yeSBzdHJ1Y3QgXCIl c1wiIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQiLCBkZXNjLT5uYW1lKTsKKworCQlpZiAoaW5k ZXhfZW50cnktPnNpemUgIT0gcmVxdWVzdC0+b3B0aW9ucy0+c2l6ZSAmJgorCQkJcmVxdWVz dC0+b3B0aW9ucy0+c2l6ZSAhPSBTSE1FTV9BVFRBQ0hfVU5LTk9XTl9TSVpFKQorCQl7CisJ CQllbG9nKEVSUk9SLCAic2hhcmVkIG1lbW9yeSBzdHJ1Y3QgXCIlc1wiIGlzIGFscmVhZHkg cmVnaXN0ZXJlZCB3aXRoIGRpZmZlcmVudCBzaXplIiwKKwkJCQkgZGVzYy0+bmFtZSk7CisJ CX0KKwkJZGVzYy0+cHRyID0gaW5kZXhfZW50cnktPmxvY2F0aW9uOworCQlkZXNjLT5zaXpl ID0gaW5kZXhfZW50cnktPnNpemU7CisKKwkJLyogSW5pdGlhbGl6ZSBkZXBlbmRpbmcgb24g dGhlIGtpbmQgb2Ygc2htZW0gYXJlYSBpdCBpcyAqLworCQlzd2l0Y2ggKHJlcXVlc3QtPmtp bmQpCisJCXsKKwkJCWNhc2UgU0hNRU1fS0lORF9TVFJVQ1Q6CisJCQkJaWYgKHJlcXVlc3Qt Pm9wdGlvbnMtPnB0cikKKwkJCQkJKihyZXF1ZXN0LT5vcHRpb25zLT5wdHIpID0gaW5kZXhf ZW50cnktPmxvY2F0aW9uOworCQkJCWJyZWFrOworCQkJY2FzZSBTSE1FTV9LSU5EX0hBU0g6 CisJCQkJc2htZW1faGFzaF9hdHRhY2goZGVzYywgcmVxdWVzdC0+b3B0aW9ucyk7CisJCQkJ YnJlYWs7CisJCX0KKwl9CisJZWxzZSBpZiAoIW1heV9pbml0KQorCXsKKwkJLyogYXR0YWNo IHdhcyByZXF1ZXN0ZWQsIGJ1dCBpdCB3YXMgbm90IGZvdW5kICovCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkgZXJybXNn KCJjb3VsZCBub3QgZmluZCBTaG1lbUluZGV4IGVudHJ5IGZvciBkYXRhIHN0cnVjdHVyZSBc IiVzXCIiLAorCQkJCQkJZGVzYy0+bmFtZSkpKTsKKwl9CisJZWxzZSBpZiAoIWluZGV4X2Vu dHJ5KQorCXsKKwkJLyogdHJpZWQgdG8gYWRkIGl0IHRvIHRoZSBoYXNoIHRhYmxlLCBidXQg dGhlcmUgd2FzIG5vIHNwYWNlICovCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgY3JlYXRl IFNobWVtSW5kZXggZW50cnkgZm9yIGRhdGEgc3RydWN0dXJlIFwiJXNcIiIsCisJCQkJCQlk ZXNjLT5uYW1lKSkpOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBXZSBpbnNlcnRlZCB0 aGUgZW50cnkgdG8gdGhlIHNoYXJlZCBtZW1vcnkgaW5kZXguIEFsbG9jYXRlCisJCSAqIHJl cXVlc3RlZCBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSBmb3IgaXQsIGFuZCBkbyBiYXNpYwor CQkgKiBpbml0aWFsaXppb24uCisJCSAqLworCQlzaXplX3QJCWFsbG9jYXRlZF9zaXplOwor CQl2b2lkCSAgICpzdHJ1Y3RQdHI7CisKKwkJc3RydWN0UHRyID0gU2htZW1BbGxvY1Jhdyhy ZXF1ZXN0LT5vcHRpb25zLT5zaXplLCAmYWxsb2NhdGVkX3NpemUpOworCQlpZiAoc3RydWN0 UHRyID09IE5VTEwpCisJCXsKKwkJCS8qIG91dCBvZiBtZW1vcnk7IHJlbW92ZSB0aGUgZmFp bGVkIFNobWVtSW5kZXggZW50cnkgKi8KKwkJCWhhc2hfc2VhcmNoKFNobWVtSW5kZXgsIGRl c2MtPm5hbWUsIEhBU0hfUkVNT1ZFLCBOVUxMKTsKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJCSBlcnJtc2coIm5vdCBl bm91Z2ggc2hhcmVkIG1lbW9yeSBmb3IgZGF0YSBzdHJ1Y3R1cmUiCisJCQkJCQkJIiBcIiVz XCIgKCV6dSBieXRlcyByZXF1ZXN0ZWQpIiwKKwkJCQkJCQlkZXNjLT5uYW1lLCByZXF1ZXN0 LT5vcHRpb25zLT5zaXplKSkpOworCQl9CisJCWluZGV4X2VudHJ5LT5zaXplID0gcmVxdWVz dC0+b3B0aW9ucy0+c2l6ZTsKKwkJaW5kZXhfZW50cnktPmFsbG9jYXRlZF9zaXplID0gYWxs b2NhdGVkX3NpemU7CisJCWluZGV4X2VudHJ5LT5sb2NhdGlvbiA9IHN0cnVjdFB0cjsKKwor CQlkZXNjLT5wdHIgPSBpbmRleF9lbnRyeS0+bG9jYXRpb247CisJCWRlc2MtPnNpemUgPSBp bmRleF9lbnRyeS0+c2l6ZTsKKworCQkvKgorCQkgKiBSZS1lc3RhYmxpc2ggdGhlIGNhbGxl cidzIHBvaW50ZXIgdmFyaWFibGUsIG9yIGRvIG90aGVyIGFjdGlvbnMgdG8KKwkJICogYXR0 YWNoIGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiBzaG1lbSBhcmVhIGl0IGlzLgorCQkgKi8K KwkJc3dpdGNoIChyZXF1ZXN0LT5raW5kKQorCQl7CisJCQljYXNlIFNITUVNX0tJTkRfU1RS VUNUOgorCQkJCWlmIChyZXF1ZXN0LT5vcHRpb25zLT5wdHIpCisJCQkJCSoocmVxdWVzdC0+ b3B0aW9ucy0+cHRyKSA9IGluZGV4X2VudHJ5LT5sb2NhdGlvbjsKKwkJCQlicmVhazsKKwkJ CWNhc2UgU0hNRU1fS0lORF9IQVNIOgorCQkJCXNobWVtX2hhc2hfaW5pdChkZXNjLCByZXF1 ZXN0LT5vcHRpb25zKTsKKwkJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBmb3VuZDsK K30KIAogLyoKICAqCUluaXRTaG1lbUFsbG9jYXRvcigpIC0tLSBzZXQgdXAgYmFzaWMgcG9p bnRlcnMgdG8gc2hhcmVkIG1lbW9yeS4KICAqCiAgKiBDYWxsZWQgYXQgcG9zdG1hc3RlciBv ciBzdGFuZC1hbG9uZSBiYWNrZW5kIHN0YXJ0dXAsIHRvIGluaXRpYWxpemUgdGhlCiAgKiBh bGxvY2F0b3IncyBkYXRhIHN0cnVjdHVyZSBpbiB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50 LiAgSW4gRVhFQ19CQUNLRU5ELAotICogdGhpcyBpcyBhbHNvIGNhbGxlZCBhdCBiYWNrZW5k IHN0YXJ0dXAsIHRvIHNldCB1cCBwb2ludGVycyB0byB0aGUgc2hhcmVkCi0gKiBtZW1vcnkg YXJlYXMuCisgKiB0aGlzIGlzIGFsc28gY2FsbGVkIGF0IGJhY2tlbmQgc3RhcnR1cCwgdG8g c2V0IHVwIHBvaW50ZXJzIHRvIHRoZQorICogYWxyZWFkeS1pbml0aWFsaXplZCBkYXRhIHN0 cnVjdHVyZS4KICAqLwogdm9pZAogSW5pdFNobWVtQWxsb2NhdG9yKFBHU2htZW1IZWFkZXIg KnNlZ2hkcikKIHsKIAlTaXplCQlvZmZzZXQ7CisJaW50NjQJCWhhc2hfbmVsZW1zOwogCUhB U0hDVEwJCWluZm87CiAJaW50CQkJaGFzaF9mbGFnczsKIApAQCAtMTQyLDYgKzY0MiwxNiBA QCBJbml0U2htZW1BbGxvY2F0b3IoUEdTaG1lbUhlYWRlciAqc2VnaGRyKQogI2VuZGlmCiAJ QXNzZXJ0KHNlZ2hkciAhPSBOVUxMKTsKIAorCWlmIChJc1VuZGVyUG9zdG1hc3RlcikKKwl7 CisJCUFzc2VydChzaG1lbV9yZXF1ZXN0X3N0YXRlID09IFNSU19JTklUSUFMKTsKKwl9CisJ ZWxzZQorCXsKKwkJQXNzZXJ0KHNobWVtX3JlcXVlc3Rfc3RhdGUgPT0gU1JTX1JFUVVFU1RJ TkcpOworCQlzaG1lbV9yZXF1ZXN0X3N0YXRlID0gU1JTX0lOSVRJQUxJWklORzsKKwl9CisK IAkvKgogCSAqIFdlIGFzc3VtZSB0aGUgcG9pbnRlciBhbmQgb2Zmc2V0IGFyZSBNQVhBTElH Ti4gIE5vdCBhIGhhcmQgcmVxdWlyZW1lbnQsCiAJICogYnV0IGl0J3MgdHJ1ZSB0b2RheSBh bmQga2VlcHMgdGhlIG1hdGggYmVsb3cgc2ltcGxlci4KQEAgLTE4NiwxOSArNjk2LDIxIEBA IEluaXRTaG1lbUFsbG9jYXRvcihQR1NobWVtSGVhZGVyICpzZWdoZHIpCiAJICogdXNlIFNo bWVtSW5pdEhhc2goKSBoZXJlIGJlY2F1c2UgaXQgcmVsaWVzIG9uIFNobWVtSW5kZXggYmVp bmcgYWxyZWFkeQogCSAqIGluaXRpYWxpemVkLgogCSAqLworCWhhc2hfbmVsZW1zID0gbGlz dF9sZW5ndGgocGVuZGluZ19zaG1lbV9yZXF1ZXN0cykgKyBTSE1FTV9JTkRFWF9BRERJVElP TkFMX1NJWkU7CisKIAlpbmZvLmtleXNpemUgPSBTSE1FTV9JTkRFWF9LRVlTSVpFOwogCWlu Zm8uZW50cnlzaXplID0gc2l6ZW9mKFNobWVtSW5kZXhFbnQpOwogCWhhc2hfZmxhZ3MgPSBI QVNIX0VMRU0gfCBIQVNIX1NUUklOR1MgfCBIQVNIX0ZJWEVEX1NJWkU7CiAKIAlpZiAoIUlz VW5kZXJQb3N0bWFzdGVyKQogCXsKLQkJU2htZW1BbGxvY2F0b3ItPmluZGV4X3NpemUgPSBo YXNoX2VzdGltYXRlX3NpemUoU0hNRU1fSU5ERVhfU0laRSwgaW5mby5lbnRyeXNpemUpOwor CQlTaG1lbUFsbG9jYXRvci0+aW5kZXhfc2l6ZSA9IGhhc2hfZXN0aW1hdGVfc2l6ZShoYXNo X25lbGVtcywgaW5mby5lbnRyeXNpemUpOwogCQlTaG1lbUFsbG9jYXRvci0+aW5kZXggPSAo SEFTSEhEUiAqKSBTaG1lbUFsbG9jKFNobWVtQWxsb2NhdG9yLT5pbmRleF9zaXplKTsKIAl9 CiAJU2htZW1JbmRleCA9IHNobWVtX2hhc2hfY3JlYXRlKFNobWVtQWxsb2NhdG9yLT5pbmRl eCwKIAkJCQkJCQkJICAgU2htZW1BbGxvY2F0b3ItPmluZGV4X3NpemUsCiAJCQkJCQkJCSAg IElzVW5kZXJQb3N0bWFzdGVyLAotCQkJCQkJCQkgICAiU2htZW1JbmRleCIsIFNITUVNX0lO REVYX1NJWkUsCisJCQkJCQkJCSAgICJTaG1lbUluZGV4IiwgaGFzaF9uZWxlbXMsCiAJCQkJ CQkJCSAgICZpbmZvLCBoYXNoX2ZsYWdzKTsKIAlBc3NlcnQoU2htZW1JbmRleCAhPSBOVUxM KTsKIApAQCAtMjE5LDYgKzczMSwyMyBAQCBJbml0U2htZW1BbGxvY2F0b3IoUEdTaG1lbUhl YWRlciAqc2VnaGRyKQogCX0KIH0KIAorLyoKKyAqIFJlc2V0IHN0YXRlIG9uIHBvc3RtYXN0 ZXIgY3Jhc2ggcmVzdGFydC4KKyAqLwordm9pZAorUmVzZXRTaG1lbUFsbG9jYXRvcih2b2lk KQoreworCUFzc2VydCghSXNVbmRlclBvc3RtYXN0ZXIpOworCXNobWVtX3JlcXVlc3Rfc3Rh dGUgPSBTUlNfSU5JVElBTDsKKworCXBlbmRpbmdfc2htZW1fcmVxdWVzdHMgPSBOSUw7CisK KwkvKgorCSAqIE5vdGUgdGhhdCB3ZSBkb24ndCBjbGVhciB0aGUgcmVnaXN0ZXJlZCBjYWxs YmFja3MuICBXZSB3aWxsIG5lZWQgdG8KKwkgKiBjYWxsIHRoZW0gYWdhaW4gYXMgd2UgcmVz dGFydAorCSAqLworfQorCiAvKgogICogU2htZW1BbGxvYyAtLSBhbGxvY2F0ZSBtYXgtYWxp Z25lZCBjaHVuayBmcm9tIHNoYXJlZCBtZW1vcnkKICAqCkBAIC0zMTYsOTIgKzg0NSwxNDEg QEAgU2htZW1BZGRySXNWYWxpZChjb25zdCB2b2lkICphZGRyKQogfQogCiAvKgotICogU2ht ZW1Jbml0U3RydWN0IC0tIENyZWF0ZS9hdHRhY2ggdG8gYSBzdHJ1Y3R1cmUgaW4gc2hhcmVk IG1lbW9yeS4KKyAqIFJlZ2lzdGVyIGNhbGxiYWNrcyB0aGF0IGRlZmluZSBhIHNoYXJlZCBt ZW1vcnkgYXJlYSAob3IgbXVsdGlwbGUgYXJlYXMpLgogICoKLSAqCQlUaGlzIGlzIGNhbGxl ZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdG8gZmluZCBvciBhbGxvY2F0ZQotICoJCWEgZGF0 YSBzdHJ1Y3R1cmUgaW4gc2hhcmVkIG1lbW9yeS4gIElmIG5vIG90aGVyIHByb2Nlc3MKLSAq CQloYXMgY3JlYXRlZCB0aGUgc3RydWN0dXJlLCB0aGlzIHJvdXRpbmUgYWxsb2NhdGVzIHNw YWNlCi0gKgkJZm9yIGl0LiAgSWYgaXQgZXhpc3RzIGFscmVhZHksIGEgcG9pbnRlciB0byB0 aGUgZXhpc3RpbmcKLSAqCQlzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQuCisgKiBUaGUgc3lzdGVt IHdpbGwgY2FsbCB0aGUgY2FsbGJhY2tzIGF0IGRpZmZlcmVudCBzdGFnZXMgb2YgcG9zdG1h c3RlciBvcgorICogYmFja2VuZCBzdGFydHVwLCB0byBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6 ZSB0aGUgYXJlYS4KICAqCi0gKglSZXR1cm5zOiBwb2ludGVyIHRvIHRoZSBvYmplY3QuICAq Zm91bmRQdHIgaXMgc2V0IHRydWUgaWYgdGhlIG9iamVjdCB3YXMKLSAqCQlhbHJlYWR5IGlu IHRoZSBzaG1lbSBpbmRleCAoaGVuY2UsIGFscmVhZHkgaW5pdGlhbGl6ZWQpLgorICogVGhp cyBpcyBub3JtYWxseSBjYWxsZWQgZWFybHkgZHVyaW5nIHBvc3RtYXN0ZXIgc3RhcnR1cCwg YnV0IGlmIHRoZQorICogU0hNRU1fQ0FMTEJBQ0tTX0FMTE9XX0FGVEVSX1NUQVJUVVAgaXMg c2V0LCB0aGlzIGNhbiBhbHNvIGJlIHVzZWQgYWZ0ZXIKKyAqIHN0YXJ0dXAsIGFsdGhvdWdo IGFmdGVyIHN0YXJ0dXAgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCB0aGVyZSdzIGVub3Vn aAorICogc2hhcmVkIG1lbW9yeSBhdmFpbGFibGUuICBXaGVuIGNhbGxlZCBhZnRlciBzdGFy dHVwLCB0aGlzIGltbWVkaWF0ZWx5IGNhbGxzCisgKiB0aGUgcmlnaHQgY2FsbGJhY2tzIGRl cGVuZGluZyBvbiB3aGV0aGVyIGFub3RoZXIgYmFja2VuZCBoYWQgYWxyZWFkeQorICogaW5p dGlhbGl6ZWQgdGhlIGFyZWEuCiAgKgotICoJTm90ZTogYmVmb3JlIFBvc3RncmVzIDkuMCwg dGhpcyBmdW5jdGlvbiByZXR1cm5lZCBOVUxMIGZvciBzb21lIGZhaWx1cmUKLSAqCWNhc2Vz LiAgTm93LCBpdCBhbHdheXMgdGhyb3dzIGVycm9yIGluc3RlYWQsIHNvIGNhbGxlcnMgbmVl ZCBub3QgY2hlY2sKLSAqCWZvciBOVUxMLgorICogTm90ZTogSW4gRVhFQ19CQUNLRU5EIG1v ZGUsIHRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGluIGV2ZXJ5IGJhY2tlbmQKKyAqIHByb2Nl c3MuICBUaGF0J3MgbmVlZGVkIGJlY2F1c2Ugd2UgY2Fubm90IHBhc3MgZG93biB0aGUgY2Fs bGJhY2sgZnVuY3Rpb24KKyAqIHBvaW50ZXJzIGZyb20gdGhlIHBvc3RtYXN0ZXIgcHJvY2Vz cywgYmVjYXVzZSBkaWZmZXJlbnQgcHJvY2Vzc2VzIG1heSBoYXZlCisgKiBsb2FkZWQgbGli cmFyaWVzIHRvIGRpZmZlcmVudCBhZGRyZXNzZXMuCiAgKi8KLXZvaWQgKgotU2htZW1Jbml0 U3RydWN0KGNvbnN0IGNoYXIgKm5hbWUsIFNpemUgc2l6ZSwgYm9vbCAqZm91bmRQdHIpCit2 b2lkCitSZWdpc3RlclNobWVtQ2FsbGJhY2tzKGNvbnN0IFNobWVtQ2FsbGJhY2tzICpjYWxs YmFja3MpCiB7Ci0JU2htZW1JbmRleEVudCAqcmVzdWx0OwotCXZvaWQJICAgKnN0cnVjdFB0 cjsKKwlpZiAoc2htZW1fcmVxdWVzdF9zdGF0ZSA9PSBTUlNfRE9ORSAmJiBJc1VuZGVyUG9z dG1hc3RlcikKKwl7CisJCS8qIEFmdGVyLXN0YXJ0dXAgaW5pdGlhbGl6YXRpb24gKi8KKwkJ Ym9vbAkJZm91bmQgPSBmYWxzZTsKIAotCUFzc2VydChTaG1lbUluZGV4ICE9IE5VTEwpOwor CQlpZiAoKGNhbGxiYWNrcy0+ZmxhZ3MgJiBTSE1FTV9DQUxMQkFDS1NfQUxMT1dfQUZURVJf U1RBUlRVUCkgPT0gMCkKKwkJCWVsb2coRVJST1IsICJjYW5ub3QgcmVxdWVzdCBzaGFyZWQg bWVtb3J5IGF0IHRoaXMgdGltZSIpOwogCi0JTFdMb2NrQWNxdWlyZShTaG1lbUluZGV4TG9j aywgTFdfRVhDTFVTSVZFKTsKKwkJQXNzZXJ0KHBlbmRpbmdfc2htZW1fcmVxdWVzdHMgPT0g TklMKTsKKwkJQXNzZXJ0KHNobWVtX3JlcXVlc3Rfc3RhdGUgPT0gU1JTX0RPTkUpOworCQlz aG1lbV9yZXF1ZXN0X3N0YXRlID0gU1JTX1JFUVVFU1RJTkc7CiAKLQkvKiBsb29rIGl0IHVw IGluIHRoZSBzaG1lbSBpbmRleCAqLwotCXJlc3VsdCA9IChTaG1lbUluZGV4RW50ICopCi0J CWhhc2hfc2VhcmNoKFNobWVtSW5kZXgsIG5hbWUsIEhBU0hfRU5URVJfTlVMTCwgZm91bmRQ dHIpOworCQlpZiAoY2FsbGJhY2tzLT5yZXF1ZXN0X2ZuKQorCQkJY2FsbGJhY2tzLT5yZXF1 ZXN0X2ZuKGNhbGxiYWNrcy0+cmVxdWVzdF9mbl9hcmcpOworCQlzaG1lbV9yZXF1ZXN0X3N0 YXRlID0gU1JTX0FGVEVSX1NUQVJUVVBfQVRUQUNIX09SX0lOSVQ7CiAKLQlpZiAoIXJlc3Vs dCkKLQl7Ci0JCUxXTG9ja1JlbGVhc2UoU2htZW1JbmRleExvY2spOwotCQllcmVwb3J0KEVS Uk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCi0JCQkJIGVycm1z ZygiY291bGQgbm90IGNyZWF0ZSBTaG1lbUluZGV4IGVudHJ5IGZvciBkYXRhIHN0cnVjdHVy ZSBcIiVzXCIiLAotCQkJCQkJbmFtZSkpKTsKLQl9CisJCUxXTG9ja0FjcXVpcmUoU2htZW1J bmRleExvY2ssIExXX0VYQ0xVU0lWRSk7CiAKLQlpZiAoKmZvdW5kUHRyKQotCXsKIAkJLyoK LQkJICogU3RydWN0dXJlIGlzIGluIHRoZSBzaG1lbSBpbmRleCBzbyBzb21lb25lIGVsc2Ug aGFzIGFsbG9jYXRlZCBpdAotCQkgKiBhbHJlYWR5LiAgVGhlIHNpemUgYmV0dGVyIGJlIHRo ZSBzYW1lIGFzIHRoZSBzaXplIHdlIGFyZSB0cnlpbmcgdG8KLQkJICogaW5pdGlhbGl6ZSB0 bywgb3IgdGhlcmUgaXMgYSBuYW1lIGNvbmZsaWN0IChvciB3b3JzZSkuCisJCSAqIEFsbG9j YXRlIG9yIGF0dGFjaCBhbGwgdGhlIHNobWVtIGFyZWFzIHJlcXVlc3RlZCBieSB0aGUgcmVx dWVzdF9mbgorCQkgKiBjYWxsYmFjay4KIAkJICovCi0JCWlmIChyZXN1bHQtPnNpemUgIT0g c2l6ZSkKKwkJZm9yZWFjaF9wdHIoU2htZW1SZXF1ZXN0LCByZXF1ZXN0LCBwZW5kaW5nX3No bWVtX3JlcXVlc3RzKQogCQl7Ci0JCQlMV0xvY2tSZWxlYXNlKFNobWVtSW5kZXhMb2NrKTsK LQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJtc2coIlNobWVtSW5kZXggZW50cnkgc2l6 ZSBpcyB3cm9uZyBmb3IgZGF0YSBzdHJ1Y3R1cmUiCi0JCQkJCQkJIiBcIiVzXCI6IGV4cGVj dGVkICV6dSwgYWN0dWFsICV6dSIsCi0JCQkJCQkJbmFtZSwgc2l6ZSwgcmVzdWx0LT5zaXpl KSkpOworCQkJZm91bmQgPSBBdHRhY2hPckluaXRTaG1lbUluZGV4RW50cnkocmVxdWVzdCwg dHJ1ZSwgdHJ1ZSk7CiAJCX0KLQkJc3RydWN0UHRyID0gcmVzdWx0LT5sb2NhdGlvbjsKLQl9 Ci0JZWxzZQotCXsKLQkJU2l6ZQkJYWxsb2NhdGVkX3NpemU7CisJCWxpc3RfZnJlZV9kZWVw KHBlbmRpbmdfc2htZW1fcmVxdWVzdHMpOworCQlwZW5kaW5nX3NobWVtX3JlcXVlc3RzID0g TklMOwogCi0JCS8qIEl0IGlzbid0IGluIHRoZSB0YWJsZSB5ZXQuIGFsbG9jYXRlIGFuZCBp bml0aWFsaXplIGl0ICovCi0JCXN0cnVjdFB0ciA9IFNobWVtQWxsb2NSYXcoc2l6ZSwgJmFs bG9jYXRlZF9zaXplKTsKLQkJaWYgKHN0cnVjdFB0ciA9PSBOVUxMKQorCQkvKgorCQkgKiBG aW5pc2ggaW5pdGlhbGl6YXRpb24gb3IgYXR0YWNoaW5nIHRvIHRoZSBzaG1lbSBhcmVzIGJ5 IGNhbGxpbmcgdGhlCisJCSAqIGFwcHJvcHJpYXRlIGNhbGxiYWNrLgorCQkgKgorCQkgKiBG SVhNRTogV2hhdCB0byBkbyBpZiBtdWx0aXBsZSBzaG1lbSBhcmVhcyB3ZXJlIHJlcXVlc3Rl ZCwgYW5kIHNvbWUKKwkJICogb2YgdGhlbSBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCBidXQg bm90IGFsbD8gIFdlIGV4cGVjdCBhbGwgc2htZW0KKwkJICogYXJlYXMgcmVxdWVzdGVkIGJ5 IGEgc2luZ2xlIGNhbGxiYWNrIHRvIGZvcm0gYSBjb2hlcmVudCB1bml0LgorCQkgKi8KKwkJ aWYgKGZvdW5kKQogCQl7Ci0JCQkvKiBvdXQgb2YgbWVtb3J5OyByZW1vdmUgdGhlIGZhaWxl ZCBTaG1lbUluZGV4IGVudHJ5ICovCi0JCQloYXNoX3NlYXJjaChTaG1lbUluZGV4LCBuYW1l LCBIQVNIX1JFTU9WRSwgTlVMTCk7Ci0JCQlMV0xvY2tSZWxlYXNlKFNobWVtSW5kZXhMb2Nr KTsKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01F TU9SWSksCi0JCQkJCSBlcnJtc2coIm5vdCBlbm91Z2ggc2hhcmVkIG1lbW9yeSBmb3IgZGF0 YSBzdHJ1Y3R1cmUiCi0JCQkJCQkJIiBcIiVzXCIgKCV6dSBieXRlcyByZXF1ZXN0ZWQpIiwK LQkJCQkJCQluYW1lLCBzaXplKSkpOworCQkJaWYgKGNhbGxiYWNrcy0+YXR0YWNoX2ZuKQor CQkJCWNhbGxiYWNrcy0+YXR0YWNoX2ZuKGNhbGxiYWNrcy0+YXR0YWNoX2ZuX2FyZyk7CisJ CX0KKwkJZWxzZQorCQl7CisJCQlpZiAoY2FsbGJhY2tzLT5pbml0X2ZuKQorCQkJCWNhbGxi YWNrcy0+aW5pdF9mbihjYWxsYmFja3MtPmluaXRfZm5fYXJnKTsKIAkJfQotCQlyZXN1bHQt PnNpemUgPSBzaXplOwotCQlyZXN1bHQtPmFsbG9jYXRlZF9zaXplID0gYWxsb2NhdGVkX3Np emU7Ci0JCXJlc3VsdC0+bG9jYXRpb24gPSBzdHJ1Y3RQdHI7CisKKwkJTFdMb2NrUmVsZWFz ZShTaG1lbUluZGV4TG9jayk7CisJCXNobWVtX3JlcXVlc3Rfc3RhdGUgPSBTUlNfRE9ORTsK KworCQlyZXR1cm47CiAJfQogCi0JTFdMb2NrUmVsZWFzZShTaG1lbUluZGV4TG9jayk7CisJ cmVnaXN0ZXJlZF9zaG1lbV9jYWxsYmFja3MgPSBsYXBwZW5kKHJlZ2lzdGVyZWRfc2htZW1f Y2FsbGJhY2tzLAorCQkJCQkJCQkJCSAodm9pZCAqKSBjYWxsYmFja3MpOworfQorCisvKgor ICogQ2FsbCBhbGwgc2htZW0gcmVxdWVzdCBjYWxsYmFja3MuCisgKi8KK3ZvaWQKK1NobWVt Q2FsbFJlcXVlc3RDYWxsYmFja3Modm9pZCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKIAotCUFz c2VydChTaG1lbUFkZHJJc1ZhbGlkKHN0cnVjdFB0cikpOworCUFzc2VydChzaG1lbV9yZXF1 ZXN0X3N0YXRlID09IFNSU19JTklUSUFMKTsKKwlzaG1lbV9yZXF1ZXN0X3N0YXRlID0gU1JT X1JFUVVFU1RJTkc7CiAKLQlBc3NlcnQoc3RydWN0UHRyID09ICh2b2lkICopIENBQ0hFTElO RUFMSUdOKHN0cnVjdFB0cikpOworCWZvcmVhY2gobGMsIHJlZ2lzdGVyZWRfc2htZW1fY2Fs bGJhY2tzKQorCXsKKwkJY29uc3QgU2htZW1DYWxsYmFja3MgKmNhbGxiYWNrcyA9IChjb25z dCBTaG1lbUNhbGxiYWNrcyAqKSBsZmlyc3QobGMpOwogCi0JcmV0dXJuIHN0cnVjdFB0cjsK KwkJaWYgKGNhbGxiYWNrcy0+cmVxdWVzdF9mbikKKwkJCWNhbGxiYWNrcy0+cmVxdWVzdF9m bihjYWxsYmFja3MtPnJlcXVlc3RfZm5fYXJnKTsKKwl9CiB9CiAKKy8qCisgKiBTaG1lbUlu aXRTdHJ1Y3QgLS0gQ3JlYXRlL2F0dGFjaCB0byBhIHN0cnVjdHVyZSBpbiBzaGFyZWQgbWVt b3J5LgorICoKKyAqCQlUaGlzIGlzIGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdG8g ZmluZCBvciBhbGxvY2F0ZQorICoJCWEgZGF0YSBzdHJ1Y3R1cmUgaW4gc2hhcmVkIG1lbW9y eS4gIElmIG5vIG90aGVyIHByb2Nlc3MKKyAqCQloYXMgY3JlYXRlZCB0aGUgc3RydWN0dXJl LCB0aGlzIHJvdXRpbmUgYWxsb2NhdGVzIHNwYWNlCisgKgkJZm9yIGl0LiAgSWYgaXQgZXhp c3RzIGFscmVhZHksIGEgcG9pbnRlciB0byB0aGUgZXhpc3RpbmcKKyAqCQlzdHJ1Y3R1cmUg aXMgcmV0dXJuZWQuCisgKgorICoJUmV0dXJuczogcG9pbnRlciB0byB0aGUgb2JqZWN0LiAg KmZvdW5kUHRyIGlzIHNldCB0cnVlIGlmIHRoZSBvYmplY3Qgd2FzCisgKgkJYWxyZWFkeSBp biB0aGUgc2htZW0gaW5kZXggKGhlbmNlLCBhbHJlYWR5IGluaXRpYWxpemVkKS4KKyAqCisg KiBOb3RlOiBUaGlzIGlzIGEgbGVnYWN5IGludGVyZmFjZSwga2VwdCBmb3IgYmFja3dhcmRz IGNvbXBhdGliaWxpdHkgd2l0aAorICogZXh0ZW5zaW9ucy4gIFVzZSBTaG1lbVJlcXVlc3RT dHJ1Y3QoKSBpbiBuZXcgY29kZSEKKyAqLwordm9pZCAqCitTaG1lbUluaXRTdHJ1Y3QoY29u c3QgY2hhciAqbmFtZSwgU2l6ZSBzaXplLCBib29sICpmb3VuZFB0cikKK3sKKwlTaG1lbVN0 cnVjdERlc2MgZGVzYzsKKwlTaG1lbVN0cnVjdE9wdHMgb3B0aW9ucyA9IHsKKwkJLm5hbWUg PSBuYW1lLAorCQkuc2l6ZSA9IHNpemUsCisJfTsKKwlTaG1lbVJlcXVlc3QgcmVxdWVzdCA9 IHsmZGVzYywgJm9wdGlvbnMsIFNITUVNX0tJTkRfU1RSVUNUfTsKKworCUFzc2VydChzaG1l bV9yZXF1ZXN0X3N0YXRlID09IFNSU19ET05FIHx8CisJCSAgIHNobWVtX3JlcXVlc3Rfc3Rh dGUgPT0gU1JTX0lOSVRJQUxJWklORyB8fAorCQkgICBzaG1lbV9yZXF1ZXN0X3N0YXRlID09 IFNSU19SRVFVRVNUSU5HKTsKKworCS8qIGxvb2sgaXQgdXAgaW1tZWRpYXRlbHkgKi8KKwlM V0xvY2tBY3F1aXJlKFNobWVtSW5kZXhMb2NrLCBMV19FWENMVVNJVkUpOworCSpmb3VuZFB0 ciA9IEF0dGFjaE9ySW5pdFNobWVtSW5kZXhFbnRyeSgmcmVxdWVzdCwgdHJ1ZSwgdHJ1ZSk7 CisJTFdMb2NrUmVsZWFzZShTaG1lbUluZGV4TG9jayk7CisKKwlBc3NlcnQoZGVzYy5wdHIg IT0gTlVMTCk7CisJcmV0dXJuIGRlc2MucHRyOworfQogCiAvKgogICogQWRkIHR3byBTaXpl IHZhbHVlcywgY2hlY2tpbmcgZm9yIG92ZXJmbG93CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9zaG1lbV9oYXNoLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9z aG1lbV9oYXNoLmMKaW5kZXggMGIwNTczMDEyOWUuLjRlNWI4YTY2ZmRlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbV9oYXNoLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc2htZW1faGFzaC5jCkBAIC0yMSw5ICsyMSw4MSBAQAogI2luY2x1 ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisjaW5jbHVk ZSAidXRpbHMvbWVtdXRpbHMuaCIKKworLyoKKyAqIEEgdmVyeSBzaW1wbGUgYWxsb2NhdG9y IHVzZWQgdG8gY2FydmUgb3V0IGRpZmZlcmVudCBwYXJ0cyBvZiBhIGhhc2ggdGFibGUKKyAq IGZyb20gYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBjb250aWd1b3VzIHNoYXJlZCBtZW1vcnkg YXJlYS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc2htZW1faGFzaF9hbGxvY2F0b3IKK3sKKwlj aGFyCSAgICpuZXh0OwkJCS8qIHN0YXJ0IG9mIGZyZWUgc3BhY2UgaW4gdGhlIGFyZWEgKi8K KwljaGFyCSAgICplbmQ7CQkJLyogZW5kIG9mIHRoZSBzaG1lbSBhcmVhICovCit9IHNobWVt X2hhc2hfYWxsb2NhdG9yOwogCiBzdGF0aWMgdm9pZCAqU2htZW1IYXNoQWxsb2MoU2l6ZSBz aXplLCB2b2lkICphbGxvY19hcmcpOwogCisvKgorICogU2htZW1SZXF1ZXN0SGFzaCAtLSBS ZXF1ZXN0IGEgc2hhcmVkIG1lbW9yeSBoYXNoIHRhYmxlLgorICoKKyAqIFNpbWlsYXIgdG8g U2htZW1SZXF1ZXN0U3RydWN0KCksIGJ1dCByZXF1ZXN0cyBhIGhhc2ggdGFibGUgaW5zdGVh ZCBvZiBhbgorICogb3BhcXVlIGFyZWEuCisgKi8KK3ZvaWQKK1NobWVtUmVxdWVzdEhhc2hX aXRoT3B0cyhTaG1lbUhhc2hEZXNjICpkZXNjLCBjb25zdCBTaG1lbUhhc2hPcHRzICpvcHRp b25zKQoreworCVNobWVtSGFzaE9wdHMgKm9wdGlvbnNfY29weTsKKworCUFzc2VydChvcHRp b25zLT5uYW1lICE9IE5VTEwpOworCisJb3B0aW9uc19jb3B5ID0gTWVtb3J5Q29udGV4dEFs bG9jKFRvcE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkgIHNpemVvZihTaG1lbUhhc2hPcHRz KSk7CisJbWVtY3B5KG9wdGlvbnNfY29weSwgb3B0aW9ucywgc2l6ZW9mKFNobWVtSGFzaE9w dHMpKTsKKworCS8qIFNldCBvcHRpb25zIGZvciB0aGUgZml4ZWQtc2l6ZSBhcmVhIGhvbGRp bmcgdGhlIGhhc2ggdGFibGUgKi8KKwlvcHRpb25zX2NvcHktPmJhc2UubmFtZSA9IG9wdGlv bnMtPm5hbWU7CisJb3B0aW9uc19jb3B5LT5iYXNlLnNpemUgPSBoYXNoX2VzdGltYXRlX3Np emUob3B0aW9uc19jb3B5LT5uZWxlbXMsCisJCQkJCQkJCQkJCQkgb3B0aW9uc19jb3B5LT5o YXNoX2luZm8uZW50cnlzaXplKTsKKworCVNobWVtUmVxdWVzdEludGVybmFsKCZkZXNjLT5i YXNlLCAmb3B0aW9uc19jb3B5LT5iYXNlLCBTSE1FTV9LSU5EX0hBU0gpOworfQorCit2b2lk CitzaG1lbV9oYXNoX2luaXQoU2htZW1TdHJ1Y3REZXNjICpiYXNlX2Rlc2MsIFNobWVtU3Ry dWN0T3B0cyAqYmFzZV9vcHRpb25zKQoreworCVNobWVtSGFzaERlc2MgKmRlc2MgPSAoU2ht ZW1IYXNoRGVzYyAqKSBiYXNlX2Rlc2M7CisJU2htZW1IYXNoT3B0cyAqb3B0aW9ucyA9IChT aG1lbUhhc2hPcHRzICopIGJhc2Vfb3B0aW9uczsKKwlpbnQJCQloYXNoX2ZsYWdzID0gb3B0 aW9ucy0+aGFzaF9mbGFnczsKKworCW9wdGlvbnMtPmhhc2hfaW5mby5oY3RsID0gZGVzYy0+ YmFzZS5wdHI7CisJQXNzZXJ0KG9wdGlvbnMtPmhhc2hfaW5mby5oY3RsICE9IE5VTEwpOwor CWRlc2MtPnB0ciA9IHNobWVtX2hhc2hfY3JlYXRlKGRlc2MtPmJhc2UucHRyLCBiYXNlX2Rl c2MtPnNpemUsIGZhbHNlLAorCQkJCQkJCQkgIGRlc2MtPmJhc2UubmFtZSwKKwkJCQkJCQkJ ICBvcHRpb25zLT5uZWxlbXMsICZvcHRpb25zLT5oYXNoX2luZm8sIGhhc2hfZmxhZ3MpOwor CisJaWYgKG9wdGlvbnMtPnB0cikKKwkJKm9wdGlvbnMtPnB0ciA9IGRlc2MtPnB0cjsKK30K Kwordm9pZAorc2htZW1faGFzaF9hdHRhY2goU2htZW1TdHJ1Y3REZXNjICpiYXNlX2Rlc2Ms IFNobWVtU3RydWN0T3B0cyAqYmFzZV9vcHRpb25zKQoreworCVNobWVtSGFzaERlc2MgKmRl c2MgPSAoU2htZW1IYXNoRGVzYyAqKSBiYXNlX2Rlc2M7CisJU2htZW1IYXNoT3B0cyAqb3B0 aW9ucyA9IChTaG1lbUhhc2hPcHRzICopIGJhc2Vfb3B0aW9uczsKKwlpbnQJCQloYXNoX2Zs YWdzID0gb3B0aW9ucy0+aGFzaF9mbGFnczsKKworCS8qIGF0dGFjaCB0byBpdCByYXRoZXIg dGhhbiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBuZXcgc3BhY2UgKi8KKwloYXNoX2ZsYWdz IHw9IEhBU0hfQVRUQUNIOworCW9wdGlvbnMtPmhhc2hfaW5mby5oY3RsID0gZGVzYy0+YmFz ZS5wdHI7CisJQXNzZXJ0KG9wdGlvbnMtPmhhc2hfaW5mby5oY3RsICE9IE5VTEwpOworCWRl c2MtPnB0ciA9IHNobWVtX2hhc2hfY3JlYXRlKGRlc2MtPmJhc2UucHRyLCBiYXNlX2Rlc2Mt PnNpemUsIHRydWUsCisJCQkJCQkJCSAgZGVzYy0+YmFzZS5uYW1lLAorCQkJCQkJCQkgIG9w dGlvbnMtPm5lbGVtcywgJm9wdGlvbnMtPmhhc2hfaW5mbywgaGFzaF9mbGFncyk7CisKKwlp ZiAob3B0aW9ucy0+cHRyKQorCQkqb3B0aW9ucy0+cHRyID0gZGVzYy0+cHRyOworfQorCiAv KgogICogU2htZW1Jbml0SGFzaCAtLSBDcmVhdGUgYW5kIGluaXRpYWxpemUsIG9yIGF0dGFj aCB0bywgYQogICoJCXNoYXJlZCBtZW1vcnkgaGFzaCB0YWJsZS4KQEAgLTQwLDkgKzExMiw4 IEBAIHN0YXRpYyB2b2lkICpTaG1lbUhhc2hBbGxvYyhTaXplIHNpemUsIHZvaWQgKmFsbG9j X2FyZyk7CiAgKiB0byBzaGFyZWQtbWVtb3J5IGhhc2ggdGFibGVzIGFyZSBhZGRlZCBoZXJl LCBleGNlcHQgdGhhdCBjYWxsZXJzIG1heQogICogY2hvb3NlIHRvIHNwZWNpZnkgSEFTSF9Q QVJUSVRJT04uCiAgKgotICogTm90ZTogYmVmb3JlIFBvc3RncmVzIDkuMCwgdGhpcyBmdW5j dGlvbiByZXR1cm5lZCBOVUxMIGZvciBzb21lIGZhaWx1cmUKLSAqIGNhc2VzLiAgTm93LCBp dCBhbHdheXMgdGhyb3dzIGVycm9yIGluc3RlYWQsIHNvIGNhbGxlcnMgbmVlZCBub3QgY2hl Y2sKLSAqIGZvciBOVUxMLgorICogTm90ZTogVGhpcyBpcyBhIGxlZ2FjeSBpbnRlcmZhY2Us IGtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKKyAqIGV4dGVuc2lvbnMu ICBVc2UgU2htZW1SZXF1ZXN0SGFzaCgpIGluIG5ldyBjb2RlIQogICovCiBIVEFCICoKIFNo bWVtSW5pdEhhc2goY29uc3QgY2hhciAqbmFtZSwJCS8qIHRhYmxlIHN0cmluZyBuYW1lIGZv ciBzaG1lbSBpbmRleCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L3Byb2MuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggNWM0N2Nm MTM0NzMuLjliODgwYTZhZjY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTEy MSw2ICsxMjEsOSBAQCBGYXN0UGF0aExvY2tTaG1lbVNpemUodm9pZCkKIAogCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCAoZnBMb2NrQml0c1NpemUgKyBm cFJlbElkU2l6ZSkpKTsKIAorCUFzc2VydChUb3RhbFByb2NzID4gMCk7CisJQXNzZXJ0KHNp emUgPiAwKTsKKwogCXJldHVybiBzaXplOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXgg MTBiZTYwMDExYWQuLmFmN2NjODZkODBhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29w L3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC00MTU1 LDcgKzQxNTUsMTQgQEAgUG9zdGdyZXNTaW5nbGVVc2VyTWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdLAogCUluaXRpYWxpemVGYXN0UGF0aExvY2tzKCk7CiAKIAkvKgotCSAqIEdpdmUg cHJlbG9hZGVkIGxpYnJhcmllcyBhIGNoYW5jZSB0byByZXF1ZXN0IGFkZGl0aW9uYWwgc2hh cmVkIG1lbW9yeS4KKwkgKiBCZWZvcmUgY29tcHV0aW5nIHRoZSB0b3RhbCBzaXplIG5lZWRl ZCwgZ2l2ZSBhbGwgc3Vic3lzdGVtcywgaW5jbHVkaW5nCisJICogYWRkLWlucywgYSBjaGFu Y2UgdG8gY2hhbmNlIHRvIGFkanVzdCB0aGVpciByZXF1ZXN0ZWQgc2htZW0gc2l6ZXMuCisJ ICovCisJU2htZW1DYWxsUmVxdWVzdENhbGxiYWNrcygpOworCisJLyoKKwkgKiBBbHNvIGNh bGwgYW55IGxlZ2FjeSBzaG1lbSByZXF1ZXN0IGhvb2tzIHRoYXQgbWlnaHQnYmUgYmVlbiBp bnN0YWxsZWQKKwkgKiBieSBwcmVsb2FkZWQgbGlicmFyaWVzLgogCSAqLwogCXByb2Nlc3Nf c2htZW1fcmVxdWVzdHMoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9z aG1lbS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oCmluZGV4IGJiZjMyNTIzYzBi Li5mNTc2NzJmYmM1OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaApAQCAtMjQsNDMgKzI0LDIxOCBA QAogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgogI2luY2x1ZGUgInV0aWxzL2hzZWFyY2gu aCIKIAorLyogRGlmZmVyZW50IGtpbmRzIG9mIHNobWVtIGFyZWFzLiAqLwordHlwZWRlZiBl bnVtCit7CisJU0hNRU1fS0lORF9TVFJVQ1QgPSAwLAkJLyogcGxhaW4sIGNvbnRpZ3VvdXMg YXJlYSBvZiBtZW1vcnkgKi8KKwlTSE1FTV9LSU5EX0hBU0gsCQkJLyogYSBoYXNoIHRhYmxl ICovCit9IFNobWVtQXJlYUtpbmQ7CisKKy8qCisgKiBTaG1lbVN0cnVjdERlc2MgaXMgYmFj a2VuZC1wcml2YXRlIGhhbmRsZSBmb3IgYSBzaGFyZWQgbWVtb3J5IGFyZWEKKyAqIHJlcXVl c3RlZCB3aXRoIFNobWVtUmVxdWVzdFN0cnVjdCgpLgorICovCit0eXBlZGVmIHN0cnVjdCBT aG1lbVN0cnVjdERlc2MKK3sKKwkvKiBOYW1lIGFuZCBzaXplIG9mIHRoZSBzaGFyZWQgbWVt b3J5IGFyZWEuICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCXZvaWQJICAgKnB0cjsKKwlz aXplX3QJCXNpemU7Cit9IFNobWVtU3RydWN0RGVzYzsKKworI2RlZmluZSBTSE1FTV9BVFRB Q0hfVU5LTk9XTl9TSVpFICgtMSkKKworLyoKKyAqIE9wdGlvbnMgZm9yIFNobWVtUmVxdWVz dFN0cnVjdCgpCisgKgorICogJ25hbWUnIGFuZCAnc2l6ZScgYXJlIHJlcXVpcmVkLiAgSW5p dGlhbGl6ZSBhbnkgb3B0aW9uYWwgZmllbGRzIHRoYXQgeW91CisgKiBkb24ndCB1c2UgdG8g emVyb3MuCisgKgorICogQWZ0ZXIgcmVnaXN0cmF0aW9uLCB0aGUgc2htZW0gbWFjaGluZXJ5 IHJlc2VydmVzIG1lbW9yeSBmb3IgdGhlIGFyZWEsIHNldHMKKyAqICcqcHRyJyB0byBwb2lu dCB0byB0aGUgYWxsb2NhdGlvbiwgYW5kIGNhbGxzIHRoZSBjYWxsYmFja3MgYXQgdGhlIHJp Z2h0CisgKiBtb21lbnRzLgorICovCit0eXBlZGVmIHN0cnVjdCBTaG1lbVN0cnVjdE9wdHMK K3sKKwljb25zdCBjaGFyICpuYW1lOworCisJc3NpemVfdAkJc2l6ZTsKKworCS8qCisJICog V2hlbiB0aGUgc2htZW0gYXJlYSBpcyBpbml0aWFsaXplZCBvciBhdHRhY2hlZCB0bywgcG9p bnRlciB0byBpdCBpcworCSAqIHN0b3JlZCBpbiAqcHRyLiAgSXQgdXN1YWxseSBwb2ludHMg dG8gYSBnbG9iYWwgdmFyaWFibGUsIHVzZWQgdG8gYWNjZXNzCisJICogdGhlIHNoYXJlZCBt ZW1vcnkgYXJlYSBsYXRlci4gICpwdHIgaXMgc2V0IGJlZm9yZSB0aGUgaW5pdF9mbiBvcgor CSAqIGF0dGFjaF9mbiBjYWxsYmFjayBpcyBjYWxsZWQuCisJICovCisJdm9pZAkgICoqcHRy OworfSBTaG1lbVN0cnVjdE9wdHM7CisKKy8qCisgKiBCYWNrZW5kLXByaXZhdGUgaGFuZGxl IGZvciBhIG5hbWVkIHNoYXJlZCBtZW1vcnkgaGFzaCB0YWJsZSwgc2ltaWxhciB0bworICog U2htZW1TdHJ1Y3REZXNjLgorICovCit0eXBlZGVmIHN0cnVjdCBTaG1lbUhhc2hEZXNjCit7 CisJLyoKKwkgKiBEZXNjcmlwdG9yIG9mIHRoZSB1bmRlcmx5aW5nIGZpeGVkLXNpemUgYWxs b2NhdGVkIGFyZWEgd2hlcmUgdGhlIGhhc2gKKwkgKiB0YWJsZSBsaXZlcy4KKwkgKi8KKwlT aG1lbVN0cnVjdERlc2MgYmFzZTsKKworCUhUQUIJICAgKnB0cjsKK30gU2htZW1IYXNoRGVz YzsKKworLyoKKyAqIE9wdGlvbnMgZm9yIFNobWVtUmVxdWVzdEhhc2goKQorICoKKyAqIEVh Y2ggaGFzaCB0YWJsZSBpcyBiYWNrZWQgYnkgYW4gYWxsb2NhdGVkIGFyZWEsIGJ1dCBpZiAn bWF4X3NpemUnIGlzCisgKiBncmVhdGVyIHRoYW4gJ2luaXRfc2l6ZScsIGl0IGNhbiBhbHNv IGdyb3cgYmV5b25kIHRoZSBpbml0aWFsIGFsbG9jYXRlZAorICogYXJlYSBieSBhbGxvY2F0 aW5nIG1vcmUgaGFzaCBlbnRyaWVzIGZyb20gdGhlIGdsb2JhbCB1bnJlc2VydmVkIHNwYWNl LgorICovCit0eXBlZGVmIHN0cnVjdCBTaG1lbUhhc2hPcHRzCit7CisJU2htZW1TdHJ1Y3RP cHRzIGJhc2U7CisKKwkvKgorCSAqIE5hbWUgb2YgdGhlIHNoYXJlZCBtZW1vcnkgYXJlYS4g IFJlcXVpcmVkLiAgTXVzdCBiZSB1bmlxdWUgYWNyb3NzIHRoZQorCSAqIHN5c3RlbS4KKwkg Ki8KKwljb25zdCBjaGFyICpuYW1lOworCisJLyoKKwkgKiAnbmVsZW1zJyBpcyB0aGUgbWF4 IG51bWJlciBvZiBlbGVtZW50cyBmb3IgdGhlIGhhc2ggdGFibGUuCisJICovCisJaW50NjQJ CW5lbGVtczsKKworCS8qCisJICogSGFzaCB0YWJsZSBvcHRpb25zIHBhc3NlZCB0byBoYXNo X2NyZWF0ZSgpCisJICoKKwkgKiBoYXNoX2luZm8gYW5kIGhhc2hfZmxhZ3MgbXVzdCBzcGVj aWZ5IGF0IGxlYXN0IHRoZSBlbnRyeSBzaXplcyBhbmQga2V5CisJICogY29tcGFyaXNvbiBz ZW1hbnRpY3MgKHNlZSBoYXNoX2NyZWF0ZSgpKS4gIEZsYWcgYml0cyBhbmQgdmFsdWVzCisJ ICogc3BlY2lmaWMgdG8gc2hhcmVkLW1lbW9yeSBoYXNoIHRhYmxlcyBhcmUgYWRkZWQgaW1w bGljaXRseSBpbgorCSAqIFNobWVtUmVxdWVzdEhhc2goKSwgZXhjZXB0IHRoYXQgY2FsbGVy cyBtYXkgY2hvb3NlIHRvIHNwZWNpZnkKKwkgKiBIQVNIX1BBUlRJVElPTiBhbmQvb3IgSEFT SF9GSVhFRF9TSVpFLgorCSAqLworCUhBU0hDVEwJCWhhc2hfaW5mbzsKKwlpbnQJCQloYXNo X2ZsYWdzOworCisJLyoKKwkgKiBXaGVuIHRoZSBoYXNoIHRhYmxlIGlzIGluaXRpYWxpemVk IG9yIGF0dGFjaGVkIHRvLCBwb2ludGVyIHRvIGl0cworCSAqIGJhY2tlbmQtcHJpdmF0ZSBo YW5kbGUgaXMgc3RvcmVkIGluICpwdHIuICBJdCB1c3VhbGx5IHBvaW50cyB0byBhCisJICog Z2xvYmFsIHZhcmlhYmxlLCB1c2VkIHRvIGFjY2VzcyB0aGUgaGFzaCB0YWJsZSBsYXRlci4K KwkgKi8KKwlIVEFCCSAgKipwdHI7Cit9IFNobWVtSGFzaE9wdHM7CisKK3R5cGVkZWYgdm9p ZCAoKlNobWVtUmVxdWVzdENhbGxiYWNrKSAodm9pZCAqYXJnKTsKK3R5cGVkZWYgdm9pZCAo KlNobWVtSW5pdENhbGxiYWNrKSAodm9pZCAqYXJnKTsKK3R5cGVkZWYgdm9pZCAoKlNobWVt QXR0YWNoQ2FsbGJhY2spICh2b2lkICphcmcpOworCisvKgorICogU2hhcmVkIG1lbW9yeSBp cyByZXNlcnZlZCBhbmQgYWxsb2NhdGVkIGluIHN0YWdlcyBhdCBwb3N0bWFzdGVyIHN0YXJ0 dXAsCisgKiBhbmQgaW4gRVhFQ19CQUNLRU5EIG1vZGUsIHRoZXJlJ3Mgc29tZSBleHRyYSB3 b3JrIGRvbmUgdG8gImF0dGFjaCIgdG8gdGhlbQorICogYXQgYmFja2VuZCBzdGFydHVwLiAg U2htZW1DYWxsYmFja3MgaG9sZHMgY2FsbGJhY2sgZnVuY3Rpb25zIHRoYXQgYXJlCisgKiBj YWxsZWQgYXQgZGlmZmVyZW50IHN0YWdlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU2htZW1D YWxsYmFja3MKK3sKKwkvKiBTSE1FTV9DQUxMQkFDS1NfKiBmbGFncyAqLworCWludAkJCWZs YWdzOworCisJLyoKKwkgKiAncmVxdWVzdF9mbicgaXMgY2FsbGVkIGR1cmluZyBwb3N0bWFz dGVyIHN0YXJ0dXAsIGJlZm9yZSB0aGUgc2hhcmVkCisJICogbWVtb3J5IGhhcyBiZWVuIGFs bG9jYXRlZC4gIFRoZSBmdW5jdGlvbiBzaG91bGQgY2FsbAorCSAqIFJlcXVlc3RTaG1lbVN0 cnVjdCgpIGFuZCBSZXF1ZXN0U2htZW1IYXNoKCkgdG8gcmVnaXN0ZXIgdGhlIHN1YnN5c3Rl bSdzCisJICogc2hhcmVkIG1lbW9yeSBuZWVkcy4KKwkgKi8KKwlTaG1lbVJlcXVlc3RDYWxs YmFjayByZXF1ZXN0X2ZuOworCXZvaWQJICAgKnJlcXVlc3RfZm5fYXJnOworCisJLyoKKwkg KiBJbml0aWFsaXphdGlvbiBjYWxsYmFjayBmdW5jdGlvbi4gIFRoaXMgaXMgY2FsbGVkIHdo ZW4gdGhlIHNoYXJlZAorCSAqIG1lbW9yeSBhcmVhIGlzIGFsbG9jYXRlZCwgdXN1YWxseSBh dCBwb3N0bWFzdGVyIHN0YXJ0dXAuCisJICovCisJU2htZW1Jbml0Q2FsbGJhY2sgaW5pdF9m bjsKKwl2b2lkCSAgICppbml0X2ZuX2FyZzsKKworCS8qCisJICogQXR0YWNobWVudCBjYWxs YmFjayBmdW5jdGlvbi4gIEluIEVYRUNfQkFDS0VORCBtb2RlLCB0aGlzIGlzIGNhbGxlZCBh dAorCSAqIHN0YXJ0dXAgb2YgZWFjaCBiYWNrZW5kLiAgSW4gIUVYRUNfQkFDS0VORCBtb2Rl LCB0aGlzIGlzIG9ubHkgY2FsbGVkIGlmCisJICogdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSBp cyByZWdpc3RlcmVkIGFmdGVyIHBvc3RtYXN0ZXIgc3RhcnR1cCAoc2VlCisJICogU0hNRU1f Q0FMTEJBQ0tTX0FMTE9XX0FGVEVSX1NUQVJUVVApLgorCSAqLworCVNobWVtQXR0YWNoQ2Fs bGJhY2sgYXR0YWNoX2ZuOworCXZvaWQJICAgKmF0dGFjaF9mbl9hcmc7Cit9IFNobWVtQ2Fs bGJhY2tzOworCisvKgorICogRmxhZ3MgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgUmVn aXN0ZXJTaG1lbUNhbGxiYWNrcygpLgorICoKKyAqIEFMTE9XX0FGVEVSX1NUQVJUVVA6IEFs bG93IHRoZXNlIHNoYXJlZCBtZW1vcnkgdXNhZ2VzIHRvIGJlIHJlZ2lzdGVyZWQKKyAqIGFm dGVyIHBvc3RtYXN0ZXIgc3RhcnR1cC4gIE5vcm1hbGx5LCByZWdpc3RlcmluZyBhIHNoYXJl ZCBtZW1vcnkgc3lzdGVtCisgKiBhZnRlciBwb3N0bWFzdGVyIHN0YXJ0dXAgaXMgbm90IGFs bG93ZWQgZS5nLiBpbiBhbiBhZGQtaW4gbGlicmFyeSBsb2FkZWQKKyAqIG9uLWRlbWFpbmQg aW4gYSBiYWNrZW5kLiAgSWYgYSBzdWJzeXN0ZW0gc2V0cyB0aGlzIGZsYWcsIHRoZSBjYWxs YmFja3MgYXJlCisgKiBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgcmVnaXN0cmF0aW9uLCB0 byBpbml0aWFsaXplIG9yIGF0dGFjaCB0byB0aGUKKyAqIHJlcXVlc3RlZCBzaGFyZWQgbWVt b3J5IGFyZWFzLiAgVGhpcyBpcyBub3QgdXNlZCBieSBhbnkgYnVpbHQtaW4KKyAqIHN1YnN5 c3RlbXMsIGJ1dCBleHRlbnNpb25zIG1heSBmaW5kIGl0IHVzZWZ1bC4KKyAqLworI2RlZmlu ZSBTSE1FTV9DQUxMQkFDS1NfQUxMT1dfQUZURVJfU1RBUlRVUAkJMHgwMDAwMDAwMQogCiAv KiBzaG1lbS5jICovCiB0eXBlZGVmIHN0cnVjdCBQR1NobWVtSGVhZGVyIFBHU2htZW1IZWFk ZXI7IC8qIGF2b2lkIGluY2x1ZGluZwogCQkJCQkJCQkJCQkgKiBzdG9yYWdlL3BnX3NobWVt LmggaGVyZSAqLworZXh0ZXJuIHZvaWQgUmVzZXRTaG1lbUFsbG9jYXRvcih2b2lkKTsKIGV4 dGVybiB2b2lkIEluaXRTaG1lbUFsbG9jYXRvcihQR1NobWVtSGVhZGVyICpzZWdoZHIpOwor I2lmZGVmIEVYRUNfQkFDS0VORAorZXh0ZXJuIHZvaWQgQXR0YWNoU2htZW1BbGxvY2F0b3Io UEdTaG1lbUhlYWRlciAqc2VnaGRyKTsKKyNlbmRpZgogZXh0ZXJuIHZvaWQgKlNobWVtQWxs b2MoU2l6ZSBzaXplKTsKIGV4dGVybiB2b2lkICpTaG1lbUFsbG9jTm9FcnJvcihTaXplIHNp emUpOwotZXh0ZXJuIHZvaWQgKlNobWVtSGFzaEFsbG9jKFNpemUgc2l6ZSwgdm9pZCAqYWxs b2NfYXJnKTsKIGV4dGVybiBib29sIFNobWVtQWRkcklzVmFsaWQoY29uc3Qgdm9pZCAqYWRk cik7CisKK2V4dGVybiB2b2lkIFJlZ2lzdGVyU2htZW1DYWxsYmFja3MoY29uc3QgU2htZW1D YWxsYmFja3MgKmNhbGxiYWNrcyk7CisKK2V4dGVybiB2b2lkIFNobWVtUmVxdWVzdEludGVy bmFsKFNobWVtU3RydWN0RGVzYyAqZGVzYywgU2htZW1TdHJ1Y3RPcHRzICpvcHRpb25zLAor CQkJCQkJCQkgU2htZW1BcmVhS2luZCBraW5kKTsKKworLyoKKyAqIFRoZXNlIG1hY3JvcyBw cm92aWRlIHN5bnRhY3RpYyBzdWdhciBmb3IgY2FsbGluZyB0aGUgdW5kZXJseWluZyBmdW5j dGlvbnMKKyAqIHdpdGggbmFtZWQgYXJndW1lbnRzIC1saWtlIHN5bnRheC4KKyAqLworI2Rl ZmluZSBTaG1lbVJlcXVlc3RTdHJ1Y3QoZGVzYywgLi4uKSAgXAorCVNobWVtUmVxdWVzdFN0 cnVjdFdpdGhPcHRzKGRlc2MsICYoU2htZW1TdHJ1Y3RPcHRzKXtfX1ZBX0FSR1NfX30pCisK KyNkZWZpbmUgU2htZW1SZXF1ZXN0SGFzaChkZXNjLCAuLi4pICBcCisJU2htZW1SZXF1ZXN0 SGFzaFdpdGhPcHRzKGRlc2MsICYoU2htZW1IYXNoT3B0cyl7X19WQV9BUkdTX199KQorCitl eHRlcm4gdm9pZCBTaG1lbVJlcXVlc3RTdHJ1Y3RXaXRoT3B0cyhTaG1lbVN0cnVjdERlc2Mg KmRlc2MsIGNvbnN0IFNobWVtU3RydWN0T3B0cyAqb3B0aW9ucyk7CitleHRlcm4gdm9pZCBT aG1lbVJlcXVlc3RIYXNoV2l0aE9wdHMoU2htZW1IYXNoRGVzYyAqZGVzYywgY29uc3QgU2ht ZW1IYXNoT3B0cyAqb3B0aW9ucyk7CitleHRlcm4gdm9pZCBTaG1lbUNhbGxSZXF1ZXN0Q2Fs bGJhY2tzKHZvaWQpOworCisvKiBsZWdhY3kgc2htZW0gYWxsb2NhdGlvbiBmdW5jdGlvbnMg Ki8KIGV4dGVybiB2b2lkICpTaG1lbUluaXRTdHJ1Y3QoY29uc3QgY2hhciAqbmFtZSwgU2l6 ZSBzaXplLCBib29sICpmb3VuZFB0cik7CitleHRlcm4gSFRBQiAqU2htZW1Jbml0SGFzaChj b25zdCBjaGFyICpuYW1lLCBpbnQ2NCBuZWxlbXMsCisJCQkJCQkgICBIQVNIQ1RMICppbmZv UCwgaW50IGhhc2hfZmxhZ3MpOworCitleHRlcm4gc2l6ZV90IFNobWVtR2V0UmVxdWVzdGVk U2l6ZSh2b2lkKTsKK2V4dGVybiB2b2lkIFNobWVtSW5pdFJlcXVlc3RlZCh2b2lkKTsKKyNp ZmRlZiBFWEVDX0JBQ0tFTkQKK2V4dGVybiB2b2lkIFNobWVtQXR0YWNoUmVxdWVzdGVkKHZv aWQpOworI2VuZGlmCisKIGV4dGVybiBTaXplIGFkZF9zaXplKFNpemUgczEsIFNpemUgczIp OwogZXh0ZXJuIFNpemUgbXVsX3NpemUoU2l6ZSBzMSwgU2l6ZSBzMik7CiAKIGV4dGVybiBQ R0RMTElNUE9SVCBTaXplIHBnX2dldF9zaG1lbV9wYWdlc2l6ZSh2b2lkKTsKIAogLyogc2ht ZW1faGFzaC5jICovCi1leHRlcm4gSFRBQiAqU2htZW1Jbml0SGFzaChjb25zdCBjaGFyICpu YW1lLCBpbnQ2NCBuZWxlbXMsCi0JCQkJCQkgICBIQVNIQ1RMICppbmZvUCwgaW50IGhhc2hf ZmxhZ3MpOwogZXh0ZXJuIEhUQUIgKnNobWVtX2hhc2hfY3JlYXRlKHZvaWQgKmxvY2F0aW9u LCBzaXplX3Qgc2l6ZSwgYm9vbCBmb3VuZCwKLQkJCQkJCQkgICBjb25zdCBjaGFyICpuYW1l LCBpbnQ2NCBuZWxlbXMsIEhBU0hDVEwgKmluZm9QLCBpbnQgaGFzaF9mbGFncykKKwkJCQkJ CQkgICBjb25zdCBjaGFyICpuYW1lLCBpbnQ2NCBuZWxlbXMsIEhBU0hDVEwgKmluZm9QLCBp bnQgaGFzaF9mbGFncyk7CitleHRlcm4gdm9pZCBzaG1lbV9oYXNoX2luaXQoU2htZW1TdHJ1 Y3REZXNjICpiYXNlX2Rlc2MsIFNobWVtU3RydWN0T3B0cyAqb3B0aW9ucyk7CitleHRlcm4g dm9pZCBzaG1lbV9oYXNoX2F0dGFjaChTaG1lbVN0cnVjdERlc2MgKmJhc2VfZGVzYywgU2ht ZW1TdHJ1Y3RPcHRzICpvcHRpb25zKTsKIAogLyogaXBjaS5jICovCiBleHRlcm4gdm9pZCBS ZXF1ZXN0QWRkaW5TaG1lbVNwYWNlKFNpemUgc2l6ZSk7CiAKLS8qIHNpemUgY29uc3RhbnRz IGZvciB0aGUgc2htZW0gaW5kZXggdGFibGUgKi8KLSAvKiBtYXggc2l6ZSBvZiBkYXRhIHN0 cnVjdHVyZSBzdHJpbmcgbmFtZSAqLwotI2RlZmluZSBTSE1FTV9JTkRFWF9LRVlTSVpFCQkg KDQ4KQotIC8qIG1heCBudW1iZXIgb2YgbmFtZWQgc2htZW0gc3RydWN0dXJlcyBhbmQgaGFz aCB0YWJsZXMgKi8KLSNkZWZpbmUgU0hNRU1fSU5ERVhfU0laRQkJICgyNTYpCi0KLS8qIHRo aXMgaXMgYSBoYXNoIGJ1Y2tldCBpbiB0aGUgc2htZW0gaW5kZXggdGFibGUgKi8KLXR5cGVk ZWYgc3RydWN0Ci17Ci0JY2hhcgkJa2V5W1NITUVNX0lOREVYX0tFWVNJWkVdOwkvKiBzdHJp bmcgbmFtZSAqLwotCXZvaWQJICAgKmxvY2F0aW9uOwkJLyogbG9jYXRpb24gaW4gc2hhcmVk IG1lbSAqLwotCVNpemUJCXNpemU7CQkJLyogIyBieXRlcyByZXF1ZXN0ZWQgZm9yIHRoZSBz dHJ1Y3R1cmUgKi8KLQlTaXplCQlhbGxvY2F0ZWRfc2l6ZTsgLyogIyBieXRlcyBhY3R1YWxs eSBhbGxvY2F0ZWQgKi8KLX0gU2htZW1JbmRleEVudDsKLQogI2VuZGlmCQkJCQkJCS8qIFNI TUVNX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9h aW8uYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYwppbmRleCBkNzUz MDY4MTE5Mi4uMzQ0ODdhMDU0ODYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9haW8vdGVzdF9haW8uYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3Rf YWlvLmMKQEAgLTc3LDcgKzc3LDYgQEAgc3RhdGljIEluaklvRXJyb3JTdGF0ZSAqaW5qX2lv X2Vycm9yX3N0YXRlOwogc3RhdGljIHNobWVtX3JlcXVlc3RfaG9va190eXBlIHByZXZfc2ht ZW1fcmVxdWVzdF9ob29rID0gTlVMTDsKIHN0YXRpYyBzaG1lbV9zdGFydHVwX2hvb2tfdHlw ZSBwcmV2X3NobWVtX3N0YXJ0dXBfaG9vayA9IE5VTEw7CiAKLQogc3RhdGljIFBnQWlvSGFu ZGxlICpsYXN0X2hhbmRsZTsKIAogCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4 IGM3MmY2YzU5NTczLi41ODk0ODkzOTk3YyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKQEAgLTI4NjMsOSArMjg2MywxNiBAQCBTaGFyZWRUeXBtb2RUYWJsZUVudHJ5CiBTaGFy ZWRzb3J0CiBTaGVsbFR5cGVJbmZvCiBTaGlwcGFibGVDYWNoZUVudHJ5Ci1TaG1lbUFsbG9j YXRvckRhdGEKIFNoaXBwYWJsZUNhY2hlS2V5CitTaG1lbUFsbG9jYXRvckRhdGEKK1NobWVt QXJlYUtpbmQKK1NobWVtQ2FsbGJhY2tzCiBTaG1lbUluZGV4RW50CitTaG1lbUhhc2hEZXNj CitTaG1lbUhhc2hPcHRzCitTaG1lbVJlcXVlc3QKK1NobWVtU3RydWN0RGVzYworU2htZW1T dHJ1Y3RPcHRzCiBTaHV0ZG93bkZvcmVpZ25TY2FuX2Z1bmN0aW9uCiBTaHV0ZG93bkluZm9y bWF0aW9uCiBTaHV0ZG93bk1vZGUKLS0gCjIuNDcuMwoK --------------ilO2of90F4UvkC4IFxh0ppYz Content-Type: text/x-patch; charset=UTF-8; name="0003-Add-test-module-to-test-after-startup-shmem-allocati.patch" Content-Disposition: attachment; filename*0="0003-Add-test-module-to-test-after-startup-shmem-allocati.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkZGY2ZDFiMzhjMDFiMzZiMjhlOTg5NTNlNjgwYWFiZjZhZWZiZGJmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMSBBcHIgMjAyNiAxODoxMDozMSArMDMwMApT dWJqZWN0OiBbUEFUQ0ggMDMvMTRdIEFkZCB0ZXN0IG1vZHVsZSB0byB0ZXN0IGFmdGVyLXN0 YXJ0dXAgc2htZW0gYWxsb2NhdGlvbnMKCk5vbmUgb2YgdGhlIGV4aXN0aW5nIG1vZHVsZXMg Y291bGQgbWFrZSB1c2Ugb2YgdGhlIGxhenkgc2htZW0KYWxsb2NhdGlvbiBhZnRlciBwb3N0 bWFzdGVyIHN0YXJ0dXA6CgotIHBnX3N0YXRfc3RhdGVtZW50cyBuZWVkcyB0byBsb2FkIGFu ZCBkdW1wIHN0YXRzIGZpbGUgb24gc3RhcnR1cCBhbmQKICBzaHV0ZG93biwgd2hpY2ggZG9l c24ndCByZWFsbHkgd29yayBpZiB0aGUgbGlicmFyeSBpcyBub3QgbG9hZGVkIGludG8KICBw b3N0bWFzdGVyCgotIHRlc3RfYWlvIHJlZ2lzdGVycyBpbmplY3Rpb24gcG9pbnRzLCB3aGlj aCByZWZlcmVuY2UgdGhlIGxpYnJhcnkKICBpdHNlbGYsIHdoaWNoIGNyZWF0ZXMgYSB3ZWly ZCBpbml0aWFsaXphdGlvbiBsb29wIGlmIHlvdSB0cnkgdG8gZG8KICB0aGF0IGRpcmVjdGx5 IGZyb20gX1BHX2luaXQoKSBpbiBhIGJhY2tlbmQuIFRoZSBpbml0aWFsaXphdGlvbgogIHJl YWxseSBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgX1BHX2luaXQoKQoKLSBpbmplY3Rpb25fcG9p bnRzIHdvdWxkIGJlIGEgY2FuZGlkYXRlLCBidXQgaXQgYWxyZWFkeSBrbm93cyB0byB1c2UK ICBEU00gd2hlbiBpdCdzIG5vdCBsb2FkZWQgZnJvbSBzaGFyZWRfcHJlbG9hZF9saWJyYXJp ZXMuCi0tLQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIHNyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAg ICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vTWFrZWZpbGUgICAgICAg ICAgfCAgMjQgKysrKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVtL21lc29uLmJ1aWxk ICAgICAgIHwgIDMzICsrKysrKwogLi4uL3Rlc3Rfc2htZW0vdC8wMDFfbGF0ZV9zaG1lbV9h bGxvYy5wbCAgICAgIHwgIDQ5ICsrKysrKysrCiAuLi4vbW9kdWxlcy90ZXN0X3NobWVtL3Rl c3Rfc2htZW0tLTEuMC5zcWwgICAgfCAgIDkgKysKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9z aG1lbS90ZXN0X3NobWVtLmMgICAgICB8IDEwNSArKysrKysrKysrKysrKysrKysKIC4uLi9t b2R1bGVzL3Rlc3Rfc2htZW0vdGVzdF9zaG1lbS5jb250cm9sICAgICB8ICAgMyArCiBzcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDEgKwogOSBm aWxlcyBjaGFuZ2VkLCAyMjYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS90LzAwMV9sYXRlX3NobWVtX2Fs bG9jLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVt L3Rlc3Rfc2htZW0tLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1 bGVzL3Rlc3Rfc2htZW0vdGVzdF9zaG1lbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X3NobWVtL3Rlc3Rfc2htZW0uY29udHJvbAoKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxl CmluZGV4IDg2NGI0MDdhYmNmLi5mMWIwNGM5OTk2OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv bW9kdWxlcy9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCkBAIC00 OCw2ICs0OCw3IEBAIFNVQkRJUlMgPSBcCiAJCSAgdGVzdF9yZXNvd25lciBcCiAJCSAgdGVz dF9ybHNfaG9va3MgXAogCQkgIHRlc3Rfc2FzbHByZXAgXAorCQkgIHRlc3Rfc2htZW0gXAog CQkgIHRlc3Rfc2htX21xIFwKIAkJICB0ZXN0X3NscnUgXAogCQkgIHRlc3RfdGlkc3RvcmUg XApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0 L21vZHVsZXMvbWVzb24uYnVpbGQKaW5kZXggZTVhY2FjZDUwODMuLmZjOTk1NTJkOWFiIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvbWVzb24uYnVpbGQKQEAgLTQ5LDYgKzQ5LDcgQEAgc3ViZGlyKCd0ZXN0X3Jl Z2V4JykKIHN1YmRpcigndGVzdF9yZXNvd25lcicpCiBzdWJkaXIoJ3Rlc3RfcmxzX2hvb2tz JykKIHN1YmRpcigndGVzdF9zYXNscHJlcCcpCitzdWJkaXIoJ3Rlc3Rfc2htZW0nKQogc3Vi ZGlyKCd0ZXN0X3NobV9tcScpCiBzdWJkaXIoJ3Rlc3Rfc2xydScpCiBzdWJkaXIoJ3Rlc3Rf dGlkc3RvcmUnKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVtL01h a2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVtL01ha2VmaWxlCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNDA3Zjc0NjJmZQotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS9NYWtlZmlsZQpAQCAtMCww ICsxLDI0IEBACisjIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS9NYWtlZmlsZQorCitQ R0ZJTEVERVNDID0gInRlc3Rfc2htZW0gLSB0ZXN0IGNvZGUgZm9yIHNobWVtIGFsbG9jYXRp b25zIgorCitNT0RVTEVfYmlnID0gdGVzdF9zaG1lbQorT0JKUyA9IFwKKwkkKFdJTjMyUkVT KSBcCisJdGVzdF9zaG1lbS5vCisKK0VYVEVOU0lPTiA9IHRlc3Rfc2htZW0KK0RBVEEgPSB0 ZXN0X3NobWVtLS0xLjAuc3FsCisKK1RBUF9URVNUUyA9IDEKKworaWZkZWYgVVNFX1BHWFMK K1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAt LXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IHNyYy90ZXN0L21vZHVs ZXMvdGVzdF9zaG1lbQordG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KK2luY2x1ZGUgJCh0 b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGly KS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X3NobWVtL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X3NobWVtL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5mYjRiZjMyOGI4ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9zaG1lbS9tZXNvbi5idWlsZApAQCAtMCwwICsxLDMzIEBACisjIENvcHlyaWdo dCAoYykgMjAyNC0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor Cit0ZXN0X3NobWVtX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3Rlc3Rfc2htZW0uYycsCispCisK K2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICB0ZXN0X3NobWVtX3NvdXJjZXMgKz0g cmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0t TkFNRScsICd0ZXN0X3NobWVtJywKKyAgICAnLS1GSUxFREVTQycsICd0ZXN0X3NobWVtIC0g dGVzdCBjb2RlIGZvciBzaG1lbSBhbGxvY2F0aW9ucycsXSkKK2VuZGlmCisKK3Rlc3Rfc2ht ZW0gPSBzaGFyZWRfbW9kdWxlKCd0ZXN0X3NobWVtJywKKyAgdGVzdF9zaG1lbV9zb3VyY2Vz LAorICBrd2FyZ3M6IHBnX3Rlc3RfbW9kX2FyZ3MsCispCit0ZXN0X2luc3RhbGxfbGlicyAr PSB0ZXN0X3NobWVtCisKK3Rlc3RfaW5zdGFsbF9kYXRhICs9IGZpbGVzKAorICAndGVzdF9z aG1lbS5jb250cm9sJywKKyAgJ3Rlc3Rfc2htZW0tLTEuMC5zcWwnLAorKQorCit0ZXN0cyAr PSB7CisgICduYW1lJzogJ3Rlc3Rfc2htZW0nLAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3Nv dXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAgJ3Rh cCc6IHsKKyAgICAndGVzdHMnOiBbCisgICAgICAndC8wMDFfbGF0ZV9zaG1lbV9hbGxvYy5w bCcsCisgICAgXSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9zaG1lbS90LzAwMV9sYXRlX3NobWVtX2FsbG9jLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X3NobWVtL3QvMDAxX2xhdGVfc2htZW1fYWxsb2MucGwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMxNTRmNTc2ODJhCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVtL3QvMDAxX2xhdGVfc2htZW1fYWxsb2MucGwK QEAgLTAsMCArMSw0OSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjUtMjAyNiwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5n cyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1 c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyMjCisj IFRlc3QgYWxsb2NhdGluZyBtZW1vcnkgYWZ0ZXIgc3RhcnR1cCwgaS5lLiB3aGVuIHRoZSBs aWJyYXJ5IGlzIG5vdAorIyBpbiBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMKKyMjIworbXkg JG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21haW4nKTsKKyRub2Rl LT5pbml0OworJG5vZGUtPnN0YXJ0OworCisKKyRub2RlLT5zYWZlX3BzcWwoInBvc3RncmVz IiwgIkNSRUFURSBFWFRFTlNJT04gdGVzdF9zaG1lbTsiKTsKKworIyBDaGVjayB0aGF0IHRo ZSBhdHRhY2ggY291bnRlciBpcyBpbmNyZW1lbnRlZCBvbiBhIG5ldyBjb25uZWN0aW9uCitt eSAkYXR0YWNoX2NvdW50MSA9ICRub2RlLT5zYWZlX3BzcWwoInBvc3RncmVzIiwgIlNFTEVD VCBnZXRfdGVzdF9zaG1lbV9hdHRhY2hfY291bnQoKTsiKTsKK215ICRhdHRhY2hfY291bnQy ID0gJG5vZGUtPnNhZmVfcHNxbCgicG9zdGdyZXMiLCAiU0VMRUNUIGdldF90ZXN0X3NobWVt X2F0dGFjaF9jb3VudCgpOyIpOworY21wX29rKCRhdHRhY2hfY291bnQyLCAnPicsICRhdHRh Y2hfY291bnQxLCAiYXR0YWNoIGNhbGxiYWNrIGlzIGNhbGxlZCBpbiBlYWNoIGJhY2tlbmQi KTsKKyRub2RlLT5zdG9wOworCisjIyMKKyMgVGVzdCB0aGF0IGxvYWRpbmcgdmlhIHNoYXJl ZF9wcmVsb2FkX2xpYnJhcmllcyBhbHNvIHdvcmtzCisjIyMKKyRub2RlLT5hcHBlbmRfY29u ZigncG9zdGdyZXNxbC5jb25mJywgInNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyA9ICd0ZXN0 X3NobWVtJyIpOworJG5vZGUtPnN0YXJ0OworCisjIFdoZW4gbG9hZGVkIHZpYSBzaGFyZWRf cHJlbG9hZF9saWJyYXJpZXMsIHRoZSBhdHRhY2ggY2FsbGJhY2sgaXMKKyMgY2FsbGVkIG9y IG5vdCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBpcyBhbiBFWEVDX0JBQ0tFTkQgYnVp bGQuCitteSAkZXhlY19iYWNrZW5kID0gJG5vZGUtPnNhZmVfcHNxbCgicG9zdGdyZXMiLCAi U0hPVyBkZWJ1Z19leGVjX2JhY2tlbmQ7IikgZXEgJ29uJzsKKyRhdHRhY2hfY291bnQxID0g JG5vZGUtPnNhZmVfcHNxbCgicG9zdGdyZXMiLCAiU0VMRUNUIGdldF90ZXN0X3NobWVtX2F0 dGFjaF9jb3VudCgpOyIpOworJGF0dGFjaF9jb3VudDIgPSAkbm9kZS0+c2FmZV9wc3FsKCJw b3N0Z3JlcyIsICJTRUxFQ1QgZ2V0X3Rlc3Rfc2htZW1fYXR0YWNoX2NvdW50KCk7Iik7CisK K2lmICgkZXhlY19iYWNrZW5kKQoreworICAgY21wX29rKCRhdHRhY2hfY291bnQyLCAnPics ICRhdHRhY2hfY291bnQxLCAiYXR0YWNoIGNhbGxiYWNrIGlzIGNhbGxlZCBpbiBlYWNoIGJh Y2tlbmQgd2hlbiBsb2FkZWQgdmlhIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyIpOworfQor ZWxzZQoreworICAgb2soJGF0dGFjaF9jb3VudDEgPT0gMCAmJiAkYXR0YWNoX2NvdW50MiA9 PSAwLCAiYXR0YWNoIGNhbGxiYWNrIGlzIG5vdCBjYWxsZWQgd2hlbiBsb2FkZWQgdmlhIHNo YXJlZF9wcmVsb2FkX2xpYnJhcmllcyIpOworfQorCiskbm9kZS0+c3RvcDsKK2RvbmVfdGVz dGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVtL3Rlc3Rf c2htZW0tLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vdGVzdF9zaG1l bS0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmQw MWZkOTI1NmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2ht ZW0vdGVzdF9zaG1lbS0tMS4wLnNxbApAQCAtMCwwICsxLDkgQEAKKy8qIHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9zaG1lbS90ZXN0X3NobWVtLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWlu IGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUg RVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gdGVzdF9zaG1lbSIgdG8g bG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKKworQ1JFQVRFIEZVTkNUSU9OIGdldF90ZXN0X3No bWVtX2F0dGFjaF9jb3VudCgpCitSRVRVUk5TIHBnX2NhdGFsb2cuaW50NCBTVFJJQ1QKK0FT ICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3Rfc2htZW0vdGVzdF9zaG1lbS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X3NobWVtL3Rlc3Rfc2htZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uMzFjNzM1YmU1NzAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3Rfc2htZW0vdGVzdF9zaG1lbS5jCkBAIC0wLDAgKzEsMTA1IEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiB0ZXN0X3NobWVtLmMKKyAqCQlIZWxwZXJzIHRvIHRlc3Qg c2htZW0gYWxsb2NhdGlvbiByb3V0aW5lcworICoKKyAqIFRlc3QgYmFzaWMgbWVtb3J5IGFs bG9jYXRpb24gaW4gYW4gZXh0ZW5zaW9uIG1vZHVsZS4gT25lIG5vdGFibGUgZmVhdHVyZQor ICogdGhhdCBpcyBub3QgZXhlcmNpc2VkIGJ5IGFueSBvdGhlciBtb2R1bGUgaW4gdGhlIHJl cG9zaXRvcnkgaXMgdGhlCisgKiBhbGxvY2F0aW5nIChub24tRFNNKSBzaGFyZWQgbWVtb3J5 IGFmdGVyIHBvc3RtYXN0ZXIgc3RhcnR1cC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAt MjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVO VElGSUNBVElPTgorICoJICBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vdGVzdF9zaG1l bS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3Rn cmVzLmgiCisKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorCisKK1BHX01PRFVMRV9NQUdJQzsKKwordHlw ZWRlZiBzdHJ1Y3QgVGVzdFNobWVtRGF0YQoreworCWludAkJCXZhbHVlOworCWJvb2wJCWlu aXRpYWxpemVkOworCWludAkJCWF0dGFjaF9jb3VudDsKK30gVGVzdFNobWVtRGF0YTsKKwor c3RhdGljIFRlc3RTaG1lbURhdGEgKlRlc3RTaG1lbTsKKworc3RhdGljIGJvb2wgYXR0YWNo ZWRfb3JfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworc3RhdGljIHZvaWQgdGVzdF9zaG1lbV9y ZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCB0ZXN0X3NobWVtX2luaXQodm9pZCAq YXJnKTsKK3N0YXRpYyB2b2lkIHRlc3Rfc2htZW1fYXR0YWNoKHZvaWQgKmFyZyk7CisKK3N0 YXRpYyBjb25zdCBTaG1lbUNhbGxiYWNrcyBUZXN0U2htZW1DYWxsYmFja3MgPSB7CisJLmZs YWdzID0gU0hNRU1fQ0FMTEJBQ0tTX0FMTE9XX0FGVEVSX1NUQVJUVVAsCisJLnJlcXVlc3Rf Zm4gPSB0ZXN0X3NobWVtX3JlcXVlc3QsCisJLmluaXRfZm4gPSB0ZXN0X3NobWVtX2luaXQs CisJLmF0dGFjaF9mbiA9IHRlc3Rfc2htZW1fYXR0YWNoLAorfTsKKworc3RhdGljIHZvaWQK K3Rlc3Rfc2htZW1fcmVxdWVzdCh2b2lkICphcmcpCit7CisJc3RhdGljIFNobWVtU3RydWN0 RGVzYyBUZXN0U2htZW1EZXNjOworCisJZWxvZyhMT0csICJ0ZXN0X3NobWVtX3JlcXVlc3Qg Y2FsbGJhY2sgY2FsbGVkIik7CisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlRlc3RTaG1lbURl c2MsCisJCQkJCSAgIC5uYW1lID0gInRlc3Rfc2htZW0gYXJlYSIsCisJCQkJCSAgIC5zaXpl ID0gc2l6ZW9mKFRlc3RTaG1lbURhdGEpLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZU ZXN0U2htZW0sCisJCSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3NobWVtX2luaXQodm9p ZCAqYXJnKQoreworCWVsb2coTE9HLCAiaW5pdCBjYWxsYmFjayBjYWxsZWQiKTsKKwlpZiAo VGVzdFNobWVtLT5pbml0aWFsaXplZCkKKwkJZWxvZyhFUlJPUiwgInNobWVtIGFyZWEgYWxy ZWFkeSBpbml0aWFsaXplZCIpOworCVRlc3RTaG1lbS0+aW5pdGlhbGl6ZWQgPSB0cnVlOwor CisJaWYgKGF0dGFjaGVkX29yX2luaXRpYWxpemVkKQorCQllbG9nKEVSUk9SLCAiYXR0YWNo IG9yIGluaXRpYWxpemUgYWxyZWFkeSBjYWxsZWQgaW4gdGhpcyBwcm9jZXNzIik7CisJYXR0 YWNoZWRfb3JfaW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZAordGVzdF9z aG1lbV9hdHRhY2godm9pZCAqYXJnKQoreworCWVsb2coTE9HLCAidGVzdF9zaG1lbV9hdHRh Y2ggY2FsbGJhY2sgY2FsbGVkIik7CisJaWYgKCFUZXN0U2htZW0tPmluaXRpYWxpemVkKQor CQllbG9nKEVSUk9SLCAic2htZW0gYXJlYSBub3QgeWV0IGluaXRpYWxpemVkIik7CisJVGVz dFNobWVtLT5hdHRhY2hfY291bnQrKzsKKworCWlmIChhdHRhY2hlZF9vcl9pbml0aWFsaXpl ZCkKKwkJZWxvZyhFUlJPUiwgImF0dGFjaCBvciBpbml0aWFsaXplIGFscmVhZHkgY2FsbGVk IGluIHRoaXMgcHJvY2VzcyIpOworCWF0dGFjaGVkX29yX2luaXRpYWxpemVkID0gdHJ1ZTsK K30KKwordm9pZAorX1BHX2luaXQodm9pZCkKK3sKKwllbG9nKExPRywgInRlc3Rfc2htZW0g bW9kdWxlJ3MgX1BHX2luaXQgY2FsbGVkIik7CisJUmVnaXN0ZXJTaG1lbUNhbGxiYWNrcygm VGVzdFNobWVtQ2FsbGJhY2tzKTsKK30KKworUEdfRlVOQ1RJT05fSU5GT19WMShnZXRfdGVz dF9zaG1lbV9hdHRhY2hfY291bnQpOworRGF0dW0KK2dldF90ZXN0X3NobWVtX2F0dGFjaF9j b3VudChQR19GVU5DVElPTl9BUkdTKQoreworCWlmICghYXR0YWNoZWRfb3JfaW5pdGlhbGl6 ZWQpCisJCWVsb2coRVJST1IsICJzaG1lbSBhcmVhIG5vdCBhdHRhY2hlZCBvciBpbml0aWFs aXplZCBpbiB0aGlzIHByb2Nlc3MiKTsKKwlpZiAoIVRlc3RTaG1lbS0+aW5pdGlhbGl6ZWQp CisJCWVsb2coRVJST1IsICJzaG1lbSBhcmVhIG5vdCB5ZXQgaW5pdGlhbGl6ZWQiKTsKKwlQ R19SRVRVUk5fSU5UMzIoVGVzdFNobWVtLT5hdHRhY2hfY291bnQpOworfQpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVtL3Rlc3Rfc2htZW0uY29udHJvbCBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS90ZXN0X3NobWVtLmNvbnRyb2wKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYyZjI2ZjQ1MzdhCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVtL3Rlc3Rfc2htZW0uY29udHJv bApAQCAtMCwwICsxLDMgQEAKK2NvbW1lbnQgPSAnVGVzdCBjb2RlIGZvciBzaG1lbSBhbGxv Y2F0aW9ucycKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAn JGxpYmRpci90ZXN0X3NobWVtJwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA1 ODk0ODkzOTk3Yy4uNTM1ODIyOWI3M2YgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CkBAIC0zMTQ2LDYgKzMxNDYsNyBAQCBUZXN0RFNNUmVnaXN0cnlIYXNoRW50cnkKIFRlc3RE U01SZWdpc3RyeVN0cnVjdAogVGVzdERlY29kaW5nRGF0YQogVGVzdERlY29kaW5nVHhuRGF0 YQorVGVzdFNobWVtRGF0YQogVGVzdFNwZWMKIFRlc3RWYWx1ZVR5cGUKIFRleHRGcmVxCi0t IAoyLjQ3LjMKCg== --------------ilO2of90F4UvkC4IFxh0ppYz Content-Type: text/x-patch; charset=UTF-8; name="0004-Convert-pg_stat_statements-to-use-the-new-interface.patch" Content-Disposition: attachment; filename*0="0004-Convert-pg_stat_statements-to-use-the-new-interface.pat"; filename*1="ch" Content-Transfer-Encoding: base64 RnJvbSA1MjgyZGZhMzk1ZjE0ZGQ4OWZlN2UzNDQxM2JjOTJjNjhhOWY5YTdlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMSBBcHIgMjAyNiAxODoyMToyNCArMDMwMApT dWJqZWN0OiBbUEFUQ0ggMDQvMTRdIENvbnZlcnQgcGdfc3RhdF9zdGF0ZW1lbnRzIHRvIHVz ZSB0aGUgbmV3IGludGVyZmFjZQoKQXMgcGFydCBvZiB0aGlzLCBlbWJlZCB0aGUgTFdMb2Nr IGl0IG5lZWRzIGluIHRoZSBzaGFyZWQgbWVtb3J5IHN0cnVjdAppdHNlbGYsIHNvIHRoYXQg d2UgZG9uJ3QgbmVlZCB0byB1c2UgUmVxdWVzdE5hbWVkTFdMb2NrVHJhbmNoZSgpCmFueW1v cmUuIExXTG9ja05ld1RyYW5jaGVJZCtMV0xvY2tJbml0aWFsaXplIGlzIG1vcmUgY29udmVu aWVudCB0byB1c2UKaW4gZXh0ZW5zaW9ucy4KClJldmlld2VkLWJ5OiBBc2h1dG9zaCBCYXBh dCA8YXNodXRvc2guYmFwYXQub3NzQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFpzb2x0IFBh cnJhZ2kgPHpzb2x0LnBhcnJhZ2lAcGVyY29uYS5jb20+ClJldmlld2VkLWJ5OiBSb2JlcnQg SGFhcyA8cm9iZXJ0bWhhYXNAZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5w b3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBRXhIVzV2TTFibmVMWWZnMHdHZUFhPTUyVWlK M3o0dktkM0FKNzJYOEZ3NmszS0tyZ0BtYWlsLmdtYWlsLmNvbQotLS0KIC4uLi9wZ19zdGF0 X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMgICB8IDE3OCArKysrKysrKy0tLS0t LS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA4MiBpbnNlcnRpb25zKCspLCA5NiBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0 YXRlbWVudHMuYyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVt ZW50cy5jCmluZGV4IDU0OTRkNDFkY2ExLi4yMzg0MjEyMjg4ZSAxMDA2NDQKLS0tIGEvY29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKKysrIGIvY29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKQEAgLTI0OSw3 ICsyNDksNyBAQCB0eXBlZGVmIHN0cnVjdCBwZ3NzRW50cnkKICAqLwogdHlwZWRlZiBzdHJ1 Y3QgcGdzc1NoYXJlZFN0YXRlCiB7Ci0JTFdMb2NrCSAgICpsb2NrOwkJCS8qIHByb3RlY3Rz IGhhc2h0YWJsZSBzZWFyY2gvbW9kaWZpY2F0aW9uICovCisJTFdMb2NrUGFkZGVkIGxvY2s7 CQkJLyogcHJvdGVjdHMgaGFzaHRhYmxlIHNlYXJjaC9tb2RpZmljYXRpb24gKi8KIAlkb3Vi bGUJCWN1cl9tZWRpYW5fdXNhZ2U7CS8qIGN1cnJlbnQgbWVkaWFuIHVzYWdlIGluIGhhc2h0 YWJsZSAqLwogCVNpemUJCW1lYW5fcXVlcnlfbGVuOyAvKiBjdXJyZW50IG1lYW4gZW50cnkg dGV4dCBsZW5ndGggKi8KIAlzbG9ja190CQltdXRleDsJCQkvKiBwcm90ZWN0cyBmb2xsb3dp bmcgZmllbGRzIG9ubHk6ICovCkBAIC0yNTksMTQgKzI1OSwyNCBAQCB0eXBlZGVmIHN0cnVj dCBwZ3NzU2hhcmVkU3RhdGUKIAlwZ3NzR2xvYmFsU3RhdHMgc3RhdHM7CQkvKiBnbG9iYWwg c3RhdGlzdGljcyBmb3IgcGdzcyAqLwogfSBwZ3NzU2hhcmVkU3RhdGU7CiAKKy8qIExpbmtz IHRvIHNoYXJlZCBtZW1vcnkgc3RhdGUgKi8KK3N0YXRpYyBwZ3NzU2hhcmVkU3RhdGUgKnBn c3M7CitzdGF0aWMgSFRBQiAqcGdzc19oYXNoOworCitzdGF0aWMgdm9pZCBwZ3NzX3NobWVt X3JlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIHBnc3Nfc2htZW1faW5pdCh2b2lk ICphcmcpOworCitzdGF0aWMgY29uc3QgU2htZW1DYWxsYmFja3MgcGdzc19zaG1lbV9jYWxs YmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBwZ3NzX3NobWVtX3JlcXVlc3QsCisJLmluaXRf Zm4gPSBwZ3NzX3NobWVtX2luaXQsCit9OworCiAvKi0tLS0gTG9jYWwgdmFyaWFibGVzIC0t LS0qLwogCiAvKiBDdXJyZW50IG5lc3RpbmcgZGVwdGggb2YgcGxhbm5lci9FeGVjdXRvclJ1 bi9Qcm9jZXNzVXRpbGl0eSBjYWxscyAqLwogc3RhdGljIGludAluZXN0aW5nX2xldmVsID0g MDsKIAogLyogU2F2ZWQgaG9vayB2YWx1ZXMgKi8KLXN0YXRpYyBzaG1lbV9yZXF1ZXN0X2hv b2tfdHlwZSBwcmV2X3NobWVtX3JlcXVlc3RfaG9vayA9IE5VTEw7Ci1zdGF0aWMgc2htZW1f c3RhcnR1cF9ob29rX3R5cGUgcHJldl9zaG1lbV9zdGFydHVwX2hvb2sgPSBOVUxMOwogc3Rh dGljIHBvc3RfcGFyc2VfYW5hbHl6ZV9ob29rX3R5cGUgcHJldl9wb3N0X3BhcnNlX2FuYWx5 emVfaG9vayA9IE5VTEw7CiBzdGF0aWMgcGxhbm5lcl9ob29rX3R5cGUgcHJldl9wbGFubmVy X2hvb2sgPSBOVUxMOwogc3RhdGljIEV4ZWN1dG9yU3RhcnRfaG9va190eXBlIHByZXZfRXhl Y3V0b3JTdGFydCA9IE5VTEw7CkBAIC0yNzUsMTAgKzI4NSw2IEBAIHN0YXRpYyBFeGVjdXRv ckZpbmlzaF9ob29rX3R5cGUgcHJldl9FeGVjdXRvckZpbmlzaCA9IE5VTEw7CiBzdGF0aWMg RXhlY3V0b3JFbmRfaG9va190eXBlIHByZXZfRXhlY3V0b3JFbmQgPSBOVUxMOwogc3RhdGlj IFByb2Nlc3NVdGlsaXR5X2hvb2tfdHlwZSBwcmV2X1Byb2Nlc3NVdGlsaXR5ID0gTlVMTDsK IAotLyogTGlua3MgdG8gc2hhcmVkIG1lbW9yeSBzdGF0ZSAqLwotc3RhdGljIHBnc3NTaGFy ZWRTdGF0ZSAqcGdzcyA9IE5VTEw7Ci1zdGF0aWMgSFRBQiAqcGdzc19oYXNoID0gTlVMTDsK LQogLyotLS0tIEdVQyB2YXJpYWJsZXMgLS0tLSovCiAKIHR5cGVkZWYgZW51bQpAQCAtMzMx LDggKzMzNyw2IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfc3RhdF9zdGF0ZW1lbnRzXzFf MTMpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zdGF0X3N0YXRlbWVudHMpOwogUEdfRlVO Q1RJT05fSU5GT19WMShwZ19zdGF0X3N0YXRlbWVudHNfaW5mbyk7CiAKLXN0YXRpYyB2b2lk IHBnc3Nfc2htZW1fcmVxdWVzdCh2b2lkKTsKLXN0YXRpYyB2b2lkIHBnc3Nfc2htZW1fc3Rh cnR1cCh2b2lkKTsKIHN0YXRpYyB2b2lkIHBnc3Nfc2htZW1fc2h1dGRvd24oaW50IGNvZGUs IERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBwZ3NzX3Bvc3RfcGFyc2VfYW5hbHl6ZShQYXJz ZVN0YXRlICpwc3RhdGUsIFF1ZXJ5ICpxdWVyeSwKIAkJCQkJCQkJCUp1bWJsZVN0YXRlICpq c3RhdGUpOwpAQCAtMzY2LDcgKzM3MCw2IEBAIHN0YXRpYyB2b2lkIHBnc3Nfc3RvcmUoY29u c3QgY2hhciAqcXVlcnksIGludDY0IHF1ZXJ5SWQsCiBzdGF0aWMgdm9pZCBwZ19zdGF0X3N0 YXRlbWVudHNfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQkJCQkJCQkJ cGdzc1ZlcnNpb24gYXBpX3ZlcnNpb24sCiAJCQkJCQkJCQkJYm9vbCBzaG93dGV4dCk7Ci1z dGF0aWMgU2l6ZSBwZ3NzX21lbXNpemUodm9pZCk7CiBzdGF0aWMgcGdzc0VudHJ5ICplbnRy eV9hbGxvYyhwZ3NzSGFzaEtleSAqa2V5LCBTaXplIHF1ZXJ5X29mZnNldCwgaW50IHF1ZXJ5 X2xlbiwKIAkJCQkJCQkgIGludCBlbmNvZGluZywgYm9vbCBzdGlja3kpOwogc3RhdGljIHZv aWQgZW50cnlfZGVhbGxvYyh2b2lkKTsKQEAgLTQ3MSwxMyArNDc0LDE0IEBAIF9QR19pbml0 KHZvaWQpCiAKIAlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX3N0YXRfc3RhdGVtZW50cyIp OwogCisJLyoKKwkgKiBSZWdpc3RlciBvdXIgc2hhcmVkIG1lbW9yeSBuZWVkcy4KKwkgKi8K KwlSZWdpc3RlclNobWVtQ2FsbGJhY2tzKCZwZ3NzX3NobWVtX2NhbGxiYWNrcyk7CisKIAkv KgogCSAqIEluc3RhbGwgaG9va3MuCiAJICovCi0JcHJldl9zaG1lbV9yZXF1ZXN0X2hvb2sg PSBzaG1lbV9yZXF1ZXN0X2hvb2s7Ci0Jc2htZW1fcmVxdWVzdF9ob29rID0gcGdzc19zaG1l bV9yZXF1ZXN0OwotCXByZXZfc2htZW1fc3RhcnR1cF9ob29rID0gc2htZW1fc3RhcnR1cF9o b29rOwotCXNobWVtX3N0YXJ0dXBfaG9vayA9IHBnc3Nfc2htZW1fc3RhcnR1cDsKIAlwcmV2 X3Bvc3RfcGFyc2VfYW5hbHl6ZV9ob29rID0gcG9zdF9wYXJzZV9hbmFseXplX2hvb2s7CiAJ cG9zdF9wYXJzZV9hbmFseXplX2hvb2sgPSBwZ3NzX3Bvc3RfcGFyc2VfYW5hbHl6ZTsKIAlw cmV2X3BsYW5uZXJfaG9vayA9IHBsYW5uZXJfaG9vazsKQEAgLTQ5NSwzMCArNDk5LDQ3IEBA IF9QR19pbml0KHZvaWQpCiB9CiAKIC8qCi0gKiBzaG1lbV9yZXF1ZXN0IGhvb2s6IHJlcXVl c3QgYWRkaXRpb25hbCBzaGFyZWQgcmVzb3VyY2VzLiAgV2UnbGwgYWxsb2NhdGUgb3IKLSAq IGF0dGFjaCB0byB0aGUgc2hhcmVkIHJlc291cmNlcyBpbiBwZ3NzX3NobWVtX3N0YXJ0dXAo KS4KKyAqIHNobWVtIHJlcXVlc3QgY2FsbGJhY2s6IFJlcXVlc3Qgc2hhcmVkIG1lbW9yeSBy ZXNvdXJjZXMuCisgKgorICogVGhpcyBpcyBjYWxsZWQgYXQgcG9zdG1hc3RlciBzdGFydHVw LiAgTm90ZSB0aGF0IHRoZSBzaGFyZWQgbWVtb3J5IGlzbid0CisgKiBhbGxvY2F0ZWQgaGVy ZSB5ZXQsIHRoaXMgbWVyZWx5IHJlZ2lzdGVyIG91ciBuZWVkcy4KKyAqCisgKiBJbiBFWEVD X0JBQ0tFTkQgbW9kZSwgdGhpcyBpcyBhbHNvIGNhbGxlZCBpbiBlYWNoIGJhY2tlbmQsIHRv IHJlLWF0dGFjaCB0bworICogdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSB0aGF0IHdhcyBhbHJl YWR5IGluaXRpYWxpemVkLgogICovCiBzdGF0aWMgdm9pZAotcGdzc19zaG1lbV9yZXF1ZXN0 KHZvaWQpCitwZ3NzX3NobWVtX3JlcXVlc3Qodm9pZCAqYXJnKQogewotCWlmIChwcmV2X3No bWVtX3JlcXVlc3RfaG9vaykKLQkJcHJldl9zaG1lbV9yZXF1ZXN0X2hvb2soKTsKLQotCVJl cXVlc3RBZGRpblNobWVtU3BhY2UocGdzc19tZW1zaXplKCkpOwotCVJlcXVlc3ROYW1lZExX TG9ja1RyYW5jaGUoInBnX3N0YXRfc3RhdGVtZW50cyIsIDEpOworCXN0YXRpYyBTaG1lbUhh c2hEZXNjIHBnc3NTaGFyZWRIYXNoRGVzYzsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIHBn c3NTaGFyZWRTdGF0ZURlc2M7CisKKwlTaG1lbVJlcXVlc3RIYXNoKCZwZ3NzU2hhcmVkSGFz aERlc2MsCisJCQkJCSAubmFtZSA9ICJwZ19zdGF0X3N0YXRlbWVudHMgaGFzaCIsCisJCQkJ CSAucHRyID0gJnBnc3NfaGFzaCwKKwkJCQkJIC5uZWxlbXMgPSBwZ3NzX21heCwKKwkJCQkJ IC5oYXNoX2luZm8ua2V5c2l6ZSA9IHNpemVvZihwZ3NzSGFzaEtleSksCisJCQkJCSAuaGFz aF9pbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihwZ3NzRW50cnkpLAorCQkJCQkgLmhhc2hfZmxh Z3MgPSBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTLAorCQkpOworCVNobWVtUmVxdWVzdFN0cnVj dCgmcGdzc1NoYXJlZFN0YXRlRGVzYywKKwkJCQkJICAgLm5hbWUgPSAicGdfc3RhdF9zdGF0 ZW1lbnRzIiwKKwkJCQkJICAgLnNpemUgPSBzaXplb2YocGdzc1NoYXJlZFN0YXRlKSwKKwkJ CQkJICAgLnB0ciA9ICh2b2lkICoqKSAmcGdzcywKKwkJKTsKIH0KIAogLyoKLSAqIHNobWVt X3N0YXJ0dXAgaG9vazogYWxsb2NhdGUgb3IgYXR0YWNoIHRvIHNoYXJlZCBtZW1vcnksCi0g KiB0aGVuIGxvYWQgYW55IHByZS1leGlzdGluZyBzdGF0aXN0aWNzIGZyb20gZmlsZS4KLSAq IEFsc28gY3JlYXRlIGFuZCBsb2FkIHRoZSBxdWVyeS10ZXh0cyBmaWxlLCB3aGljaCBpcyBl eHBlY3RlZCB0byBleGlzdAotICogKGV2ZW4gaWYgZW1wdHkpIHdoaWxlIHRoZSBtb2R1bGUg aXMgZW5hYmxlZC4KKyAqIHNobWVtIGluaXQgY2FsbGJhY2s6IEluaXRpYWxpemUgb3VyIHNo YXJlZCBtZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIGF0CisgKiBwb3N0bWFzdGVyIHN0YXJ0dXAu CisgKgorICogTG9hZCBhbnkgcHJlLWV4aXN0aW5nIHN0YXRpc3RpY3MgZnJvbSBmaWxlLiAg QWxzbyBjcmVhdGUgYW5kIGxvYWQgdGhlCisgKiBxdWVyeS10ZXh0cyBmaWxlLCB3aGljaCBp cyBleHBlY3RlZCB0byBleGlzdCAoZXZlbiBpZiBlbXB0eSkgd2hpbGUgdGhlCisgKiBtb2R1 bGUgaXMgZW5hYmxlZC4KICAqLwogc3RhdGljIHZvaWQKLXBnc3Nfc2htZW1fc3RhcnR1cCh2 b2lkKQorcGdzc19zaG1lbV9pbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsKLQlI QVNIQ1RMCQlpbmZvOworCWludAkJCXRyYW5jaGVfaWQ7CiAJRklMRQkgICAqZmlsZSA9IE5V TEw7CiAJRklMRQkgICAqcWZpbGUgPSBOVUxMOwogCXVpbnQzMgkJaGVhZGVyOwpAQCAtNTI4 LDU5ICs1NDksMzggQEAgcGdzc19zaG1lbV9zdGFydHVwKHZvaWQpCiAJaW50CQkJYnVmZmVy X3NpemU7CiAJY2hhcgkgICAqYnVmZmVyID0gTlVMTDsKIAotCWlmIChwcmV2X3NobWVtX3N0 YXJ0dXBfaG9vaykKLQkJcHJldl9zaG1lbV9zdGFydHVwX2hvb2soKTsKLQotCS8qIHJlc2V0 IGluIGNhc2UgdGhpcyBpcyBhIHJlc3RhcnQgd2l0aGluIHRoZSBwb3N0bWFzdGVyICovCi0J cGdzcyA9IE5VTEw7Ci0JcGdzc19oYXNoID0gTlVMTDsKLQogCS8qCi0JICogQ3JlYXRlIG9y IGF0dGFjaCB0byB0aGUgc2hhcmVkIG1lbW9yeSBzdGF0ZSwgaW5jbHVkaW5nIGhhc2ggdGFi bGUKKwkgKiBXZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB3ZSdyZSBsb2FkZWQgZnJvbSBzaGFy ZWRfcHJlbG9hZF9saWJyYXJpZXMgaW4KKwkgKiBfUEdfaW5pdCgpLCBzbyB3ZSBzaG91bGQg bm90IGdldCBoZXJlIGFmdGVyIHBvc3RtYXN0ZXIgc3RhcnR1cC4KIAkgKi8KLQlMV0xvY2tB Y3F1aXJlKEFkZGluU2htZW1Jbml0TG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCXBnc3MgPSBT aG1lbUluaXRTdHJ1Y3QoInBnX3N0YXRfc3RhdGVtZW50cyIsCi0JCQkJCQkgICBzaXplb2Yo cGdzc1NoYXJlZFN0YXRlKSwKLQkJCQkJCSAgICZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQot CXsKLQkJLyogRmlyc3QgdGltZSB0aHJvdWdoIC4uLiAqLwotCQlwZ3NzLT5sb2NrID0gJihH ZXROYW1lZExXTG9ja1RyYW5jaGUoInBnX3N0YXRfc3RhdGVtZW50cyIpKS0+bG9jazsKLQkJ cGdzcy0+Y3VyX21lZGlhbl91c2FnZSA9IEFTU1VNRURfTUVESUFOX0lOSVQ7Ci0JCXBnc3Mt Pm1lYW5fcXVlcnlfbGVuID0gQVNTVU1FRF9MRU5HVEhfSU5JVDsKLQkJU3BpbkxvY2tJbml0 KCZwZ3NzLT5tdXRleCk7Ci0JCXBnc3MtPmV4dGVudCA9IDA7Ci0JCXBnc3MtPm5fd3JpdGVy cyA9IDA7Ci0JCXBnc3MtPmdjX2NvdW50ID0gMDsKLQkJcGdzcy0+c3RhdHMuZGVhbGxvYyA9 IDA7Ci0JCXBnc3MtPnN0YXRzLnN0YXRzX3Jlc2V0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgp OwotCX0KLQotCWluZm8ua2V5c2l6ZSA9IHNpemVvZihwZ3NzSGFzaEtleSk7Ci0JaW5mby5l bnRyeXNpemUgPSBzaXplb2YocGdzc0VudHJ5KTsKLQlwZ3NzX2hhc2ggPSBTaG1lbUluaXRI YXNoKCJwZ19zdGF0X3N0YXRlbWVudHMgaGFzaCIsCi0JCQkJCQkJICBwZ3NzX21heCwKLQkJ CQkJCQkgICZpbmZvLAotCQkJCQkJCSAgSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyk7Ci0KLQlM V0xvY2tSZWxlYXNlKEFkZGluU2htZW1Jbml0TG9jayk7CisJQXNzZXJ0KCFJc1VuZGVyUG9z dG1hc3Rlcik7CiAKIAkvKgotCSAqIElmIHdlJ3JlIGluIHRoZSBwb3N0bWFzdGVyIChvciBh IHN0YW5kYWxvbmUgYmFja2VuZC4uLiksIHNldCB1cCBhIHNobWVtCi0JICogZXhpdCBob29r IHRvIGR1bXAgdGhlIHN0YXRpc3RpY3MgdG8gZGlzay4KKwkgKiBJbml0aWFsaXplIHRoZSBz aG1lbSBhcmVhIHdpdGggbm8gc3RhdGlzdGljcy4KIAkgKi8KLQlpZiAoIUlzVW5kZXJQb3N0 bWFzdGVyKQotCQlvbl9zaG1lbV9leGl0KHBnc3Nfc2htZW1fc2h1dGRvd24sIChEYXR1bSkg MCk7CisJdHJhbmNoZV9pZCA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfc3RhdF9zdGF0ZW1l bnRzIik7CisJTFdMb2NrSW5pdGlhbGl6ZSgmcGdzcy0+bG9jay5sb2NrLCB0cmFuY2hlX2lk KTsKKwlwZ3NzLT5jdXJfbWVkaWFuX3VzYWdlID0gQVNTVU1FRF9NRURJQU5fSU5JVDsKKwlw Z3NzLT5tZWFuX3F1ZXJ5X2xlbiA9IEFTU1VNRURfTEVOR1RIX0lOSVQ7CisJU3BpbkxvY2tJ bml0KCZwZ3NzLT5tdXRleCk7CisJcGdzcy0+ZXh0ZW50ID0gMDsKKwlwZ3NzLT5uX3dyaXRl cnMgPSAwOworCXBnc3MtPmdjX2NvdW50ID0gMDsKKwlwZ3NzLT5zdGF0cy5kZWFsbG9jID0g MDsKKwlwZ3NzLT5zdGF0cy5zdGF0c19yZXNldCA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsK KworCS8qIFRoZSBoYXNoIHRhYmxlIG11c3QndmUgYWxzbyBiZWVuIGluaXRpYWxpemVkIGJ5 IG5vdyAqLworCUFzc2VydChwZ3NzX2hhc2ggIT0gTlVMTCk7CiAKIAkvKgotCSAqIERvbmUg aWYgc29tZSBvdGhlciBwcm9jZXNzIGFscmVhZHkgY29tcGxldGVkIG91ciBpbml0aWFsaXph dGlvbi4KKwkgKiBTZXQgdXAgYSBzaG1lbSBleGl0IGhvb2sgdG8gZHVtcCB0aGUgc3RhdGlz dGljcyB0byBkaXNrIG9uIHBvc3RtYXN0ZXIKKwkgKiAob3Igc3RhbmRhbG9uZSBiYWNrZW5k KSBleGl0LgogCSAqLwotCWlmIChmb3VuZCkKLQkJcmV0dXJuOworCW9uX3NobWVtX2V4aXQo cGdzc19zaG1lbV9zaHV0ZG93biwgKERhdHVtKSAwKTsKIAogCS8qCisJICogTG9hZCBhbnkg cHJlLWV4aXN0aW5nIHN0YXRpc3RpY3MgZnJvbSBmaWxlLgorCSAqCiAJICogTm90ZTogd2Ug ZG9uJ3QgYm90aGVyIHdpdGggbG9ja3MgaGVyZSwgYmVjYXVzZSB0aGVyZSBzaG91bGQgYmUg bm8gb3RoZXIKIAkgKiBwcm9jZXNzZXMgcnVubmluZyB3aGVuIHRoaXMgY29kZSBpcyByZWFj aGVkLgogCSAqLwpAQCAtMTMzOSw3ICsxMzM5LDcgQEAgcGdzc19zdG9yZShjb25zdCBjaGFy ICpxdWVyeSwgaW50NjQgcXVlcnlJZCwKIAlrZXkudG9wbGV2ZWwgPSAobmVzdGluZ19sZXZl bCA9PSAwKTsKIAogCS8qIExvb2t1cCB0aGUgaGFzaCB0YWJsZSBlbnRyeSB3aXRoIHNoYXJl ZCBsb2NrLiAqLwotCUxXTG9ja0FjcXVpcmUocGdzcy0+bG9jaywgTFdfU0hBUkVEKTsKKwlM V0xvY2tBY3F1aXJlKCZwZ3NzLT5sb2NrLmxvY2ssIExXX1NIQVJFRCk7CiAKIAllbnRyeSA9 IChwZ3NzRW50cnkgKikgaGFzaF9zZWFyY2gocGdzc19oYXNoLCAma2V5LCBIQVNIX0ZJTkQs IE5VTEwpOwogCkBAIC0xMzYwLDExICsxMzYwLDExIEBAIHBnc3Nfc3RvcmUoY29uc3QgY2hh ciAqcXVlcnksIGludDY0IHF1ZXJ5SWQsCiAJCSAqLwogCQlpZiAoanN0YXRlKQogCQl7Ci0J CQlMV0xvY2tSZWxlYXNlKHBnc3MtPmxvY2spOworCQkJTFdMb2NrUmVsZWFzZSgmcGdzcy0+ bG9jay5sb2NrKTsKIAkJCW5vcm1fcXVlcnkgPSBnZW5lcmF0ZV9ub3JtYWxpemVkX3F1ZXJ5 KGpzdGF0ZSwgcXVlcnksCiAJCQkJCQkJCQkJCQkgICBxdWVyeV9sb2NhdGlvbiwKIAkJCQkJ CQkJCQkJCSAgICZxdWVyeV9sZW4pOwotCQkJTFdMb2NrQWNxdWlyZShwZ3NzLT5sb2NrLCBM V19TSEFSRUQpOworCQkJTFdMb2NrQWNxdWlyZSgmcGdzcy0+bG9jay5sb2NrLCBMV19TSEFS RUQpOwogCQl9CiAKIAkJLyogQXBwZW5kIG5ldyBxdWVyeSB0ZXh0IHRvIGZpbGUgd2l0aCBv bmx5IHNoYXJlZCBsb2NrIGhlbGQgKi8KQEAgLTEzNzksOCArMTM3OSw4IEBAIHBnc3Nfc3Rv cmUoY29uc3QgY2hhciAqcXVlcnksIGludDY0IHF1ZXJ5SWQsCiAJCWRvX2djID0gbmVlZF9n Y19xdGV4dHMoKTsKIAogCQkvKiBOZWVkIGV4Y2x1c2l2ZSBsb2NrIHRvIG1ha2UgYSBuZXcg aGFzaHRhYmxlIGVudHJ5IC0gcHJvbW90ZSAqLwotCQlMV0xvY2tSZWxlYXNlKHBnc3MtPmxv Y2spOwotCQlMV0xvY2tBY3F1aXJlKHBnc3MtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCUxX TG9ja1JlbGVhc2UoJnBnc3MtPmxvY2subG9jayk7CisJCUxXTG9ja0FjcXVpcmUoJnBnc3Mt PmxvY2subG9jaywgTFdfRVhDTFVTSVZFKTsKIAogCQkvKgogCQkgKiBBIGdhcmJhZ2UgY29s bGVjdGlvbiBtYXkgaGF2ZSBvY2N1cnJlZCB3aGlsZSB3ZSB3ZXJlbid0IGhvbGRpbmcgdGhl CkBAIC0xNTE5LDcgKzE1MTksNyBAQCBwZ3NzX3N0b3JlKGNvbnN0IGNoYXIgKnF1ZXJ5LCBp bnQ2NCBxdWVyeUlkLAogCX0KIAogZG9uZToKLQlMV0xvY2tSZWxlYXNlKHBnc3MtPmxvY2sp OworCUxXTG9ja1JlbGVhc2UoJnBnc3MtPmxvY2subG9jayk7CiAKIAkvKiBXZSBwb3N0cG9u ZSB0aGlzIGNsZWFuLXVwIHVudGlsIHdlJ3JlIG91dCBvZiB0aGUgbG9jayAqLwogCWlmIChu b3JtX3F1ZXJ5KQpAQCAtMTgwOCw3ICsxODA4LDcgQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2lu dGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCSAqIHdlIG5lZWQgdG8gcGFydGl0 aW9uIHRoZSBoYXNoIHRhYmxlIHRvIGxpbWl0IHRoZSB0aW1lIHNwZW50IGhvbGRpbmcgYW55 CiAJICogb25lIGxvY2suCiAJICovCi0JTFdMb2NrQWNxdWlyZShwZ3NzLT5sb2NrLCBMV19T SEFSRUQpOworCUxXTG9ja0FjcXVpcmUoJnBnc3MtPmxvY2subG9jaywgTFdfU0hBUkVEKTsK IAogCWlmIChzaG93dGV4dCkKIAl7CkBAIC0yMDQ2LDcgKzIwNDYsNyBAQCBwZ19zdGF0X3N0 YXRlbWVudHNfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCXR1cGxlc3Rv cmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsIHZhbHVl cywgbnVsbHMpOwogCX0KIAotCUxXTG9ja1JlbGVhc2UocGdzcy0+bG9jayk7CisJTFdMb2Nr UmVsZWFzZSgmcGdzcy0+bG9jay5sb2NrKTsKIAogCWlmIChxYnVmZmVyKQogCQlwZnJlZShx YnVmZmVyKTsKQEAgLTIwODYsMjAgKzIwODYsNiBAQCBwZ19zdGF0X3N0YXRlbWVudHNfaW5m byhQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9EQVRVTShIZWFwVHVwbGVHZXREYXR1 bShoZWFwX2Zvcm1fdHVwbGUodHVwZGVzYywgdmFsdWVzLCBudWxscykpKTsKIH0KIAotLyoK LSAqIEVzdGltYXRlIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkLgotICovCi1zdGF0aWMg U2l6ZQotcGdzc19tZW1zaXplKHZvaWQpCi17Ci0JU2l6ZQkJc2l6ZTsKLQotCXNpemUgPSBN QVhBTElHTihzaXplb2YocGdzc1NoYXJlZFN0YXRlKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIGhhc2hfZXN0aW1hdGVfc2l6ZShwZ3NzX21heCwgc2l6ZW9mKHBnc3NFbnRyeSkpKTsK LQotCXJldHVybiBzaXplOwotfQotCiAvKgogICogQWxsb2NhdGUgYSBuZXcgaGFzaHRhYmxl IGVudHJ5LgogICogY2FsbGVyIG11c3QgaG9sZCBhbiBleGNsdXNpdmUgbG9jayBvbiBwZ3Nz LT5sb2NrCkBAIC0yNzMwLDcgKzI3MTYsNyBAQCBlbnRyeV9yZXNldChPaWQgdXNlcmlkLCBP aWQgZGJpZCwgaW50NjQgcXVlcnlpZCwgYm9vbCBtaW5tYXhfb25seSkKIAkJCQkoZXJyY29k ZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKIAkJCQkgZXJy bXNnKCJwZ19zdGF0X3N0YXRlbWVudHMgbXVzdCBiZSBsb2FkZWQgdmlhIFwic2hhcmVkX3By ZWxvYWRfbGlicmFyaWVzXCIiKSkpOwogCi0JTFdMb2NrQWNxdWlyZShwZ3NzLT5sb2NrLCBM V19FWENMVVNJVkUpOworCUxXTG9ja0FjcXVpcmUoJnBnc3MtPmxvY2subG9jaywgTFdfRVhD TFVTSVZFKTsKIAludW1fZW50cmllcyA9IGhhc2hfZ2V0X251bV9lbnRyaWVzKHBnc3NfaGFz aCk7CiAKIAlzdGF0c19yZXNldCA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKQEAgLTI4MjQs NyArMjgxMCw3IEBAIGRvbmU6CiAJcmVjb3JkX2djX3F0ZXh0cygpOwogCiByZWxlYXNlX2xv Y2s6Ci0JTFdMb2NrUmVsZWFzZShwZ3NzLT5sb2NrKTsKKwlMV0xvY2tSZWxlYXNlKCZwZ3Nz LT5sb2NrLmxvY2spOwogCiAJcmV0dXJuIHN0YXRzX3Jlc2V0OwogfQotLSAKMi40Ny4zCgo= --------------ilO2of90F4UvkC4IFxh0ppYz Content-Type: text/x-patch; charset=UTF-8; name="0005-Introduce-registry-of-built-in-subsystems.patch" Content-Disposition: attachment; filename="0005-Introduce-registry-of-built-in-subsystems.patch" Content-Transfer-Encoding: base64 RnJvbSA2MTcxNWI0NWNhMmQwMjA2YjhlZGE2OTJlNzU3ZWEyYjMyZGRkOTZiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMSBBcHIgMjAyNiAxODoyMTowMiArMDMwMApT dWJqZWN0OiBbUEFUQ0ggMDUvMTRdIEludHJvZHVjZSByZWdpc3RyeSBvZiBidWlsdC1pbiBz dWJzeXN0ZW1zCgpUbyBhZGQgYSBuZXcgYnVpbHQtaW4gc3Vic3lzdGVtLCBhZGQgaXQgdG8g c3Vic3lzdGVtc2xpc3QuaC4gVGhhdApob29rcyB1cCBpdHMgY2FsbGJhY2tzIHNvIHRoYXQg dGhleSBnZXQgY2FsbGVkIGF0IHRoZSByaWdodCB0aW1lcwpkdXJpbmcgcG9zdG1hc3RlciBz dGFydHVwLiBGb3Igbm93IHRoaXMgaXMgdW51c2VkLCBidXQgd2lsbCByZXBsYWNlCnRoZSBj dXJyZW50IFN1YnN5c3RlbVNobWVtU2l6ZSgpIGFuZCBTdWJzeXN0ZW1TaG1lbUluaXQoKSBj YWxscyBpbgp0aGUgbmV4dCBjb21taXRzLgotLS0KIHNyYy9iYWNrZW5kL2Jvb3RzdHJhcC9i b290c3RyYXAuYyAgICAgICB8ICAyICsrCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xhdW5j aF9iYWNrZW5kLmMgfCAgMiArKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVy LmMgICAgIHwgIDUgKysrKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyAgICAg ICAgICB8IDIxICsrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC90Y29wL3Bvc3RncmVz LmMgICAgICAgICAgICAgfCAgMyArKysKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvaXBjLmggICAg ICAgICAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5o ICAgICB8IDIzICsrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vi c3lzdGVtcy5oICAgICAgICB8IDMwICsrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90 b29scy9wZ2luY2x1ZGUvaGVhZGVyc2NoZWNrICAgICAgICB8ICAxICsKIDkgZmlsZXMgY2hh bmdlZCwgODggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRl L3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1 ZGUvc3RvcmFnZS9zdWJzeXN0ZW1zLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ib290 c3RyYXAvYm9vdHN0cmFwLmMgYi9zcmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHN0cmFwLmMK aW5kZXggMjZkMzcxN2MyY2IuLjIyNjcyZmZlYzFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9ib290c3RyYXAvYm9vdHN0cmFwLmMKKysrIGIvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jv b3RzdHJhcC5jCkBAIC0zNjIsNiArMzYyLDggQEAgQm9vdHN0cmFwTW9kZU1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSwgYm9vbCBjaGVja19vbmx5KQogCVNldFByb2Nlc3NpbmdNb2Rl KEJvb3RzdHJhcFByb2Nlc3NpbmcpOwogCUlnbm9yZVN5c3RlbUluZGV4ZXMgPSB0cnVlOwog CisJUmVnaXN0ZXJCdWlsdGluU2htZW1DYWxsYmFja3MoKTsKKwogCUluaXRpYWxpemVNYXhC YWNrZW5kcygpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv bGF1bmNoX2JhY2tlbmQuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tl bmQuYwppbmRleCA3NTQyMzEwNGJlOC4uN2I4MTIwMGQzYzIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYworKysgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMKQEAgLTY2Myw2ICs2NjMsOCBAQCBTdWJQb3N0 bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCSAqLwogCUxvY2FsUHJvY2Vz c0NvbnRyb2xGaWxlKGZhbHNlKTsKIAorCVJlZ2lzdGVyQnVpbHRpblNobWVtQ2FsbGJhY2tz KCk7CisKIAkvKgogCSAqIFJlbG9hZCBhbnkgbGlicmFyaWVzIHRoYXQgd2VyZSBwcmVsb2Fk ZWQgYnkgdGhlIHBvc3RtYXN0ZXIuICBTaW5jZSB3ZQogCSAqIGV4ZWMnZCB0aGlzIHByb2Nl c3MsIHRob3NlIGxpYnJhcmllcyBkaWRuJ3QgY29tZSBhbG9uZyB3aXRoIHVzOyBidXQgd2UK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jIGIvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXggMDFiMDY0ZDYyZWEuLjNm ZDZhNWI5YTliIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0 ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAtOTIx LDYgKzkyMSwxMSBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CSAqLwogCUFwcGx5TGF1bmNoZXJSZWdpc3RlcigpOwogCisJLyoKKwkgKiBSZWdpc3RlciB0 aGUgc2hhcmVkIG1lbW9yeSBuZWVkcyBvZiBhbGwgY29yZSBzdWJzeXN0ZW1zLgorCSAqLwor CVJlZ2lzdGVyQnVpbHRpblNobWVtQ2FsbGJhY2tzKCk7CisKIAkvKgogCSAqIHByb2Nlc3Mg YW55IGxpYnJhcmllcyB0aGF0IHNob3VsZCBiZSBwcmVsb2FkZWQgYXQgcG9zdG1hc3RlciBz dGFydAogCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IDUzMzNlNTI4ZTFmLi42 N2FiNGE3ODE5MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtNTEsNiArNTEsNyBA QAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9w cm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaW52YWxhZHQuaCIKKyNpbmNsdWRl ICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNpbmNs dWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy93YWl0X2V2 ZW50LmgiCkBAIC0yNTEsNiArMjUyLDI2IEBAIENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFw aG9yZXModm9pZCkKIAkJc2htZW1fc3RhcnR1cF9ob29rKCk7CiB9CiAKKy8qCisgKiBFYXJs eSBpbml0aWFsaXphdGlvbiBvZiB2YXJpb3VzIHN1YnN5c3RlbXMsIGdpdmluZyB0aGVtIGEg Y2hhbmNlIHRvCisgKiByZWdpc3RlciB0aGVpciBzaGFyZWQgbWVtb3J5IG5lZWRzIGJlZm9y ZSB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGlzCisgKiBhbGxvY2F0ZWQuCisgKi8KK3Zv aWQKK1JlZ2lzdGVyQnVpbHRpblNobWVtQ2FsbGJhY2tzKHZvaWQpCit7CisJLyoKKwkgKiBD YWxsIFJlZ2lzdGVyU2htZW1DYWxsYmFja3MoLi4uKSBvbiBlYWNoIHN1YnN5c3RlbSBsaXN0 ZWQgaW4KKwkgKiBzdWJzeXN0ZW1zbGlzdC5oCisJICovCisjZGVmaW5lIFBHX1NITUVNX1NV QlNZU1RFTShzdWJzeXN0ZW1fY2FsbGJhY2tzKSBcCisJUmVnaXN0ZXJTaG1lbUNhbGxiYWNr cygmKHN1YnN5c3RlbV9jYWxsYmFja3MpKTsKKworI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lz dGVtbGlzdC5oIgorCisjdW5kZWYgUEdfU0hNRU1fU1VCU1lTVEVNCit9CisKIC8qCiAgKiBJ bml0aWFsaXplIHZhcmlvdXMgc3Vic3lzdGVtcywgc2V0dGluZyB1cCB0aGVpciBkYXRhIHN0 cnVjdHVyZXMgaW4KICAqIHNoYXJlZCBtZW1vcnkuCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXgg YWY3Y2M4NmQ4MGEuLjZjNmMyMjQzZDllIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29w L3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC00MTM3 LDYgKzQxMzcsOSBAQCBQb3N0Z3Jlc1NpbmdsZVVzZXJNYWluKGludCBhcmdjLCBjaGFyICph cmd2W10sCiAJLyogcmVhZCBjb250cm9sIGZpbGUgKGVycm9yIGNoZWNraW5nIGFuZCBjb250 YWlucyBjb25maWcgKSAqLwogCUxvY2FsUHJvY2Vzc0NvbnRyb2xGaWxlKGZhbHNlKTsKIAor CS8qIFJlZ2lzdGVyIHRoZSBzaGFyZWQgbWVtb3J5IG5lZWRzIG9mIGFsbCBjb3JlIHN1YnN5 c3RlbXMuICovCisJUmVnaXN0ZXJCdWlsdGluU2htZW1DYWxsYmFja3MoKTsKKwogCS8qCiAJ ICogcHJvY2VzcyBhbnkgbGlicmFyaWVzIHRoYXQgc2hvdWxkIGJlIHByZWxvYWRlZCBhdCBw b3N0bWFzdGVyIHN0YXJ0CiAJICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdl L2lwYy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9pcGMuaAppbmRleCBkYTMyNzg3YWI1MS4u YjIwNWIwMGU3YTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvaXBjLmgKKysr IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9pcGMuaApAQCAtNzcsNiArNzcsNyBAQCBleHRlcm4g dm9pZCBjaGVja19vbl9zaG1lbV9leGl0X2xpc3RzX2FyZV9lbXB0eSh2b2lkKTsKIC8qIGlw Y2kuYyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIHNobWVtX3N0YXJ0dXBfaG9va190eXBlIHNo bWVtX3N0YXJ0dXBfaG9vazsKIAorZXh0ZXJuIHZvaWQgUmVnaXN0ZXJCdWlsdGluU2htZW1D YWxsYmFja3Modm9pZCk7CiBleHRlcm4gU2l6ZSBDYWxjdWxhdGVTaG1lbVNpemUodm9pZCk7 CiBleHRlcm4gdm9pZCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpOwog I2lmZGVmIEVYRUNfQkFDS0VORApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9z dWJzeXN0ZW1saXN0LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWQ0M2M5MGJjYzMKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaApA QCAtMCwwICsxLDIzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogc3Vic3lzdGVt bGlzdC5oCisgKgorICogTGlzdCBvZiBpbml0aWFsaXphdGlvbiBjYWxsYmFja3Mgb2YgYnVp bHQtaW4gc3Vic3lzdGVtcy4gVGhpcyBpcyBrZXB0IGluCisgKiBpdHMgb3duIHNvdXJjZSBm aWxlIGZvciBwb3NzaWJsZSB1c2UgYnkgYXV0b21hdGljIHRvb2xzLgorICogUEdfU0hNRU1f U1VCU1lTVEVNIGlzIGRlZmluZWQgaW4gdGhlIGNhbGxlcnMgZGVwZW5kaW5nIG9uIGhvdyB0 aGUgbGlzdCBpcworICogdXNlZC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5 OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmgK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogdGhlcmUgaXMgZGVsaWJlcmF0 ZWx5IG5vdCBhbiAjaWZuZGVmIFNVQlNZU1RFTUxJU1RfSCBoZXJlICovCisKKy8qCisgKiBO b3RlOiB0aGVyZSBhcmUgc29tZSBpbnRlci1kZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGVzZSwg c28gdGhlIG9yZGVyIG9mIHNvbWUKKyAqIG9mIHRoZXNlIG1hdHRlci4KKyAqLworCisvKiBU T0RPOiBlbXB0eSBmb3Igbm93ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdl L3N1YnN5c3RlbXMuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtcy5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zOGI3MzViZWM2NwotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtcy5oCkBAIC0wLDAg KzEsMzAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHN1YnN5c3RlbXMuaAor ICoJICBQcm92aWRlIGV4dGVybiBkZWNsYXJhdGlvbnMgZm9yIGFsbCB0aGUgYnVpbHQtaW4g c3Vic3lzdGVtIGNhbGxiYWNrcworICoKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBv ZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1zLmgK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBTVUJTWVNURU1TX0gK KyNkZWZpbmUgU1VCU1lTVEVNU19ICisKKyNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisK Ky8qCisgKiBFeHRlcm4gZGVjbGFyYXRpb25zIG9mIGFsbCB0aGUgYnVpbHQtaW4gc3Vic3lz dGVtIGNhbGxiYWNrcworICoKKyAqIFRoZSBhY3R1YWwgbGlzdCBpcyBpbiBzdWJzeXN0ZW1s aXN0LmgsIHNvIHRoYXQgdGhlIHNhbWUgbGlzdCBjYW4gYmUgdXNlZAorICogZm9yIG90aGVy IHB1cnBvc2VzLgorICovCisjZGVmaW5lIFBHX1NITUVNX1NVQlNZU1RFTShjYWxsYmFja3Mp IFwKKwlleHRlcm4gY29uc3QgU2htZW1DYWxsYmFja3MgY2FsbGJhY2tzOworI2luY2x1ZGUg InN0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oIgorI3VuZGVmIFBHX1NITUVNX1NVQlNZU1RFTQor CisjZW5kaWYJCQkJCQkJLyogU1VCU1lTVEVNU19IICovCmRpZmYgLS1naXQgYS9zcmMvdG9v bHMvcGdpbmNsdWRlL2hlYWRlcnNjaGVjayBiL3NyYy90b29scy9wZ2luY2x1ZGUvaGVhZGVy c2NoZWNrCmluZGV4IDE0YzQ2NmNjMjM3Li4yNGY3NDE2MTg1ZSAxMDA3NTUKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5jbHVkZS9oZWFkZXJzY2hlY2sKKysrIGIvc3JjL3Rvb2xzL3BnaW5jbHVk ZS9oZWFkZXJzY2hlY2sKQEAgLTEzMSw2ICsxMzEsNyBAQCBkbwogCXRlc3QgIiRmIiA9IHNy Yy9pbmNsdWRlL3Bvc3RtYXN0ZXIvcHJvY3R5cGVsaXN0LmggJiYgY29udGludWUKIAl0ZXN0 ICIkZiIgPSBzcmMvaW5jbHVkZS9yZWdleC9yZWdlcnJzLmggJiYgY29udGludWUKIAl0ZXN0 ICIkZiIgPSBzcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCAmJiBjb250aW51ZQor CXRlc3QgIiRmIiA9IHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oICYmIGNv bnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWdsaXN0LmggJiYg Y29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMvaW50ZXJmYWNlcy9lY3BnL3ByZXByb2MvY19r d2xpc3QuaCAmJiBjb250aW51ZQogCXRlc3QgIiRmIiA9IHNyYy9pbnRlcmZhY2VzL2VjcGcv cHJlcHJvYy9lY3BnX2t3bGlzdC5oICYmIGNvbnRpbnVlCi0tIAoyLjQ3LjMKCg== --------------ilO2of90F4UvkC4IFxh0ppYz Content-Type: text/x-patch; charset=UTF-8; name="0006-Convert-lwlock.c-to-use-the-new-interface.patch" Content-Disposition: attachment; filename="0006-Convert-lwlock.c-to-use-the-new-interface.patch" Content-Transfer-Encoding: base64 RnJvbSA3NmUxOGJmYmQxYTdlZjU2NmM1ZWY3MGQxMmE4ZjQ4M2Q4YWZhYmFhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMiBBcHIgMjAyNiAwMDoxODowNSArMDMwMApT dWJqZWN0OiBbUEFUQ0ggMDYvMTRdIENvbnZlcnQgbHdsb2NrLmMgdG8gdXNlIHRoZSBuZXcg aW50ZXJmYWNlCgpJdCBzZWVtcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUgdG8gY29udmVydCBm aXJzdCBiZWNhdXNlIGl0IG5lZWRzIHRvCmluaXRpYWxpemVkIGJlZm9yZSBhbnkgb3RoZXIg c3Vic3lzdGVtLCBidXQgb3RoZXIgdGhhbiB0aGF0IGl0J3MKbm90aGluZyBzcGVjaWFsLgot LS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyAgICAgIHwgMTMgLS0tLS0KIHNy Yy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sd2xvY2suYyAgIHwgNzQgKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrLmggICAgICAgIHwg IDIgLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmggfCAgOSArKystCiA0 IGZpbGVzIGNoYW5nZWQsIDQ4IGluc2VydGlvbnMoKyksIDUwIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRleCA2N2FiNGE3ODE5Mi4uNWQ2MzllNmJhZGEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKQEAgLTEyMCw3ICsxMjAsNiBAQCBDYWxjdWxhdGVT aG1lbVNpemUodm9pZCkKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgVHdvUGhhc2VTaG1lbVNp emUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEJhY2tncm91bmRXb3JrZXJTaG1lbVNp emUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIE11bHRpWGFjdFNobWVtU2l6ZSgpKTsK LQlzaXplID0gYWRkX3NpemUoc2l6ZSwgTFdMb2NrU2htZW1TaXplKCkpOwogCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBQcm9jQXJyYXlTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXpl KHNpemUsIEJhY2tlbmRTdGF0dXNTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNp emUsIFNoYXJlZEludmFsU2htZW1TaXplKCkpOwpAQCAtMTc4LDExICsxNzcsNiBAQCBBdHRh Y2hTaGFyZWRNZW1vcnlTdHJ1Y3RzKHZvaWQpCiAJICovCiAJSW5pdGlhbGl6ZUZhc3RQYXRo TG9ja3MoKTsKIAotCS8qCi0JICogQXR0YWNoIHRvIExXTG9ja3MgZmlyc3QuIFRoZXkgYXJl IG5lZWRlZCBieSBtb3N0IG90aGVyIHN1YnN5c3RlbXMuCi0JICovCi0JTFdMb2NrU2htZW1J bml0KCk7Ci0KIAkvKiBFc3RhYmxpc2ggcG9pbnRlcnMgdG8gYWxsIHNoYXJlZCBtZW1vcnkg YXJlYXMgaW4gdGhpcyBiYWNrZW5kICovCiAJU2htZW1BdHRhY2hSZXF1ZXN0ZWQoKTsKIAlD cmVhdGVPckF0dGFjaFNobWVtU3RydWN0cygpOwpAQCAtMjI5LDEzICsyMjMsNiBAQCBDcmVh dGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpCiAJICovCiAJSW5pdFNobWVtQWxs b2NhdG9yKHNlZ2hkcik7CiAKLQkvKgotCSAqIEluaXRpYWxpemUgTFdMb2NrcyBmaXJzdCwg aW4gY2FzZSBhbnkgb2YgdGhlIHNobWVtIGluaXQgZnVuY3Rpb24gdXNlCi0JICogTFdMb2Nr cy4gIChOb3RoaW5nIGVsc2UgY2FuIGJlIHJ1bm5pbmcgZHVyaW5nIHN0YXJ0dXAsIHNvIHRo ZXkgZG9uJ3QKLQkgKiBuZWVkIHRvIGRvIGFueSBsb2NraW5nIHlldCwgYnV0IHdlIG5ldmVy dGhlbGVzcyBhbGxvdyBpdC4pCi0JICovCi0JTFdMb2NrU2htZW1Jbml0KCk7Ci0KIAkvKiBJ bml0aWFsaXplIGFsbCBzaG1lbSBhcmVhcyAqLwogCVNobWVtSW5pdFJlcXVlc3RlZCgpOwog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrLmMKaW5kZXggNWNiNjk2NDkwZDYuLmI3ZTJj NGFlNTQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrLmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9jay5jCkBAIC04NCw2ICs4NCw3 IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jbGlzdC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cHJvY251bWJlci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgorI2luY2x1ZGUgInN0 b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5j bHVkZSAidXRpbHMvd2FpdF9ldmVudC5oIgogCkBAIC0yMTIsNiArMjEzLDE1IEBAIHR5cGVk ZWYgc3RydWN0IE5hbWVkTFdMb2NrVHJhbmNoZVJlcXVlc3QKIAogc3RhdGljIExpc3QgKk5h bWVkTFdMb2NrVHJhbmNoZVJlcXVlc3RzID0gTklMOwogCitzdGF0aWMgdm9pZCBMV0xvY2tT aG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIExXTG9ja1NobWVtSW5pdCh2 b2lkICphcmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNrcyBMV0xvY2tDYWxsYmFja3MgPSB7 CisJLnJlcXVlc3RfZm4gPSBMV0xvY2tTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBMV0xv Y2tTaG1lbUluaXQsCit9OworCisKIHN0YXRpYyB2b2lkIEluaXRpYWxpemVMV0xvY2tzKGlu dCBudW1Mb2Nrcyk7CiBzdGF0aWMgaW5saW5lIHZvaWQgTFdMb2NrUmVwb3J0V2FpdFN0YXJ0 KExXTG9jayAqbG9jayk7CiBzdGF0aWMgaW5saW5lIHZvaWQgTFdMb2NrUmVwb3J0V2FpdEVu ZCh2b2lkKTsKQEAgLTQwMSw1OCArNDExLDU0IEBAIE51bUxXTG9ja3NGb3JOYW1lZFRyYW5j aGVzKHZvaWQpCiB9CiAKIC8qCi0gKiBDb21wdXRlIHNobWVtIHNwYWNlIG5lZWRlZCBmb3Ig dXNlci1kZWZpbmVkIHRyYW5jaGVzIGFuZCB0aGUgbWFpbiBMV0xvY2sKLSAqIGFycmF5Lgor ICogUmVxdWVzdCBzaG1lbSBzcGFjZSBmb3IgdXNlci1kZWZpbmVkIHRyYW5jaGVzIGFuZCB0 aGUgbWFpbiBMV0xvY2sgYXJyYXkuCiAgKi8KLVNpemUKLUxXTG9ja1NobWVtU2l6ZSh2b2lk KQorc3RhdGljIHZvaWQKK0xXTG9ja1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7Ci0JU2l6 ZQkJc2l6ZTsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIExXTG9ja1RyYW5jaGVTaG1lbURl c2M7CiAJaW50CQkJbnVtTG9ja3M7CisJU2l6ZQkJc2l6ZTsKKworCW51bUxvY2tzID0gTlVN X0ZJWEVEX0xXTE9DS1MgKyBOdW1MV0xvY2tzRm9yTmFtZWRUcmFuY2hlcygpOwogCiAJLyog U3BhY2UgZm9yIHVzZXItZGVmaW5lZCB0cmFuY2hlcyAqLwogCXNpemUgPSBzaXplb2YoTFdM b2NrVHJhbmNoZVNobWVtRGF0YSk7Ci0KLQkvKiBTcGFjZSBmb3IgdGhlIExXTG9jayBhcnJh eSAqLwotCW51bUxvY2tzID0gTlVNX0ZJWEVEX0xXTE9DS1MgKyBOdW1MV0xvY2tzRm9yTmFt ZWRUcmFuY2hlcygpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShudW1Mb2Nr cywgc2l6ZW9mKExXTG9ja1BhZGRlZCkpKTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkxXTG9j a1RyYW5jaGVTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIkxXTG9jayB0cmFuY2hlcyIs CisJCQkJCSAgIC5zaXplID0gc2l6ZSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmTFdM b2NrVHJhbmNoZXMsCisJCSk7CiAKLQlyZXR1cm4gc2l6ZTsKKwkvKiBTcGFjZSBmb3IgdGhl IExXTG9jayBhcnJheSAqLworCVNobWVtUmVxdWVzdFN0cnVjdCgmTFdMb2NrVHJhbmNoZVNo bWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiTWFpbiBMV0xvY2sgYXJyYXkiLAorCQkJCQkg ICAuc2l6ZSA9IG51bUxvY2tzICogc2l6ZW9mKExXTG9ja1BhZGRlZCksCisJCQkJCSAgIC5w dHIgPSAodm9pZCAqKikgJk1haW5MV0xvY2tBcnJheSwKKwkJKTsKIH0KIAogLyoKLSAqIEFs bG9jYXRlIHNobWVtIHNwYWNlIGZvciB1c2VyLWRlZmluZWQgdHJhbmNoZXMgYW5kIHRoZSBt YWluIExXTG9jayBhcnJheSwKLSAqIGFuZCBpbml0aWFsaXplIGl0LgorICogSW5pdGlhbGl6 ZSBzaG1lbSBzcGFjZSBmb3IgdXNlci1kZWZpbmVkIHRyYW5jaGVzIGFuZCB0aGUgbWFpbiBM V0xvY2sgYXJyYXkuCiAgKi8KLXZvaWQKLUxXTG9ja1NobWVtSW5pdCh2b2lkKQorc3RhdGlj IHZvaWQKK0xXTG9ja1NobWVtSW5pdCh2b2lkICphcmcpCiB7CiAJaW50CQkJbnVtTG9ja3M7 Ci0JYm9vbAkJZm91bmQ7CiAKLQlMV0xvY2tUcmFuY2hlcyA9IChMV0xvY2tUcmFuY2hlU2ht ZW1EYXRhICopCi0JCVNobWVtSW5pdFN0cnVjdCgiTFdMb2NrIHRyYW5jaGVzIiwgc2l6ZW9m KExXTG9ja1RyYW5jaGVTaG1lbURhdGEpLCAmZm91bmQpOwotCWlmICghZm91bmQpCi0Jewot CQkvKiBDYWxjdWxhdGUgdG90YWwgbnVtYmVyIG9mIGxvY2tzIG5lZWRlZCBpbiB0aGUgbWFp biBhcnJheSAqLwotCQlMV0xvY2tUcmFuY2hlcy0+bnVtX21haW5fYXJyYXlfbG9ja3MgPQot CQkJTlVNX0ZJWEVEX0xXTE9DS1MgKyBOdW1MV0xvY2tzRm9yTmFtZWRUcmFuY2hlcygpOwor CW51bUxvY2tzID0gTlVNX0ZJWEVEX0xXTE9DS1MgKyBOdW1MV0xvY2tzRm9yTmFtZWRUcmFu Y2hlcygpOwogCi0JCS8qIEluaXRpYWxpemUgdGhlIGR5bmFtaWMtYWxsb2NhdGlvbiBjb3Vu dGVyIGZvciB0cmFuY2hlcyAqLwotCQlMV0xvY2tUcmFuY2hlcy0+bnVtX3VzZXJfZGVmaW5l ZCA9IDA7CisJLyogUmVtZW1iZXIgdG90YWwgbnVtYmVyIG9mIGxvY2tzIG5lZWRlZCBpbiB0 aGUgbWFpbiBhcnJheSAqLworCUxXTG9ja1RyYW5jaGVzLT5udW1fbWFpbl9hcnJheV9sb2Nr cyA9IG51bUxvY2tzOwogCi0JCVNwaW5Mb2NrSW5pdCgmTFdMb2NrVHJhbmNoZXMtPmxvY2sp OwotCX0KKwkvKiBJbml0aWFsaXplIHRoZSBkeW5hbWljLWFsbG9jYXRpb24gY291bnRlciBm b3IgdHJhbmNoZXMgKi8KKwlMV0xvY2tUcmFuY2hlcy0+bnVtX3VzZXJfZGVmaW5lZCA9IDA7 CiAKLQkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgbWFpbiBhcnJheSAqLwotCW51 bUxvY2tzID0gTFdMb2NrVHJhbmNoZXMtPm51bV9tYWluX2FycmF5X2xvY2tzOwotCU1haW5M V0xvY2tBcnJheSA9IChMV0xvY2tQYWRkZWQgKikKLQkJU2htZW1Jbml0U3RydWN0KCJNYWlu IExXTG9jayBhcnJheSIsIG51bUxvY2tzICogc2l6ZW9mKExXTG9ja1BhZGRlZCksICZmb3Vu ZCk7Ci0JaWYgKCFmb3VuZCkKLQl7Ci0JCS8qIEluaXRpYWxpemUgYWxsIExXTG9ja3MgKi8K LQkJSW5pdGlhbGl6ZUxXTG9ja3MobnVtTG9ja3MpOwotCX0KKwlTcGluTG9ja0luaXQoJkxX TG9ja1RyYW5jaGVzLT5sb2NrKTsKKworCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFs bCBMV0xvY2tzIGluIHRoZSBtYWluIGFycmF5ICovCisJSW5pdGlhbGl6ZUxXTG9ja3MobnVt TG9ja3MpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xv Y2suaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrLmgKaW5kZXggNjFmMGRiZTc0OWEu LmVmYTViNDI3ZTlmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9jay5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrLmgKQEAgLTEyNiw4ICsxMjYsNiBA QCBleHRlcm4gYm9vbCBMV0xvY2tIZWxkQnlNZUluTW9kZShMV0xvY2sgKmxvY2ssIExXTG9j a01vZGUgbW9kZSk7CiBleHRlcm4gYm9vbCBMV0xvY2tXYWl0Rm9yVmFyKExXTG9jayAqbG9j aywgcGdfYXRvbWljX3VpbnQ2NCAqdmFscHRyLCB1aW50NjQgb2xkdmFsLCB1aW50NjQgKm5l d3ZhbCk7CiBleHRlcm4gdm9pZCBMV0xvY2tVcGRhdGVWYXIoTFdMb2NrICpsb2NrLCBwZ19h dG9taWNfdWludDY0ICp2YWxwdHIsIHVpbnQ2NCB2YWwpOwogCi1leHRlcm4gU2l6ZSBMV0xv Y2tTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBMV0xvY2tTaG1lbUluaXQodm9pZCk7 CiBleHRlcm4gdm9pZCBJbml0TFdMb2NrQWNjZXNzKHZvaWQpOwogCiBleHRlcm4gY29uc3Qg Y2hhciAqR2V0TFdMb2NrSWRlbnRpZmllcih1aW50MzIgY2xhc3NJZCwgdWludDE2IGV2ZW50 SWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0Lmgg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaAppbmRleCBlZDQzYzkwYmNj My4uZjBjZjAxZjVhODUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lz dGVtbGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCkBA IC0yMCw0ICsyMCwxMSBAQAogICogb2YgdGhlc2UgbWF0dGVyLgogICovCiAKLS8qIFRPRE86 IGVtcHR5IGZvciBub3cgKi8KKy8qCisgKiBMV0xvY2tzIGZpcnN0LCBpbiBjYXNlIGFueSBv ZiB0aGUgb3RoZXIgc2htZW0gaW5pdCBmdW5jdGlvbnMgdXNlIExXTG9ja3MuCisgKiAoTm90 aGluZyBlbHNlIGNhbiBiZSBydW5uaW5nIGR1cmluZyBzdGFydHVwLCBzbyB0aGV5IGRvbid0 IG5lZWQgdG8gZG8gYW55CisgKiBsb2NraW5nIHlldCwgYnV0IHdlIG5ldmVydGhlbGVzcyBh bGxvdyBpdC4pCisgKi8KK1BHX1NITUVNX1NVQlNZU1RFTShMV0xvY2tDYWxsYmFja3MpCisK Ky8qIFRPRE86IG5vdGhpbmcgZWxzZSBmb3Igbm93ICovCi0tIAoyLjQ3LjMKCg== --------------ilO2of90F4UvkC4IFxh0ppYz Content-Type: text/x-patch; charset=UTF-8; name="0007-Use-the-new-mechanism-in-a-few-core-subsystems.patch" Content-Disposition: attachment; filename*0="0007-Use-the-new-mechanism-in-a-few-core-subsystems.patch" Content-Transfer-Encoding: base64 RnJvbSBiMDBlMDlmZjE3MTNmNzhlYTdhNjViOGMyOTBhZDU1MmE2MDU2M2NiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMiBBcHIgMjAyNiAwMDoyMToxNyArMDMwMApT dWJqZWN0OiBbUEFUQ0ggMDcvMTRdIFVzZSB0aGUgbmV3IG1lY2hhbmlzbSBpbiBhIGZldyBj b3JlIHN1YnN5c3RlbXMKCkkgY2hvc2UgdGhlc2Ugc3Vic3lzdGVtcyBzcGVjaWZpY2FsbHkg YmVjYXVzZSB0aGV5IGhhdmUgc29tZQpjb21wbGljYXRpbmcgcHJvcGVydGllcywgbWFraW5n IHRoZW0gc2xpZ2h0bHkgaGFyZGVyIHRvIGNvbnZlcnQgdGhhbgptb3N0OgoKLSBUaGUgaW5p dGlhbGl6YXRpb24gY2FsbGJhY2tzIG9mIHNvbWUgb2YgdGhlc2Ugc3Vic3lzdGVtcyBoYXZl CiAgZGVwZW5kZW5jaWVzLCBpLmUuIHRoZXkgbmVlZCB0byBiZSBpbml0aWFsaXplZCBpbiB0 aGUgcmlnaHQgb3JkZXIuCgotIFRoZSBQcm9nR2xvYmFsIHBvaW50ZXIgc3RpbGwgbmVlZHMg dG8gYmUgaW5oZXJpdGVkIGJ5IHRoZQogIEJhY2tlbmRQYXJhbWV0ZXJzIG1lY2hhbmlzbSBv biBFWEVDX0JBQ0tFTkQgYnVpbGRzLCBiZWNhdXNlCiAgUHJvY0dsb2JhbCBpcyByZXF1aXJl ZCBieSBJbml0UHJvY2VzcygpIHRvIGdldCBhIFBHUFJPQyBlbnRyeSwgYW5kCiAgdGhlIFBH UFJPQyBlbnRyeSBpcyByZXF1aXJlZCB0byB1c2UgTFdMb2NrcywgYW5kIHVzdWFsbHkgYXR0 YWNoaW5nCiAgdG8gc2hhcmVkIG1lbW9yeSBhcmVhcyByZXF1aXJlcyB0aGUgdXNlIG9mIExX TG9ja3MuCgotIFNpbWlsYXJseSwgUHJvY1NpZ25hbCBwb2ludGVyIHN0aWxsIG5lZWRzIHRv IGJlIGhhbmRsZWQgYnkKICBCYWNrZW5kUGFyYW1ldGVycywgYmVjYXVzZSBxdWVyeSBjYW5j ZWxsYXRpb24gY29ubmVjdGlvbnMgYWNjZXNzIGl0CiAgd2l0aG91dCBjYWxsaW5nIEluaXRQ cm9jZXNzCgpJJ20gYmVsaWV2ZSBjb252ZXJ0aW5nIGFsbCB0aGUgcmVzdCBvZiB0aGUgc3Vi c3lzdGVtcyBhZnRlciB0aGlzIHdpbGwKYmUgcHJldHR5IG1lY2hhbmljLgoKUmV2aWV3ZWQt Ynk6IEFzaHV0b3NoIEJhcGF0IDxhc2h1dG9zaC5iYXBhdC5vc3NAZ21haWwuY29tPgpSZXZp ZXdlZC1ieTogWnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25hLmNvbT4KRGlz Y3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUV4SFc1 dk0xYm5lTFlmZzB3R2VBYT01MlVpSjN6NHZLZDNBSjcyWDhGdzZrM0tLcmdAbWFpbC5nbWFp bC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jICB8ICAg MiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdmFyc3VwLmMgICAgfCAgMzYgKyst LS0KIHNyYy9iYWNrZW5kL3BvcnQvcG9zaXhfc2VtYS5jICAgICAgICAgIHwgIDI1ICsrLS0K IHNyYy9iYWNrZW5kL3BvcnQvc3lzdl9zZW1hLmMgICAgICAgICAgIHwgIDI0ICsrLS0KIHNy Yy9iYWNrZW5kL3BvcnQvd2luMzJfc2VtYS5jICAgICAgICAgIHwgIDExICstCiBzcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9kc20uYyAgICAgICAgICB8ICA2NSArKysrKy0tLS0KIHNyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9yZWdpc3RyeS5jIHwgIDM5ICsrLS0tCiBzcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgICAgICAgICB8ICAyNyAtLS0tCiBzcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9sYXRjaC5jICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvcG1zaWduYWwuYyAgICAgfCAgNTcgKysrKy0tLS0KIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3Byb2NhcnJheS5jICAgIHwgMTE5ICsrKysrKysrLS0tLS0tLS0KIHNyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyAgIHwgIDY2ICsrKystLS0tLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMgICAgfCAgNDAgKysrLS0tCiBzcmMv YmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jICAgICAgICB8IDE5MCArKysrKysrKysrKysr LS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9oYXNoL2R5bmFoYXNoLmMgICAgICB8 ICAgMyArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaCAgICAgICAgICAgfCAgIDIg LQogc3JjL2luY2x1ZGUvc3RvcmFnZS9kc20uaCAgICAgICAgICAgICAgfCAgIDMgLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9kc21fcmVnaXN0cnkuaCAgICAgfCAgIDIgLQogc3JjL2luY2x1 ZGUvc3RvcmFnZS9wZ19zZW1hLmggICAgICAgICAgfCAgIDYgKy0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvcG1zaWduYWwuaCAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2Uv cHJvYy5oICAgICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2Fy cmF5LmggICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5o ICAgICAgIHwgICAzIC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc2ludmFsYWR0LmggICAgICAg IHwgICAyIC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oICAgIHwgIDE3 ICsrLQogMjUgZmlsZXMgY2hhbmdlZCwgMzc1IGluc2VydGlvbnMoKyksIDM3OCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFz ZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwppbmRleCBkNDY4 Yzk3NzRiMy4uYWIxY2JkNjdiYWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3R3b3BoYXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdv cGhhc2UuYwpAQCAtMjgyLDcgKzI4Miw3IEBAIFR3b1BoYXNlU2htZW1Jbml0KHZvaWQpCiAJ CQlneGFjdHNbaV0ubmV4dCA9IFR3b1BoYXNlU3RhdGUtPmZyZWVHWGFjdHM7CiAJCQlUd29Q aGFzZVN0YXRlLT5mcmVlR1hhY3RzID0gJmd4YWN0c1tpXTsKIAotCQkJLyogYXNzb2NpYXRl IGl0IHdpdGggYSBQR1BST0MgYXNzaWduZWQgYnkgSW5pdFByb2NHbG9iYWwgKi8KKwkJCS8q IGFzc29jaWF0ZSBpdCB3aXRoIGEgUEdQUk9DIGFzc2lnbmVkIGJ5IFByb2NHbG9iYWxTaG1l bUluaXQgKi8KIAkJCWd4YWN0c1tpXS5wZ3Byb2NubyA9IEdldE51bWJlckZyb21QR1Byb2Mo JlByZXBhcmVkWGFjdFByb2NzW2ldKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3ZhcnN1cC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vdmFyc3VwLmMKaW5kZXggMTQ0MWEwNTE3NzMuLjJlYThkMDg4YzBlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJzdXAuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS92YXJzdXAuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUg InBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwu aCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5 c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGls cy9zeXNjYWNoZS5oIgogCkBAIC0zMCwzNSArMzEsMjggQEAKIC8qIE51bWJlciBvZiBPSURz IHRvIHByZWZldGNoIChwcmVhbGxvY2F0ZSkgcGVyIFhMT0cgd3JpdGUgKi8KICNkZWZpbmUg VkFSX09JRF9QUkVGRVRDSAkJODE5MgogCitzdGF0aWMgdm9pZCBWYXJzdXBTaG1lbVJlcXVl c3Qodm9pZCAqYXJnKTsKKwogLyogcG9pbnRlciB0byB2YXJpYWJsZXMgc3RydWN0IGluIHNo YXJlZCBtZW1vcnkgKi8KIFRyYW5zYW1WYXJpYWJsZXNEYXRhICpUcmFuc2FtVmFyaWFibGVz ID0gTlVMTDsKIAorY29uc3QgU2htZW1DYWxsYmFja3MgVmFyc3VwU2htZW1DYWxsYmFja3Mg PSB7CisJLnJlcXVlc3RfZm4gPSBWYXJzdXBTaG1lbVJlcXVlc3QsCit9OwogCiAvKgotICog SW5pdGlhbGl6YXRpb24gb2Ygc2hhcmVkIG1lbW9yeSBmb3IgVHJhbnNhbVZhcmlhYmxlcy4K KyAqIFJlcXVlc3Qgc2hhcmVkIG1lbW9yeSBmb3IgVHJhbnNhbVZhcmlhYmxlcy4KICAqLwot U2l6ZQotVmFyc3VwU2htZW1TaXplKHZvaWQpCi17Ci0JcmV0dXJuIHNpemVvZihUcmFuc2Ft VmFyaWFibGVzRGF0YSk7Ci19Ci0KLXZvaWQKLVZhcnN1cFNobWVtSW5pdCh2b2lkKQorc3Rh dGljIHZvaWQKK1ZhcnN1cFNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91 bmQ7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBUcmFuc2FtVmFyaWFibGVzU2htZW1EZXNj OwogCi0JLyogSW5pdGlhbGl6ZSBvdXIgc2hhcmVkIHN0YXRlIHN0cnVjdCAqLwotCVRyYW5z YW1WYXJpYWJsZXMgPSBTaG1lbUluaXRTdHJ1Y3QoIlRyYW5zYW1WYXJpYWJsZXMiLAotCQkJ CQkJCQkJICAgc2l6ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRhKSwKLQkJCQkJCQkJCSAgICZm b3VuZCk7Ci0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQl7Ci0JCUFzc2VydCghZm91bmQp OwotCQltZW1zZXQoVHJhbnNhbVZhcmlhYmxlcywgMCwgc2l6ZW9mKFRyYW5zYW1WYXJpYWJs ZXNEYXRhKSk7Ci0JfQotCWVsc2UKLQkJQXNzZXJ0KGZvdW5kKTsKKwlTaG1lbVJlcXVlc3RT dHJ1Y3QoJlRyYW5zYW1WYXJpYWJsZXNTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIlRy YW5zYW1WYXJpYWJsZXMiLAorCQkJCQkgICAuc2l6ZSA9IHNpemVvZihUcmFuc2FtVmFyaWFi bGVzRGF0YSksCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJlRyYW5zYW1WYXJpYWJsZXMs CisJCSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3J0L3Bvc2l4X3Nl bWEuYyBiL3NyYy9iYWNrZW5kL3BvcnQvcG9zaXhfc2VtYS5jCmluZGV4IDQwMjA1YjdkNDAw Li45NzE0OGRhOWI2MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9ydC9wb3NpeF9zZW1h LmMKKysrIGIvc3JjL2JhY2tlbmQvcG9ydC9wb3NpeF9zZW1hLmMKQEAgLTE1OSwyMiArMTU5 LDI3IEBAIFBvc2l4U2VtYXBob3JlS2lsbChzZW1fdCAqc2VtKQogCiAKIC8qCi0gKiBSZXBv cnQgYW1vdW50IG9mIHNoYXJlZCBtZW1vcnkgbmVlZGVkIGZvciBzZW1hcGhvcmVzCisgKiBS ZXF1ZXN0IHNoYXJlZCBtZW1vcnkgbmVlZGVkIGZvciBzZW1hcGhvcmVzCiAgKi8KLVNpemUK LVBHU2VtYXBob3JlU2htZW1TaXplKGludCBtYXhTZW1hcykKK3ZvaWQKK1BHU2VtYXBob3Jl U2htZW1SZXF1ZXN0KGludCBtYXhTZW1hcykKIHsKICNpZmRlZiBVU0VfTkFNRURfUE9TSVhf U0VNQVBIT1JFUwogCS8qIE5vIHNoYXJlZCBtZW1vcnkgbmVlZGVkIGluIHRoaXMgY2FzZSAq LwotCXJldHVybiAwOwogI2Vsc2UKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIHNoYXJlZFNl bWFzU2htZW1EZXNjOworCiAJLyogTmVlZCBhIFBHU2VtYXBob3JlRGF0YSBwZXIgc2VtYXBo b3JlICovCi0JcmV0dXJuIG11bF9zaXplKG1heFNlbWFzLCBzaXplb2YoUEdTZW1hcGhvcmVE YXRhKSk7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZzaGFyZWRTZW1hc1NobWVtRGVzYywKKwkJ CQkJICAgLm5hbWUgPSAiU2VtYXBob3JlcyIsCisJCQkJCSAgIC5zaXplID0gbXVsX3NpemUo bWF4U2VtYXMsIHNpemVvZihQR1NlbWFwaG9yZURhdGEpKSwKKwkJCQkJICAgLnB0ciA9ICh2 b2lkICoqKSAmc2hhcmVkU2VtYXMsCisJCSk7CiAjZW5kaWYKIH0KIAogLyoKLSAqIFBHUmVz ZXJ2ZVNlbWFwaG9yZXMgLS0tIGluaXRpYWxpemUgc2VtYXBob3JlIHN1cHBvcnQKKyAqIFBH U2VtYXBob3JlSW5pdCAtLS0gaW5pdGlhbGl6ZSBzZW1hcGhvcmUgc3VwcG9ydAogICoKICAq IFRoaXMgaXMgY2FsbGVkIGR1cmluZyBwb3N0bWFzdGVyIHN0YXJ0IG9yIHNoYXJlZCBtZW1v cnkgcmVpbml0aWFsaXphdGlvbi4KICAqIEl0IHNob3VsZCBkbyB3aGF0ZXZlciBpcyBuZWVk ZWQgdG8gYmUgYWJsZSB0byBzdXBwb3J0IHVwIHRvIG1heFNlbWFzCkBAIC0xOTMsMTAgKzE5 OCw5IEBAIFBHU2VtYXBob3JlU2htZW1TaXplKGludCBtYXhTZW1hcykKICAqIHdlIGRvbid0 IGhhdmUgdG8gZXhwb3NlIHRoZSBjb3VudGVycyB0byBvdGhlciBwcm9jZXNzZXMuKQogICov CiB2b2lkCi1QR1Jlc2VydmVTZW1hcGhvcmVzKGludCBtYXhTZW1hcykKK1BHU2VtYXBob3Jl SW5pdChpbnQgbWF4U2VtYXMpCiB7CiAJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKLQlib29sCQlm b3VuZDsKIAogCS8qCiAJICogV2UgdXNlIHRoZSBkYXRhIGRpcmVjdG9yeSdzIGlub2RlIG51 bWJlciB0byBzZWVkIHRoZSBzZWFyY2ggZm9yIGZyZWUKQEAgLTIxNCwxMSArMjE4LDYgQEAg UEdSZXNlcnZlU2VtYXBob3JlcyhpbnQgbWF4U2VtYXMpCiAJbXlTZW1Qb2ludGVycyA9IChz ZW1fdCAqKikgbWFsbG9jKG1heFNlbWFzICogc2l6ZW9mKHNlbV90ICopKTsKIAlpZiAobXlT ZW1Qb2ludGVycyA9PSBOVUxMKQogCQllbG9nKFBBTklDLCAib3V0IG9mIG1lbW9yeSIpOwot I2Vsc2UKLQotCXNoYXJlZFNlbWFzID0gKFBHU2VtYXBob3JlKQotCQlTaG1lbUluaXRTdHJ1 Y3QoIlNlbWFwaG9yZXMiLCBQR1NlbWFwaG9yZVNobWVtU2l6ZShtYXhTZW1hcyksICZmb3Vu ZCk7Ci0JQXNzZXJ0KCFmb3VuZCk7CiAjZW5kaWYKIAogCW51bVNlbXMgPSAwOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcG9ydC9zeXN2X3NlbWEuYyBiL3NyYy9iYWNrZW5kL3BvcnQv c3lzdl9zZW1hLmMKaW5kZXggNGIyYmY4NDA3MmYuLmY5MjcwMjY0NDJjIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9wb3J0L3N5c3Zfc2VtYS5jCisrKyBiL3NyYy9iYWNrZW5kL3BvcnQv c3lzdl9zZW1hLmMKQEAgLTMwMSwxNiArMzAxLDIzIEBAIElwY1NlbWFwaG9yZUNyZWF0ZShp bnQgbnVtU2VtcykKIAogCiAvKgotICogUmVwb3J0IGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5 IG5lZWRlZCBmb3Igc2VtYXBob3JlcworICogUmVxdWVzdCBzaGFyZWQgbWVtb3J5IG5lZWRl ZCBmb3Igc2VtYXBob3JlcwogICovCi1TaXplCi1QR1NlbWFwaG9yZVNobWVtU2l6ZShpbnQg bWF4U2VtYXMpCit2b2lkCitQR1NlbWFwaG9yZVNobWVtUmVxdWVzdChpbnQgbWF4U2VtYXMp CiB7Ci0JcmV0dXJuIG11bF9zaXplKG1heFNlbWFzLCBzaXplb2YoUEdTZW1hcGhvcmVEYXRh KSk7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBzaGFyZWRTZW1hc1NobWVtRGVzYzsKKwor CS8qIE5lZWQgYSBQR1NlbWFwaG9yZURhdGEgcGVyIHNlbWFwaG9yZSAqLworCVNobWVtUmVx dWVzdFN0cnVjdCgmc2hhcmVkU2VtYXNTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIlNl bWFwaG9yZXMiLAorCQkJCQkgICAuc2l6ZSA9IG11bF9zaXplKG1heFNlbWFzLCBzaXplb2Yo UEdTZW1hcGhvcmVEYXRhKSksCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJnNoYXJlZFNl bWFzLAorCQkpOwogfQogCiAvKgotICogUEdSZXNlcnZlU2VtYXBob3JlcyAtLS0gaW5pdGlh bGl6ZSBzZW1hcGhvcmUgc3VwcG9ydAorICogUEdTZW1hcGhvcmVJbml0IC0tLSBpbml0aWFs aXplIHNlbWFwaG9yZSBzdXBwb3J0CiAgKgogICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHBv c3RtYXN0ZXIgc3RhcnQgb3Igc2hhcmVkIG1lbW9yeSByZWluaXRpYWxpemF0aW9uLgogICog SXQgc2hvdWxkIGRvIHdoYXRldmVyIGlzIG5lZWRlZCB0byBiZSBhYmxlIHRvIHN1cHBvcnQg dXAgdG8gbWF4U2VtYXMKQEAgLTMyNywxMCArMzM0LDkgQEAgUEdTZW1hcGhvcmVTaG1lbVNp emUoaW50IG1heFNlbWFzKQogICogaGF2ZSBjbG9iYmVyZWQuKQogICovCiB2b2lkCi1QR1Jl c2VydmVTZW1hcGhvcmVzKGludCBtYXhTZW1hcykKK1BHU2VtYXBob3JlSW5pdChpbnQgbWF4 U2VtYXMpCiB7CiAJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKLQlib29sCQlmb3VuZDsKIAogCS8q CiAJICogV2UgdXNlIHRoZSBkYXRhIGRpcmVjdG9yeSdzIGlub2RlIG51bWJlciB0byBzZWVk IHRoZSBzZWFyY2ggZm9yIGZyZWUKQEAgLTM0NCwxMCArMzUwLDYgQEAgUEdSZXNlcnZlU2Vt YXBob3JlcyhpbnQgbWF4U2VtYXMpCiAJCQkJIGVycm1zZygiY291bGQgbm90IHN0YXQgZGF0 YSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCiAJCQkJCQlEYXRhRGlyKSkpOwogCi0Jc2hhcmVk U2VtYXMgPSAoUEdTZW1hcGhvcmUpCi0JCVNobWVtSW5pdFN0cnVjdCgiU2VtYXBob3JlcyIs IFBHU2VtYXBob3JlU2htZW1TaXplKG1heFNlbWFzKSwgJmZvdW5kKTsKLQlBc3NlcnQoIWZv dW5kKTsKLQogCW51bVNoYXJlZFNlbWFzID0gMDsKIAltYXhTaGFyZWRTZW1hcyA9IG1heFNl bWFzOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3J0L3dpbjMyX3NlbWEuYyBiL3Ny Yy9iYWNrZW5kL3BvcnQvd2luMzJfc2VtYS5jCmluZGV4IGJhOTdjOWIyZDY0Li5hMzIwMjU1 NDc2OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9ydC93aW4zMl9zZW1hLmMKKysrIGIv c3JjL2JhY2tlbmQvcG9ydC93aW4zMl9zZW1hLmMKQEAgLTI1LDE3ICsyNSwxNiBAQCBzdGF0 aWMgdm9pZCBSZWxlYXNlU2VtYXBob3JlcyhpbnQgY29kZSwgRGF0dW0gYXJnKTsKIAogCiAv KgotICogUmVwb3J0IGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5IG5lZWRlZCBmb3Igc2VtYXBo b3JlcworICogUmVxdWVzdCBzaGFyZWQgbWVtb3J5IG5lZWRlZCBmb3Igc2VtYXBob3Jlcwog ICovCi1TaXplCi1QR1NlbWFwaG9yZVNobWVtU2l6ZShpbnQgbWF4U2VtYXMpCit2b2lkCitQ R1NlbWFwaG9yZVNobWVtUmVxdWVzdChpbnQgbWF4U2VtYXMpCiB7CiAJLyogTm8gc2hhcmVk IG1lbW9yeSBuZWVkZWQgb24gV2luZG93cyAqLwotCXJldHVybiAwOwogfQogCiAvKgotICog UEdSZXNlcnZlU2VtYXBob3JlcyAtLS0gaW5pdGlhbGl6ZSBzZW1hcGhvcmUgc3VwcG9ydAor ICogUEdTZW1hcGhvcmVJbml0IC0tLSBpbml0aWFsaXplIHNlbWFwaG9yZSBzdXBwb3J0CiAg KgogICogSW4gdGhlIFdpbjMyIGltcGxlbWVudGF0aW9uLCB3ZSBhY3F1aXJlIHNlbWFwaG9y ZXMgb24tZGVtYW5kOyB0aGUKICAqIG1heFNlbWFzIHBhcmFtZXRlciBpcyBqdXN0IHVzZWQg dG8gc2l6ZSB0aGUgYXJyYXkgdGhhdCBrZWVwcyB0cmFjayBvZgpAQCAtNDQsNyArNDMsNyBA QCBQR1NlbWFwaG9yZVNobWVtU2l6ZShpbnQgbWF4U2VtYXMpCiAgKiBwcm9jZXNzIGV4aXRz LgogICovCiB2b2lkCi1QR1Jlc2VydmVTZW1hcGhvcmVzKGludCBtYXhTZW1hcykKK1BHU2Vt YXBob3JlSW5pdChpbnQgbWF4U2VtYXMpCiB7CiAJbXlTZW1TZXQgPSAoSEFORExFICopIG1h bGxvYyhtYXhTZW1hcyAqIHNpemVvZihIQU5ETEUpKTsKIAlpZiAobXlTZW1TZXQgPT0gTlVM TCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbS5jIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvZHNtLmMKaW5kZXggNmE1YjE2MzkyZjcuLjkyMzU5M2QxNDBk IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc20uYworKysgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9kc20uYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUg InN0b3JhZ2UvbHdsb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5oIgogI2lu Y2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMu aCIKICNpbmNsdWRlICJ1dGlscy9mcmVlcGFnZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0 aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVzb3duZXIuaCIKQEAgLTExMCw2ICsxMTEsMTQg QEAgc3RhdGljIGJvb2wgZHNtX2luaXRfZG9uZSA9IGZhbHNlOwogLyogUHJlYWxsb2NhdGVk IERTTSBzcGFjZSBpbiB0aGUgbWFpbiBzaGFyZWQgbWVtb3J5IHJlZ2lvbi4gKi8KIHN0YXRp YyB2b2lkICpkc21fbWFpbl9zcGFjZV9iZWdpbiA9IE5VTEw7CiAKK3N0YXRpYyB2b2lkIGRz bV9tYWluX3NwYWNlX3JlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIGRzbV9tYWlu X3NwYWNlX2luaXQodm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgZHNtX3No bWVtX2NhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IGRzbV9tYWluX3NwYWNlX3JlcXVl c3QsCisJLmluaXRfZm4gPSBkc21fbWFpbl9zcGFjZV9pbml0LAorfTsKKwogLyoKICAqIExp c3Qgb2YgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIHVzZWQgYnkgdGhpcyBiYWNr ZW5kLgogICoKQEAgLTQ2Myw0MyArNDcyLDQ1IEBAIGRzbV9zZXRfY29udHJvbF9oYW5kbGUo ZHNtX2hhbmRsZSBoKQogfQogI2VuZGlmCiAKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2MgZHNt X21haW5fc3BhY2Vfc2htZW1fZGVzYzsKKwogLyoKLSAqIFJlc2VydmUgc29tZSBzcGFjZSBp biB0aGUgbWFpbiBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgZm9yIERTTSBzZWdtZW50cy4KKyAq IFJlc2VydmUgc3BhY2UgaW4gdGhlIG1haW4gc2hhcmVkIG1lbW9yeSBzZWdtZW50IGZvciBE U00gc2VnbWVudHMuCiAgKi8KLXNpemVfdAotZHNtX2VzdGltYXRlX3NpemUodm9pZCkKK3N0 YXRpYyB2b2lkCitkc21fbWFpbl9zcGFjZV9yZXF1ZXN0KHZvaWQgKmFyZykKIHsKLQlyZXR1 cm4gMTAyNCAqIDEwMjQgKiAoc2l6ZV90KSBtaW5fZHluYW1pY19zaGFyZWRfbWVtb3J5Owor CXNpemVfdAkJc2l6ZSA9IDEwMjQgKiAxMDI0ICogKHNpemVfdCkgbWluX2R5bmFtaWNfc2hh cmVkX21lbW9yeTsKKworCWlmIChzaXplID09IDApCisJCXJldHVybjsKKworCVNobWVtUmVx dWVzdFN0cnVjdCgmZHNtX21haW5fc3BhY2Vfc2htZW1fZGVzYywKKwkJCQkJICAgLm5hbWUg PSAiUHJlYWxsb2NhdGVkIERTTSIsCisJCQkJCSAgIC5zaXplID0gc2l6ZSwKKwkJCQkJICAg LnB0ciA9ICZkc21fbWFpbl9zcGFjZV9iZWdpbiwKKwkJKTsKIH0KIAotLyoKLSAqIEluaXRp YWxpemUgc3BhY2UgaW4gdGhlIG1haW4gc2hhcmVkIG1lbW9yeSBzZWdtZW50IGZvciBEU00g c2VnbWVudHMuCi0gKi8KLXZvaWQKLWRzbV9zaG1lbV9pbml0KHZvaWQpCitzdGF0aWMgdm9p ZAorZHNtX21haW5fc3BhY2VfaW5pdCh2b2lkICphcmcpCiB7Ci0Jc2l6ZV90CQlzaXplID0g ZHNtX2VzdGltYXRlX3NpemUoKTsKLQlib29sCQlmb3VuZDsKKwlzaXplX3QJCXNpemUgPSBk c21fbWFpbl9zcGFjZV9zaG1lbV9kZXNjLnNpemU7CisJRnJlZVBhZ2VNYW5hZ2VyICpmcG0g PSAoRnJlZVBhZ2VNYW5hZ2VyICopIGRzbV9tYWluX3NwYWNlX2JlZ2luOworCXNpemVfdAkJ Zmlyc3RfcGFnZSA9IDA7CisJc2l6ZV90CQlwYWdlczsKIAogCWlmIChzaXplID09IDApCiAJ CXJldHVybjsKIAotCWRzbV9tYWluX3NwYWNlX2JlZ2luID0gU2htZW1Jbml0U3RydWN0KCJQ cmVhbGxvY2F0ZWQgRFNNIiwgc2l6ZSwgJmZvdW5kKTsKLQlpZiAoIWZvdW5kKQotCXsKLQkJ RnJlZVBhZ2VNYW5hZ2VyICpmcG0gPSAoRnJlZVBhZ2VNYW5hZ2VyICopIGRzbV9tYWluX3Nw YWNlX2JlZ2luOwotCQlzaXplX3QJCWZpcnN0X3BhZ2UgPSAwOwotCQlzaXplX3QJCXBhZ2Vz OwotCi0JCS8qIFJlc2VydmUgc3BhY2UgZm9yIHRoZSBGcmVlUGFnZU1hbmFnZXIuICovCi0J CXdoaWxlIChmaXJzdF9wYWdlICogRlBNX1BBR0VfU0laRSA8IHNpemVvZihGcmVlUGFnZU1h bmFnZXIpKQotCQkJKytmaXJzdF9wYWdlOwotCi0JCS8qIEluaXRpYWxpemUgaXQgYW5kIGdp dmUgaXQgYWxsIHRoZSByZXN0IG9mIHRoZSBzcGFjZS4gKi8KLQkJRnJlZVBhZ2VNYW5hZ2Vy SW5pdGlhbGl6ZShmcG0sIGRzbV9tYWluX3NwYWNlX2JlZ2luKTsKLQkJcGFnZXMgPSAoc2l6 ZSAvIEZQTV9QQUdFX1NJWkUpIC0gZmlyc3RfcGFnZTsKLQkJRnJlZVBhZ2VNYW5hZ2VyUHV0 KGZwbSwgZmlyc3RfcGFnZSwgcGFnZXMpOwotCX0KKwkvKiBSZXNlcnZlIHNwYWNlIGZvciB0 aGUgRnJlZVBhZ2VNYW5hZ2VyLiAqLworCXdoaWxlIChmaXJzdF9wYWdlICogRlBNX1BBR0Vf U0laRSA8IHNpemVvZihGcmVlUGFnZU1hbmFnZXIpKQorCQkrK2ZpcnN0X3BhZ2U7CisKKwkv KiBJbml0aWFsaXplIGl0IGFuZCBnaXZlIGl0IGFsbCB0aGUgcmVzdCBvZiB0aGUgc3BhY2Uu ICovCisJRnJlZVBhZ2VNYW5hZ2VySW5pdGlhbGl6ZShmcG0sIGRzbV9tYWluX3NwYWNlX2Jl Z2luKTsKKwlwYWdlcyA9IChzaXplIC8gRlBNX1BBR0VfU0laRSkgLSBmaXJzdF9wYWdlOwor CUZyZWVQYWdlTWFuYWdlclB1dChmcG0sIGZpcnN0X3BhZ2UsIHBhZ2VzKTsKIH0KIAogLyoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9yZWdpc3RyeS5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX3JlZ2lzdHJ5LmMKaW5kZXggOWJmY2Q2MTY4 MjcuLjNlOWMwYmEyOTQ3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9k c21fcmVnaXN0cnkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21fcmVnaXN0 cnkuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5 LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKICNpbmNsdWRlICJzdG9yYWdlL3No bWVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRp bHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUg InV0aWxzL3R1cGxlc3RvcmUuaCIKQEAgLTU3LDYgKzU4LDE0IEBAIHR5cGVkZWYgc3RydWN0 IERTTVJlZ2lzdHJ5Q3R4U3RydWN0CiAKIHN0YXRpYyBEU01SZWdpc3RyeUN0eFN0cnVjdCAq RFNNUmVnaXN0cnlDdHg7CiAKK3N0YXRpYyB2b2lkIERTTVJlZ2lzdHJ5U2htZW1SZXF1ZXN0 KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBEU01SZWdpc3RyeVNobWVtSW5pdCh2b2lkICph cmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNrcyBEU01SZWdpc3RyeVNobWVtQ2FsbGJhY2tz ID0geworCS5yZXF1ZXN0X2ZuID0gRFNNUmVnaXN0cnlTaG1lbVJlcXVlc3QsCisJLmluaXRf Zm4gPSBEU01SZWdpc3RyeVNobWVtSW5pdCwKK307CisKIHR5cGVkZWYgc3RydWN0IE5hbWVk RFNNU3RhdGUKIHsKIAlkc21faGFuZGxlCWhhbmRsZTsKQEAgLTExNCwyNyArMTIzLDIzIEBA IHN0YXRpYyBjb25zdCBkc2hhc2hfcGFyYW1ldGVycyBkc2hfcGFyYW1zID0gewogc3RhdGlj IGRzYV9hcmVhICpkc21fcmVnaXN0cnlfZHNhOwogc3RhdGljIGRzaGFzaF90YWJsZSAqZHNt X3JlZ2lzdHJ5X3RhYmxlOwogCi1TaXplCi1EU01SZWdpc3RyeVNobWVtU2l6ZSh2b2lkKQor c3RhdGljIHZvaWQKK0RTTVJlZ2lzdHJ5U2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsKLQly ZXR1cm4gTUFYQUxJR04oc2l6ZW9mKERTTVJlZ2lzdHJ5Q3R4U3RydWN0KSk7CisJc3RhdGlj IFNobWVtU3RydWN0RGVzYyBEU01SZWdpc3RyeUN0eFNobWVtRGVzYzsKKworCVNobWVtUmVx dWVzdFN0cnVjdCgmRFNNUmVnaXN0cnlDdHhTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0g IkRTTSBSZWdpc3RyeSBEYXRhIiwKKwkJCQkJICAgLnNpemUgPSBzaXplb2YoRFNNUmVnaXN0 cnlDdHhTdHJ1Y3QpLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZEU01SZWdpc3RyeUN0 eCwKKwkJKTsKIH0KIAotdm9pZAotRFNNUmVnaXN0cnlTaG1lbUluaXQodm9pZCkKK3N0YXRp YyB2b2lkCitEU01SZWdpc3RyeVNobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91 bmQ7Ci0KLQlEU01SZWdpc3RyeUN0eCA9IChEU01SZWdpc3RyeUN0eFN0cnVjdCAqKQotCQlT aG1lbUluaXRTdHJ1Y3QoIkRTTSBSZWdpc3RyeSBEYXRhIiwKLQkJCQkJCURTTVJlZ2lzdHJ5 U2htZW1TaXplKCksCi0JCQkJCQkmZm91bmQpOwotCi0JaWYgKCFmb3VuZCkKLQl7Ci0JCURT TVJlZ2lzdHJ5Q3R4LT5kc2FoID0gRFNBX0hBTkRMRV9JTlZBTElEOwotCQlEU01SZWdpc3Ry eUN0eC0+ZHNoaCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKLQl9CisJRFNNUmVnaXN0cnlD dHgtPmRzYWggPSBEU0FfSEFORExFX0lOVkFMSUQ7CisJRFNNUmVnaXN0cnlDdHgtPmRzaGgg PSBEU0hBU0hfSEFORExFX0lOVkFMSUQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNp LmMKaW5kZXggNWQ2MzllNmJhZGEuLmI4Y2U0ZGU5YWI1IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv aXBjaS5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgog I2luY2x1ZGUgImFjY2Vzcy9zdWJ0cmFucy5oIgogI2luY2x1ZGUgImFjY2Vzcy9zeW5jc2Nh bi5oIgotI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R3 b3BoYXNlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dwcmVmZXRjaGVyLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3hsb2dyZWNvdmVyeS5oIgpAQCAtNDIsMTUgKzQxLDExIEBACiAjaW5jbHVk ZSAic3RvcmFnZS9haW9fc3Vic3lzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIK ICNpbmNsdWRlICJzdG9yYWdlL2RzbS5oIgotI2luY2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lz dHJ5LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Bn X3NobWVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCi0jaW5jbHVk ZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKLSNpbmNsdWRlICJzdG9yYWdlL3Byb2NzaWduYWwu aCIKLSNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbGFkdC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv c3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgogI2luY2x1ZGUgInV0aWxz L2luamVjdGlvbl9wb2ludC5oIgpAQCAtMTA0LDE0ICs5OSwxMCBAQCBDYWxjdWxhdGVTaG1l bVNpemUodm9pZCkKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2htZW1HZXRSZXF1ZXN0ZWRT aXplKCkpOwogCiAJLyogbGVnYWN5IHN1YnN5c3RlbXMgKi8KLQlzaXplID0gYWRkX3NpemUo c2l6ZSwgZHNtX2VzdGltYXRlX3NpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIERT TVJlZ2lzdHJ5U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCdWZmZXJN YW5hZ2VyU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBMb2NrTWFuYWdl clNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgUHJlZGljYXRlTG9ja1No bWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgUHJvY0dsb2JhbFNobWVtU2l6 ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgWExvZ1ByZWZldGNoU2htZW1TaXplKCkp OwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBWYXJzdXBTaG1lbVNpemUoKSk7CiAJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIFhMT0dTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNp emUsIFhMb2dSZWNvdmVyeVNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwg Q0xPR1NobWVtU2l6ZSgpKTsKQEAgLTEyMCwxMSArMTExLDcgQEAgQ2FsY3VsYXRlU2htZW1T aXplKHZvaWQpCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFR3b1BoYXNlU2htZW1TaXplKCkp OwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCYWNrZ3JvdW5kV29ya2VyU2htZW1TaXplKCkp OwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBNdWx0aVhhY3RTaG1lbVNpemUoKSk7Ci0Jc2l6 ZSA9IGFkZF9zaXplKHNpemUsIFByb2NBcnJheVNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRk X3NpemUoc2l6ZSwgQmFja2VuZFN0YXR1c1NobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3Np emUoc2l6ZSwgU2hhcmVkSW52YWxTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIFBNU2lnbmFsU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBQcm9j U2lnbmFsU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBDaGVja3BvaW50 ZXJTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEF1dG9WYWN1dW1TaG1l bVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFJlcGxpY2F0aW9uU2xvdHNTaG1l bVNpemUoKSk7CkBAIC0yNzcsMTMgKzI2NCw5IEBAIFJlZ2lzdGVyQnVpbHRpblNobWVtQ2Fs bGJhY2tzKHZvaWQpCiBzdGF0aWMgdm9pZAogQ3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVjdHMo dm9pZCkKIHsKLQlkc21fc2htZW1faW5pdCgpOwotCURTTVJlZ2lzdHJ5U2htZW1Jbml0KCk7 Ci0KIAkvKgogCSAqIFNldCB1cCB4bG9nLCBjbG9nLCBhbmQgYnVmZmVycwogCSAqLwotCVZh cnN1cFNobWVtSW5pdCgpOwogCVhMT0dTaG1lbUluaXQoKTsKIAlYTG9nUHJlZmV0Y2hTaG1l bUluaXQoKTsKIAlYTG9nUmVjb3ZlcnlTaG1lbUluaXQoKTsKQEAgLTMwNiwyMyArMjg5LDEz IEBAIENyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKHZvaWQpCiAJLyoKIAkgKiBTZXQgdXAg cHJvY2VzcyB0YWJsZQogCSAqLwotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCi0JCUluaXRQ cm9jR2xvYmFsKCk7Ci0JUHJvY0FycmF5U2htZW1Jbml0KCk7CiAJQmFja2VuZFN0YXR1c1No bWVtSW5pdCgpOwogCVR3b1BoYXNlU2htZW1Jbml0KCk7CiAJQmFja2dyb3VuZFdvcmtlclNo bWVtSW5pdCgpOwogCi0JLyoKLQkgKiBTZXQgdXAgc2hhcmVkLWludmFsIG1lc3NhZ2luZwot CSAqLwotCVNoYXJlZEludmFsU2htZW1Jbml0KCk7Ci0KIAkvKgogCSAqIFNldCB1cCBpbnRl cnByb2Nlc3Mgc2lnbmFsaW5nIG1lY2hhbmlzbXMKIAkgKi8KLQlQTVNpZ25hbFNobWVtSW5p dCgpOwotCVByb2NTaWduYWxTaG1lbUluaXQoKTsKIAlDaGVja3BvaW50ZXJTaG1lbUluaXQo KTsKIAlBdXRvVmFjdXVtU2htZW1Jbml0KCk7CiAJUmVwbGljYXRpb25TbG90c1NobWVtSW5p dCgpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvbGF0Y2guYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2xhdGNoLmMKaW5kZXggODUzN2U5ZmVmMmQuLjdkNGY0 Y2YzMmJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9sYXRjaC5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2xhdGNoLmMKQEAgLTgwLDEwICs4MCwxMCBA QCBJbml0TGF0Y2goTGF0Y2ggKmxhdGNoKQogICogY3VycmVudCBwcm9jZXNzLgogICoKICAq IEluaXRTaGFyZWRMYXRjaCBuZWVkcyB0byBiZSBjYWxsZWQgaW4gcG9zdG1hc3RlciBiZWZv cmUgZm9ya2luZyBjaGlsZAotICogcHJvY2Vzc2VzLCB1c3VhbGx5IHJpZ2h0IGFmdGVyIGFs bG9jYXRpbmcgdGhlIHNoYXJlZCBtZW1vcnkgYmxvY2sKLSAqIGNvbnRhaW5pbmcgdGhlIGxh dGNoIHdpdGggU2htZW1Jbml0U3RydWN0LiAoVGhlIFVuaXggaW1wbGVtZW50YXRpb24KLSAq IGRvZXNuJ3QgYWN0dWFsbHkgcmVxdWlyZSB0aGF0LCBidXQgdGhlIFdpbmRvd3Mgb25lIGRv ZXMuKSBCZWNhdXNlIG9mCi0gKiB0aGlzIHJlc3RyaWN0aW9uLCB3ZSBoYXZlIG5vIGNvbmN1 cnJlbmN5IGlzc3VlcyB0byB3b3JyeSBhYm91dCBoZXJlLgorICogcHJvY2Vzc2VzLCB1c3Vh bGx5IHJpZ2h0IGFmdGVyIGluaXRpYWxpemluZyB0aGUgc2hhcmVkIG1lbW9yeSBibG9jawor ICogY29udGFpbmluZyB0aGUgbGF0Y2guIChUaGUgVW5peCBpbXBsZW1lbnRhdGlvbiBkb2Vz bid0IGFjdHVhbGx5IHJlcXVpcmUKKyAqIHRoYXQsIGJ1dCB0aGUgV2luZG93cyBvbmUgZG9l cy4pIEJlY2F1c2Ugb2YgdGhpcyByZXN0cmljdGlvbiwgd2UgaGF2ZSBubworICogY29uY3Vy cmVuY3kgaXNzdWVzIHRvIHdvcnJ5IGFib3V0IGhlcmUuCiAgKgogICogTm90ZSB0aGF0IG90 aGVyIGhhbmRsZXMgY3JlYXRlZCBpbiB0aGlzIG1vZHVsZSBhcmUgbmV2ZXIgbWFya2VkIGFz CiAgKiBpbmhlcml0YWJsZS4gIFRodXMgd2UgZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQg Y2xlYW5pbmcgdXAgY2hpbGQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Btc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wbXNpZ25hbC5jCmluZGV4 IDQ2MTg4MjBiMzM3Li4wMDU4ODY2NDg4NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvcG1zaWduYWwuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wbXNp Z25hbC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNp bmNsdWRlICJzdG9yYWdlL3Btc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5o IgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInV0aWxzL21l bXV0aWxzLmgiCiAKIApAQCAtODMsNiArODQsMTQgQEAgc3RydWN0IFBNU2lnbmFsRGF0YQog LyogUE1TaWduYWxTdGF0ZSBwb2ludGVyIGlzIHZhbGlkIGluIGJvdGggcG9zdG1hc3RlciBh bmQgY2hpbGQgcHJvY2Vzc2VzICovCiBOT05fRVhFQ19TVEFUSUMgdm9sYXRpbGUgUE1TaWdu YWxEYXRhICpQTVNpZ25hbFN0YXRlID0gTlVMTDsKIAorc3RhdGljIHZvaWQgUE1TaWduYWxT aG1lbVJlcXVlc3Qodm9pZCAqKTsKK3N0YXRpYyB2b2lkIFBNU2lnbmFsU2htZW1Jbml0KHZv aWQgKik7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIFBNU2lnbmFsU2htZW1DYWxsYmFja3Mg PSB7CisJLnJlcXVlc3RfZm4gPSBQTVNpZ25hbFNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9 IFBNU2lnbmFsU2htZW1Jbml0LAorfTsKKwogLyoKICAqIExvY2FsIGNvcHkgb2YgUE1TaWdu YWxTdGF0ZS0+bnVtX2NoaWxkX2ZsYWdzLCBvbmx5IHZhbGlkIGluIHRoZQogICogcG9zdG1h c3Rlci4gIFBvc3RtYXN0ZXIga2VlcHMgYSBsb2NhbCBjb3B5IHNvIHRoYXQgaXQgZG9lc24n dCBuZWVkIHRvCkBAIC0xMjMsMzkgKzEzMiwzMSBAQCBwb3N0bWFzdGVyX2RlYXRoX2hhbmRs ZXIoU0lHTkFMX0FSR1MpCiBzdGF0aWMgdm9pZCBNYXJrUG9zdG1hc3RlckNoaWxkSW5hY3Rp dmUoaW50IGNvZGUsIERhdHVtIGFyZyk7CiAKIC8qCi0gKiBQTVNpZ25hbFNobWVtU2l6ZQot ICoJCUNvbXB1dGUgc3BhY2UgbmVlZGVkIGZvciBwbXNpZ25hbC5jJ3Mgc2hhcmVkIG1lbW9y eQorICogUE1TaWduYWxTaG1lbVJlcXVlc3QgLSBSZWdpc3RlciBwbXNpZ25hbC5jJ3Mgc2hh cmVkIG1lbW9yeSBuZWVkcwogICovCi1TaXplCi1QTVNpZ25hbFNobWVtU2l6ZSh2b2lkKQor c3RhdGljIHZvaWQKK1BNU2lnbmFsU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsKLQlTaXpl CQlzaXplOwotCi0Jc2l6ZSA9IG9mZnNldG9mKFBNU2lnbmFsRGF0YSwgUE1DaGlsZEZsYWdz KTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoTWF4TGl2ZVBvc3RtYXN0ZXJD aGlsZHJlbigpLAotCQkJCQkJCQkgICBzaXplb2Yoc2lnX2F0b21pY190KSkpOwotCi0JcmV0 dXJuIHNpemU7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBQTVNpZ25hbFNobWVtRGVzYzsK KwlzaXplX3QJCXNpemU7CisKKwludW1fY2hpbGRfZmxhZ3MgPSBNYXhMaXZlUG9zdG1hc3Rl ckNoaWxkcmVuKCk7CisKKwlzaXplID0gYWRkX3NpemUob2Zmc2V0b2YoUE1TaWduYWxEYXRh LCBQTUNoaWxkRmxhZ3MpLAorCQkJCQltdWxfc2l6ZShudW1fY2hpbGRfZmxhZ3MsIHNpemVv ZihzaWdfYXRvbWljX3QpKSk7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZQTVNpZ25hbFNobWVt RGVzYywKKwkJCQkJICAgLm5hbWUgPSAiUE1TaWduYWxTdGF0ZSIsCisJCQkJCSAgIC5zaXpl ID0gc2l6ZSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmUE1TaWduYWxTdGF0ZSwKKwkJ KTsKIH0KIAotLyoKLSAqIFBNU2lnbmFsU2htZW1Jbml0IC0gaW5pdGlhbGl6ZSBkdXJpbmcg c2hhcmVkLW1lbW9yeSBjcmVhdGlvbgotICovCi12b2lkCi1QTVNpZ25hbFNobWVtSW5pdCh2 b2lkKQorc3RhdGljIHZvaWQKK1BNU2lnbmFsU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQli b29sCQlmb3VuZDsKLQotCVBNU2lnbmFsU3RhdGUgPSAoUE1TaWduYWxEYXRhICopCi0JCVNo bWVtSW5pdFN0cnVjdCgiUE1TaWduYWxTdGF0ZSIsIFBNU2lnbmFsU2htZW1TaXplKCksICZm b3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQotCXsKLQkJLyogaW5pdGlhbGl6ZSBhbGwgZmxhZ3Mg dG8gemVyb2VzICovCi0JCU1lbVNldCh1bnZvbGF0aXplKFBNU2lnbmFsRGF0YSAqLCBQTVNp Z25hbFN0YXRlKSwgMCwgUE1TaWduYWxTaG1lbVNpemUoKSk7Ci0JCW51bV9jaGlsZF9mbGFn cyA9IE1heExpdmVQb3N0bWFzdGVyQ2hpbGRyZW4oKTsKLQkJUE1TaWduYWxTdGF0ZS0+bnVt X2NoaWxkX2ZsYWdzID0gbnVtX2NoaWxkX2ZsYWdzOwotCX0KKwlBc3NlcnQoUE1TaWduYWxT dGF0ZSk7CisJQXNzZXJ0KG51bV9jaGlsZF9mbGFncyA+IDApOworCVBNU2lnbmFsU3RhdGUt Pm51bV9jaGlsZF9mbGFncyA9IG51bV9jaGlsZF9mbGFnczsKIH0KIAogLyoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKaW5kZXggY2MyMDdjYjU2ZTMuLmM4ZTA5ZjRmMGI2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwpAQCAtNjEsNiArNjEsNyBA QAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2Fy cmF5LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIK QEAgLTEwMyw2ICsxMDQsMjAgQEAgdHlwZWRlZiBzdHJ1Y3QgUHJvY0FycmF5U3RydWN0CiAJ aW50CQkJcGdwcm9jbm9zW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07CiB9IFByb2NBcnJheVN0 cnVjdDsKIAorc3RhdGljIHZvaWQgUHJvY0FycmF5U2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7 CitzdGF0aWMgdm9pZCBQcm9jQXJyYXlTaG1lbUluaXQodm9pZCAqYXJnKTsKK3N0YXRpYyB2 b2lkIFByb2NBcnJheVNobWVtQXR0YWNoKHZvaWQgKmFyZyk7CisKK3N0YXRpYyBQcm9jQXJy YXlTdHJ1Y3QgKnByb2NBcnJheTsKKworY29uc3Qgc3RydWN0IFNobWVtQ2FsbGJhY2tzIFBy b2NBcnJheVNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gUHJvY0FycmF5U2ht ZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gUHJvY0FycmF5U2htZW1Jbml0LAorCS5hdHRhY2hf Zm4gPSBQcm9jQXJyYXlTaG1lbUF0dGFjaCwKK307CisKK3N0YXRpYyBTaG1lbVN0cnVjdERl c2MgUHJvY0FycmF5U2htZW1EZXNjOworCiAvKgogICogU3RhdGUgZm9yIHRoZSBHbG9iYWxW aXNUZXN0KiBmYW1pbHkgb2YgZnVuY3Rpb25zLiBUaG9zZSBmdW5jdGlvbnMgY2FuCiAgKiBl LmcuIGJlIHVzZWQgdG8gZGVjaWRlIGlmIGEgZGVsZXRlZCByb3cgY2FuIGJlIHJlbW92ZWQg d2l0aG91dCB2aW9sYXRpbmcKQEAgLTI2OSw5ICsyODQsNiBAQCB0eXBlZGVmIGVudW0gS0FY Q29tcHJlc3NSZWFzb24KIAlLQVhfU1RBUlRVUF9QUk9DRVNTX0lETEUsCS8qIHN0YXJ0dXAg cHJvY2VzcyBpcyBhYm91dCB0byBzbGVlcCAqLwogfSBLQVhDb21wcmVzc1JlYXNvbjsKIAot Ci1zdGF0aWMgUHJvY0FycmF5U3RydWN0ICpwcm9jQXJyYXk7Ci0KIHN0YXRpYyBQR1BST0Mg KmFsbFByb2NzOwogCiAvKgpAQCAtMjgyLDggKzI5NCwxNSBAQCBzdGF0aWMgVHJhbnNhY3Rp b25JZCBjYWNoZWRYaWRJc05vdEluUHJvZ3Jlc3MgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsK IC8qCiAgKiBCb29ra2VlcGluZyBmb3IgdHJhY2tpbmcgZW11bGF0ZWQgdHJhbnNhY3Rpb25z IGluIHJlY292ZXJ5CiAgKi8KKwogc3RhdGljIFRyYW5zYWN0aW9uSWQgKktub3duQXNzaWdu ZWRYaWRzOworCitzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEtub3duQXNzaWduZWRYaWRzU2ht ZW1EZXNjOworCiBzdGF0aWMgYm9vbCAqS25vd25Bc3NpZ25lZFhpZHNWYWxpZDsKKworc3Rh dGljIFNobWVtU3RydWN0RGVzYyBLbm93bkFzc2lnbmVkWGlkc1ZhbGlkU2htZW1EZXNjOwor CiBzdGF0aWMgVHJhbnNhY3Rpb25JZCBsYXRlc3RPYnNlcnZlZFhpZCA9IEludmFsaWRUcmFu c2FjdGlvbklkOwogCiAvKgpAQCAtMzc0LDE5ICszOTMsMTMgQEAgc3RhdGljIGlubGluZSBG dWxsVHJhbnNhY3Rpb25JZCBGdWxsWGlkUmVsYXRpdmVUbyhGdWxsVHJhbnNhY3Rpb25JZCBy ZWwsCiBzdGF0aWMgdm9pZCBHbG9iYWxWaXNVcGRhdGVBcHBseShDb21wdXRlWGlkSG9yaXpv bnNSZXN1bHQgKmhvcml6b25zKTsKIAogLyoKLSAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNw YWNlIG5lZWRlZCBieSBQcm9jQXJyYXlTaG1lbUluaXQKKyAqIFJlZ2lzdGVyIHRoZSBzaGFy ZWQgUEdQUk9DIGFycmF5IGR1cmluZyBwb3N0bWFzdGVyIHN0YXJ0dXAuCiAgKi8KLVNpemUK LVByb2NBcnJheVNobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK1Byb2NBcnJheVNobWVt UmVxdWVzdCh2b2lkICphcmcpCiB7Ci0JU2l6ZQkJc2l6ZTsKLQotCS8qIFNpemUgb2YgdGhl IFByb2NBcnJheSBzdHJ1Y3R1cmUgaXRzZWxmICovCiAjZGVmaW5lIFBST0NBUlJBWV9NQVhQ Uk9DUwkoTWF4QmFja2VuZHMgKyBtYXhfcHJlcGFyZWRfeGFjdHMpCiAKLQlzaXplID0gb2Zm c2V0b2YoUHJvY0FycmF5U3RydWN0LCBwZ3Byb2Nub3MpOwotCXNpemUgPSBhZGRfc2l6ZShz aXplLCBtdWxfc2l6ZShzaXplb2YoaW50KSwgUFJPQ0FSUkFZX01BWFBST0NTKSk7Ci0KIAkv KgogCSAqIER1cmluZyBIb3QgU3RhbmRieSBwcm9jZXNzaW5nIHdlIGhhdmUgYSBkYXRhIHN0 cnVjdHVyZSBjYWxsZWQKIAkgKiBLbm93bkFzc2lnbmVkWGlkcywgY3JlYXRlZCBpbiBzaGFy ZWQgbWVtb3J5LiBMb2NhbCBkYXRhIHN0cnVjdHVyZXMgYXJlCkBAIC00MDUsNjQgKzQxOCw1 MiBAQCBQcm9jQXJyYXlTaG1lbVNpemUodm9pZCkKIAogCWlmIChFbmFibGVIb3RTdGFuZGJ5 KQogCXsKLQkJc2l6ZSA9IGFkZF9zaXplKHNpemUsCi0JCQkJCQltdWxfc2l6ZShzaXplb2Yo VHJhbnNhY3Rpb25JZCksCi0JCQkJCQkJCSBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMpKTsK LQkJc2l6ZSA9IGFkZF9zaXplKHNpemUsCi0JCQkJCQltdWxfc2l6ZShzaXplb2YoYm9vbCks IFRPVEFMX01BWF9DQUNIRURfU1VCWElEUykpOworCQlTaG1lbVJlcXVlc3RTdHJ1Y3QoJktu b3duQXNzaWduZWRYaWRzU2htZW1EZXNjLAorCQkJCQkJICAgLm5hbWUgPSAiS25vd25Bc3Np Z25lZFhpZHMiLAorCQkJCQkJICAgLnNpemUgPSBtdWxfc2l6ZShzaXplb2YoVHJhbnNhY3Rp b25JZCksIFRPVEFMX01BWF9DQUNIRURfU1VCWElEUyksCisJCQkJCQkgICAucHRyID0gKHZv aWQgKiopICZLbm93bkFzc2lnbmVkWGlkcywKKwkJCSk7CisKKwkJU2htZW1SZXF1ZXN0U3Ry dWN0KCZLbm93bkFzc2lnbmVkWGlkc1ZhbGlkU2htZW1EZXNjLAorCQkJCQkJICAgLm5hbWUg PSAiS25vd25Bc3NpZ25lZFhpZHNWYWxpZCIsCisJCQkJCQkgICAuc2l6ZSA9IG11bF9zaXpl KHNpemVvZihib29sKSwgVE9UQUxfTUFYX0NBQ0hFRF9TVUJYSURTKSwKKwkJCQkJCSAgIC5w dHIgPSAodm9pZCAqKikgJktub3duQXNzaWduZWRYaWRzVmFsaWQsCisJCQkpOwogCX0KIAot CXJldHVybiBzaXplOworCS8qIFJlZ2lzdGVyIHRoZSBQcm9jQXJyYXkgc2hhcmVkIHN0cnVj dHVyZSAqLworCVNobWVtUmVxdWVzdFN0cnVjdCgmUHJvY0FycmF5U2htZW1EZXNjLAorCQkJ CQkgICAubmFtZSA9ICJQcm9jIEFycmF5IiwKKwkJCQkJICAgLnNpemUgPSBhZGRfc2l6ZShv ZmZzZXRvZihQcm9jQXJyYXlTdHJ1Y3QsIHBncHJvY25vcyksCisJCQkJCQkJCQkJbXVsX3Np emUoc2l6ZW9mKGludCksIFBST0NBUlJBWV9NQVhQUk9DUykpLAorCQkJCQkgICAucHRyID0g KHZvaWQgKiopICZwcm9jQXJyYXksCisJCSk7CiB9CiAKIC8qCiAgKiBJbml0aWFsaXplIHRo ZSBzaGFyZWQgUEdQUk9DIGFycmF5IGR1cmluZyBwb3N0bWFzdGVyIHN0YXJ0dXAuCiAgKi8K LXZvaWQKLVByb2NBcnJheVNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK1Byb2NBcnJh eVNobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0KLQkvKiBDcmVhdGUg b3IgYXR0YWNoIHRvIHRoZSBQcm9jQXJyYXkgc2hhcmVkIHN0cnVjdHVyZSAqLwotCXByb2NB cnJheSA9IChQcm9jQXJyYXlTdHJ1Y3QgKikKLQkJU2htZW1Jbml0U3RydWN0KCJQcm9jIEFy cmF5IiwKLQkJCQkJCWFkZF9zaXplKG9mZnNldG9mKFByb2NBcnJheVN0cnVjdCwgcGdwcm9j bm9zKSwKLQkJCQkJCQkJIG11bF9zaXplKHNpemVvZihpbnQpLAotCQkJCQkJCQkJCSAgUFJP Q0FSUkFZX01BWFBST0NTKSksCi0JCQkJCQkmZm91bmQpOwotCi0JaWYgKCFmb3VuZCkKLQl7 Ci0JCS8qCi0JCSAqIFdlJ3JlIHRoZSBmaXJzdCAtIGluaXRpYWxpemUuCi0JCSAqLwotCQlw cm9jQXJyYXktPm51bVByb2NzID0gMDsKLQkJcHJvY0FycmF5LT5tYXhQcm9jcyA9IFBST0NB UlJBWV9NQVhQUk9DUzsKLQkJcHJvY0FycmF5LT5tYXhLbm93bkFzc2lnbmVkWGlkcyA9IFRP VEFMX01BWF9DQUNIRURfU1VCWElEUzsKLQkJcHJvY0FycmF5LT5udW1Lbm93bkFzc2lnbmVk WGlkcyA9IDA7Ci0JCXByb2NBcnJheS0+dGFpbEtub3duQXNzaWduZWRYaWRzID0gMDsKLQkJ cHJvY0FycmF5LT5oZWFkS25vd25Bc3NpZ25lZFhpZHMgPSAwOwotCQlwcm9jQXJyYXktPmxh c3RPdmVyZmxvd2VkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCXByb2NBcnJheS0+ cmVwbGljYXRpb25fc2xvdF94bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCXByb2NB cnJheS0+cmVwbGljYXRpb25fc2xvdF9jYXRhbG9nX3htaW4gPSBJbnZhbGlkVHJhbnNhY3Rp b25JZDsKLQkJVHJhbnNhbVZhcmlhYmxlcy0+eGFjdENvbXBsZXRpb25Db3VudCA9IDE7Ci0J fQorCXByb2NBcnJheS0+bnVtUHJvY3MgPSAwOworCXByb2NBcnJheS0+bWF4UHJvY3MgPSBQ Uk9DQVJSQVlfTUFYUFJPQ1M7CisJcHJvY0FycmF5LT5tYXhLbm93bkFzc2lnbmVkWGlkcyA9 IFRPVEFMX01BWF9DQUNIRURfU1VCWElEUzsKKwlwcm9jQXJyYXktPm51bUtub3duQXNzaWdu ZWRYaWRzID0gMDsKKwlwcm9jQXJyYXktPnRhaWxLbm93bkFzc2lnbmVkWGlkcyA9IDA7CisJ cHJvY0FycmF5LT5oZWFkS25vd25Bc3NpZ25lZFhpZHMgPSAwOworCXByb2NBcnJheS0+bGFz dE92ZXJmbG93ZWRYaWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlwcm9jQXJyYXktPnJl cGxpY2F0aW9uX3Nsb3RfeG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCXByb2NBcnJh eS0+cmVwbGljYXRpb25fc2xvdF9jYXRhbG9nX3htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25J ZDsKKwlUcmFuc2FtVmFyaWFibGVzLT54YWN0Q29tcGxldGlvbkNvdW50ID0gMTsKIAogCWFs bFByb2NzID0gUHJvY0dsb2JhbC0+YWxsUHJvY3M7Cit9CiAKLQkvKiBDcmVhdGUgb3IgYXR0 YWNoIHRvIHRoZSBLbm93bkFzc2lnbmVkWGlkcyBhcnJheXMgdG9vLCBpZiBuZWVkZWQgKi8K LQlpZiAoRW5hYmxlSG90U3RhbmRieSkKLQl7Ci0JCUtub3duQXNzaWduZWRYaWRzID0gKFRy YW5zYWN0aW9uSWQgKikKLQkJCVNobWVtSW5pdFN0cnVjdCgiS25vd25Bc3NpZ25lZFhpZHMi LAotCQkJCQkJCW11bF9zaXplKHNpemVvZihUcmFuc2FjdGlvbklkKSwKLQkJCQkJCQkJCSBU T1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMpLAotCQkJCQkJCSZmb3VuZCk7Ci0JCUtub3duQXNz aWduZWRYaWRzVmFsaWQgPSAoYm9vbCAqKQotCQkJU2htZW1Jbml0U3RydWN0KCJLbm93bkFz c2lnbmVkWGlkc1ZhbGlkIiwKLQkJCQkJCQltdWxfc2l6ZShzaXplb2YoYm9vbCksIFRPVEFM X01BWF9DQUNIRURfU1VCWElEUyksCi0JCQkJCQkJJmZvdW5kKTsKLQl9CitzdGF0aWMgdm9p ZAorUHJvY0FycmF5U2htZW1BdHRhY2godm9pZCAqYXJnKQoreworCWFsbFByb2NzID0gUHJv Y0dsb2JhbC0+YWxsUHJvY3M7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9j c2lnbmFsLmMKaW5kZXggZjFhYjNhYTNmZTAuLmRjMmUzMjUwNzZhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi c3RvcmFnZS9zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9zbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAj aW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgi CiAjaW5jbHVkZSAidXRpbHMvd2FpdF9ldmVudC5oIgpAQCAtMTA2LDcgKzEwNywxNiBAQCBz dHJ1Y3QgUHJvY1NpZ25hbEhlYWRlcgogI2RlZmluZSBCQVJSSUVSX0NMRUFSX0JJVChmbGFn cywgdHlwZSkgXAogCSgoZmxhZ3MpICY9IH4oKCh1aW50MzIpIDEpIDw8ICh1aW50MzIpICh0 eXBlKSkpCiAKK3N0YXRpYyB2b2lkIFByb2NTaWduYWxTaG1lbVJlcXVlc3Qodm9pZCAqYXJn KTsKK3N0YXRpYyB2b2lkIFByb2NTaWduYWxTaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29u c3QgU2htZW1DYWxsYmFja3MgUHJvY1NpZ25hbFNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1 ZXN0X2ZuID0gUHJvY1NpZ25hbFNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFByb2NTaWdu YWxTaG1lbUluaXQsCit9OworCiBOT05fRVhFQ19TVEFUSUMgUHJvY1NpZ25hbEhlYWRlciAq UHJvY1NpZ25hbCA9IE5VTEw7CisKIHN0YXRpYyBQcm9jU2lnbmFsU2xvdCAqTXlQcm9jU2ln bmFsU2xvdCA9IE5VTEw7CiAKIHN0YXRpYyBib29sIENoZWNrUHJvY1NpZ25hbChQcm9jU2ln bmFsUmVhc29uIHJlYXNvbik7CkBAIC0xMTQsNTEgKzEyNCw0MSBAQCBzdGF0aWMgdm9pZCBD bGVhbnVwUHJvY1NpZ25hbFN0YXRlKGludCBzdGF0dXMsIERhdHVtIGFyZyk7CiBzdGF0aWMg dm9pZCBSZXNldFByb2NTaWduYWxCYXJyaWVyQml0cyh1aW50MzIgZmxhZ3MpOwogCiAvKgot ICogUHJvY1NpZ25hbFNobWVtU2l6ZQotICoJCUNvbXB1dGUgc3BhY2UgbmVlZGVkIGZvciBQ cm9jU2lnbmFsJ3Mgc2hhcmVkIG1lbW9yeQorICogUHJvY1NpZ25hbFNobWVtUmVxdWVzdAor ICoJCVJlZ2lzdGVyIFByb2NTaWduYWwncyBzaGFyZWQgbWVtb3J5IG5lZWRzIGF0IHBvc3Rt YXN0ZXIgc3RhcnR1cAogICovCi1TaXplCi1Qcm9jU2lnbmFsU2htZW1TaXplKHZvaWQpCitz dGF0aWMgdm9pZAorUHJvY1NpZ25hbFNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7CisJc3Rh dGljIFNobWVtU3RydWN0RGVzYyBQcm9jU2lnbmFsU2htZW1EZXNjOwogCVNpemUJCXNpemU7 CiAKIAlzaXplID0gbXVsX3NpemUoTnVtUHJvY1NpZ25hbFNsb3RzLCBzaXplb2YoUHJvY1Np Z25hbFNsb3QpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgb2Zmc2V0b2YoUHJvY1NpZ25h bEhlYWRlciwgcHNoX3Nsb3QpKTsKLQlyZXR1cm4gc2l6ZTsKKworCVNobWVtUmVxdWVzdFN0 cnVjdCgmUHJvY1NpZ25hbFNobWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiUHJvY1NpZ25h bCIsCisJCQkJCSAgIC5zaXplID0gc2l6ZSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAm UHJvY1NpZ25hbCwKKwkJKTsKIH0KIAotLyoKLSAqIFByb2NTaWduYWxTaG1lbUluaXQKLSAq CQlBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBQcm9jU2lnbmFsJ3Mgc2hhcmVkIG1lbW9yeQot ICovCi12b2lkCi1Qcm9jU2lnbmFsU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorUHJv Y1NpZ25hbFNobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JU2l6ZQkJc2l6ZSA9IFByb2NTaWdu YWxTaG1lbVNpemUoKTsKLQlib29sCQlmb3VuZDsKKwlwZ19hdG9taWNfaW5pdF91NjQoJlBy b2NTaWduYWwtPnBzaF9iYXJyaWVyR2VuZXJhdGlvbiwgMCk7CiAKLQlQcm9jU2lnbmFsID0g KFByb2NTaWduYWxIZWFkZXIgKikKLQkJU2htZW1Jbml0U3RydWN0KCJQcm9jU2lnbmFsIiwg c2l6ZSwgJmZvdW5kKTsKLQotCS8qIElmIHdlJ3JlIGZpcnN0LCBpbml0aWFsaXplLiAqLwot CWlmICghZm91bmQpCisJZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1Qcm9jU2lnbmFsU2xvdHM7 ICsraSkKIAl7Ci0JCWludAkJCWk7Ci0KLQkJcGdfYXRvbWljX2luaXRfdTY0KCZQcm9jU2ln bmFsLT5wc2hfYmFycmllckdlbmVyYXRpb24sIDApOworCQlQcm9jU2lnbmFsU2xvdCAqc2xv dCA9ICZQcm9jU2lnbmFsLT5wc2hfc2xvdFtpXTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgTnVt UHJvY1NpZ25hbFNsb3RzOyArK2kpCi0JCXsKLQkJCVByb2NTaWduYWxTbG90ICpzbG90ID0g JlByb2NTaWduYWwtPnBzaF9zbG90W2ldOwotCi0JCQlTcGluTG9ja0luaXQoJnNsb3QtPnBz c19tdXRleCk7Ci0JCQlwZ19hdG9taWNfaW5pdF91MzIoJnNsb3QtPnBzc19waWQsIDApOwot CQkJc2xvdC0+cHNzX2NhbmNlbF9rZXlfbGVuID0gMDsKLQkJCU1lbVNldChzbG90LT5wc3Nf c2lnbmFsRmxhZ3MsIDAsIHNpemVvZihzbG90LT5wc3Nfc2lnbmFsRmxhZ3MpKTsKLQkJCXBn X2F0b21pY19pbml0X3U2NCgmc2xvdC0+cHNzX2JhcnJpZXJHZW5lcmF0aW9uLCBQR19VSU5U NjRfTUFYKTsKLQkJCXBnX2F0b21pY19pbml0X3UzMigmc2xvdC0+cHNzX2JhcnJpZXJDaGVj a01hc2ssIDApOwotCQkJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZzbG90LT5wc3NfYmFycmll ckNWKTsKLQkJfQorCQlTcGluTG9ja0luaXQoJnNsb3QtPnBzc19tdXRleCk7CisJCXBnX2F0 b21pY19pbml0X3UzMigmc2xvdC0+cHNzX3BpZCwgMCk7CisJCXNsb3QtPnBzc19jYW5jZWxf a2V5X2xlbiA9IDA7CisJCU1lbVNldChzbG90LT5wc3Nfc2lnbmFsRmxhZ3MsIDAsIHNpemVv ZihzbG90LT5wc3Nfc2lnbmFsRmxhZ3MpKTsKKwkJcGdfYXRvbWljX2luaXRfdTY0KCZzbG90 LT5wc3NfYmFycmllckdlbmVyYXRpb24sIFBHX1VJTlQ2NF9NQVgpOworCQlwZ19hdG9taWNf aW5pdF91MzIoJnNsb3QtPnBzc19iYXJyaWVyQ2hlY2tNYXNrLCAwKTsKKwkJQ29uZGl0aW9u VmFyaWFibGVJbml0KCZzbG90LT5wc3NfYmFycmllckNWKTsKIAl9CiB9CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbGFkdC5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvc2ludmFsYWR0LmMKaW5kZXggYTdhN2NjNGYwYTkuLjM0ODYwZDQ3NGJj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYwpAQCAtMjUsNiArMjUsNyBA QAogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL3NpbnZh bGFkdC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgorI2luY2x1ZGUgInN0b3JhZ2Uv c3Vic3lzdGVtcy5oIgogCiAvKgogICogQ29uY2VwdHVhbGx5LCB0aGUgc2hhcmVkIGNhY2hl IGludmFsaWRhdGlvbiBtZXNzYWdlcyBhcmUgc3RvcmVkIGluIGFuCkBAIC0yMDUsNiArMjA2 LDE0IEBAIHR5cGVkZWYgc3RydWN0IFNJU2VnCiAKIHN0YXRpYyBTSVNlZyAqc2htSW52YWxC dWZmZXI7CS8qIHBvaW50ZXIgdG8gdGhlIHNoYXJlZCBpbnZhbCBidWZmZXIgKi8KIAorc3Rh dGljIHZvaWQgU2hhcmVkSW52YWxTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2 b2lkIFNoYXJlZEludmFsU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2Fs bGJhY2tzIFNoYXJlZEludmFsU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBT aGFyZWRJbnZhbFNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFNoYXJlZEludmFsU2htZW1J bml0LAorfTsKKwogCiBzdGF0aWMgTG9jYWxUcmFuc2FjdGlvbklkIG5leHRMb2NhbFRyYW5z YWN0aW9uSWQ7CiAKQEAgLTIxMiwzNyArMjIxLDMyIEBAIHN0YXRpYyB2b2lkIENsZWFudXBJ bnZhbGlkYXRpb25TdGF0ZShpbnQgc3RhdHVzLCBEYXR1bSBhcmcpOwogCiAKIC8qCi0gKiBT aGFyZWRJbnZhbFNobWVtU2l6ZSAtLS0gcmV0dXJuIHNoYXJlZC1tZW1vcnkgc3BhY2UgbmVl ZGVkCisgKiBTaGFyZWRJbnZhbFNobWVtUmVxdWVzdAorICoJCVJlZ2lzdGVyIHNoYXJlZCBt ZW1vcnkgbmVlZHMgZm9yIHRoZSBTSSBtZXNzYWdlIGJ1ZmZlcgogICovCi1TaXplCi1TaGFy ZWRJbnZhbFNobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK1NoYXJlZEludmFsU2htZW1S ZXF1ZXN0KHZvaWQgKmFyZykKIHsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIFNoYXJlZElu dmFsU2htZW1EZXNjOwogCVNpemUJCXNpemU7CiAKIAlzaXplID0gb2Zmc2V0b2YoU0lTZWcs IHByb2NTdGF0ZSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKHNpemVvZihQ cm9jU3RhdGUpLCBOdW1Qcm9jU3RhdGVTbG90cykpOwkvKiBwcm9jU3RhdGUgKi8KIAlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoc2l6ZW9mKGludCksIE51bVByb2NTdGF0ZVNs b3RzKSk7CS8qIHBncHJvY25vcyAqLwogCi0JcmV0dXJuIHNpemU7CisJU2htZW1SZXF1ZXN0 U3RydWN0KCZTaGFyZWRJbnZhbFNobWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAic2htSW52 YWxCdWZmZXIiLAorCQkJCQkgICAuc2l6ZSA9IHNpemUsCisJCQkJCSAgIC5wdHIgPSAodm9p ZCAqKikgJnNobUludmFsQnVmZmVyLAorCQkpOwogfQogCi0vKgotICogU2hhcmVkSW52YWxT aG1lbUluaXQKLSAqCQlDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIFNJIG1lc3NhZ2UgYnVm ZmVyCi0gKi8KLXZvaWQKLVNoYXJlZEludmFsU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9p ZAorU2hhcmVkSW52YWxTaG1lbUluaXQodm9pZCAqYXJnKQogewogCWludAkJCWk7Ci0JYm9v bAkJZm91bmQ7Ci0KLQkvKiBBbGxvY2F0ZSBzcGFjZSBpbiBzaGFyZWQgbWVtb3J5ICovCi0J c2htSW52YWxCdWZmZXIgPSAoU0lTZWcgKikKLQkJU2htZW1Jbml0U3RydWN0KCJzaG1JbnZh bEJ1ZmZlciIsIFNoYXJlZEludmFsU2htZW1TaXplKCksICZmb3VuZCk7Ci0JaWYgKGZvdW5k KQotCQlyZXR1cm47CiAKLQkvKiBDbGVhciBtZXNzYWdlIGNvdW50ZXJzLCBzYXZlIHNpemUg b2YgcHJvY1N0YXRlIGFycmF5LCBpbml0IHNwaW5sb2NrICovCisJLyogQ2xlYXIgbWVzc2Fn ZSBjb3VudGVycywgaW5pdCBzcGlubG9jayAqLwogCXNobUludmFsQnVmZmVyLT5taW5Nc2dO dW0gPSAwOwogCXNobUludmFsQnVmZmVyLT5tYXhNc2dOdW0gPSAwOwogCXNobUludmFsQnVm ZmVyLT5uZXh0VGhyZXNob2xkID0gQ0xFQU5VUF9NSU47CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3By b2MuYwppbmRleCA5Yjg4MGE2YWY2NS4uYjZlNDUxNTQ3NWMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9s bWdyL3Byb2MuYwpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3Np Z25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv c3RhbmRieS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUg InV0aWxzL3RpbWVvdXQuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNpbmNs dWRlICJ1dGlscy93YWl0X2V2ZW50LmgiCkBAIC03MCw5ICs3MSwyNSBAQCBQR1BST0MJICAg Kk15UHJvYyA9IE5VTEw7CiAKIC8qIFBvaW50ZXJzIHRvIHNoYXJlZC1tZW1vcnkgc3RydWN0 dXJlcyAqLwogUFJPQ19IRFIgICAqUHJvY0dsb2JhbCA9IE5VTEw7CitzdGF0aWMgdm9pZCAq dG1wQWxsUHJvY3M7CitzdGF0aWMgdm9pZCAqdG1wRmFzdFBhdGhMb2NrQXJyYXk7CiBOT05f RVhFQ19TVEFUSUMgUEdQUk9DICpBdXhpbGlhcnlQcm9jcyA9IE5VTEw7CiBQR1BST0MJICAg KlByZXBhcmVkWGFjdFByb2NzID0gTlVMTDsKIAorc3RhdGljIHZvaWQgUHJvY0dsb2JhbFNo bWVtUmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgUHJvY0dsb2JhbFNobWVtSW5p dCh2b2lkICphcmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNrcyBQcm9jR2xvYmFsU2htZW1D YWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBQcm9jR2xvYmFsU2htZW1SZXF1ZXN0LAor CS5pbml0X2ZuID0gUHJvY0dsb2JhbFNobWVtSW5pdCwKK307CisKK3N0YXRpYyBTaG1lbVN0 cnVjdERlc2MgUHJvY0dsb2JhbFNobWVtRGVzYzsKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2Mg UHJvY0dsb2JhbEFsbFByb2NzU2htZW1EZXNjOworc3RhdGljIFNobWVtU3RydWN0RGVzYyBG YXN0UGF0aExvY2tBcnJheVNobWVtRGVzYzsKKworc3RhdGljIHVpbnQzMiBUb3RhbFByb2Nz OworCiAvKiBJcyBhIGRlYWRsb2NrIGNoZWNrIHBlbmRpbmc/ICovCiBzdGF0aWMgdm9sYXRp bGUgc2lnX2F0b21pY190IGdvdF9kZWFkbG9ja190aW1lb3V0OwogCkBAIC04MiwyNCArOTks NiBAQCBzdGF0aWMgdm9pZCBBdXhpbGlhcnlQcm9jS2lsbChpbnQgY29kZSwgRGF0dW0gYXJn KTsKIHN0YXRpYyBEZWFkTG9ja1N0YXRlIENoZWNrRGVhZExvY2sodm9pZCk7CiAKIAotLyoK LSAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBieSBQR1BST0MuCi0gKi8K LXN0YXRpYyBTaXplCi1QR1Byb2NTaG1lbVNpemUodm9pZCkKLXsKLQlTaXplCQlzaXplID0g MDsKLQlTaXplCQlUb3RhbFByb2NzID0KLQkJYWRkX3NpemUoTWF4QmFja2VuZHMsIGFkZF9z aXplKE5VTV9BVVhJTElBUllfUFJPQ1MsIG1heF9wcmVwYXJlZF94YWN0cykpOwotCi0Jc2l6 ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZihQR1BST0Mp KSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVv ZigqUHJvY0dsb2JhbC0+eGlkcykpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3Np emUoVG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMpKSk7Ci0J c2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigqUHJv Y0dsb2JhbC0+c3RhdHVzRmxhZ3MpKSk7Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KLQogLyoKICAq IFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBieSBGYXN0LVBhdGggbG9ja3Mu CiAgKi8KQEAgLTEwNyw4ICsxMDYsNiBAQCBzdGF0aWMgU2l6ZQogRmFzdFBhdGhMb2NrU2ht ZW1TaXplKHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZSA9IDA7Ci0JU2l6ZQkJVG90YWxQcm9jcyA9 Ci0JCWFkZF9zaXplKE1heEJhY2tlbmRzLCBhZGRfc2l6ZShOVU1fQVVYSUxJQVJZX1BST0NT LCBtYXhfcHJlcGFyZWRfeGFjdHMpKTsKIAlTaXplCQlmcExvY2tCaXRzU2l6ZSwKIAkJCQlm cFJlbElkU2l6ZTsKIApAQCAtMTI4LDI2ICsxMjUsNyBAQCBGYXN0UGF0aExvY2tTaG1lbVNp emUodm9pZCkKIH0KIAogLyoKLSAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNwYWNlIG5lZWRl ZCBieSBJbml0UHJvY0dsb2JhbC4KLSAqLwotU2l6ZQotUHJvY0dsb2JhbFNobWVtU2l6ZSh2 b2lkKQotewotCVNpemUJCXNpemUgPSAwOwotCi0JLyogUHJvY0dsb2JhbCAqLwotCXNpemUg PSBhZGRfc2l6ZShzaXplLCBzaXplb2YoUFJPQ19IRFIpKTsKLQlzaXplID0gYWRkX3NpemUo c2l6ZSwgc2l6ZW9mKHNsb2NrX3QpKTsKLQotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBQR1Nl bWFwaG9yZVNobWVtU2l6ZShQcm9jR2xvYmFsU2VtYXMoKSkpOwotCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBQR1Byb2NTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIEZh c3RQYXRoTG9ja1NobWVtU2l6ZSgpKTsKLQotCXJldHVybiBzaXplOwotfQotCi0vKgotICog UmVwb3J0IG51bWJlciBvZiBzZW1hcGhvcmVzIG5lZWRlZCBieSBJbml0UHJvY0dsb2JhbC4K KyAqIFJlcG9ydCBudW1iZXIgb2Ygc2VtYXBob3JlcyBuZWVkZWQgYnkgUHJvY0dsb2JhbFNo bWVtSW5pdC4KICAqLwogaW50CiBQcm9jR2xvYmFsU2VtYXModm9pZCkKQEAgLTE2MCw3ICsx MzgsNjYgQEAgUHJvY0dsb2JhbFNlbWFzKHZvaWQpCiB9CiAKIC8qCi0gKiBJbml0UHJvY0ds b2JhbCAtCisgKiBQcm9jR2xvYmFsU2htZW1SZXF1ZXN0CisgKgkgIFJlZ2lzdGVyIHNoYXJl ZCBtZW1vcnkgbmVlZHMuCisgKgorICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHBvc3RtYXN0 ZXIgb3Igc3RhbmRhbG9uZSBiYWNrZW5kIHN0YXJ0dXAsIGFuZCBhbHNvCisgKiBkdXJpbmcg YmFja2VuZCBzdGFydHVwIGluIEVYRUNfQkFDS0VORCBtb2RlLgorICovCitzdGF0aWMgdm9p ZAorUHJvY0dsb2JhbFNobWVtUmVxdWVzdCh2b2lkICphcmcpCit7CisJU2l6ZQkJc2l6ZTsK KworCS8qCisJICogUmVzZXJ2ZSBhbGwgdGhlIFBHUFJPQyBzdHJ1Y3R1cmVzIHdlJ2xsIG5l ZWQuICBUaGVyZSBhcmUgc2l4IHNlcGFyYXRlCisJICogY29uc3VtZXJzOiAoMSkgbm9ybWFs IGJhY2tlbmRzLCAoMikgYXV0b3ZhY3V1bSB3b3JrZXJzIGFuZCBzcGVjaWFsCisJICogd29y a2VycywgKDMpIGJhY2tncm91bmQgd29ya2VycywgKDQpIHdhbHNlbmRlcnMsICg1KSBhdXhp bGlhcnkKKwkgKiBwcm9jZXNzZXMsIGFuZCAoNikgcHJlcGFyZWQgdHJhbnNhY3Rpb25zLiAg KEZvciBsYXJnZWx5LWhpc3RvcmljYWwKKwkgKiByZWFzb25zLCB3ZSBjb21iaW5lIGF1dG92 YWN1dW0gYW5kIHNwZWNpYWwgd29ya2VycyBpbnRvIG9uZSBjYXRlZ29yeQorCSAqIHdpdGgg YSBzaW5nbGUgZnJlZWxpc3QuKSAgRWFjaCBQR1BST0Mgc3RydWN0dXJlIGlzIGRlZGljYXRl ZCB0byBleGFjdGx5CisJICogb25lIG9mIHRoZXNlIHB1cnBvc2VzLCBhbmQgdGhleSBkbyBu b3QgbW92ZSBiZXR3ZWVuIGdyb3Vwcy4KKwkgKi8KKwlUb3RhbFByb2NzID0KKwkJYWRkX3Np emUoTWF4QmFja2VuZHMsIGFkZF9zaXplKE5VTV9BVVhJTElBUllfUFJPQ1MsIG1heF9wcmVw YXJlZF94YWN0cykpOworCisJc2l6ZSA9IDA7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11 bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZihQR1BST0MpKSk7CisJc2l6ZSA9IGFkZF9zaXpl KHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+eGlkcykp KTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9m KCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMpKSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUs IG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3Mp KSk7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZQcm9jR2xvYmFsQWxsUHJvY3NTaG1lbURlc2Ms CisJCQkJCSAgIC5uYW1lID0gIlBHUFJPQyBzdHJ1Y3R1cmVzIiwKKwkJCQkJICAgLnNpemUg PSBzaXplLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZ0bXBBbGxQcm9jcywKKwkJKTsK KworCVNobWVtUmVxdWVzdFN0cnVjdCgmRmFzdFBhdGhMb2NrQXJyYXlTaG1lbURlc2MsCisJ CQkJCSAgIC5uYW1lID0gIkZhc3QtUGF0aCBMb2NrIEFycmF5IiwKKwkJCQkJICAgLnNpemUg PSBJc1VuZGVyUG9zdG1hc3RlciA/IFNITUVNX0FUVEFDSF9VTktOT1dOX1NJWkUgOiBGYXN0 UGF0aExvY2tTaG1lbVNpemUoKSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmdG1wRmFz dFBhdGhMb2NrQXJyYXksCisJCSk7CisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlByb2NHbG9i YWxTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIlByb2MgSGVhZGVyIiwKKwkJCQkJICAg LnNpemUgPSBzaXplb2YoUFJPQ19IRFIpLAorCisJLyoKKwkgKiBQcm9jR2xvYmFsIGlzIHJl Z2lzdGVyZWQgaGVyZSBpbiAucHRyIGFzIHVzdWFsLCBidXQgaXQgbmVlZHMgdG8gYmUKKwkg KiBwcm9wYWdhdGVkIHNwZWNpYWxseSBpbiBFWEVDX0JBQ0tFTkQgbW9kZSwgYmVjYXVzZSBQ cm9jR2xvYmFsIG5lZWRzIHRvCisJICogYmUgYWNjZXNzZWQgZWFybHkgYXQgYmFja2VuZCBz dGFydHVwLCBiZWZvcmUgU2htZW1BdHRhY2hSZXF1ZXN0ZWQoKSBoYXMKKwkgKiBiZWVuIGNh bGxlZC4KKwkgKi8KKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmUHJvY0dsb2JhbCwKKwkJ KTsKKworCS8qIExldCB0aGUgc2VtYXBob3JlIGltcGxlbWVudGF0aW9uIHJlZ2lzdGVyIGl0 cyBzaGFyZWQgbWVtb3J5IG5lZWRzICovCisJUEdTZW1hcGhvcmVTaG1lbVJlcXVlc3QoUHJv Y0dsb2JhbFNlbWFzKCkpOworfQorCisKKy8qCisgKiBQcm9jR2xvYmFsU2htZW1Jbml0IC0K ICAqCSAgSW5pdGlhbGl6ZSB0aGUgZ2xvYmFsIHByb2Nlc3MgdGFibGUgZHVyaW5nIHBvc3Rt YXN0ZXIgb3Igc3RhbmRhbG9uZQogICoJICBiYWNrZW5kIHN0YXJ0dXAuCiAgKgpAQCAtMTc5 LDM2ICsyMTYsMjMgQEAgUHJvY0dsb2JhbFNlbWFzKHZvaWQpCiAgKgkgIEFub3RoZXIgcmVh c29uIGZvciBjcmVhdGluZyBzZW1hcGhvcmVzIGhlcmUgaXMgdGhhdCB0aGUgc2VtYXBob3Jl CiAgKgkgIGltcGxlbWVudGF0aW9uIHR5cGljYWxseSByZXF1aXJlcyB1cyB0byBjcmVhdGUg c2VtYXBob3JlcyBpbiB0aGUKICAqCSAgcG9zdG1hc3Rlciwgbm90IGluIGJhY2tlbmRzLgot ICoKLSAqIE5vdGU6IHRoaXMgaXMgTk9UIGNhbGxlZCBieSBpbmRpdmlkdWFsIGJhY2tlbmRz IHVuZGVyIGEgcG9zdG1hc3RlciwKLSAqIG5vdCBldmVuIGluIHRoZSBFWEVDX0JBQ0tFTkQg Y2FzZS4gIFRoZSBQcm9jR2xvYmFsIGFuZCBBdXhpbGlhcnlQcm9jcwotICogcG9pbnRlcnMg bXVzdCBiZSBwcm9wYWdhdGVkIHNwZWNpYWxseSBmb3IgRVhFQ19CQUNLRU5EIG9wZXJhdGlv bi4KICAqLwotdm9pZAotSW5pdFByb2NHbG9iYWwodm9pZCkKK3N0YXRpYyB2b2lkCitQcm9j R2xvYmFsU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKKwljaGFyCSAgICpwdHI7CisJc2l6ZV90 CQlyZXF1ZXN0U2l6ZTsKIAlQR1BST0MJICAgKnByb2NzOwogCWludAkJCWksCiAJCQkJajsK LQlib29sCQlmb3VuZDsKLQl1aW50MzIJCVRvdGFsUHJvY3MgPSBNYXhCYWNrZW5kcyArIE5V TV9BVVhJTElBUllfUFJPQ1MgKyBtYXhfcHJlcGFyZWRfeGFjdHM7CiAKIAkvKiBVc2VkIGZv ciBzZXR1cCBvZiBwZXItYmFja2VuZCBmYXN0LXBhdGggc2xvdHMuICovCiAJY2hhcgkgICAq ZnBQdHIsCiAJCQkgICAqZnBFbmRQdHIgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZOwogCVNp emUJCWZwTG9ja0JpdHNTaXplLAogCQkJCWZwUmVsSWRTaXplOwotCVNpemUJCXJlcXVlc3RT aXplOwotCWNoYXIJICAgKnB0cjsKIAotCS8qIENyZWF0ZSB0aGUgUHJvY0dsb2JhbCBzaGFy ZWQgc3RydWN0dXJlICovCi0JUHJvY0dsb2JhbCA9IChQUk9DX0hEUiAqKQotCQlTaG1lbUlu aXRTdHJ1Y3QoIlByb2MgSGVhZGVyIiwgc2l6ZW9mKFBST0NfSERSKSwgJmZvdW5kKTsKLQlB c3NlcnQoIWZvdW5kKTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgZGF0YSBzdHJ1Y3R1 cmVzLgotCSAqLworCUFzc2VydChQcm9jR2xvYmFsKTsKIAlQcm9jR2xvYmFsLT5zcGluc19w ZXJfZGVsYXkgPSBERUZBVUxUX1NQSU5TX1BFUl9ERUxBWTsKIAlTcGluTG9ja0luaXQoJlBy b2NHbG9iYWwtPmZyZWVQcm9jc0xvY2spOwogCWRsaXN0X2luaXQoJlByb2NHbG9iYWwtPmZy ZWVQcm9jcyk7CkBAIC0yMjEsMjMgKzI0NSwxMiBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQog CXBnX2F0b21pY19pbml0X3UzMigmUHJvY0dsb2JhbC0+cHJvY0FycmF5R3JvdXBGaXJzdCwg SU5WQUxJRF9QUk9DX05VTUJFUik7CiAJcGdfYXRvbWljX2luaXRfdTMyKCZQcm9jR2xvYmFs LT5jbG9nR3JvdXBGaXJzdCwgSU5WQUxJRF9QUk9DX05VTUJFUik7CiAKLQkvKgotCSAqIENy ZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhbGwgdGhlIFBHUFJPQyBzdHJ1Y3R1cmVzIHdlJ2xsIG5l ZWQuICBUaGVyZSBhcmUKLQkgKiBzaXggc2VwYXJhdGUgY29uc3VtZXJzOiAoMSkgbm9ybWFs IGJhY2tlbmRzLCAoMikgYXV0b3ZhY3V1bSB3b3JrZXJzIGFuZAotCSAqIHNwZWNpYWwgd29y a2VycywgKDMpIGJhY2tncm91bmQgd29ya2VycywgKDQpIHdhbHNlbmRlcnMsICg1KSBhdXhp bGlhcnkKLQkgKiBwcm9jZXNzZXMsIGFuZCAoNikgcHJlcGFyZWQgdHJhbnNhY3Rpb25zLiAg KEZvciBsYXJnZWx5LWhpc3RvcmljYWwKLQkgKiByZWFzb25zLCB3ZSBjb21iaW5lIGF1dG92 YWN1dW0gYW5kIHNwZWNpYWwgd29ya2VycyBpbnRvIG9uZSBjYXRlZ29yeQotCSAqIHdpdGgg YSBzaW5nbGUgZnJlZWxpc3QuKSAgRWFjaCBQR1BST0Mgc3RydWN0dXJlIGlzIGRlZGljYXRl ZCB0byBleGFjdGx5Ci0JICogb25lIG9mIHRoZXNlIHB1cnBvc2VzLCBhbmQgdGhleSBkbyBu b3QgbW92ZSBiZXR3ZWVuIGdyb3Vwcy4KLQkgKi8KLQlyZXF1ZXN0U2l6ZSA9IFBHUHJvY1No bWVtU2l6ZSgpOwotCi0JcHRyID0gU2htZW1Jbml0U3RydWN0KCJQR1BST0Mgc3RydWN0dXJl cyIsCi0JCQkJCQkgIHJlcXVlc3RTaXplLAotCQkJCQkJICAmZm91bmQpOwotCisJQXNzZXJ0 KHRtcEFsbFByb2NzKTsKKwlwdHIgPSB0bXBBbGxQcm9jczsKKwlyZXF1ZXN0U2l6ZSA9IFBy b2NHbG9iYWxBbGxQcm9jc1NobWVtRGVzYy5zaXplOwogCU1lbVNldChwdHIsIDAsIHJlcXVl c3RTaXplKTsKIAorCS8qIENhcnZlIG91dCB0aGUgYWxsUHJvY3MgYXJyYXkgZnJvbSB0aGUg c2hhcmVkIG1lbW9yeSBhcmVhICovCiAJcHJvY3MgPSAoUEdQUk9DICopIHB0cjsKIAlwdHIg PSBwdHIgKyBUb3RhbFByb2NzICogc2l6ZW9mKFBHUFJPQyk7CiAKQEAgLTI0Niw3ICsyNTks NyBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCVByb2NHbG9iYWwtPmFsbFByb2NDb3VudCA9 IE1heEJhY2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9DUzsKIAogCS8qCi0JICogQWxsb2Nh dGUgYXJyYXlzIG1pcnJvcmluZyBQR1BST0MgZmllbGRzIGluIGEgZGVuc2UgbWFubmVyLiBT ZWUKKwkgKiBDYXJ2ZSBvdXQgYXJyYXlzIG1pcnJvcmluZyBQR1BST0MgZmllbGRzIGluIGEg ZGVuc2UgbWFubmVyLiBTZWUKIAkgKiBQUk9DX0hEUi4KIAkgKgogCSAqIFhYWDogSXQgbWln aHQgbWFrZSBzZW5zZSB0byBpbmNyZWFzZSBwYWRkaW5nIGZvciB0aGVzZSBhcnJheXMsIGdp dmVuCkBAIC0yNjEsMzAgKzI3NCwyNyBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCVByb2NH bG9iYWwtPnN0YXR1c0ZsYWdzID0gKHVpbnQ4ICopIHB0cjsKIAlwdHIgPSBwdHIgKyAoVG90 YWxQcm9jcyAqIHNpemVvZigqUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MpKTsKIAotCS8qIG1h a2Ugc3VyZSB3ZXIgZGlkbid0IG92ZXJmbG93ICovCisJLyogbWFrZSBzdXJlIHdlIGRpZG4n dCBvdmVyZmxvdyAqLwogCUFzc2VydCgocHRyID4gKGNoYXIgKikgcHJvY3MpICYmIChwdHIg PD0gKGNoYXIgKikgcHJvY3MgKyByZXF1ZXN0U2l6ZSkpOwogCiAJLyoKLQkgKiBBbGxvY2F0 ZSBhcnJheXMgZm9yIGZhc3QtcGF0aCBsb2Nrcy4gVGhvc2UgYXJlIHZhcmlhYmxlLWxlbmd0 aCwgc28KKwkgKiBJbml0aWFsaXplIGFycmF5cyBmb3IgZmFzdC1wYXRoIGxvY2tzLiBUaG9z ZSBhcmUgdmFyaWFibGUtbGVuZ3RoLCBzbwogCSAqIGNhbid0IGJlIGluY2x1ZGVkIGluIFBH UFJPQyBkaXJlY3RseS4gV2UgYWxsb2NhdGUgYSBzZXBhcmF0ZSBwaWVjZSBvZgogCSAqIHNo YXJlZCBtZW1vcnkgYW5kIHRoZW4gZGl2aWRlIHRoYXQgYmV0d2VlbiBiYWNrZW5kcy4KIAkg Ki8KIAlmcExvY2tCaXRzU2l6ZSA9IE1BWEFMSUdOKEZhc3RQYXRoTG9ja0dyb3Vwc1BlckJh Y2tlbmQgKiBzaXplb2YodWludDY0KSk7CiAJZnBSZWxJZFNpemUgPSBNQVhBTElHTihGYXN0 UGF0aExvY2tTbG90c1BlckJhY2tlbmQoKSAqIHNpemVvZihPaWQpKTsKIAotCXJlcXVlc3RT aXplID0gRmFzdFBhdGhMb2NrU2htZW1TaXplKCk7Ci0KLQlmcFB0ciA9IFNobWVtSW5pdFN0 cnVjdCgiRmFzdC1QYXRoIExvY2sgQXJyYXkiLAotCQkJCQkJCXJlcXVlc3RTaXplLAotCQkJ CQkJCSZmb3VuZCk7Ci0KLQlNZW1TZXQoZnBQdHIsIDAsIHJlcXVlc3RTaXplKTsKKwlBc3Nl cnQodG1wRmFzdFBhdGhMb2NrQXJyYXkpOworCWZwUHRyID0gdG1wRmFzdFBhdGhMb2NrQXJy YXk7CisJcmVxdWVzdFNpemUgPSBGYXN0UGF0aExvY2tBcnJheVNobWVtRGVzYy5zaXplOwor CW1lbXNldChmcFB0ciwgMCwgcmVxdWVzdFNpemUpOwogCiAJLyogRm9yIGFzc2VydHMgY2hl Y2tpbmcgd2UgZGlkIG5vdCBvdmVyZmxvdy4gKi8KIAlmcEVuZFB0ciA9IGZwUHRyICsgcmVx dWVzdFNpemU7CiAKLQkvKiBSZXNlcnZlIHNwYWNlIGZvciBzZW1hcGhvcmVzLiAqLwotCVBH UmVzZXJ2ZVNlbWFwaG9yZXMoUHJvY0dsb2JhbFNlbWFzKCkpOworCS8qIEluaXRpYWxpemUg c2VtYXBob3JlcyAqLworCVBHU2VtYXBob3JlSW5pdChQcm9jR2xvYmFsU2VtYXMoKSk7CiAK IAlmb3IgKGkgPSAwOyBpIDwgVG90YWxQcm9jczsgaSsrKQogCXsKQEAgLTQwNSw3ICs0MTUs NyBAQCBJbml0UHJvY2Vzcyh2b2lkKQogCiAJLyoKIAkgKiBEZWNpZGUgd2hpY2ggbGlzdCBz aG91bGQgc3VwcGx5IG91ciBQR1BST0MuICBUaGlzIGxvZ2ljIG11c3QgbWF0Y2ggdGhlCi0J ICogd2F5IHRoZSBmcmVlbGlzdHMgd2VyZSBjb25zdHJ1Y3RlZCBpbiBJbml0UHJvY0dsb2Jh bCgpLgorCSAqIHdheSB0aGUgZnJlZWxpc3RzIHdlcmUgY29uc3RydWN0ZWQgaW4gUHJvY0ds b2JhbFNobWVtSW5pdCgpLgogCSAqLwogCWlmIChBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNz KCkgfHwgQW1TcGVjaWFsV29ya2VyUHJvY2VzcygpKQogCQlwcm9jZ2xvYmFsbGlzdCA9ICZQ cm9jR2xvYmFsLT5hdXRvdmFjRnJlZVByb2NzOwpAQCAtNDYwLDcgKzQ3MCw3IEBAIEluaXRQ cm9jZXNzKHZvaWQpCiAKIAkvKgogCSAqIEluaXRpYWxpemUgYWxsIGZpZWxkcyBvZiBNeVBy b2MsIGV4Y2VwdCBmb3IgdGhvc2UgcHJldmlvdXNseQotCSAqIGluaXRpYWxpemVkIGJ5IElu aXRQcm9jR2xvYmFsLgorCSAqIGluaXRpYWxpemVkIGJ5IFByb2NHbG9iYWxTaG1lbUluaXQu CiAJICovCiAJZGxpc3Rfbm9kZV9pbml0KCZNeVByb2MtPmZyZWVQcm9jc0xpbmspOwogCU15 UHJvYy0+d2FpdFN0YXR1cyA9IFBST0NfV0FJVF9TVEFUVVNfT0s7CkBAIC01OTMsNyArNjAz LDcgQEAgSW5pdFByb2Nlc3NQaGFzZTIodm9pZCkKICAqIFRoaXMgaXMgY2FsbGVkIGJ5IGJn d3JpdGVyIGFuZCBzaW1pbGFyIHByb2Nlc3NlcyBzbyB0aGF0IHRoZXkgd2lsbCBoYXZlIGEK ICAqIE15UHJvYyB2YWx1ZSB0aGF0J3MgcmVhbCBlbm91Z2ggdG8gbGV0IHRoZW0gd2FpdCBm b3IgTFdMb2Nrcy4gIFRoZSBQR1BST0MKICAqIGFuZCBzZW1hIHRoYXQgYXJlIGFzc2lnbmVk IGFyZSBvbmUgb2YgdGhlIGV4dHJhIG9uZXMgY3JlYXRlZCBkdXJpbmcKLSAqIEluaXRQcm9j R2xvYmFsLgorICogUHJvY0dsb2JhbFNobWVtSW5pdC4KICAqCiAgKiBBdXhpbGlhcnkgcHJv Y2Vzc2VzIGFyZSBwcmVzZW50bHkgbm90IGV4cGVjdGVkIHRvIHdhaXQgZm9yIHJlYWwgKGxv Y2ttZ3IpCiAgKiBsb2Nrcywgc28gd2UgbmVlZCBub3Qgc2V0IHVwIHRoZSBkZWFkbG9jayBj aGVja2VyLiAgVGhleSBhcmUgbmV2ZXIgYWRkZWQKQEAgLTY2Miw3ICs2NzIsNyBAQCBJbml0 QXV4aWxpYXJ5UHJvY2Vzcyh2b2lkKQogCiAJLyoKIAkgKiBJbml0aWFsaXplIGFsbCBmaWVs ZHMgb2YgTXlQcm9jLCBleGNlcHQgZm9yIHRob3NlIHByZXZpb3VzbHkKLQkgKiBpbml0aWFs aXplZCBieSBJbml0UHJvY0dsb2JhbC4KKwkgKiBpbml0aWFsaXplZCBieSBQcm9jR2xvYmFs U2htZW1Jbml0LgogCSAqLwogCWRsaXN0X25vZGVfaW5pdCgmTXlQcm9jLT5mcmVlUHJvY3NM aW5rKTsKIAlNeVByb2MtPndhaXRTdGF0dXMgPSBQUk9DX1dBSVRfU1RBVFVTX09LOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaGFzaC9keW5haGFzaC5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvaGFzaC9keW5haGFzaC5jCmluZGV4IGQ0OWE3YTkyYzY0Li44MTE5OWVkY2E4 NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaGFzaC9keW5haGFzaC5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2hhc2gvZHluYWhhc2guYwpAQCAtMzM4LDcgKzMzOCw4IEBA IHN0cmluZ19jb21wYXJlKGNvbnN0IGNoYXIgKmtleTEsIGNvbnN0IGNoYXIgKmtleTIsIFNp emUga2V5c2l6ZSkKICAqIHVuZGVyIGluZm8tPmhjeHQgcmF0aGVyIHRoYW4gdW5kZXIgVG9w TWVtb3J5Q29udGV4dDsgdGhlIGRlZmF1bHQKICAqIGJlaGF2aW9yIGlzIG9ubHkgc3VpdGFi bGUgZm9yIHNlc3Npb24tbGlmZXNwYW4gaGFzaCB0YWJsZXMuCiAgKiBPdGhlciBmbGFncyBi aXRzIGFyZSBzcGVjaWFsLXB1cnBvc2UgYW5kIHNlbGRvbSB1c2VkLCBleGNlcHQgZm9yIHRo b3NlCi0gKiBhc3NvY2lhdGVkIHdpdGggc2hhcmVkLW1lbW9yeSBoYXNoIHRhYmxlcywgZm9y IHdoaWNoIHNlZSBTaG1lbUluaXRIYXNoKCkuCisgKiBhc3NvY2lhdGVkIHdpdGggc2hhcmVk LW1lbW9yeSBoYXNoIHRhYmxlcywgZm9yIHdoaWNoIHNlZQorICogU2htZW1SZXF1ZXN0SGFz aCgpLgogICoKICAqIEZpZWxkcyBpbiAqaW5mbyBhcmUgcmVhZCBvbmx5IHdoZW4gdGhlIGFz c29jaWF0ZWQgZmxhZ3MgYml0IGlzIHNldC4KICAqIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8g aW5pdGlhbGl6ZSBvdGhlciBmaWVsZHMgb2YgKmluZm8uCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvdHJhbnNhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaApp bmRleCA2ZmE5MWJmY2RjMC4uNTVhNGFiMjZiMzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy90cmFuc2FtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaApA QCAtMzQ1LDggKzM0NSw2IEBAIGV4dGVybiBUcmFuc2FjdGlvbklkIFRyYW5zYWN0aW9uSWRM YXRlc3QoVHJhbnNhY3Rpb25JZCBtYWlueGlkLAogZXh0ZXJuIFhMb2dSZWNQdHIgVHJhbnNh Y3Rpb25JZEdldENvbW1pdExTTihUcmFuc2FjdGlvbklkIHhpZCk7CiAKIC8qIGluIHRyYW5z YW0vdmFyc3VwLmMgKi8KLWV4dGVybiBTaXplIFZhcnN1cFNobWVtU2l6ZSh2b2lkKTsKLWV4 dGVybiB2b2lkIFZhcnN1cFNobWVtSW5pdCh2b2lkKTsKIGV4dGVybiBGdWxsVHJhbnNhY3Rp b25JZCBHZXROZXdUcmFuc2FjdGlvbklkKGJvb2wgaXNTdWJYYWN0KTsKIGV4dGVybiB2b2lk IEFkdmFuY2VOZXh0RnVsbFRyYW5zYWN0aW9uSWRQYXN0WGlkKFRyYW5zYWN0aW9uSWQgeGlk KTsKIGV4dGVybiBGdWxsVHJhbnNhY3Rpb25JZCBSZWFkTmV4dEZ1bGxUcmFuc2FjdGlvbklk KHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9kc20uaCBiL3NyYy9p bmNsdWRlL3N0b3JhZ2UvZHNtLmgKaW5kZXggNDA3NjU3ZGYzZmYuLjFiZGU3MWI0NDA2IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbS5oCisrKyBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvZHNtLmgKQEAgLTI2LDkgKzI2LDYgQEAgZXh0ZXJuIHZvaWQgZHNtX3Bvc3Rt YXN0ZXJfc3RhcnR1cChQR1NobWVtSGVhZGVyICopOwogZXh0ZXJuIHZvaWQgZHNtX2JhY2tl bmRfc2h1dGRvd24odm9pZCk7CiBleHRlcm4gdm9pZCBkc21fZGV0YWNoX2FsbCh2b2lkKTsK IAotZXh0ZXJuIHNpemVfdCBkc21fZXN0aW1hdGVfc2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lk IGRzbV9zaG1lbV9pbml0KHZvaWQpOwotCiAjaWZkZWYgRVhFQ19CQUNLRU5ECiBleHRlcm4g dm9pZCBkc21fc2V0X2NvbnRyb2xfaGFuZGxlKGRzbV9oYW5kbGUgaCk7CiAjZW5kaWYKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmggYi9zcmMvaW5j bHVkZS9zdG9yYWdlL2RzbV9yZWdpc3RyeS5oCmluZGV4IDUwNmZhZTJjOWNhLi5hMjI2OWM4 OWYwMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9kc21fcmVnaXN0cnkuaAor KysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9yZWdpc3RyeS5oCkBAIC0yMiw3ICsyMiw1 IEBAIGV4dGVybiBkc2FfYXJlYSAqR2V0TmFtZWREU0EoY29uc3QgY2hhciAqbmFtZSwgYm9v bCAqZm91bmQpOwogZXh0ZXJuIGRzaGFzaF90YWJsZSAqR2V0TmFtZWREU0hhc2goY29uc3Qg Y2hhciAqbmFtZSwKIAkJCQkJCQkJCWNvbnN0IGRzaGFzaF9wYXJhbWV0ZXJzICpwYXJhbXMs CiAJCQkJCQkJCQlib29sICpmb3VuZCk7Ci1leHRlcm4gU2l6ZSBEU01SZWdpc3RyeVNobWVt U2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIERTTVJlZ2lzdHJ5U2htZW1Jbml0KHZvaWQpOwog CiAjZW5kaWYJCQkJCQkJLyogRFNNX1JFR0lTVFJZX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3N0b3JhZ2UvcGdfc2VtYS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wZ19zZW1h LmgKaW5kZXggNjZmYWNjNjkwN2EuLmZlNTBlZTUwNWJhIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9zdG9yYWdlL3BnX3NlbWEuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3BnX3Nl bWEuaApAQCAtMzcsMTEgKzM3LDExIEBAIHR5cGVkZWYgSEFORExFIFBHU2VtYXBob3JlOwog I2VuZGlmCiAKIAotLyogUmVwb3J0IGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5IG5lZWRlZCAq LwotZXh0ZXJuIFNpemUgUEdTZW1hcGhvcmVTaG1lbVNpemUoaW50IG1heFNlbWFzKTsKKy8q IFJlcXVlc3Qgc2hhcmVkIG1lbW9yeSBuZWVkZWQgZm9yIHNlbWFwaG9yZXMgKi8KK2V4dGVy biB2b2lkIFBHU2VtYXBob3JlU2htZW1SZXF1ZXN0KGludCBtYXhTZW1hcyk7CiAKIC8qIE1v ZHVsZSBpbml0aWFsaXphdGlvbiAoY2FsbGVkIGR1cmluZyBwb3N0bWFzdGVyIHN0YXJ0IG9y IHNobWVtIHJlaW5pdCkgKi8KLWV4dGVybiB2b2lkIFBHUmVzZXJ2ZVNlbWFwaG9yZXMoaW50 IG1heFNlbWFzKTsKK2V4dGVybiB2b2lkIFBHU2VtYXBob3JlSW5pdChpbnQgbWF4U2VtYXMp OwogCiAvKiBBbGxvY2F0ZSBhIFBHU2VtYXBob3JlIHN0cnVjdHVyZSB3aXRoIGluaXRpYWwg Y291bnQgMSAqLwogZXh0ZXJuIFBHU2VtYXBob3JlIFBHU2VtYXBob3JlQ3JlYXRlKHZvaWQp OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oCmluZGV4IDIwNmZiNzhmOGE1Li4wMDFlNmVlYTYx YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaApAQCAtNjYsOCArNjYsNiBAQCBleHRlcm4g UEdETExJTVBPUlQgdm9sYXRpbGUgUE1TaWduYWxEYXRhICpQTVNpZ25hbFN0YXRlOwogLyoK ICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBwbXNpZ25hbC5jCiAgKi8KLWV4dGVy biBTaXplIFBNU2lnbmFsU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgUE1TaWduYWxT aG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBTZW5kUG9zdG1hc3RlclNpZ25hbChQTVNp Z25hbFJlYXNvbiByZWFzb24pOwogZXh0ZXJuIGJvb2wgQ2hlY2tQb3N0bWFzdGVyU2lnbmFs KFBNU2lnbmFsUmVhc29uIHJlYXNvbik7CiBleHRlcm4gdm9pZCBTZXRRdWl0U2lnbmFsUmVh c29uKFF1aXRTaWduYWxSZWFzb24gcmVhc29uKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvcHJvYy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKaW5kZXggMWRh ZDEyNTcwNmUuLjYwNzMyY2NiMzNhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2MuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaApAQCAtNTUxLDggKzU1 MSw2IEBAIGV4dGVybiBQR0RMTElNUE9SVCBQR1BST0MgKkF1eGlsaWFyeVByb2NzOwogICog RnVuY3Rpb24gUHJvdG90eXBlcwogICovCiBleHRlcm4gaW50CVByb2NHbG9iYWxTZW1hcyh2 b2lkKTsKLWV4dGVybiBTaXplIFByb2NHbG9iYWxTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4g dm9pZCBJbml0UHJvY0dsb2JhbCh2b2lkKTsKIGV4dGVybiB2b2lkIEluaXRQcm9jZXNzKHZv aWQpOwogZXh0ZXJuIHZvaWQgSW5pdFByb2Nlc3NQaGFzZTIodm9pZCk7CiBleHRlcm4gdm9p ZCBJbml0QXV4aWxpYXJ5UHJvY2Vzcyh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvcHJvY2FycmF5LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5o CmluZGV4IGFiZGYwMjFlNjZlLi5kNzE4YTViNTQyZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2Nh cnJheS5oCkBAIC0xOSw4ICsxOSw2IEBACiAjaW5jbHVkZSAidXRpbHMvc25hcHNob3QuaCIK IAogCi1leHRlcm4gU2l6ZSBQcm9jQXJyYXlTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9p ZCBQcm9jQXJyYXlTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBQcm9jQXJyYXlBZGQo UEdQUk9DICpwcm9jKTsKIGV4dGVybiB2b2lkIFByb2NBcnJheVJlbW92ZShQR1BST0MgKnBy b2MsIFRyYW5zYWN0aW9uSWQgbGF0ZXN0WGlkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWdu YWwuaAppbmRleCBjYzRmMjZhYTMzZC4uN2Y4NTU5NzFiNWEgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv cHJvY3NpZ25hbC5oCkBAIC02Nyw5ICs2Nyw2IEBAIHR5cGVkZWYgZW51bQogLyoKICAqIHBy b3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBwcm9jc2lnbmFsLmMKICAqLwotZXh0ZXJuIFNp emUgUHJvY1NpZ25hbFNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFByb2NTaWduYWxT aG1lbUluaXQodm9pZCk7Ci0KIGV4dGVybiB2b2lkIFByb2NTaWduYWxJbml0KGNvbnN0IHVp bnQ4ICpjYW5jZWxfa2V5LCBpbnQgY2FuY2VsX2tleV9sZW4pOwogZXh0ZXJuIGludAlTZW5k UHJvY1NpZ25hbChwaWRfdCBwaWQsIFByb2NTaWduYWxSZWFzb24gcmVhc29uLAogCQkJCQkJ ICAgUHJvY051bWJlciBwcm9jTnVtYmVyKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2Uvc2ludmFsYWR0LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NpbnZhbGFkdC5oCmlu ZGV4IDEyMmRiY2RmMTlmLi4yMDhlYTlkMDUxZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9zaW52YWxhZHQuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NpbnZhbGFk dC5oCkBAIC0yNyw4ICsyNyw2IEBACiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25z IGluIHNpbnZhbGFkdC5jCiAgKi8KLWV4dGVybiBTaXplIFNoYXJlZEludmFsU2htZW1TaXpl KHZvaWQpOwotZXh0ZXJuIHZvaWQgU2hhcmVkSW52YWxTaG1lbUluaXQodm9pZCk7CiBleHRl cm4gdm9pZCBTaGFyZWRJbnZhbEJhY2tlbmRJbml0KGJvb2wgc2VuZE9ubHkpOwogCiBleHRl cm4gdm9pZCBTSUluc2VydERhdGFFbnRyaWVzKGNvbnN0IFNoYXJlZEludmFsaWRhdGlvbk1l c3NhZ2UgKmRhdGEsIGludCBuKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv c3Vic3lzdGVtbGlzdC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmgK aW5kZXggZjBjZjAxZjVhODUuLmQ2MmMyOWYxMzYxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1 YnN5c3RlbWxpc3QuaApAQCAtMjcsNCArMjcsMTkgQEAKICAqLwogUEdfU0hNRU1fU1VCU1lT VEVNKExXTG9ja0NhbGxiYWNrcykKIAotLyogVE9ETzogbm90aGluZyBlbHNlIGZvciBub3cg Ki8KK1BHX1NITUVNX1NVQlNZU1RFTShkc21fc2htZW1fY2FsbGJhY2tzKQorUEdfU0hNRU1f U1VCU1lTVEVNKERTTVJlZ2lzdHJ5U2htZW1DYWxsYmFja3MpCisKKy8qIHhsb2csIGNsb2cs IGFuZCBidWZmZXJzICovCitQR19TSE1FTV9TVUJTWVNURU0oVmFyc3VwU2htZW1DYWxsYmFj a3MpCisKKy8qIHByb2Nlc3MgdGFibGUgKi8KK1BHX1NITUVNX1NVQlNZU1RFTShQcm9jR2xv YmFsU2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oUHJvY0FycmF5U2htZW1D YWxsYmFja3MpCisKKy8qIHNoYXJlZC1pbnZhbCBtZXNzYWdpbmcgKi8KK1BHX1NITUVNX1NV QlNZU1RFTShTaGFyZWRJbnZhbFNobWVtQ2FsbGJhY2tzKQorCisvKiBpbnRlcnByb2Nlc3Mg c2lnbmFsaW5nIG1lY2hhbmlzbXMgKi8KK1BHX1NITUVNX1NVQlNZU1RFTShQTVNpZ25hbFNo bWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKFByb2NTaWduYWxTaG1lbUNhbGxi YWNrcykKLS0gCjIuNDcuMwoK --------------ilO2of90F4UvkC4IFxh0ppYz Content-Type: text/x-patch; charset=UTF-8; name="0008-refactor-predicate.c-inline-SerialInit-to-the-caller.patch" Content-Disposition: attachment; filename*0="0008-refactor-predicate.c-inline-SerialInit-to-the-caller.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyMTczMGQyN2M0NWVhOTcyMGEwM2U1NmE4ZjVhNjBmNDI0NGU0YTg1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMTkgTWFyIDIwMjYgMTc6MjE6MzAgKzAyMDAK U3ViamVjdDogW1BBVENIIDA4LzE0XSByZWZhY3RvciBwcmVkaWNhdGUuYzogaW5saW5lIFNl cmlhbEluaXQgdG8gdGhlIGNhbGxlcgoKVGhlIFNobWVtSW5pdCBmdW5jdGlvbiBpcyB2ZXJ5 IGNvbXBsaWNhdGVkIGN1cnJlbnRseS4gVGhlc2UKcmVmYWN0b3JpbmdzIG1vdmUgaXQgaW4g YSBkaXJlY3Rpb24gdGhhdCBpcyBtb3JlIG5hdHVyYWwgd2l0aCB0aGUgbmV3CnNobWVtIGNh bGxiYWNrcy4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgfCA3 MyArKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjkgaW5z ZXJ0aW9ucygrKSwgNDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3By ZWRpY2F0ZS5jCmluZGV4IGUwMDNmYTViMTA3Li4xM2E2YTRiOTNhNiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCisrKyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwpAQCAtNDQ0LDcgKzQ0NCw2IEBAIHN0YXRpYyB2 b2lkIEZsYWdTeGFjdFVuc2FmZShTRVJJQUxJWkFCTEVYQUNUICpzeGFjdCk7CiAKIHN0YXRp YyBib29sIFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseShpbnQ2NCBwYWdlMSwgaW50NjQg cGFnZTIpOwogc3RhdGljIGludAlzZXJpYWxfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihjb25z dCB2b2lkICpvcGFxdWVfZGF0YSk7Ci1zdGF0aWMgdm9pZCBTZXJpYWxJbml0KHZvaWQpOwog c3RhdGljIHZvaWQgU2VyaWFsQWRkKFRyYW5zYWN0aW9uSWQgeGlkLCBTZXJDb21taXRTZXFO byBtaW5Db25mbGljdENvbW1pdFNlcU5vKTsKIHN0YXRpYyBTZXJDb21taXRTZXFObyBTZXJp YWxHZXRNaW5Db25mbGljdENvbW1pdFNlcU5vKFRyYW5zYWN0aW9uSWQgeGlkKTsKIHN0YXRp YyB2b2lkIFNlcmlhbFNldEFjdGl2ZVNlclhtaW4oVHJhbnNhY3Rpb25JZCB4aWQpOwpAQCAt ODA5LDQ4ICs4MDgsNiBAQCBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHlVbml0VGVzdHMo dm9pZCkKIH0KICNlbmRpZgogCi0vKgotICogSW5pdGlhbGl6ZSBmb3IgdGhlIHRyYWNraW5n IG9mIG9sZCBzZXJpYWxpemFibGUgY29tbWl0dGVkIHhpZHMuCi0gKi8KLXN0YXRpYyB2b2lk Ci1TZXJpYWxJbml0KHZvaWQpCi17Ci0JYm9vbAkJZm91bmQ7Ci0KLQkvKgotCSAqIFNldCB1 cCBTTFJVIG1hbmFnZW1lbnQgb2YgdGhlIHBnX3NlcmlhbCBkYXRhLgotCSAqLwotCVNlcmlh bFNscnVDdGwtPlBhZ2VQcmVjZWRlcyA9IFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseTsK LQlTZXJpYWxTbHJ1Q3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gc2VyaWFsX2VycmRl dGFpbF9mb3JfaW9fZXJyb3I7Ci0JU2ltcGxlTHJ1SW5pdChTZXJpYWxTbHJ1Q3RsLCAic2Vy aWFsaXphYmxlIiwKLQkJCQkgIHNlcmlhbGl6YWJsZV9idWZmZXJzLCAwLCAicGdfc2VyaWFs IiwKLQkJCQkgIExXVFJBTkNIRV9TRVJJQUxfQlVGRkVSLCBMV1RSQU5DSEVfU0VSSUFMX1NM UlUsCi0JCQkJICBTWU5DX0hBTkRMRVJfTk9ORSwgZmFsc2UpOwotI2lmZGVmIFVTRV9BU1NF UlRfQ0hFQ0tJTkcKLQlTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHlVbml0VGVzdHMoKTsK LSNlbmRpZgotCVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU2VyaWFsU2xydUN0bCwgU0VS SUFMX0VOVFJJRVNQRVJQQUdFKTsKLQotCS8qCi0JICogQ3JlYXRlIG9yIGF0dGFjaCB0byB0 aGUgU2VyaWFsQ29udHJvbCBzdHJ1Y3R1cmUuCi0JICovCi0Jc2VyaWFsQ29udHJvbCA9IChT ZXJpYWxDb250cm9sKQotCQlTaG1lbUluaXRTdHJ1Y3QoIlNlcmlhbENvbnRyb2xEYXRhIiwg c2l6ZW9mKFNlcmlhbENvbnRyb2xEYXRhKSwgJmZvdW5kKTsKLQotCUFzc2VydChmb3VuZCA9 PSBJc1VuZGVyUG9zdG1hc3Rlcik7Ci0JaWYgKCFmb3VuZCkKLQl7Ci0JCS8qCi0JCSAqIFNl dCBjb250cm9sIGluZm9ybWF0aW9uIHRvIHJlZmxlY3QgZW1wdHkgU0xSVS4KLQkJICovCi0J CUxXTG9ja0FjcXVpcmUoU2VyaWFsQ29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JCXNl cmlhbENvbnRyb2wtPmhlYWRQYWdlID0gLTE7Ci0JCXNlcmlhbENvbnRyb2wtPmhlYWRYaWQg PSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQkJc2VyaWFsQ29udHJvbC0+dGFpbFhpZCA9IElu dmFsaWRUcmFuc2FjdGlvbklkOwotCQlMV0xvY2tSZWxlYXNlKFNlcmlhbENvbnRyb2xMb2Nr KTsKLQl9Ci19Ci0KIC8qCiAgKiBHVUMgY2hlY2tfaG9vayBmb3Igc2VyaWFsaXphYmxlX2J1 ZmZlcnMKICAqLwpAQCAtMTM1NSw3ICsxMzEyLDM1IEBAIFByZWRpY2F0ZUxvY2tTaG1lbUlu aXQodm9pZCkKIAkgKiBJbml0aWFsaXplIHRoZSBTTFJVIHN0b3JhZ2UgZm9yIG9sZCBjb21t aXR0ZWQgc2VyaWFsaXphYmxlCiAJICogdHJhbnNhY3Rpb25zLgogCSAqLwotCVNlcmlhbElu aXQoKTsKKwlTZXJpYWxTbHJ1Q3RsLT5QYWdlUHJlY2VkZXMgPSBTZXJpYWxQYWdlUHJlY2Vk ZXNMb2dpY2FsbHk7CisJU2VyaWFsU2xydUN0bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9 IHNlcmlhbF9lcnJkZXRhaWxfZm9yX2lvX2Vycm9yOworCVNpbXBsZUxydUluaXQoU2VyaWFs U2xydUN0bCwgInNlcmlhbGl6YWJsZSIsCisJCQkJICBzZXJpYWxpemFibGVfYnVmZmVycywg MCwgInBnX3NlcmlhbCIsCisJCQkJICBMV1RSQU5DSEVfU0VSSUFMX0JVRkZFUiwgTFdUUkFO Q0hFX1NFUklBTF9TTFJVLAorCQkJCSAgU1lOQ19IQU5ETEVSX05PTkUsIGZhbHNlKTsKKyNp ZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5 VW5pdFRlc3RzKCk7CisjZW5kaWYKKwlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNlcmlh bFNscnVDdGwsIFNFUklBTF9FTlRSSUVTUEVSUEFHRSk7CisKKwkvKgorCSAqIENyZWF0ZSBv ciBhdHRhY2ggdG8gdGhlIFNlcmlhbENvbnRyb2wgc3RydWN0dXJlLgorCSAqLworCXNlcmlh bENvbnRyb2wgPSAoU2VyaWFsQ29udHJvbCkKKwkJU2htZW1Jbml0U3RydWN0KCJTZXJpYWxD b250cm9sRGF0YSIsIHNpemVvZihTZXJpYWxDb250cm9sRGF0YSksICZmb3VuZCk7CisKKwlB c3NlcnQoZm91bmQgPT0gSXNVbmRlclBvc3RtYXN0ZXIpOworCWlmICghZm91bmQpCisJewor CQkvKgorCQkgKiBTZXQgY29udHJvbCBpbmZvcm1hdGlvbiB0byByZWZsZWN0IGVtcHR5IFNM UlUuCisJCSAqLworCQlMV0xvY2tBY3F1aXJlKFNlcmlhbENvbnRyb2xMb2NrLCBMV19FWENM VVNJVkUpOworCQlzZXJpYWxDb250cm9sLT5oZWFkUGFnZSA9IC0xOworCQlzZXJpYWxDb250 cm9sLT5oZWFkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJCXNlcmlhbENvbnRyb2wt PnRhaWxYaWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwkJTFdMb2NrUmVsZWFzZShTZXJp YWxDb250cm9sTG9jayk7CisJfQogfQogCiAvKgotLSAKMi40Ny4zCgo= --------------ilO2of90F4UvkC4IFxh0ppYz Content-Type: text/x-patch; charset=UTF-8; name="0009-refactor-predicate.c-Move-all-the-initialization-tog.patch" Content-Disposition: attachment; filename*0="0009-refactor-predicate.c-Move-all-the-initialization-tog.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBjN2IyYTY3YTk3NmNjYjRjZjNiM2NiMzhlMGUxNzFiNzhiNDBmMGY1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMjAgTWFyIDIwMjYgMjA6Mjc6NTAgKzAyMDAK U3ViamVjdDogW1BBVENIIDA5LzE0XSByZWZhY3RvciBwcmVkaWNhdGUuYzogTW92ZSBhbGwg dGhlIGluaXRpYWxpemF0aW9uCiB0b2dldGhlcgoKVGhlIFNobWVtSW5pdCBmdW5jdGlvbiBp cyB2ZXJ5IGNvbXBsaWNhdGVkIGN1cnJlbnRseS4gVGhlc2UKcmVmYWN0b3JpbmdzIG1vdmUg aXQgaW4gYSBkaXJlY3Rpb24gdGhhdCBpcyBtb3JlIG5hdHVyYWwgd2l0aCB0aGUgbmV3CnNo bWVtIGNhbGxiYWNrcy4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRl LmMgfCAxNjQgKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwg NzkgaW5zZXJ0aW9ucygrKSwgODUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9s bWdyL3ByZWRpY2F0ZS5jCmluZGV4IDEzYTZhNGI5M2E2Li5hZjAzMDcxYTcxZiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwpAQCAtMTE0NCwxOSArMTE0NCw2IEBA IFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkKIAkJCQkJCQkJCQkJSEFTSF9FTEVNIHwg SEFTSF9CTE9CUyB8CiAJCQkJCQkJCQkJCUhBU0hfUEFSVElUSU9OIHwgSEFTSF9GSVhFRF9T SVpFKTsKIAotCS8qCi0JICogUmVzZXJ2ZSBhIGR1bW15IGVudHJ5IGluIHRoZSBoYXNoIHRh YmxlOyB3ZSB1c2UgaXQgdG8gbWFrZSBzdXJlIHRoZXJlJ3MKLQkgKiBhbHdheXMgb25lIGVu dHJ5IGF2YWlsYWJsZSB3aGVuIHdlIG5lZWQgdG8gc3BsaXQgb3IgY29tYmluZSBhIHBhZ2Us Ci0JICogYmVjYXVzZSBydW5uaW5nIG91dCBvZiBzcGFjZSB0aGVyZSBjb3VsZCBtZWFuIGFi b3J0aW5nIGEKLQkgKiBub24tc2VyaWFsaXphYmxlIHRyYW5zYWN0aW9uLgotCSAqLwotCWlm ICghSXNVbmRlclBvc3RtYXN0ZXIpCi0JewotCQkodm9pZCkgaGFzaF9zZWFyY2goUHJlZGlj YXRlTG9ja1RhcmdldEhhc2gsICZTY3JhdGNoVGFyZ2V0VGFnLAotCQkJCQkJICAgSEFTSF9F TlRFUiwgJmZvdW5kKTsKLQkJQXNzZXJ0KCFmb3VuZCk7Ci0JfQotCiAJLyogUHJlLWNhbGN1 bGF0ZSB0aGUgaGFzaCBhbmQgcGFydGl0aW9uIGxvY2sgb2YgdGhlIHNjcmF0Y2ggZW50cnkg Ki8KIAlTY3JhdGNoVGFyZ2V0VGFnSGFzaCA9IFByZWRpY2F0ZUxvY2tUYXJnZXRUYWdIYXNo Q29kZSgmU2NyYXRjaFRhcmdldFRhZyk7CiAJU2NyYXRjaFBhcnRpdGlvbkxvY2sgPSBQcmVk aWNhdGVMb2NrSGFzaFBhcnRpdGlvbkxvY2soU2NyYXRjaFRhcmdldFRhZ0hhc2gpOwpAQCAt MTIwMCw0OSArMTE4Nyw2IEBAIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkKIAkJCQkJ CQkgICByZXF1ZXN0U2l6ZSwKIAkJCQkJCQkgICAmZm91bmQpOwogCUFzc2VydChmb3VuZCA9 PSBJc1VuZGVyUG9zdG1hc3Rlcik7Ci0JaWYgKCFmb3VuZCkKLQl7Ci0JCWludAkJCWk7Ci0K LQkJLyogY2xlYW4gZXZlcnl0aGluZywgYm90aCB0aGUgaGVhZGVyIGFuZCB0aGUgZWxlbWVu dCAqLwotCQltZW1zZXQoUHJlZFhhY3QsIDAsIHJlcXVlc3RTaXplKTsKLQotCQlkbGlzdF9p bml0KCZQcmVkWGFjdC0+YXZhaWxhYmxlTGlzdCk7Ci0JCWRsaXN0X2luaXQoJlByZWRYYWN0 LT5hY3RpdmVMaXN0KTsKLQkJUHJlZFhhY3QtPlN4YWN0R2xvYmFsWG1pbiA9IEludmFsaWRU cmFuc2FjdGlvbklkOwotCQlQcmVkWGFjdC0+U3hhY3RHbG9iYWxYbWluQ291bnQgPSAwOwot CQlQcmVkWGFjdC0+V3JpdGFibGVTeGFjdENvdW50ID0gMDsKLQkJUHJlZFhhY3QtPkxhc3RT eGFjdENvbW1pdFNlcU5vID0gRmlyc3ROb3JtYWxTZXJDb21taXRTZXFObyAtIDE7Ci0JCVBy ZWRYYWN0LT5DYW5QYXJ0aWFsQ2xlYXJUaHJvdWdoID0gMDsKLQkJUHJlZFhhY3QtPkhhdmVQ YXJ0aWFsQ2xlYXJlZFRocm91Z2ggPSAwOwotCQlQcmVkWGFjdC0+ZWxlbWVudAotCQkJPSAo U0VSSUFMSVpBQkxFWEFDVCAqKSAoKGNoYXIgKikgUHJlZFhhY3QgKyBQcmVkWGFjdExpc3RE YXRhU2l6ZSk7Ci0JCS8qIEFkZCBhbGwgZWxlbWVudHMgdG8gYXZhaWxhYmxlIGxpc3QsIGNs ZWFuLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbWF4X3NlcmlhbGl6YWJsZV94YWN0czsgaSsr KQotCQl7Ci0JCQlMV0xvY2tJbml0aWFsaXplKCZQcmVkWGFjdC0+ZWxlbWVudFtpXS5wZXJY YWN0UHJlZGljYXRlTGlzdExvY2ssCi0JCQkJCQkJIExXVFJBTkNIRV9QRVJfWEFDVF9QUkVE SUNBVEVfTElTVCk7Ci0JCQlkbGlzdF9wdXNoX3RhaWwoJlByZWRYYWN0LT5hdmFpbGFibGVM aXN0LCAmUHJlZFhhY3QtPmVsZW1lbnRbaV0ueGFjdExpbmspOwotCQl9Ci0JCVByZWRYYWN0 LT5PbGRDb21taXR0ZWRTeGFjdCA9IENyZWF0ZVByZWRYYWN0KCk7Ci0JCVNldEludmFsaWRW aXJ0dWFsVHJhbnNhY3Rpb25JZChQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPnZ4aWQp OwotCQlQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPnByZXBhcmVTZXFObyA9IDA7Ci0J CVByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+Y29tbWl0U2VxTm8gPSAwOwotCQlQcmVk WGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPlNlcU5vLmxhc3RDb21taXRCZWZvcmVTbmFwc2hv dCA9IDA7Ci0JCWRsaXN0X2luaXQoJlByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+b3V0 Q29uZmxpY3RzKTsKLQkJZGxpc3RfaW5pdCgmUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0 LT5pbkNvbmZsaWN0cyk7Ci0JCWRsaXN0X2luaXQoJlByZWRYYWN0LT5PbGRDb21taXR0ZWRT eGFjdC0+cHJlZGljYXRlTG9ja3MpOwotCQlkbGlzdF9ub2RlX2luaXQoJlByZWRYYWN0LT5P bGRDb21taXR0ZWRTeGFjdC0+ZmluaXNoZWRMaW5rKTsKLQkJZGxpc3RfaW5pdCgmUHJlZFhh Y3QtPk9sZENvbW1pdHRlZFN4YWN0LT5wb3NzaWJsZVVuc2FmZUNvbmZsaWN0cyk7Ci0JCVBy ZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+dG9wWGlkID0gSW52YWxpZFRyYW5zYWN0aW9u SWQ7Ci0JCVByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+ZmluaXNoZWRCZWZvcmUgPSBJ bnZhbGlkVHJhbnNhY3Rpb25JZDsKLQkJUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0LT54 bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCVByZWRYYWN0LT5PbGRDb21taXR0ZWRT eGFjdC0+ZmxhZ3MgPSBTWEFDVF9GTEFHX0NPTU1JVFRFRDsKLQkJUHJlZFhhY3QtPk9sZENv bW1pdHRlZFN4YWN0LT5waWQgPSAwOwotCQlQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3Qt PnBncHJvY25vID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKLQl9Ci0JLyogVGhpcyBuZXZlciBj aGFuZ2VzLCBzbyBsZXQncyBrZWVwIGEgbG9jYWwgY29weS4gKi8KLQlPbGRDb21taXR0ZWRT eGFjdCA9IFByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdDsKIAogCS8qCiAJICogQWxsb2Nh dGUgaGFzaCB0YWJsZSBmb3IgU0VSSUFMSVpBQkxFWElEIHN0cnVjdHMuICBUaGlzIHN0b3Jl cyBwZXIteGlkCkBAIC0xMjc4LDIzICsxMjIyLDYgQEAgUHJlZGljYXRlTG9ja1NobWVtSW5p dCh2b2lkKQogCQkJCQkJCQkJIHJlcXVlc3RTaXplLAogCQkJCQkJCQkJICZmb3VuZCk7CiAJ QXNzZXJ0KGZvdW5kID09IElzVW5kZXJQb3N0bWFzdGVyKTsKLQlpZiAoIWZvdW5kKQotCXsK LQkJaW50CQkJaTsKLQotCQkvKiBjbGVhbiBldmVyeXRoaW5nLCBpbmNsdWRpbmcgdGhlIGVs ZW1lbnRzICovCi0JCW1lbXNldChSV0NvbmZsaWN0UG9vbCwgMCwgcmVxdWVzdFNpemUpOwot Ci0JCWRsaXN0X2luaXQoJlJXQ29uZmxpY3RQb29sLT5hdmFpbGFibGVMaXN0KTsKLQkJUldD b25mbGljdFBvb2wtPmVsZW1lbnQgPSAoUldDb25mbGljdCkgKChjaGFyICopIFJXQ29uZmxp Y3RQb29sICsKLQkJCQkJCQkJCQkJCVJXQ29uZmxpY3RQb29sSGVhZGVyRGF0YVNpemUpOwot CQkvKiBBZGQgYWxsIGVsZW1lbnRzIHRvIGF2YWlsYWJsZSBsaXN0LCBjbGVhbi4gKi8KLQkJ Zm9yIChpID0gMDsgaSA8IG1heF9yd19jb25mbGljdHM7IGkrKykKLQkJewotCQkJZGxpc3Rf cHVzaF90YWlsKCZSV0NvbmZsaWN0UG9vbC0+YXZhaWxhYmxlTGlzdCwKLQkJCQkJCQkmUldD b25mbGljdFBvb2wtPmVsZW1lbnRbaV0ub3V0TGluayk7Ci0JCX0KLQl9CiAKIAkvKgogCSAq IENyZWF0ZSBvciBhdHRhY2ggdG8gdGhlIGhlYWRlciBmb3IgdGhlIGxpc3Qgb2YgZmluaXNo ZWQgc2VyaWFsaXphYmxlCkBAIC0xMzA1LDggKzEyMzIsNiBAQCBQcmVkaWNhdGVMb2NrU2ht ZW1Jbml0KHZvaWQpCiAJCQkJCQlzaXplb2YoZGxpc3RfaGVhZCksCiAJCQkJCQkmZm91bmQp OwogCUFzc2VydChmb3VuZCA9PSBJc1VuZGVyUG9zdG1hc3Rlcik7Ci0JaWYgKCFmb3VuZCkK LQkJZGxpc3RfaW5pdChGaW5pc2hlZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9ucyk7CiAKIAkv KgogCSAqIEluaXRpYWxpemUgdGhlIFNMUlUgc3RvcmFnZSBmb3Igb2xkIGNvbW1pdHRlZCBz ZXJpYWxpemFibGUKQEAgLTEzMjgsMTkgKzEyNTMsODggQEAgUHJlZGljYXRlTG9ja1NobWVt SW5pdCh2b2lkKQogCSAqLwogCXNlcmlhbENvbnRyb2wgPSAoU2VyaWFsQ29udHJvbCkKIAkJ U2htZW1Jbml0U3RydWN0KCJTZXJpYWxDb250cm9sRGF0YSIsIHNpemVvZihTZXJpYWxDb250 cm9sRGF0YSksICZmb3VuZCk7Ci0KIAlBc3NlcnQoZm91bmQgPT0gSXNVbmRlclBvc3RtYXN0 ZXIpOwotCWlmICghZm91bmQpCisKKwkvKgorCSAqIElmIHdlIGp1c3QgYXR0YWNoZWQgdG8g ZXhpc3Rpbmcgc2hhcmVkIG1lbW9yeSAoRVhFQ19CQUNLRU5EKSwgd2UncmUgYWxsCisJICog ZG9uZS4gIE90aGVyd2lzZSwgZHVyaW5nIHBvc3RtYXN0ZXIgc3RhcnR1cCBwcm9jZWVkIHRv IGluaXRpYWxpemUgdGhlCisJICogc2hhcmVkIG1lbW9yeS4KKwkgKi8KKwlpZiAoSXNVbmRl clBvc3RtYXN0ZXIpCiAJewotCQkvKgotCQkgKiBTZXQgY29udHJvbCBpbmZvcm1hdGlvbiB0 byByZWZsZWN0IGVtcHR5IFNMUlUuCi0JCSAqLwotCQlMV0xvY2tBY3F1aXJlKFNlcmlhbENv bnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwotCQlzZXJpYWxDb250cm9sLT5oZWFkUGFnZSA9 IC0xOwotCQlzZXJpYWxDb250cm9sLT5oZWFkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7 Ci0JCXNlcmlhbENvbnRyb2wtPnRhaWxYaWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQkJ TFdMb2NrUmVsZWFzZShTZXJpYWxDb250cm9sTG9jayk7CisJCS8qIFRoaXMgbmV2ZXIgY2hh bmdlcywgc28gbGV0J3Mga2VlcCBhIGxvY2FsIGNvcHkuICovCisJCU9sZENvbW1pdHRlZFN4 YWN0ID0gUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0OworCQlyZXR1cm47CisJfQorCisJ LyoKKwkgKiBSZXNlcnZlIGEgZHVtbXkgZW50cnkgaW4gdGhlIGhhc2ggdGFibGU7IHdlIHVz ZSBpdCB0byBtYWtlIHN1cmUgdGhlcmUncworCSAqIGFsd2F5cyBvbmUgZW50cnkgYXZhaWxh YmxlIHdoZW4gd2UgbmVlZCB0byBzcGxpdCBvciBjb21iaW5lIGEgcGFnZSwKKwkgKiBiZWNh dXNlIHJ1bm5pbmcgb3V0IG9mIHNwYWNlIHRoZXJlIGNvdWxkIG1lYW4gYWJvcnRpbmcgYQor CSAqIG5vbi1zZXJpYWxpemFibGUgdHJhbnNhY3Rpb24uCisJICovCisJKHZvaWQpIGhhc2hf c2VhcmNoKFByZWRpY2F0ZUxvY2tUYXJnZXRIYXNoLCAmU2NyYXRjaFRhcmdldFRhZywKKwkJ CQkJICAgSEFTSF9FTlRFUiwgJmZvdW5kKTsKKwlBc3NlcnQoIWZvdW5kKTsKKworCS8qIElu aXRpYWxpemUgUHJlZFhhY3QgbGlzdCAqLworCWRsaXN0X2luaXQoJlByZWRYYWN0LT5hdmFp bGFibGVMaXN0KTsKKwlkbGlzdF9pbml0KCZQcmVkWGFjdC0+YWN0aXZlTGlzdCk7CisJUHJl ZFhhY3QtPlN4YWN0R2xvYmFsWG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVByZWRY YWN0LT5TeGFjdEdsb2JhbFhtaW5Db3VudCA9IDA7CisJUHJlZFhhY3QtPldyaXRhYmxlU3hh Y3RDb3VudCA9IDA7CisJUHJlZFhhY3QtPkxhc3RTeGFjdENvbW1pdFNlcU5vID0gRmlyc3RO b3JtYWxTZXJDb21taXRTZXFObyAtIDE7CisJUHJlZFhhY3QtPkNhblBhcnRpYWxDbGVhclRo cm91Z2ggPSAwOworCVByZWRYYWN0LT5IYXZlUGFydGlhbENsZWFyZWRUaHJvdWdoID0gMDsK KwlQcmVkWGFjdC0+ZWxlbWVudAorCQk9IChTRVJJQUxJWkFCTEVYQUNUICopICgoY2hhciAq KSBQcmVkWGFjdCArIFByZWRYYWN0TGlzdERhdGFTaXplKTsKKwkvKiBBZGQgYWxsIGVsZW1l bnRzIHRvIGF2YWlsYWJsZSBsaXN0LCBjbGVhbi4gKi8KKwlmb3IgKGludCBpID0gMDsgaSA8 IG1heF9zZXJpYWxpemFibGVfeGFjdHM7IGkrKykKKwl7CisJCUxXTG9ja0luaXRpYWxpemUo JlByZWRYYWN0LT5lbGVtZW50W2ldLnBlclhhY3RQcmVkaWNhdGVMaXN0TG9jaywKKwkJCQkJ CSBMV1RSQU5DSEVfUEVSX1hBQ1RfUFJFRElDQVRFX0xJU1QpOworCQlkbGlzdF9wdXNoX3Rh aWwoJlByZWRYYWN0LT5hdmFpbGFibGVMaXN0LCAmUHJlZFhhY3QtPmVsZW1lbnRbaV0ueGFj dExpbmspOwogCX0KKwlQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QgPSBDcmVhdGVQcmVk WGFjdCgpOworCVNldEludmFsaWRWaXJ0dWFsVHJhbnNhY3Rpb25JZChQcmVkWGFjdC0+T2xk Q29tbWl0dGVkU3hhY3QtPnZ4aWQpOworCVByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+ cHJlcGFyZVNlcU5vID0gMDsKKwlQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPmNvbW1p dFNlcU5vID0gMDsKKwlQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPlNlcU5vLmxhc3RD b21taXRCZWZvcmVTbmFwc2hvdCA9IDA7CisJZGxpc3RfaW5pdCgmUHJlZFhhY3QtPk9sZENv bW1pdHRlZFN4YWN0LT5vdXRDb25mbGljdHMpOworCWRsaXN0X2luaXQoJlByZWRYYWN0LT5P bGRDb21taXR0ZWRTeGFjdC0+aW5Db25mbGljdHMpOworCWRsaXN0X2luaXQoJlByZWRYYWN0 LT5PbGRDb21taXR0ZWRTeGFjdC0+cHJlZGljYXRlTG9ja3MpOworCWRsaXN0X25vZGVfaW5p dCgmUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0LT5maW5pc2hlZExpbmspOworCWRsaXN0 X2luaXQoJlByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+cG9zc2libGVVbnNhZmVDb25m bGljdHMpOworCVByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+dG9wWGlkID0gSW52YWxp ZFRyYW5zYWN0aW9uSWQ7CisJUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0LT5maW5pc2hl ZEJlZm9yZSA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVByZWRYYWN0LT5PbGRDb21taXR0 ZWRTeGFjdC0+eG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVByZWRYYWN0LT5PbGRD b21taXR0ZWRTeGFjdC0+ZmxhZ3MgPSBTWEFDVF9GTEFHX0NPTU1JVFRFRDsKKwlQcmVkWGFj dC0+T2xkQ29tbWl0dGVkU3hhY3QtPnBpZCA9IDA7CisJUHJlZFhhY3QtPk9sZENvbW1pdHRl ZFN4YWN0LT5wZ3Byb2NubyA9IElOVkFMSURfUFJPQ19OVU1CRVI7CisKKwkvKiBUaGlzIG5l dmVyIGNoYW5nZXMsIHNvIGxldCdzIGtlZXAgYSBsb2NhbCBjb3B5LiAqLworCU9sZENvbW1p dHRlZFN4YWN0ID0gUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0OworCisJLyogSW5pdGlh bGl6ZSB0aGUgcnctY29uZmxpY3QgcG9vbCAqLworCWRsaXN0X2luaXQoJlJXQ29uZmxpY3RQ b29sLT5hdmFpbGFibGVMaXN0KTsKKwlSV0NvbmZsaWN0UG9vbC0+ZWxlbWVudCA9IChSV0Nv bmZsaWN0KSAoKGNoYXIgKikgUldDb25mbGljdFBvb2wgKworCQkJCQkJCQkJCQlSV0NvbmZs aWN0UG9vbEhlYWRlckRhdGFTaXplKTsKKwkvKiBBZGQgYWxsIGVsZW1lbnRzIHRvIGF2YWls YWJsZSBsaXN0LCBjbGVhbi4gKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IG1heF9yd19jb25m bGljdHM7IGkrKykKKwl7CisJCWRsaXN0X3B1c2hfdGFpbCgmUldDb25mbGljdFBvb2wtPmF2 YWlsYWJsZUxpc3QsCisJCQkJCQkmUldDb25mbGljdFBvb2wtPmVsZW1lbnRbaV0ub3V0TGlu ayk7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgbGlzdCBvZiBmaW5pc2hlZCBzZXJpYWxp emFibGUgdHJhbnNhY3Rpb25zICovCisJZGxpc3RfaW5pdChGaW5pc2hlZFNlcmlhbGl6YWJs ZVRyYW5zYWN0aW9ucyk7CisKKwkvKiBJbml0aWFsaXplIFNlcmlhbENvbnRyb2wgdG8gcmVm bGVjdCBlbXB0eSBTTFJVLiAqLworCUxXTG9ja0FjcXVpcmUoU2VyaWFsQ29udHJvbExvY2ss IExXX0VYQ0xVU0lWRSk7CisJc2VyaWFsQ29udHJvbC0+aGVhZFBhZ2UgPSAtMTsKKwlzZXJp YWxDb250cm9sLT5oZWFkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJc2VyaWFsQ29u dHJvbC0+dGFpbFhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCUxXTG9ja1JlbGVhc2Uo U2VyaWFsQ29udHJvbExvY2spOwogfQogCiAvKgotLSAKMi40Ny4zCgo= --------------ilO2of90F4UvkC4IFxh0ppYz Content-Type: text/x-patch; charset=UTF-8; name="0010-Convert-SLRUs-to-use-the-new-interface.patch" Content-Disposition: attachment; filename="0010-Convert-SLRUs-to-use-the-new-interface.patch" Content-Transfer-Encoding: base64 RnJvbSBmN2U5MjAzZDM2NDU0M2IxNTFlZDVhNjlkOGQ4NDc3NmUxOGVmZGMxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMiBBcHIgMjAyNiAwMDozMjo0NSArMDMwMApT dWJqZWN0OiBbUEFUQ0ggMTAvMTRdIENvbnZlcnQgU0xSVXMgdG8gdXNlIHRoZSBuZXcgaW50 ZXJmYWNlCgpJIHJlcGxhY2VkIHRoZSBvbGQgU2ltcGxlTHJ1SW5pdCgpIGZ1bmN0aW9uIHdp dGhvdXQgYSBiYWNrd2FyZHMKY29tcGF0aWJpbGl0eSB3cmFwcGVyLCBiZWNhdXNlIGZldyBl eHRlbnNpb25zIGRlZmluZSB0aGVpciBvd24gU0xSVXMuCi0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vY2xvZy5jICAgICAgICB8ICA1NSArKy0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9jb21taXRfdHMuYyAgIHwgIDkyICsrKy0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgICB8IDE0MCArKysrKy0tLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3NscnUuYyAgICAgICAgfCAzNjQgKysrKysrKysrKysrLS0tLS0t LS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMgICAgfCAgNTcg KystLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyAgICAgICAgICAgICB8IDExNyAr KysrLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jICAgICAgICAgICB8ICAx NiAtCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jICAgICAgICAgIHwgICA3ICsK IHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYyAgICAgfCAyODggKysrKysr KysrLS0tLS0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfc2xydS5j IHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9jbG9nLmggICAgICAgICAgICAgICAgfCAg IDIgLQogc3JjL2luY2x1ZGUvYWNjZXNzL2NvbW1pdF90cy5oICAgICAgICAgICB8ICAgMiAt CiBzcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggICAgICAgICAgIHwgICAyIC0KIHNy Yy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmggICAgICAgICAgICAgICAgfCAxMDggKysrKy0tLQog c3JjL2luY2x1ZGUvYWNjZXNzL3N1YnRyYW5zLmggICAgICAgICAgICB8ICAgMiAtCiBzcmMv aW5jbHVkZS9jb21tYW5kcy9hc3luYy5oICAgICAgICAgICAgIHwgICAzIC0KIHNyYy9pbmNs dWRlL3N0b3JhZ2UvcHJlZGljYXRlLmggICAgICAgICAgfCAgIDUgLQogc3JjL2luY2x1ZGUv c3RvcmFnZS9zaG1lbS5oICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9zdG9y YWdlL3N1YnN5c3RlbWxpc3QuaCAgICAgIHwgIDEwICsKIHNyYy90ZXN0L21vZHVsZXMvdGVz dF9zbHJ1L3Rlc3Rfc2xydS5jICAgfCAxMTAgKysrLS0tLQogc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgICAgICAgICB8ICAgNCArLQogMjEgZmlsZXMgY2hhbmdlZCwgNzE4 IGluc2VydGlvbnMoKyksIDY2OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9jbG9nLmMKaW5kZXggYzY1NGUwOTI5YjMuLjg3ZjdmNTcwN2RlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vY2xvZy5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAicGdfdHJh Y2UuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIK KyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N5 bmMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWNfaG9va3MuaCIKICNpbmNsdWRlICJ1dGlscy93 YWl0X2V2ZW50LmgiCkBAIC0xMDYsMTMgKzEwNywyMSBAQCBUcmFuc2FjdGlvbklkVG9QYWdl KFRyYW5zYWN0aW9uSWQgeGlkKQogLyoKICAqIExpbmsgdG8gc2hhcmVkLW1lbW9yeSBkYXRh IHN0cnVjdHVyZXMgZm9yIENMT0cgY29udHJvbAogICovCi1zdGF0aWMgU2xydUN0bERhdGEg WGFjdEN0bERhdGE7CitzdGF0aWMgdm9pZCBDTE9HU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7 CitzdGF0aWMgdm9pZCBDTE9HU2htZW1Jbml0KHZvaWQgKmFyZyk7CitzdGF0aWMgYm9vbCBD TE9HUGFnZVByZWNlZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7CitzdGF0aWMgaW50 CWNsb2dfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihjb25zdCB2b2lkICpvcGFxdWVfZGF0YSk7 CiAKLSNkZWZpbmUgWGFjdEN0bCAoJlhhY3RDdGxEYXRhKQorY29uc3QgU2htZW1DYWxsYmFj a3MgQ0xPR1NobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gQ0xPR1NobWVtUmVx dWVzdCwKKwkuaW5pdF9mbiA9IENMT0dTaG1lbUluaXQsCit9OworCitzdGF0aWMgU2xydURl c2MgWGFjdFNscnVEZXNjOworCisjZGVmaW5lIFhhY3RDdGwgKCZYYWN0U2xydURlc2MpCiAK IAotc3RhdGljIGJvb2wgQ0xPR1BhZ2VQcmVjZWRlcyhpbnQ2NCBwYWdlMSwgaW50NjQgcGFn ZTIpOwotc3RhdGljIGludAljbG9nX2VycmRldGFpbF9mb3JfaW9fZXJyb3IoY29uc3Qgdm9p ZCAqb3BhcXVlX2RhdGEpOwogc3RhdGljIHZvaWQgV3JpdGVUcnVuY2F0ZVhsb2dSZWMoaW50 NjQgcGFnZW5vLCBUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3QsCiAJCQkJCQkJCSBPaWQgb2xk ZXN0WGFjdERiKTsKIHN0YXRpYyB2b2lkIFRyYW5zYWN0aW9uSWRTZXRQYWdlU3RhdHVzKFRy YW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCkBAIC03NzUsMTYgKzc4NCwxMCBAQCBD TE9HU2htZW1CdWZmZXJzKHZvaWQpCiB9CiAKIC8qCi0gKiBJbml0aWFsaXphdGlvbiBvZiBz aGFyZWQgbWVtb3J5IGZvciBDTE9HCisgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IGZvciBD TE9HCiAgKi8KLVNpemUKLUNMT0dTaG1lbVNpemUodm9pZCkKLXsKLQlyZXR1cm4gU2ltcGxl THJ1U2htZW1TaXplKENMT0dTaG1lbUJ1ZmZlcnMoKSwgQ0xPR19MU05TX1BFUl9QQUdFKTsK LX0KLQotdm9pZAotQ0xPR1NobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK0NMT0dTaG1l bVJlcXVlc3Qodm9pZCAqYXJnKQogewogCS8qIElmIGF1dG8tdHVuaW5nIGlzIHJlcXVlc3Rl ZCwgbm93IGlzIHRoZSB0aW1lIHRvIGRvIGl0ICovCiAJaWYgKHRyYW5zYWN0aW9uX2J1ZmZl cnMgPT0gMCkKQEAgLTgwNiwxMiArODA5LDI2IEBAIENMT0dTaG1lbUluaXQodm9pZCkKIAkJ CQkJCQlQR0NfU19PVkVSUklERSk7CiAJfQogCUFzc2VydCh0cmFuc2FjdGlvbl9idWZmZXJz ICE9IDApOworCVNpbXBsZUxydVJlcXVlc3QoJlhhY3RTbHJ1RGVzYywKKwkJLm5hbWUgPSAi dHJhbnNhY3Rpb24iLAorCQkuRGlyID0gInBnX3hhY3QiLAorCQkubG9uZ19zZWdtZW50X25h bWVzID0gZmFsc2UsCisKKwkJLm5zbG90cyA9IENMT0dTaG1lbUJ1ZmZlcnMoKSwKKwkJLm5s c25zID0gQ0xPR19MU05TX1BFUl9QQUdFLAorCisJCS5zeW5jX2hhbmRsZXIgPSBTWU5DX0hB TkRMRVJfQ0xPRywKKwkJLlBhZ2VQcmVjZWRlcyA9IENMT0dQYWdlUHJlY2VkZXMsCisJCS5l cnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gY2xvZ19lcnJkZXRhaWxfZm9yX2lvX2Vycm9yLAog Ci0JWGFjdEN0bC0+UGFnZVByZWNlZGVzID0gQ0xPR1BhZ2VQcmVjZWRlczsKLQlYYWN0Q3Rs LT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gY2xvZ19lcnJkZXRhaWxfZm9yX2lvX2Vycm9y OwotCVNpbXBsZUxydUluaXQoWGFjdEN0bCwgInRyYW5zYWN0aW9uIiwgQ0xPR1NobWVtQnVm ZmVycygpLCBDTE9HX0xTTlNfUEVSX1BBR0UsCi0JCQkJICAicGdfeGFjdCIsIExXVFJBTkNI RV9YQUNUX0JVRkZFUiwKLQkJCQkgIExXVFJBTkNIRV9YQUNUX1NMUlUsIFNZTkNfSEFORExF Ul9DTE9HLCBmYWxzZSk7CisJCS5idWZmZXJfdHJhbmNoZV9pZCA9IExXVFJBTkNIRV9YQUNU X0JVRkZFUiwKKwkJLmJhbmtfdHJhbmNoZV9pZCA9IExXVFJBTkNIRV9YQUNUX1NMUlUsCisJ CSk7Cit9CisKK3N0YXRpYyB2b2lkCitDTE9HU2htZW1Jbml0KHZvaWQgKmFyZykKK3sKIAlT bHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFhhY3RDdGwsIENMT0dfWEFDVFNfUEVSX1BBR0Up OwogfQogCkBAIC04MjcsNyArODQ0LDcgQEAgY2hlY2tfdHJhbnNhY3Rpb25fYnVmZmVycyhp bnQgKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQogLyoKICAqIFRo aXMgZnVuYyBtdXN0IGJlIGNhbGxlZCBPTkNFIG9uIHN5c3RlbSBpbnN0YWxsLiAgSXQgY3Jl YXRlcwogICogdGhlIGluaXRpYWwgQ0xPRyBzZWdtZW50LiAgKFRoZSBDTE9HIGRpcmVjdG9y eSBpcyBhc3N1bWVkIHRvCi0gKiBoYXZlIGJlZW4gY3JlYXRlZCBieSBpbml0ZGIsIGFuZCBD TE9HU2htZW1Jbml0IG11c3QgaGF2ZSBiZWVuCisgKiBoYXZlIGJlZW4gY3JlYXRlZCBieSBp bml0ZGIsIGFuZCBDTE9HU2htZW1Jbml0IG11c3QgaGF2ZSBiZWVuIFhYWAogICogY2FsbGVk IGFscmVhZHkuKQogICovCiB2b2lkCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS9jb21taXRfdHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1p dF90cy5jCmluZGV4IDM2MjE5ZGQxM2NjLi4yMzZkOGZiNGJhYSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl ICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9zaG1lbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUg InV0aWxzL2ZtZ3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy9ndWNfaG9va3MuaCIKICNp bmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKQEAgLTgwLDkgKzgxLDE5IEBAIFRyYW5zYWN0 aW9uSWRUb0NUc1BhZ2UoVHJhbnNhY3Rpb25JZCB4aWQpCiAvKgogICogTGluayB0byBzaGFy ZWQtbWVtb3J5IGRhdGEgc3RydWN0dXJlcyBmb3IgQ29tbWl0VHMgY29udHJvbAogICovCi1z dGF0aWMgU2xydUN0bERhdGEgQ29tbWl0VHNDdGxEYXRhOworc3RhdGljIHZvaWQgQ29tbWl0 VHNTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIENvbW1pdFRzU2htZW1J bml0KHZvaWQgKmFyZyk7CitzdGF0aWMgYm9vbCBDb21taXRUc1BhZ2VQcmVjZWRlcyhpbnQ2 NCBwYWdlMSwgaW50NjQgcGFnZTIpOworc3RhdGljIGludAljb21taXRfdHNfZXJyZGV0YWls X2Zvcl9pb19lcnJvcihjb25zdCB2b2lkICpvcGFxdWVfZGF0YSk7CisKK2NvbnN0IFNobWVt Q2FsbGJhY2tzIENvbW1pdFRzU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBD b21taXRUc1NobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IENvbW1pdFRzU2htZW1Jbml0LAor fTsKKworc3RhdGljIFNscnVEZXNjIENvbW1pdFRzU2xydURlc2M7CiAKLSNkZWZpbmUgQ29t bWl0VHNDdGwgKCZDb21taXRUc0N0bERhdGEpCisjZGVmaW5lIENvbW1pdFRzQ3RsICgmQ29t bWl0VHNTbHJ1RGVzYykKIAogLyoKICAqIFdlIGtlZXAgYSBjYWNoZSBvZiB0aGUgbGFzdCB2 YWx1ZSBzZXQgaW4gc2hhcmVkIG1lbW9yeS4KQEAgLTEwNCw2ICsxMTUsOSBAQCB0eXBlZGVm IHN0cnVjdCBDb21taXRUaW1lc3RhbXBTaGFyZWQKIAogc3RhdGljIENvbW1pdFRpbWVzdGFt cFNoYXJlZCAqY29tbWl0VHNTaGFyZWQ7CiAKK3N0YXRpYyB2b2lkIENvbW1pdFRzU2htZW1J bml0KHZvaWQgKmFyZyk7CisKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2MgQ29tbWl0VHNTaG1l bURlc2M7CiAKIC8qIEdVQyB2YXJpYWJsZSAqLwogYm9vbAkJdHJhY2tfY29tbWl0X3RpbWVz dGFtcDsKQEAgLTExNCw4ICsxMjgsNiBAQCBzdGF0aWMgdm9pZCBTZXRYaWRDb21taXRUc0lu UGFnZShUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAogc3RhdGljIHZvaWQgVHJh bnNhY3Rpb25JZFNldENvbW1pdFRzKFRyYW5zYWN0aW9uSWQgeGlkLCBUaW1lc3RhbXBUeiB0 cywKIAkJCQkJCQkJCSBSZXBsT3JpZ2luSWQgbm9kZWlkLCBpbnQgc2xvdG5vKTsKIHN0YXRp YyB2b2lkIGVycm9yX2NvbW1pdF90c19kaXNhYmxlZCh2b2lkKTsKLXN0YXRpYyBib29sIENv bW1pdFRzUGFnZVByZWNlZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7Ci1zdGF0aWMg aW50CWNvbW1pdF90c19lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKGNvbnN0IHZvaWQgKm9wYXF1 ZV9kYXRhKTsKIHN0YXRpYyB2b2lkIEFjdGl2YXRlQ29tbWl0VHModm9pZCk7CiBzdGF0aWMg dm9pZCBEZWFjdGl2YXRlQ29tbWl0VHModm9pZCk7CiBzdGF0aWMgdm9pZCBXcml0ZVRydW5j YXRlWGxvZ1JlYyhpbnQ2NCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQgb2xkZXN0WGlkKTsKQEAg LTUxMiwyNCArNTI0LDEyIEBAIENvbW1pdFRzU2htZW1CdWZmZXJzKHZvaWQpCiB9CiAKIC8q Ci0gKiBTaGFyZWQgbWVtb3J5IHNpemluZyBmb3IgQ29tbWl0VHMKKyAqIFJlZ2lzdGVyIENv bW1pdFRzIHNoYXJlZCBtZW1vcnkgbmVlZHMgYXQgc3lzdGVtIHN0YXJ0dXAgKHBvc3RtYXN0 ZXIgc3RhcnQKKyAqIG9yIHN0YW5kYWxvbmUgYmFja2VuZCkKICAqLwotU2l6ZQotQ29tbWl0 VHNTaG1lbVNpemUodm9pZCkKLXsKLQlyZXR1cm4gU2ltcGxlTHJ1U2htZW1TaXplKENvbW1p dFRzU2htZW1CdWZmZXJzKCksIDApICsKLQkJc2l6ZW9mKENvbW1pdFRpbWVzdGFtcFNoYXJl ZCk7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIENvbW1pdFRzIGF0IHN5c3RlbSBzdGFydHVw IChwb3N0bWFzdGVyIHN0YXJ0IG9yIHN0YW5kYWxvbmUKLSAqIGJhY2tlbmQpCi0gKi8KLXZv aWQKLUNvbW1pdFRzU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorQ29tbWl0VHNTaG1l bVJlcXVlc3Qodm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOwotCiAJLyogSWYgYXV0by10 dW5pbmcgaXMgcmVxdWVzdGVkLCBub3cgaXMgdGhlIHRpbWUgdG8gZG8gaXQgKi8KIAlpZiAo Y29tbWl0X3RpbWVzdGFtcF9idWZmZXJzID09IDApCiAJewpAQCAtNTUwLDMxICs1NTAsMzcg QEAgQ29tbWl0VHNTaG1lbUluaXQodm9pZCkKIAkJCQkJCQlQR0NfU19PVkVSUklERSk7CiAJ fQogCUFzc2VydChjb21taXRfdGltZXN0YW1wX2J1ZmZlcnMgIT0gMCk7CisJU2ltcGxlTHJ1 UmVxdWVzdCgmQ29tbWl0VHNTbHJ1RGVzYywKKwkJLm5hbWUgPSAiY29tbWl0X3RpbWVzdGFt cCIsCisJCS5EaXIgPSAicGdfY29tbWl0X3RzIiwKKwkJLmxvbmdfc2VnbWVudF9uYW1lcyA9 IGZhbHNlLAorCisJCS5uc2xvdHMgPSBDb21taXRUc1NobWVtQnVmZmVycygpLAorCisJCS5Q YWdlUHJlY2VkZXMgPSBDb21taXRUc1BhZ2VQcmVjZWRlcywKKwkJLmVycmRldGFpbF9mb3Jf aW9fZXJyb3IgPSBjb21taXRfdHNfZXJyZGV0YWlsX2Zvcl9pb19lcnJvciwKKworCQkuc3lu Y19oYW5kbGVyID0gU1lOQ19IQU5ETEVSX0NPTU1JVF9UUywKKwkJLmJ1ZmZlcl90cmFuY2hl X2lkID0gTFdUUkFOQ0hFX0NPTU1JVFRTX0JVRkZFUiwKKwkJLmJhbmtfdHJhbmNoZV9pZCA9 IExXVFJBTkNIRV9DT01NSVRUU19TTFJVLAorCQkpOworCisJU2htZW1SZXF1ZXN0U3RydWN0 KCZDb21taXRUc1NobWVtRGVzYywKKwkJLm5hbWUgPSAiQ29tbWl0VHMgc2hhcmVkIiwKKwkJ LnNpemUgPSBzaXplb2YoQ29tbWl0VGltZXN0YW1wU2hhcmVkKSwKKwkJLnB0ciA9ICh2b2lk ICoqKSAmY29tbWl0VHNTaGFyZWQsCisJCSk7Cit9CiAKLQlDb21taXRUc0N0bC0+UGFnZVBy ZWNlZGVzID0gQ29tbWl0VHNQYWdlUHJlY2VkZXM7Ci0JQ29tbWl0VHNDdGwtPmVycmRldGFp bF9mb3JfaW9fZXJyb3IgPSBjb21taXRfdHNfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcjsKLQlT aW1wbGVMcnVJbml0KENvbW1pdFRzQ3RsLCAiY29tbWl0X3RpbWVzdGFtcCIsIENvbW1pdFRz U2htZW1CdWZmZXJzKCksIDAsCi0JCQkJICAicGdfY29tbWl0X3RzIiwgTFdUUkFOQ0hFX0NP TU1JVFRTX0JVRkZFUiwKLQkJCQkgIExXVFJBTkNIRV9DT01NSVRUU19TTFJVLAotCQkJCSAg U1lOQ19IQU5ETEVSX0NPTU1JVF9UUywKLQkJCQkgIGZhbHNlKTsKLQlTbHJ1UGFnZVByZWNl ZGVzVW5pdFRlc3RzKENvbW1pdFRzQ3RsLCBDT01NSVRfVFNfWEFDVFNfUEVSX1BBR0UpOwot Ci0JY29tbWl0VHNTaGFyZWQgPSBTaG1lbUluaXRTdHJ1Y3QoIkNvbW1pdFRzIHNoYXJlZCIs Ci0JCQkJCQkJCQkgc2l6ZW9mKENvbW1pdFRpbWVzdGFtcFNoYXJlZCksCi0JCQkJCQkJCQkg JmZvdW5kKTsKLQotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCi0JewotCQlBc3NlcnQoIWZv dW5kKTsKK3N0YXRpYyB2b2lkCitDb21taXRUc1NobWVtSW5pdCh2b2lkICphcmcpCit7CisJ Y29tbWl0VHNTaGFyZWQtPnhpZExhc3RDb21taXQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsK KwlUSU1FU1RBTVBfTk9CRUdJTihjb21taXRUc1NoYXJlZC0+ZGF0YUxhc3RDb21taXQudGlt ZSk7CisJY29tbWl0VHNTaGFyZWQtPmRhdGFMYXN0Q29tbWl0Lm5vZGVpZCA9IEludmFsaWRS ZXBsT3JpZ2luSWQ7CisJY29tbWl0VHNTaGFyZWQtPmNvbW1pdFRzQWN0aXZlID0gZmFsc2U7 CiAKLQkJY29tbWl0VHNTaGFyZWQtPnhpZExhc3RDb21taXQgPSBJbnZhbGlkVHJhbnNhY3Rp b25JZDsKLQkJVElNRVNUQU1QX05PQkVHSU4oY29tbWl0VHNTaGFyZWQtPmRhdGFMYXN0Q29t bWl0LnRpbWUpOwotCQljb21taXRUc1NoYXJlZC0+ZGF0YUxhc3RDb21taXQubm9kZWlkID0g SW52YWxpZFJlcGxPcmlnaW5JZDsKLQkJY29tbWl0VHNTaGFyZWQtPmNvbW1pdFRzQWN0aXZl ID0gZmFsc2U7Ci0JfQotCWVsc2UKLQkJQXNzZXJ0KGZvdW5kKTsKKwlTbHJ1UGFnZVByZWNl ZGVzVW5pdFRlc3RzKENvbW1pdFRzQ3RsLCBDT01NSVRfVFNfWEFDVFNfUEVSX1BBR0UpOwog fQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4 YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwppbmRleCA5 ZjhkNTQyYzA5OC4uOTQwYWM1YTc4ZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL211bHRpeGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L211bHRpeGFjdC5jCkBAIC04Myw2ICs4Myw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wbXNp Z25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cHJvY2FycmF5LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVk ZSAidXRpbHMvZ3VjX2hvb2tzLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50 LmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCkBAIC0xMTMsMTEgKzExNCwxNiBA QCBQcmV2aW91c011bHRpWGFjdElkKE11bHRpWGFjdElkIG11bHRpKQogLyoKICAqIExpbmtz IHRvIHNoYXJlZC1tZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBNdWx0aVhhY3QgY29udHJv bAogICovCi1zdGF0aWMgU2xydUN0bERhdGEgTXVsdGlYYWN0T2Zmc2V0Q3RsRGF0YTsKLXN0 YXRpYyBTbHJ1Q3RsRGF0YSBNdWx0aVhhY3RNZW1iZXJDdGxEYXRhOworc3RhdGljIGJvb2wg TXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7 CitzdGF0aWMgaW50CU11bHRpWGFjdE9mZnNldElvRXJyb3JEZXRhaWwoY29uc3Qgdm9pZCAq b3BhcXVlX2RhdGEpOworc3RhdGljIGJvb2wgTXVsdGlYYWN0TWVtYmVyUGFnZVByZWNlZGVz KGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7CitzdGF0aWMgaW50CU11bHRpWGFjdE1lbWJl cklvRXJyb3JEZXRhaWwoY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpOworCitzdGF0aWMgU2xy dURlc2MgTXVsdGlYYWN0T2Zmc2V0U2xydURlc2M7CitzdGF0aWMgU2xydURlc2MgTXVsdGlY YWN0TWVtYmVyU2xydURlc2M7CiAKLSNkZWZpbmUgTXVsdGlYYWN0T2Zmc2V0Q3RsCSgmTXVs dGlYYWN0T2Zmc2V0Q3RsRGF0YSkKLSNkZWZpbmUgTXVsdGlYYWN0TWVtYmVyQ3RsCSgmTXVs dGlYYWN0TWVtYmVyQ3RsRGF0YSkKKyNkZWZpbmUgTXVsdGlYYWN0T2Zmc2V0Q3RsCSgmTXVs dGlYYWN0T2Zmc2V0U2xydURlc2MpCisjZGVmaW5lIE11bHRpWGFjdE1lbWJlckN0bAkoJk11 bHRpWGFjdE1lbWJlclNscnVEZXNjKQogCiAvKgogICogTXVsdGlYYWN0IHN0YXRlIHNoYXJl ZCBhY3Jvc3MgYWxsIGJhY2tlbmRzLiAgQWxsIHRoaXMgc3RhdGUgaXMgcHJvdGVjdGVkCkBA IC0yMjAsNiArMjI2LDE1IEBAIHN0YXRpYyBNdWx0aVhhY3RTdGF0ZURhdGEgKk11bHRpWGFj dFN0YXRlOwogc3RhdGljIE11bHRpWGFjdElkICpPbGRlc3RNZW1iZXJNWGFjdElkOwogc3Rh dGljIE11bHRpWGFjdElkICpPbGRlc3RWaXNpYmxlTVhhY3RJZDsKIAorc3RhdGljIHZvaWQg TXVsdGlYYWN0U2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBNdWx0aVhh Y3RTaG1lbUluaXQodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIE11bHRpWGFjdFNobWVtQXR0 YWNoKHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIE11bHRpWGFjdFNobWVt Q2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gTXVsdGlYYWN0U2htZW1SZXF1ZXN0LAor CS5pbml0X2ZuID0gTXVsdGlYYWN0U2htZW1Jbml0LAorCS5hdHRhY2hfZm4gPSBNdWx0aVhh Y3RTaG1lbUF0dGFjaCwKK307CiAKIHN0YXRpYyBpbmxpbmUgTXVsdGlYYWN0SWQgKgogTXlP bGRlc3RNZW1iZXJNWGFjdElkU2xvdCh2b2lkKQpAQCAtMzIxLDEwICszMzYsNiBAQCB0eXBl ZGVmIHN0cnVjdCBNdWx0aVhhY3RNZW1iZXJTbHJ1UmVhZENvbnRleHQKIAlNdWx0aVhhY3RP ZmZzZXQgb2Zmc2V0OwogfSBNdWx0aVhhY3RNZW1iZXJTbHJ1UmVhZENvbnRleHQ7CiAKLXN0 YXRpYyBib29sIE11bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlcyhpbnQ2NCBwYWdlMSwgaW50 NjQgcGFnZTIpOwotc3RhdGljIGJvb2wgTXVsdGlYYWN0TWVtYmVyUGFnZVByZWNlZGVzKGlu dDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7Ci1zdGF0aWMgaW50CU11bHRpWGFjdE9mZnNldElv RXJyb3JEZXRhaWwoY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpOwotc3RhdGljIGludAlNdWx0 aVhhY3RNZW1iZXJJb0Vycm9yRGV0YWlsKGNvbnN0IHZvaWQgKm9wYXF1ZV9kYXRhKTsKIHN0 YXRpYyB2b2lkIEV4dGVuZE11bHRpWGFjdE9mZnNldChNdWx0aVhhY3RJZCBtdWx0aSk7CiBz dGF0aWMgdm9pZCBFeHRlbmRNdWx0aVhhY3RNZW1iZXIoTXVsdGlYYWN0T2Zmc2V0IG9mZnNl dCwgaW50IG5tZW1iZXJzKTsKIHN0YXRpYyB2b2lkIFNldE9sZGVzdE9mZnNldCh2b2lkKTsK QEAgLTE3NDcsODAgKzE3NTgsODMgQEAgbXVsdGl4YWN0X3R3b3BoYXNlX3Bvc3RhYm9ydChG dWxsVHJhbnNhY3Rpb25JZCBmeGlkLCB1aW50MTYgaW5mbywKIAltdWx0aXhhY3RfdHdvcGhh c2VfcG9zdGNvbW1pdChmeGlkLCBpbmZvLCByZWNkYXRhLCBsZW4pOwogfQogCisKIC8qCi0g KiBJbml0aWFsaXphdGlvbiBvZiBzaGFyZWQgbWVtb3J5IGZvciBNdWx0aVhhY3QuCi0gKgot ICogTXVsdGlYYWN0U2hhcmVkU3RhdGVTaG1lbVNpemUoKSBjYWxjdWxhdGVzIHRoZSBzaXpl IG9mIHRoZSBNdWx0aVhhY3RTdGF0ZQotICogc3RydWN0LCBhbmQgdGhlIHR3byBwZXItYmFj a2VuZCBNdWx0aVhhY3RJZCBhcnJheXMuICBUaGV5IGFyZSBjYXJ2ZWQgb3V0IG9mCi0gKiB0 aGUgc2FtZSBhbGxvY2F0aW9uLiAgTXVsdGlYYWN0U2htZW1TaXplKCkgYWRkaXRpb25hbGx5 IGluY2x1ZGVzIHRoZSBtZW1vcnkKLSAqIG5lZWRlZCBmb3IgdGhlIHR3byBTTFJVIGFyZWFz LgorICogUmVnaXN0ZXIgc2hhcmVkIG1lbW9yeSBuZWVkcyBmb3IgTXVsdGlYYWN0LgogICov Ci1zdGF0aWMgU2l6ZQotTXVsdGlYYWN0U2hhcmVkU3RhdGVTaG1lbVNpemUodm9pZCkKK3N0 YXRpYyB2b2lkCitNdWx0aVhhY3RTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogeworCXN0YXRp YyBTaG1lbVN0cnVjdERlc2MgTXVsdGlYYWN0U2htZW1EZXNjOwogCVNpemUJCXNpemU7CiAK KwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgTXVsdGlYYWN0U3RhdGUgc3Ry dWN0LCBhbmQgdGhlIHR3bworCSAqIHBlci1iYWNrZW5kIE11bHRpWGFjdElkIGFycmF5cy4g IFRoZXkgYXJlIGNhcnZlZCBvdXQgb2YgdGhlIHNhbWUKKwkgKiBhbGxvY2F0aW9uLgorCSAq LwogCXNpemUgPSBvZmZzZXRvZihNdWx0aVhhY3RTdGF0ZURhdGEsIHBlckJhY2tlbmRYYWN0 SWRzKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwKIAkJCQkJbXVsX3NpemUoc2l6ZW9mKE11 bHRpWGFjdElkKSwgTnVtTWVtYmVyU2xvdHMpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwK IAkJCQkJbXVsX3NpemUoc2l6ZW9mKE11bHRpWGFjdElkKSwgTnVtVmlzaWJsZVNsb3RzKSk7 Ci0JcmV0dXJuIHNpemU7Ci19CisJU2htZW1SZXF1ZXN0U3RydWN0KCZNdWx0aVhhY3RTaG1l bURlc2MsCisJCS5uYW1lID0gIlNoYXJlZCBNdWx0aVhhY3QgU3RhdGUiLAorCQkuc2l6ZSA9 IHNpemUsCisJCS5wdHIgPSAodm9pZCAqKikgJk11bHRpWGFjdFN0YXRlLAorCQkpOwogCi1T aXplCi1NdWx0aVhhY3RTaG1lbVNpemUodm9pZCkKLXsKLQlTaXplCQlzaXplOworCVNpbXBs ZUxydVJlcXVlc3QoJk11bHRpWGFjdE9mZnNldFNscnVEZXNjLAorCQkubmFtZSA9ICJtdWx0 aXhhY3Rfb2Zmc2V0IiwKKwkJLkRpciA9ICJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsCisJCS5s b25nX3NlZ21lbnRfbmFtZXMgPSBmYWxzZSwKIAotCXNpemUgPSBNdWx0aVhhY3RTaGFyZWRT dGF0ZVNobWVtU2l6ZSgpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVTaG1l bVNpemUobXVsdGl4YWN0X29mZnNldF9idWZmZXJzLCAwKSk7Ci0Jc2l6ZSA9IGFkZF9zaXpl KHNpemUsIFNpbXBsZUxydVNobWVtU2l6ZShtdWx0aXhhY3RfbWVtYmVyX2J1ZmZlcnMsIDAp KTsKKwkJLm5zbG90cyA9IG11bHRpeGFjdF9vZmZzZXRfYnVmZmVycywKIAotCXJldHVybiBz aXplOwotfQorCQkuc3luY19oYW5kbGVyID0gU1lOQ19IQU5ETEVSX01VTFRJWEFDVF9PRkZT RVQsCisJCS5QYWdlUHJlY2VkZXMgPSBNdWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMsCisJ CS5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gTXVsdGlYYWN0T2Zmc2V0SW9FcnJvckRldGFp bCwKIAotdm9pZAotTXVsdGlYYWN0U2htZW1Jbml0KHZvaWQpCi17Ci0JYm9vbAkJZm91bmQ7 CisJCS5idWZmZXJfdHJhbmNoZV9pZCA9IExXVFJBTkNIRV9NVUxUSVhBQ1RPRkZTRVRfQlVG RkVSLAorCQkuYmFua190cmFuY2hlX2lkID0gTFdUUkFOQ0hFX01VTFRJWEFDVE9GRlNFVF9T TFJVLAorCQkpOwogCi0JZGVidWdfZWxvZzIoREVCVUcyLCAiU2hhcmVkIE1lbW9yeSBJbml0 IGZvciBNdWx0aVhhY3QiKTsKKwlTaW1wbGVMcnVSZXF1ZXN0KCZNdWx0aVhhY3RNZW1iZXJT bHJ1RGVzYywKKwkJLm5hbWUgPSAibXVsdGl4YWN0X21lbWJlciIsCisJCS5EaXIgPSAicGdf bXVsdGl4YWN0L21lbWJlcnMiLAorCQkubG9uZ19zZWdtZW50X25hbWVzID0gdHJ1ZSwKIAot CU11bHRpWGFjdE9mZnNldEN0bC0+UGFnZVByZWNlZGVzID0gTXVsdGlYYWN0T2Zmc2V0UGFn ZVByZWNlZGVzOwotCU11bHRpWGFjdE1lbWJlckN0bC0+UGFnZVByZWNlZGVzID0gTXVsdGlY YWN0TWVtYmVyUGFnZVByZWNlZGVzOwotCU11bHRpWGFjdE9mZnNldEN0bC0+ZXJyZGV0YWls X2Zvcl9pb19lcnJvciA9IE11bHRpWGFjdE9mZnNldElvRXJyb3JEZXRhaWw7Ci0JTXVsdGlY YWN0TWVtYmVyQ3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gTXVsdGlYYWN0TWVtYmVy SW9FcnJvckRldGFpbDsKKwkJLm5zbG90cyA9IG11bHRpeGFjdF9tZW1iZXJfYnVmZmVycywK IAotCVNpbXBsZUxydUluaXQoTXVsdGlYYWN0T2Zmc2V0Q3RsLAotCQkJCSAgIm11bHRpeGFj dF9vZmZzZXQiLCBtdWx0aXhhY3Rfb2Zmc2V0X2J1ZmZlcnMsIDAsCi0JCQkJICAicGdfbXVs dGl4YWN0L29mZnNldHMiLCBMV1RSQU5DSEVfTVVMVElYQUNUT0ZGU0VUX0JVRkZFUiwKLQkJ CQkgIExXVFJBTkNIRV9NVUxUSVhBQ1RPRkZTRVRfU0xSVSwKLQkJCQkgIFNZTkNfSEFORExF Ul9NVUxUSVhBQ1RfT0ZGU0VULAotCQkJCSAgZmFsc2UpOwotCVNscnVQYWdlUHJlY2VkZXNV bml0VGVzdHMoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFH RSk7Ci0JU2ltcGxlTHJ1SW5pdChNdWx0aVhhY3RNZW1iZXJDdGwsCi0JCQkJICAibXVsdGl4 YWN0X21lbWJlciIsIG11bHRpeGFjdF9tZW1iZXJfYnVmZmVycywgMCwKLQkJCQkgICJwZ19t dWx0aXhhY3QvbWVtYmVycyIsIExXVFJBTkNIRV9NVUxUSVhBQ1RNRU1CRVJfQlVGRkVSLAot CQkJCSAgTFdUUkFOQ0hFX01VTFRJWEFDVE1FTUJFUl9TTFJVLAotCQkJCSAgU1lOQ19IQU5E TEVSX01VTFRJWEFDVF9NRU1CRVIsCi0JCQkJICB0cnVlKTsKLQkvKiBkb2Vzbid0IGNhbGwg U2ltcGxlTHJ1VHJ1bmNhdGUoKSBvciBtZWV0IGNyaXRlcmlhIGZvciB1bml0IHRlc3RzICov Ci0KLQkvKiBJbml0aWFsaXplIG91ciBzaGFyZWQgc3RhdGUgc3RydWN0ICovCi0JTXVsdGlY YWN0U3RhdGUgPSBTaG1lbUluaXRTdHJ1Y3QoIlNoYXJlZCBNdWx0aVhhY3QgU3RhdGUiLAot CQkJCQkJCQkJIE11bHRpWGFjdFNoYXJlZFN0YXRlU2htZW1TaXplKCksCi0JCQkJCQkJCQkg JmZvdW5kKTsKLQlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQotCXsKLQkJQXNzZXJ0KCFmb3Vu ZCk7CisJCS5zeW5jX2hhbmRsZXIgPSBTWU5DX0hBTkRMRVJfTVVMVElYQUNUX01FTUJFUiwK KwkJLlBhZ2VQcmVjZWRlcyA9IE11bHRpWGFjdE1lbWJlclBhZ2VQcmVjZWRlcywKKwkJLmVy cmRldGFpbF9mb3JfaW9fZXJyb3IgPSBNdWx0aVhhY3RNZW1iZXJJb0Vycm9yRGV0YWlsLAog Ci0JCS8qIE1ha2Ugc3VyZSB3ZSB6ZXJvIG91dCB0aGUgcGVyLWJhY2tlbmQgc3RhdGUgKi8K LQkJTWVtU2V0KE11bHRpWGFjdFN0YXRlLCAwLCBNdWx0aVhhY3RTaGFyZWRTdGF0ZVNobWVt U2l6ZSgpKTsKLQl9Ci0JZWxzZQotCQlBc3NlcnQoZm91bmQpOworCQkuYnVmZmVyX3RyYW5j aGVfaWQgPSBMV1RSQU5DSEVfTVVMVElYQUNUTUVNQkVSX0JVRkZFUiwKKwkJLmJhbmtfdHJh bmNoZV9pZCA9IExXVFJBTkNIRV9NVUxUSVhBQ1RNRU1CRVJfU0xSVSwKKwkJKTsKIAorCS8q CisJICogbWVtYmVycyBTTFJVIGRvZXNuJ3QgY2FsbCBTaW1wbGVMcnVUcnVuY2F0ZSgpIG9y IG1lZXQgY3JpdGVyaWEgZm9yIHVuaXQKKwkgKiB0ZXN0cworCSAqLworfQorCitzdGF0aWMg dm9pZAorTXVsdGlYYWN0U2htZW1Jbml0KHZvaWQgKmFyZykKK3sKKwkvKgorCSAqIFNldCB1 cCBhcnJheSBwb2ludGVycy4KKwkgKi8KKwlPbGRlc3RNZW1iZXJNWGFjdElkID0gTXVsdGlY YWN0U3RhdGUtPnBlckJhY2tlbmRYYWN0SWRzOworCU9sZGVzdFZpc2libGVNWGFjdElkID0g T2xkZXN0TWVtYmVyTVhhY3RJZCArIE51bU1lbWJlclNsb3RzOworCisJU2xydVBhZ2VQcmVj ZWRlc1VuaXRUZXN0cyhNdWx0aVhhY3RPZmZzZXRDdGwsIE1VTFRJWEFDVF9PRkZTRVRTX1BF Ul9QQUdFKTsKK30KKworc3RhdGljIHZvaWQKK011bHRpWGFjdFNobWVtQXR0YWNoKHZvaWQg KmFyZykKK3sKIAkvKgogCSAqIFNldCB1cCBhcnJheSBwb2ludGVycy4KIAkgKi8KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3NscnUuYwppbmRleCBhMmJiOGZhODAzMy4uM2ZlNjBjNTgwNGIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMKQEAgLTcxLDYgKzcxLDcgQEAKICNp bmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgogI2lu Y2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5j bHVkZSAidXRpbHMvd2FpdF9ldmVudC5oIgogCiAvKgpAQCAtODksOSArOTAsOSBAQAogICog IGRpci8xMjM0NTYgZm9yIFsyXjIwLCAyXjI0LTFdCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50 Ci1TbHJ1RmlsZU5hbWUoU2xydUN0bCBjdGwsIGNoYXIgKnBhdGgsIGludDY0IHNlZ25vKQor U2xydUZpbGVOYW1lKFNscnVEZXNjICpjdGwsIGNoYXIgKnBhdGgsIGludDY0IHNlZ25vKQog ewotCWlmIChjdGwtPmxvbmdfc2VnbWVudF9uYW1lcykKKwlpZiAoY3RsLT5vcHRpb25zLmxv bmdfc2VnbWVudF9uYW1lcykKIAl7CiAJCS8qCiAJCSAqIFdlIGNvdWxkIHVzZSAxNiBjaGFy YWN0ZXJzIGhlcmUgYnV0IHRoZSBkaXNhZHZhbnRhZ2Ugd291bGQgYmUgdGhhdApAQCAtMTAx LDcgKzEwMiw3IEBAIFNscnVGaWxlTmFtZShTbHJ1Q3RsIGN0bCwgY2hhciAqcGF0aCwgaW50 NjQgc2Vnbm8pCiAJCSAqIHRoYXQgaW4gdGhlIGZ1dHVyZSB3ZSBjYW4ndCBkZWNyZWFzZSBT TFJVX1BBR0VTX1BFUl9TRUdNRU5UIGVhc2lseS4KIAkJICovCiAJCUFzc2VydChzZWdubyA+ PSAwICYmIHNlZ25vIDw9IElOVDY0Q09OU1QoMHhGRkZGRkZGRkZGRkZGRkYpKTsKLQkJcmV0 dXJuIHNucHJpbnRmKHBhdGgsIE1BWFBHUEFUSCwgIiVzLyUwMTUiIFBSSVg2NCwgY3RsLT5E aXIsIHNlZ25vKTsKKwkJcmV0dXJuIHNucHJpbnRmKHBhdGgsIE1BWFBHUEFUSCwgIiVzLyUw MTUiIFBSSVg2NCwgY3RsLT5vcHRpb25zLkRpciwgc2Vnbm8pOwogCX0KIAllbHNlCiAJewpA QCAtMTEwLDcgKzExMSw3IEBAIFNscnVGaWxlTmFtZShTbHJ1Q3RsIGN0bCwgY2hhciAqcGF0 aCwgaW50NjQgc2Vnbm8pCiAJCSAqIGludGVnZXJzIGFyZSBhbGxvd2VkLiBTZWUgU2xydUNv cnJlY3RTZWdtZW50RmlsZW5hbWVMZW5ndGgoKQogCQkgKi8KIAkJQXNzZXJ0KHNlZ25vID49 IDAgJiYgc2Vnbm8gPD0gSU5UNjRDT05TVCgweEZGRkZGRikpOwotCQlyZXR1cm4gc25wcmlu dGYocGF0aCwgTUFYUEdQQVRILCAiJXMvJTA0WCIsIChjdGwpLT5EaXIsCisJCXJldHVybiBz bnByaW50ZihwYXRoLCBNQVhQR1BBVEgsICIlcy8lMDRYIiwgKGN0bCktPm9wdGlvbnMuRGly LAogCQkJCQkJKHVuc2lnbmVkIGludCkgc2Vnbm8pOwogCX0KIH0KQEAgLTE3NiwxOSArMTc3 LDE5IEBAIHN0YXRpYyBTbHJ1RXJyb3JDYXVzZSBzbHJ1X2VycmNhdXNlOwogc3RhdGljIGlu dAlzbHJ1X2Vycm5vOwogCiAKLXN0YXRpYyB2b2lkIFNpbXBsZUxydVplcm9MU05zKFNscnVD dGwgY3RsLCBpbnQgc2xvdG5vKTsKLXN0YXRpYyB2b2lkIFNpbXBsZUxydVdhaXRJTyhTbHJ1 Q3RsIGN0bCwgaW50IHNsb3Rubyk7Ci1zdGF0aWMgdm9pZCBTbHJ1SW50ZXJuYWxXcml0ZVBh Z2UoU2xydUN0bCBjdGwsIGludCBzbG90bm8sIFNscnVXcml0ZUFsbCBmZGF0YSk7Ci1zdGF0 aWMgYm9vbCBTbHJ1UGh5c2ljYWxSZWFkUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5v LCBpbnQgc2xvdG5vKTsKLXN0YXRpYyBib29sIFNscnVQaHlzaWNhbFdyaXRlUGFnZShTbHJ1 Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBpbnQgc2xvdG5vLAorc3RhdGljIHZvaWQgU2ltcGxl THJ1WmVyb0xTTnMoU2xydURlc2MgKmN0bCwgaW50IHNsb3Rubyk7CitzdGF0aWMgdm9pZCBT aW1wbGVMcnVXYWl0SU8oU2xydURlc2MgKmN0bCwgaW50IHNsb3Rubyk7CitzdGF0aWMgdm9p ZCBTbHJ1SW50ZXJuYWxXcml0ZVBhZ2UoU2xydURlc2MgKmN0bCwgaW50IHNsb3RubywgU2xy dVdyaXRlQWxsIGZkYXRhKTsKK3N0YXRpYyBib29sIFNscnVQaHlzaWNhbFJlYWRQYWdlKFNs cnVEZXNjICpjdGwsIGludDY0IHBhZ2VubywgaW50IHNsb3Rubyk7CitzdGF0aWMgYm9vbCBT bHJ1UGh5c2ljYWxXcml0ZVBhZ2UoU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vLCBpbnQg c2xvdG5vLAogCQkJCQkJCQkgIFNscnVXcml0ZUFsbCBmZGF0YSk7Ci1zdGF0aWMgdm9pZCBT bHJ1UmVwb3J0SU9FcnJvcihTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLAorc3RhdGljIHZv aWQgU2xydVJlcG9ydElPRXJyb3IoU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vLAogCQkJ CQkJCSAgY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpOwotc3RhdGljIGludAlTbHJ1U2VsZWN0 TFJVUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vKTsKK3N0YXRpYyBpbnQJU2xydVNl bGVjdExSVVBhZ2UoU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vKTsKIAotc3RhdGljIGJv b2wgU2xydVNjYW5EaXJDYkRlbGV0ZUN1dG9mZihTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5h bWUsCitzdGF0aWMgYm9vbCBTbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2ZmKFNscnVEZXNjICpj dGwsIGNoYXIgKmZpbGVuYW1lLAogCQkJCQkJCQkJICBpbnQ2NCBzZWdwYWdlLCB2b2lkICpk YXRhKTsKLXN0YXRpYyB2b2lkIFNscnVJbnRlcm5hbERlbGV0ZVNlZ21lbnQoU2xydUN0bCBj dGwsIGludDY0IHNlZ25vKTsKK3N0YXRpYyB2b2lkIFNscnVJbnRlcm5hbERlbGV0ZVNlZ21l bnQoU2xydURlc2MgKmN0bCwgaW50NjQgc2Vnbm8pOwogc3RhdGljIGlubGluZSB2b2lkIFNs cnVSZWNlbnRseVVzZWQoU2xydVNoYXJlZCBzaGFyZWQsIGludCBzbG90bm8pOwogCiAKQEAg LTE5Niw3ICsxOTcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgU2xydVJlY2VudGx5VXNlZChT bHJ1U2hhcmVkIHNoYXJlZCwgaW50IHNsb3Rubyk7CiAgKiBJbml0aWFsaXphdGlvbiBvZiBz aGFyZWQgbWVtb3J5CiAgKi8KIAotU2l6ZQorc3RhdGljIFNpemUKIFNpbXBsZUxydVNobWVt U2l6ZShpbnQgbnNsb3RzLCBpbnQgbmxzbnMpCiB7CiAJaW50CQkJbmJhbmtzID0gbnNsb3Rz IC8gU0xSVV9CQU5LX1NJWkU7CkBAIC0yMzgsMTIwICsyMzksMTM0IEBAIFNpbXBsZUxydUF1 dG90dW5lQnVmZmVycyhpbnQgZGl2aXNvciwgaW50IG1heCkKIH0KIAogLyoKLSAqIEluaXRp YWxpemUsIG9yIGF0dGFjaCB0bywgYSBzaW1wbGUgTFJVIGNhY2hlIGluIHNoYXJlZCBtZW1v cnkuCi0gKgotICogY3RsOiBhZGRyZXNzIG9mIGxvY2FsICh1bnNoYXJlZCkgY29udHJvbCBz dHJ1Y3R1cmUuCi0gKiBuYW1lOiBuYW1lIG9mIFNMUlUuICAoVGhpcyBpcyB1c2VyLXZpc2li bGUsIHBpY2sgd2l0aCBjYXJlISkKLSAqIG5zbG90czogbnVtYmVyIG9mIHBhZ2Ugc2xvdHMg dG8gdXNlLgotICogbmxzbnM6IG51bWJlciBvZiBMU04gZ3JvdXBzIHBlciBwYWdlIChzZXQg dG8gemVybyBpZiBub3QgcmVsZXZhbnQpLgotICogc3ViZGlyOiBQR0RBVEEtcmVsYXRpdmUg c3ViZGlyZWN0b3J5IHRoYXQgd2lsbCBjb250YWluIHRoZSBmaWxlcy4KLSAqIGJ1ZmZlcl90 cmFuY2hlX2lkOiB0cmFuY2hlIElEIHRvIHVzZSBmb3IgdGhlIFNMUlUncyBwZXItYnVmZmVy IExXTG9ja3MuCi0gKiBiYW5rX3RyYW5jaGVfaWQ6IHRyYW5jaGUgSUQgdG8gdXNlIGZvciB0 aGUgYmFuayBMV0xvY2tzLgotICogc3luY19oYW5kbGVyOiB3aGljaCBzZXQgb2YgZnVuY3Rp b25zIHRvIHVzZSB0byBoYW5kbGUgc3luYyByZXF1ZXN0cwotICogbG9uZ19zZWdtZW50X25h bWVzOiB1c2Ugc2hvcnQgb3IgbG9uZyBzZWdtZW50IG5hbWVzCisgKiBSZWdpc3RlciBhIHNp bXBsZSBMUlUgY2FjaGUgaW4gc2hhcmVkIG1lbW9yeS4KICAqLwogdm9pZAotU2ltcGxlTHJ1 SW5pdChTbHJ1Q3RsIGN0bCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5zbG90cywgaW50IG5s c25zLAotCQkJICBjb25zdCBjaGFyICpzdWJkaXIsIGludCBidWZmZXJfdHJhbmNoZV9pZCwg aW50IGJhbmtfdHJhbmNoZV9pZCwKLQkJCSAgU3luY1JlcXVlc3RIYW5kbGVyIHN5bmNfaGFu ZGxlciwgYm9vbCBsb25nX3NlZ21lbnRfbmFtZXMpCitTaW1wbGVMcnVSZXF1ZXN0V2l0aE9w dHMoU2xydURlc2MgKmRlc2MsIGNvbnN0IFNscnVPcHRzICpvcHRpb25zKQogeworCVNscnVP cHRzICpvcHRpb25zX2NvcHk7CisKKwlBc3NlcnQob3B0aW9ucy0+bmFtZSAhPSBOVUxMKTsK KwlBc3NlcnQob3B0aW9ucy0+bnNsb3RzID4gMCk7CisJQXNzZXJ0KG9wdGlvbnMtPlBhZ2VQ cmVjZWRlcyAhPSBOVUxMKTsKKwlBc3NlcnQob3B0aW9ucy0+ZXJyZGV0YWlsX2Zvcl9pb19l cnJvciAhPSBOVUxMKTsKKworCW9wdGlvbnNfY29weSA9IE1lbW9yeUNvbnRleHRBbGxvYyhU b3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJICBzaXplb2YoU2xydU9wdHMpKTsKKwltZW1j cHkob3B0aW9uc19jb3B5LCBvcHRpb25zLCBzaXplb2YoU2xydU9wdHMpKTsKKworCW9wdGlv bnNfY29weS0+YmFzZS5uYW1lID0gb3B0aW9ucy0+bmFtZTsKKwlvcHRpb25zX2NvcHktPmJh c2Uuc2l6ZSA9IFNpbXBsZUxydVNobWVtU2l6ZShvcHRpb25zX2NvcHktPm5zbG90cywgb3B0 aW9uc19jb3B5LT5ubHNucyk7CisKKwlTaG1lbVJlcXVlc3RJbnRlcm5hbCgmZGVzYy0+YmFz ZSwgJm9wdGlvbnNfY29weS0+YmFzZSwgU0hNRU1fS0lORF9TTFJVKTsKK30KKworLyogSW5p dGlhbGl6ZSBsb2NrcyBhbmQgc2hhcmVkIG1lbW9yeSBhcmVhICovCit2b2lkCitzaG1lbV9z bHJ1X2luaXQoU2htZW1TdHJ1Y3REZXNjICpiYXNlX2Rlc2MsIFNobWVtU3RydWN0T3B0cyAq YmFzZV9vcHRpb25zKQoreworCVNscnVPcHRzICpvcHRpb25zID0gKFNscnVPcHRzICopIGJh c2Vfb3B0aW9uczsKKwlTbHJ1RGVzYyAgICpkZXNjID0gKFNscnVEZXNjICopIGJhc2VfZGVz YzsKKwljaGFyCQluYW1lYnVmW05BTUVEQVRBTEVOXTsKIAlTbHJ1U2hhcmVkCXNoYXJlZDsK LQlib29sCQlmb3VuZDsKKwlpbnQJCQluc2xvdHMgPSBvcHRpb25zLT5uc2xvdHM7CiAJaW50 CQkJbmJhbmtzID0gbnNsb3RzIC8gU0xSVV9CQU5LX1NJWkU7CisJaW50CQkJbmxzbnMgPSBv cHRpb25zLT5ubHNuczsKKwljaGFyCSAgICpwdHI7CisJU2l6ZQkJb2Zmc2V0OworCisJc2hh cmVkID0gZGVzYy0+c2hhcmVkID0gKFNscnVTaGFyZWQpIGRlc2MtPmJhc2UucHRyOworCWRl c2MtPm5iYW5rcyA9IG5iYW5rczsKKwltZW1jcHkoJmRlc2MtPm9wdGlvbnMsIG9wdGlvbnMs IHNpemVvZihTbHJ1T3B0cykpOworCisJLyogYXNzaWduIG5ldyB0cmFuY2hlIElEcywgaWYg bm90IGdpdmVuICovCisJaWYgKGRlc2MtPm9wdGlvbnMuYnVmZmVyX3RyYW5jaGVfaWQgPT0g MCkKKwl7CisJCXNucHJpbnRmKG5hbWVidWYsIHNpemVvZihuYW1lYnVmKSwgIiVzIGJ1ZmZl ciIsIGRlc2MtPm9wdGlvbnMubmFtZSk7CisJCWRlc2MtPm9wdGlvbnMuYnVmZmVyX3RyYW5j aGVfaWQgPSBMV0xvY2tOZXdUcmFuY2hlSWQobmFtZWJ1Zik7CisJfQorCWlmIChkZXNjLT5v cHRpb25zLmJhbmtfdHJhbmNoZV9pZCA9PSAwKQorCXsKKwkJc25wcmludGYobmFtZWJ1Ziwg c2l6ZW9mKG5hbWVidWYpLCAiJXMgYmFuayIsIGRlc2MtPm9wdGlvbnMubmFtZSk7CisJCWRl c2MtPm9wdGlvbnMuYmFua190cmFuY2hlX2lkID0gTFdMb2NrTmV3VHJhbmNoZUlkKG5hbWVi dWYpOworCX0KIAogCUFzc2VydChuc2xvdHMgPD0gU0xSVV9NQVhfQUxMT1dFRF9CVUZGRVJT KTsKIAotCUFzc2VydChjdGwtPlBhZ2VQcmVjZWRlcyAhPSBOVUxMKTsKLQlBc3NlcnQoY3Rs LT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yICE9IE5VTEwpOworCW1lbXNldChzaGFyZWQsIDAs IHNpemVvZihTbHJ1U2hhcmVkRGF0YSkpOwogCi0Jc2hhcmVkID0gKFNscnVTaGFyZWQpIFNo bWVtSW5pdFN0cnVjdChuYW1lLAotCQkJCQkJCQkJCSAgU2ltcGxlTHJ1U2htZW1TaXplKG5z bG90cywgbmxzbnMpLAotCQkJCQkJCQkJCSAgJmZvdW5kKTsKKwlzaGFyZWQtPm51bV9zbG90 cyA9IG5zbG90czsKKwlzaGFyZWQtPmxzbl9ncm91cHNfcGVyX3BhZ2UgPSBubHNuczsKIAot CWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCi0JewotCQkvKiBJbml0aWFsaXplIGxvY2tzIGFu ZCBzaGFyZWQgbWVtb3J5IGFyZWEgKi8KLQkJY2hhcgkgICAqcHRyOwotCQlTaXplCQlvZmZz ZXQ7Ci0KLQkJQXNzZXJ0KCFmb3VuZCk7Ci0KLQkJbWVtc2V0KHNoYXJlZCwgMCwgc2l6ZW9m KFNscnVTaGFyZWREYXRhKSk7Ci0KLQkJc2hhcmVkLT5udW1fc2xvdHMgPSBuc2xvdHM7Ci0J CXNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZSA9IG5sc25zOwotCi0JCXBnX2F0b21pY19p bml0X3U2NCgmc2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIsIDApOwotCi0JCXNoYXJlZC0+ c2xydV9zdGF0c19pZHggPSBwZ3N0YXRfZ2V0X3NscnVfaW5kZXgobmFtZSk7Ci0KLQkJcHRy ID0gKGNoYXIgKikgc2hhcmVkOwotCQlvZmZzZXQgPSBNQVhBTElHTihzaXplb2YoU2xydVNo YXJlZERhdGEpKTsKLQkJc2hhcmVkLT5wYWdlX2J1ZmZlciA9IChjaGFyICoqKSAocHRyICsg b2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihjaGFyICop KTsKLQkJc2hhcmVkLT5wYWdlX3N0YXR1cyA9IChTbHJ1UGFnZVN0YXR1cyAqKSAocHRyICsg b2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihTbHJ1UGFn ZVN0YXR1cykpOwotCQlzaGFyZWQtPnBhZ2VfZGlydHkgPSAoYm9vbCAqKSAocHRyICsgb2Zm c2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihib29sKSk7Ci0J CXNoYXJlZC0+cGFnZV9udW1iZXIgPSAoaW50NjQgKikgKHB0ciArIG9mZnNldCk7Ci0JCW9m ZnNldCArPSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoaW50NjQpKTsKLQkJc2hhcmVkLT5w YWdlX2xydV9jb3VudCA9IChpbnQgKikgKHB0ciArIG9mZnNldCk7Ci0JCW9mZnNldCArPSBN QVhBTElHTihuc2xvdHMgKiBzaXplb2YoaW50KSk7Ci0KLQkJLyogSW5pdGlhbGl6ZSBMV0xv Y2tzICovCi0JCXNoYXJlZC0+YnVmZmVyX2xvY2tzID0gKExXTG9ja1BhZGRlZCAqKSAocHRy ICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihMV0xv Y2tQYWRkZWQpKTsKLQkJc2hhcmVkLT5iYW5rX2xvY2tzID0gKExXTG9ja1BhZGRlZCAqKSAo cHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5iYW5rcyAqIHNpemVvZihM V0xvY2tQYWRkZWQpKTsKLQkJc2hhcmVkLT5iYW5rX2N1cl9scnVfY291bnQgPSAoaW50ICop IChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obmJhbmtzICogc2l6ZW9m KGludCkpOwotCi0JCWlmIChubHNucyA+IDApCi0JCXsKLQkJCXNoYXJlZC0+Z3JvdXBfbHNu ID0gKFhMb2dSZWNQdHIgKikgKHB0ciArIG9mZnNldCk7Ci0JCQlvZmZzZXQgKz0gTUFYQUxJ R04obnNsb3RzICogbmxzbnMgKiBzaXplb2YoWExvZ1JlY1B0cikpOwotCQl9CisJcGdfYXRv bWljX2luaXRfdTY0KCZzaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciwgMCk7CiAKLQkJcHRy ICs9IEJVRkZFUkFMSUdOKG9mZnNldCk7Ci0JCWZvciAoaW50IHNsb3RubyA9IDA7IHNsb3Ru byA8IG5zbG90czsgc2xvdG5vKyspCi0JCXsKLQkJCUxXTG9ja0luaXRpYWxpemUoJnNoYXJl ZC0+YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9jaywKLQkJCQkJCQkgYnVmZmVyX3RyYW5jaGVf aWQpOworCXNoYXJlZC0+c2xydV9zdGF0c19pZHggPSBwZ3N0YXRfZ2V0X3NscnVfaW5kZXgo ZGVzYy0+b3B0aW9ucy5uYW1lKTsKIAotCQkJc2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9d ID0gcHRyOwotCQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX0VN UFRZOwotCQkJc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSBmYWxzZTsKLQkJCXNoYXJl ZC0+cGFnZV9scnVfY291bnRbc2xvdG5vXSA9IDA7Ci0JCQlwdHIgKz0gQkxDS1NaOwotCQl9 CisJcHRyID0gKGNoYXIgKikgc2hhcmVkOworCW9mZnNldCA9IE1BWEFMSUdOKHNpemVvZihT bHJ1U2hhcmVkRGF0YSkpOworCXNoYXJlZC0+cGFnZV9idWZmZXIgPSAoY2hhciAqKikgKHB0 ciArIG9mZnNldCk7CisJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihjaGFy ICopKTsKKwlzaGFyZWQtPnBhZ2Vfc3RhdHVzID0gKFNscnVQYWdlU3RhdHVzICopIChwdHIg KyBvZmZzZXQpOworCW9mZnNldCArPSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoU2xydVBh Z2VTdGF0dXMpKTsKKwlzaGFyZWQtPnBhZ2VfZGlydHkgPSAoYm9vbCAqKSAocHRyICsgb2Zm c2V0KTsKKwlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGJvb2wpKTsKKwlz aGFyZWQtPnBhZ2VfbnVtYmVyID0gKGludDY0ICopIChwdHIgKyBvZmZzZXQpOworCW9mZnNl dCArPSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoaW50NjQpKTsKKwlzaGFyZWQtPnBhZ2Vf bHJ1X2NvdW50ID0gKGludCAqKSAocHRyICsgb2Zmc2V0KTsKKwlvZmZzZXQgKz0gTUFYQUxJ R04obnNsb3RzICogc2l6ZW9mKGludCkpOwogCi0JCS8qIEluaXRpYWxpemUgdGhlIHNsb3Qg YmFua3MuICovCi0JCWZvciAoaW50IGJhbmtubyA9IDA7IGJhbmtubyA8IG5iYW5rczsgYmFu a25vKyspCi0JCXsKLQkJCUxXTG9ja0luaXRpYWxpemUoJnNoYXJlZC0+YmFua19sb2Nrc1ti YW5rbm9dLmxvY2ssIGJhbmtfdHJhbmNoZV9pZCk7Ci0JCQlzaGFyZWQtPmJhbmtfY3VyX2xy dV9jb3VudFtiYW5rbm9dID0gMDsKLQkJfQorCS8qIEluaXRpYWxpemUgTFdMb2NrcyAqLwor CXNoYXJlZC0+YnVmZmVyX2xvY2tzID0gKExXTG9ja1BhZGRlZCAqKSAocHRyICsgb2Zmc2V0 KTsKKwlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKExXTG9ja1BhZGRlZCkp OworCXNoYXJlZC0+YmFua19sb2NrcyA9IChMV0xvY2tQYWRkZWQgKikgKHB0ciArIG9mZnNl dCk7CisJb2Zmc2V0ICs9IE1BWEFMSUdOKG5iYW5rcyAqIHNpemVvZihMV0xvY2tQYWRkZWQp KTsKKwlzaGFyZWQtPmJhbmtfY3VyX2xydV9jb3VudCA9IChpbnQgKikgKHB0ciArIG9mZnNl dCk7CisJb2Zmc2V0ICs9IE1BWEFMSUdOKG5iYW5rcyAqIHNpemVvZihpbnQpKTsKIAotCQkv KiBTaG91bGQgZml0IHRvIGVzdGltYXRlZCBzaG1lbSBzaXplICovCi0JCUFzc2VydChwdHIg LSAoY2hhciAqKSBzaGFyZWQgPD0gU2ltcGxlTHJ1U2htZW1TaXplKG5zbG90cywgbmxzbnMp KTsKKwlpZiAobmxzbnMgPiAwKQorCXsKKwkJc2hhcmVkLT5ncm91cF9sc24gPSAoWExvZ1Jl Y1B0ciAqKSAocHRyICsgb2Zmc2V0KTsKKwkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAq IG5sc25zICogc2l6ZW9mKFhMb2dSZWNQdHIpKTsKIAl9Ci0JZWxzZQorCisJcHRyICs9IEJV RkZFUkFMSUdOKG9mZnNldCk7CisJZm9yIChpbnQgc2xvdG5vID0gMDsgc2xvdG5vIDwgbnNs b3RzOyBzbG90bm8rKykKIAl7Ci0JCUFzc2VydChmb3VuZCk7Ci0JCUFzc2VydChzaGFyZWQt Pm51bV9zbG90cyA9PSBuc2xvdHMpOworCQlMV0xvY2tJbml0aWFsaXplKCZzaGFyZWQtPmJ1 ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2ssCisJCQkJCQkgZGVzYy0+b3B0aW9ucy5idWZmZXJf dHJhbmNoZV9pZCk7CisKKwkJc2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dID0gcHRyOwor CQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPSBTTFJVX1BBR0VfRU1QVFk7CisJCXNo YXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gZmFsc2U7CisJCXNoYXJlZC0+cGFnZV9scnVf Y291bnRbc2xvdG5vXSA9IDA7CisJCXB0ciArPSBCTENLU1o7CiAJfQogCi0JLyoKLQkgKiBJ bml0aWFsaXplIHRoZSB1bnNoYXJlZCBjb250cm9sIHN0cnVjdCwgaW5jbHVkaW5nIGRpcmVj dG9yeSBwYXRoLiBXZQotCSAqIGFzc3VtZSBjYWxsZXIgc2V0IFBhZ2VQcmVjZWRlcy4KLQkg Ki8KLQljdGwtPnNoYXJlZCA9IHNoYXJlZDsKLQljdGwtPnN5bmNfaGFuZGxlciA9IHN5bmNf aGFuZGxlcjsKLQljdGwtPmxvbmdfc2VnbWVudF9uYW1lcyA9IGxvbmdfc2VnbWVudF9uYW1l czsKLQljdGwtPm5iYW5rcyA9IG5iYW5rczsKLQlzdHJsY3B5KGN0bC0+RGlyLCBzdWJkaXIs IHNpemVvZihjdGwtPkRpcikpOworCS8qIEluaXRpYWxpemUgdGhlIHNsb3QgYmFua3MuICov CisJZm9yIChpbnQgYmFua25vID0gMDsgYmFua25vIDwgbmJhbmtzOyBiYW5rbm8rKykKKwl7 CisJCUxXTG9ja0luaXRpYWxpemUoJnNoYXJlZC0+YmFua19sb2Nrc1tiYW5rbm9dLmxvY2ss IGRlc2MtPm9wdGlvbnMuYmFua190cmFuY2hlX2lkKTsKKwkJc2hhcmVkLT5iYW5rX2N1cl9s cnVfY291bnRbYmFua25vXSA9IDA7CisJfQorCisJLyogU2hvdWxkIGZpdCB0byBlc3RpbWF0 ZWQgc2htZW0gc2l6ZSAqLworCUFzc2VydChwdHIgLSAoY2hhciAqKSBzaGFyZWQgPD0gU2lt cGxlTHJ1U2htZW1TaXplKG5zbG90cywgbmxzbnMpKTsKK30KKwordm9pZAorc2htZW1fc2xy dV9hdHRhY2goU2htZW1TdHJ1Y3REZXNjICpiYXNlX2Rlc2MsIFNobWVtU3RydWN0T3B0cyAq YmFzZV9vcHRpb25zKQoreworCVNscnVPcHRzICpvcHRpb25zID0gKFNscnVPcHRzICopIGJh c2Vfb3B0aW9uczsKKwlTbHJ1RGVzYyAgICpkZXNjID0gKFNscnVEZXNjICopIGJhc2VfZGVz YzsKKwlpbnQJCQluc2xvdHMgPSBvcHRpb25zLT5uc2xvdHM7CisJaW50CQkJbmJhbmtzID0g bnNsb3RzIC8gU0xSVV9CQU5LX1NJWkU7CisKKwlkZXNjLT5zaGFyZWQgPSAoU2xydVNoYXJl ZCkgZGVzYy0+YmFzZS5wdHI7CisJZGVzYy0+bmJhbmtzID0gbmJhbmtzOworCW1lbWNweSgm ZGVzYy0+b3B0aW9ucywgb3B0aW9ucywgc2l6ZW9mKFNscnVPcHRzKSk7CiB9CiAKKwogLyoK ICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgR1VDIGNoZWNrX2hvb2sgdG8gY2hlY2sgd2hldGhl ciBzbHJ1IGJ1ZmZlcnMgYXJlIGluCiAgKiBtdWx0aXBsZXMgb2YgU0xSVV9CQU5LX1NJWkUu CkBAIC0zNzcsNyArMzkyLDcgQEAgY2hlY2tfc2xydV9idWZmZXJzKGNvbnN0IGNoYXIgKm5h bWUsIGludCAqbmV3dmFsKQogICogQmFuayBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwg YW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0LgogICovCiBpbnQKLVNpbXBsZUxydVplcm9QYWdl KFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8pCitTaW1wbGVMcnVaZXJvUGFnZShTbHJ1RGVz YyAqY3RsLCBpbnQ2NCBwYWdlbm8pCiB7CiAJU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNo YXJlZDsKIAlpbnQJCQlzbG90bm87CkBAIC00MzAsNyArNDQ1LDcgQEAgU2ltcGxlTHJ1WmVy b1BhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubykKICAqIFRoaXMgYXNzdW1lcyB0aGF0 IEludmFsaWRYTG9nUmVjUHRyIGlzIGJpdHdpc2UtYWxsLTAuCiAgKi8KIHN0YXRpYyB2b2lk Ci1TaW1wbGVMcnVaZXJvTFNOcyhTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubykKK1NpbXBsZUxy dVplcm9MU05zKFNscnVEZXNjICpjdGwsIGludCBzbG90bm8pCiB7CiAJU2xydVNoYXJlZAlz aGFyZWQgPSBjdGwtPnNoYXJlZDsKIApAQCAtNDQ2LDcgKzQ2MSw3IEBAIFNpbXBsZUxydVpl cm9MU05zKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKQogICogU0xSVSBiYW5rIGxvY2sgaXMg YWNxdWlyZWQgYW5kIHJlbGVhc2VkIGhlcmUuCiAgKi8KIHZvaWQKLVNpbXBsZUxydVplcm9B bmRXcml0ZVBhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubykKK1NpbXBsZUxydVplcm9B bmRXcml0ZVBhZ2UoU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vKQogewogCWludAkJCXNs b3RubzsKIAlMV0xvY2sJICAgKmxvY2s7CkBAIC00NzIsNyArNDg3LDcgQEAgU2ltcGxlTHJ1 WmVyb0FuZFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vKQogICogQmFuayBs b2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0Lgog ICovCiBzdGF0aWMgdm9pZAotU2ltcGxlTHJ1V2FpdElPKFNscnVDdGwgY3RsLCBpbnQgc2xv dG5vKQorU2ltcGxlTHJ1V2FpdElPKFNscnVEZXNjICpjdGwsIGludCBzbG90bm8pCiB7CiAJ U2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKIAlpbnQJCQliYW5rbm8gPSBTbG90 R2V0QmFua051bWJlcihzbG90bm8pOwpAQCAtNTMwLDcgKzU0NSw3IEBAIFNpbXBsZUxydVdh aXRJTyhTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubykKICAqIFRoZSBjb3JyZWN0IGJhbmsgbG9j ayBtdXN0IGJlIGhlbGQgYXQgZW50cnksIGFuZCB3aWxsIGJlIGhlbGQgYXQgZXhpdC4KICAq LwogaW50Ci1TaW1wbGVMcnVSZWFkUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBi b29sIHdyaXRlX29rLAorU2ltcGxlTHJ1UmVhZFBhZ2UoU2xydURlc2MgKmN0bCwgaW50NjQg cGFnZW5vLCBib29sIHdyaXRlX29rLAogCQkJCSAgY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEp CiB7CiAJU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKQEAgLTYzNCw3ICs2NDks NyBAQCBTaW1wbGVMcnVSZWFkUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBib29s IHdyaXRlX29rLAogICogSXQgaXMgdW5zcGVjaWZpZWQgd2hldGhlciB0aGUgbG9jayB3aWxs IGJlIHNoYXJlZCBvciBleGNsdXNpdmUuCiAgKi8KIGludAotU2ltcGxlTHJ1UmVhZFBhZ2Vf UmVhZE9ubHkoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgY29uc3Qgdm9pZCAqb3BhcXVl X2RhdGEpCitTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShTbHJ1RGVzYyAqY3RsLCBpbnQ2 NCBwYWdlbm8sIGNvbnN0IHZvaWQgKm9wYXF1ZV9kYXRhKQogewogCVNscnVTaGFyZWQJc2hh cmVkID0gY3RsLT5zaGFyZWQ7CiAJTFdMb2NrCSAgICpiYW5rbG9jayA9IFNpbXBsZUxydUdl dEJhbmtMb2NrKGN0bCwgcGFnZW5vKTsKQEAgLTY4MSw3ICs2OTYsNyBAQCBTaW1wbGVMcnVS ZWFkUGFnZV9SZWFkT25seShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBjb25zdCB2b2lk ICpvcGFxdWVfZGF0YSkKICAqIEJhbmsgbG9jayBtdXN0IGJlIGhlbGQgYXQgZW50cnksIGFu ZCB3aWxsIGJlIGhlbGQgYXQgZXhpdC4KICAqLwogc3RhdGljIHZvaWQKLVNscnVJbnRlcm5h bFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubywgU2xydVdyaXRlQWxsIGZkYXRh KQorU2xydUludGVybmFsV3JpdGVQYWdlKFNscnVEZXNjICpjdGwsIGludCBzbG90bm8sIFNs cnVXcml0ZUFsbCBmZGF0YSkKIHsKIAlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVk OwogCWludDY0CQlwYWdlbm8gPSBzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub107CkBAIC03 NjEsNyArNzc2LDcgQEAgU2xydUludGVybmFsV3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQg c2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpCiAgKiBmZGF0YSBpcyBhbHdheXMgcGFzc2Vk IGEgTlVMTCBoZXJlLgogICovCiB2b2lkCi1TaW1wbGVMcnVXcml0ZVBhZ2UoU2xydUN0bCBj dGwsIGludCBzbG90bm8pCitTaW1wbGVMcnVXcml0ZVBhZ2UoU2xydURlc2MgKmN0bCwgaW50 IHNsb3RubykKIHsKIAlBc3NlcnQoY3RsLT5zaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10g IT0gU0xSVV9QQUdFX0VNUFRZKTsKIApAQCAtNzc1LDcgKzc5MCw3IEBAIFNpbXBsZUxydVdy aXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubykKICAqIGxhcmdlIGVub3VnaCB0byBj b250YWluIHRoZSBnaXZlbiBwYWdlLgogICovCiBib29sCi1TaW1wbGVMcnVEb2VzUGh5c2lj YWxQYWdlRXhpc3QoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubykKK1NpbXBsZUxydURvZXNQ aHlzaWNhbFBhZ2VFeGlzdChTbHJ1RGVzYyAqY3RsLCBpbnQ2NCBwYWdlbm8pCiB7CiAJaW50 NjQJCXNlZ25vID0gcGFnZW5vIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKIAlpbnQJCQly cGFnZW5vID0gcGFnZW5vICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKQEAgLTgzMyw3ICs4 NDgsNyBAQCBTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3QoU2xydUN0bCBjdGwsIGlu dDY0IHBhZ2VubykKICAqIHJlYWQvd3JpdGUgb3BlcmF0aW9ucy4gIFdlIGNvdWxkIGNhY2hl IG9uZSB2aXJ0dWFsIGZpbGUgcG9pbnRlciAuLi4KICAqLwogc3RhdGljIGJvb2wKLVNscnVQ aHlzaWNhbFJlYWRQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sIGludCBzbG90bm8p CitTbHJ1UGh5c2ljYWxSZWFkUGFnZShTbHJ1RGVzYyAqY3RsLCBpbnQ2NCBwYWdlbm8sIGlu dCBzbG90bm8pCiB7CiAJU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKIAlpbnQ2 NAkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwpAQCAtOTA1LDcg KzkyMCw3IEBAIFNscnVQaHlzaWNhbFJlYWRQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdl bm8sIGludCBzbG90bm8pCiAgKiBTaW1wbGVMcnVXcml0ZUFsbC4KICAqLwogc3RhdGljIGJv b2wKLVNscnVQaHlzaWNhbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBp bnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpCitTbHJ1UGh5c2ljYWxXcml0ZVBhZ2Uo U2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vLCBpbnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwg ZmRhdGEpCiB7CiAJU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKIAlpbnQ2NAkJ c2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwpAQCAtMTAzNywxMSAr MTA1MiwxMSBAQCBTbHJ1UGh5c2ljYWxXcml0ZVBhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBh Z2VubywgaW50IHNsb3RubywgU2xydVdyaXRlQWxsIGZkYXRhKQogCXBnc3RhdF9yZXBvcnRf d2FpdF9lbmQoKTsKIAogCS8qIFF1ZXVlIHVwIGEgc3luYyByZXF1ZXN0IGZvciB0aGUgY2hl Y2twb2ludGVyLiAqLwotCWlmIChjdGwtPnN5bmNfaGFuZGxlciAhPSBTWU5DX0hBTkRMRVJf Tk9ORSkKKwlpZiAoY3RsLT5vcHRpb25zLnN5bmNfaGFuZGxlciAhPSBTWU5DX0hBTkRMRVJf Tk9ORSkKIAl7CiAJCUZpbGVUYWcJCXRhZzsKIAotCQlJTklUX1NMUlVGSUxFVEFHKHRhZywg Y3RsLT5zeW5jX2hhbmRsZXIsIHNlZ25vKTsKKwkJSU5JVF9TTFJVRklMRVRBRyh0YWcsIGN0 bC0+b3B0aW9ucy5zeW5jX2hhbmRsZXIsIHNlZ25vKTsKIAkJaWYgKCFSZWdpc3RlclN5bmNS ZXF1ZXN0KCZ0YWcsIFNZTkNfUkVRVUVTVCwgZmFsc2UpKQogCQl7CiAJCQkvKiBObyBzcGFj ZSB0byBlbnF1ZXVlIHN5bmMgcmVxdWVzdC4gIERvIGl0IHN5bmNocm9ub3VzbHkuICovCkBA IC0xMDc3LDcgKzEwOTIsNyBAQCBTbHJ1UGh5c2ljYWxXcml0ZVBhZ2UoU2xydUN0bCBjdGws IGludDY0IHBhZ2VubywgaW50IHNsb3RubywgU2xydVdyaXRlQWxsIGZkYXRhKQogICogU2xy dVBoeXNpY2FsV3JpdGVQYWdlLiAgQ2FsbCB0aGlzIGFmdGVyIGNsZWFuaW5nIHVwIHNoYXJl ZC1tZW1vcnkgc3RhdGUuCiAgKi8KIHN0YXRpYyB2b2lkCi1TbHJ1UmVwb3J0SU9FcnJvcihT bHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBjb25zdCB2b2lkICpvcGFxdWVfZGF0YSkKK1Ns cnVSZXBvcnRJT0Vycm9yKFNscnVEZXNjICpjdGwsIGludDY0IHBhZ2VubywgY29uc3Qgdm9p ZCAqb3BhcXVlX2RhdGEpCiB7CiAJaW50NjQJCXNlZ25vID0gcGFnZW5vIC8gU0xSVV9QQUdF U19QRVJfU0VHTUVOVDsKIAlpbnQJCQlycGFnZW5vID0gcGFnZW5vICUgU0xSVV9QQUdFU19Q RVJfU0VHTUVOVDsKQEAgLTEwOTIsMTQgKzExMDcsMTQgQEAgU2xydVJlcG9ydElPRXJyb3Io U2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpCiAJ CQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKIAkJ CQkJIGVycm1zZygiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgcGF0aCksCi0J CQkJCSBvcGFxdWVfZGF0YSA/IGN0bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFxdWVf ZGF0YSkgOiAwKSk7CisJCQkJCSBvcGFxdWVfZGF0YSA/IGN0bC0+b3B0aW9ucy5lcnJkZXRh aWxfZm9yX2lvX2Vycm9yKG9wYXF1ZV9kYXRhKSA6IDApKTsKIAkJCWJyZWFrOwogCQljYXNl IFNMUlVfU0VFS19GQUlMRUQ6CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZV9m b3JfZmlsZV9hY2Nlc3MoKSwKIAkJCQkJIGVycm1zZygiY291bGQgbm90IHNlZWsgaW4gZmls ZSBcIiVzXCIgdG8gb2Zmc2V0ICVkOiAlbSIsCiAJCQkJCQkJcGF0aCwgb2Zmc2V0KSwKLQkJ CQkJIG9wYXF1ZV9kYXRhID8gY3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9wYXF1ZV9k YXRhKSA6IDApKTsKKwkJCQkJIG9wYXF1ZV9kYXRhID8gY3RsLT5vcHRpb25zLmVycmRldGFp bF9mb3JfaW9fZXJyb3Iob3BhcXVlX2RhdGEpIDogMCkpOwogCQkJYnJlYWs7CiAJCWNhc2Ug U0xSVV9SRUFEX0ZBSUxFRDoKIAkJCWlmIChlcnJubykKQEAgLTExMDcsMTIgKzExMjIsMTIg QEAgU2xydVJlcG9ydElPRXJyb3IoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgY29uc3Qg dm9pZCAqb3BhcXVlX2RhdGEpCiAJCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwK IAkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZWFkIGZyb20gZmlsZSBcIiVzXCIgYXQgb2Zm c2V0ICVkOiAlbSIsCiAJCQkJCQkJCXBhdGgsIG9mZnNldCksCi0JCQkJCQkgb3BhcXVlX2Rh dGEgPyBjdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3Iob3BhcXVlX2RhdGEpIDogMCkpOwor CQkJCQkJIG9wYXF1ZV9kYXRhID8gY3RsLT5vcHRpb25zLmVycmRldGFpbF9mb3JfaW9fZXJy b3Iob3BhcXVlX2RhdGEpIDogMCkpOwogCQkJZWxzZQogCQkJCWVyZXBvcnQoRVJST1IsCiAJ CQkJCQkoZXJybXNnKCJjb3VsZCBub3QgcmVhZCBmcm9tIGZpbGUgXCIlc1wiIGF0IG9mZnNl dCAlZDogcmVhZCB0b28gZmV3IGJ5dGVzIiwKIAkJCQkJCQkJcGF0aCwgb2Zmc2V0KSwKLQkJ CQkJCSBvcGFxdWVfZGF0YSA/IGN0bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFxdWVf ZGF0YSkgOiAwKSk7CisJCQkJCQkgb3BhcXVlX2RhdGEgPyBjdGwtPm9wdGlvbnMuZXJyZGV0 YWlsX2Zvcl9pb19lcnJvcihvcGFxdWVfZGF0YSkgOiAwKSk7CiAJCQlicmVhazsKIAkJY2Fz ZSBTTFJVX1dSSVRFX0ZBSUxFRDoKIAkJCWlmIChlcnJubykKQEAgLTExMjAsMjYgKzExMzUs MjYgQEAgU2xydVJlcG9ydElPRXJyb3IoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgY29u c3Qgdm9pZCAqb3BhcXVlX2RhdGEpCiAJCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3Mo KSwKIAkJCQkJCSBlcnJtc2coIkNvdWxkIG5vdCB3cml0ZSB0byBmaWxlIFwiJXNcIiBhdCBv ZmZzZXQgJWQ6ICVtIiwKIAkJCQkJCQkJcGF0aCwgb2Zmc2V0KSwKLQkJCQkJCSBvcGFxdWVf ZGF0YSA/IGN0bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFxdWVfZGF0YSkgOiAwKSk7 CisJCQkJCQkgb3BhcXVlX2RhdGEgPyBjdGwtPm9wdGlvbnMuZXJyZGV0YWlsX2Zvcl9pb19l cnJvcihvcGFxdWVfZGF0YSkgOiAwKSk7CiAJCQllbHNlCiAJCQkJZXJlcG9ydChFUlJPUiwK IAkJCQkJCShlcnJtc2coIkNvdWxkIG5vdCB3cml0ZSB0byBmaWxlIFwiJXNcIiBhdCBvZmZz ZXQgJWQ6IHdyb3RlIHRvbyBmZXcgYnl0ZXMuIiwKIAkJCQkJCQkJcGF0aCwgb2Zmc2V0KSwK LQkJCQkJCSBvcGFxdWVfZGF0YSA/IGN0bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFx dWVfZGF0YSkgOiAwKSk7CisJCQkJCQkgb3BhcXVlX2RhdGEgPyBjdGwtPm9wdGlvbnMuZXJy ZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFxdWVfZGF0YSkgOiAwKSk7CiAJCQlicmVhazsKIAkJ Y2FzZSBTTFJVX0ZTWU5DX0ZBSUxFRDoKIAkJCWVyZXBvcnQoZGF0YV9zeW5jX2VsZXZlbChF UlJPUiksCiAJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAogCQkJCQkgZXJybXNn KCJjb3VsZCBub3QgZnN5bmMgZmlsZSBcIiVzXCI6ICVtIiwKIAkJCQkJCQlwYXRoKSwKLQkJ CQkJIG9wYXF1ZV9kYXRhID8gY3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9wYXF1ZV9k YXRhKSA6IDApKTsKKwkJCQkJIG9wYXF1ZV9kYXRhID8gY3RsLT5vcHRpb25zLmVycmRldGFp bF9mb3JfaW9fZXJyb3Iob3BhcXVlX2RhdGEpIDogMCkpOwogCQkJYnJlYWs7CiAJCWNhc2Ug U0xSVV9DTE9TRV9GQUlMRUQ6CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZV9m b3JfZmlsZV9hY2Nlc3MoKSwKIAkJCQkJIGVycm1zZygiY291bGQgbm90IGNsb3NlIGZpbGUg XCIlc1wiOiAlbSIsCiAJCQkJCQkJcGF0aCksCi0JCQkJCSBvcGFxdWVfZGF0YSA/IGN0bC0+ ZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFxdWVfZGF0YSkgOiAwKSk7CisJCQkJCSBvcGFx dWVfZGF0YSA/IGN0bC0+b3B0aW9ucy5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9wYXF1ZV9k YXRhKSA6IDApKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogY2FuJ3QgZ2V0IGhl cmUsIHdlIHRydXN0ICovCkBAIC0xMTk5LDcgKzEyMTQsNyBAQCBTbHJ1UmVjZW50bHlVc2Vk KFNscnVTaGFyZWQgc2hhcmVkLCBpbnQgc2xvdG5vKQogICogVGhlIGNvcnJlY3QgYmFuayBs b2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0Lgog ICovCiBzdGF0aWMgaW50Ci1TbHJ1U2VsZWN0TFJVUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQg cGFnZW5vKQorU2xydVNlbGVjdExSVVBhZ2UoU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5v KQogewogCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7CiAKQEAgLTEyOTEsOCAr MTMwNiw4IEBAIFNscnVTZWxlY3RMUlVQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8p CiAJCQl7CiAJCQkJaWYgKHRoaXNfZGVsdGEgPiBiZXN0X3ZhbGlkX2RlbHRhIHx8CiAJCQkJ CSh0aGlzX2RlbHRhID09IGJlc3RfdmFsaWRfZGVsdGEgJiYKLQkJCQkJIGN0bC0+UGFnZVBy ZWNlZGVzKHRoaXNfcGFnZV9udW1iZXIsCi0JCQkJCQkJCQkgICBiZXN0X3ZhbGlkX3BhZ2Vf bnVtYmVyKSkpCisJCQkJCSBjdGwtPm9wdGlvbnMuUGFnZVByZWNlZGVzKHRoaXNfcGFnZV9u dW1iZXIsCisJCQkJCQkJCQkJCSAgIGJlc3RfdmFsaWRfcGFnZV9udW1iZXIpKSkKIAkJCQl7 CiAJCQkJCWJlc3R2YWxpZHNsb3QgPSBzbG90bm87CiAJCQkJCWJlc3RfdmFsaWRfZGVsdGEg PSB0aGlzX2RlbHRhOwpAQCAtMTMwMyw4ICsxMzE4LDggQEAgU2xydVNlbGVjdExSVVBhZ2Uo U2xydUN0bCBjdGwsIGludDY0IHBhZ2VubykKIAkJCXsKIAkJCQlpZiAodGhpc19kZWx0YSA+ IGJlc3RfaW52YWxpZF9kZWx0YSB8fAogCQkJCQkodGhpc19kZWx0YSA9PSBiZXN0X2ludmFs aWRfZGVsdGEgJiYKLQkJCQkJIGN0bC0+UGFnZVByZWNlZGVzKHRoaXNfcGFnZV9udW1iZXIs Ci0JCQkJCQkJCQkgICBiZXN0X2ludmFsaWRfcGFnZV9udW1iZXIpKSkKKwkJCQkJIGN0bC0+ b3B0aW9ucy5QYWdlUHJlY2VkZXModGhpc19wYWdlX251bWJlciwKKwkJCQkJCQkJCQkJICAg YmVzdF9pbnZhbGlkX3BhZ2VfbnVtYmVyKSkpCiAJCQkJewogCQkJCQliZXN0aW52YWxpZHNs b3QgPSBzbG90bm87CiAJCQkJCWJlc3RfaW52YWxpZF9kZWx0YSA9IHRoaXNfZGVsdGE7CkBA IC0xMzUyLDcgKzEzNjcsNyBAQCBTbHJ1U2VsZWN0TFJVUGFnZShTbHJ1Q3RsIGN0bCwgaW50 NjQgcGFnZW5vKQogICogZW50cmllcyBhcmUgb24gZGlzay4KICAqLwogdm9pZAotU2ltcGxl THJ1V3JpdGVBbGwoU2xydUN0bCBjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVkKQorU2ltcGxl THJ1V3JpdGVBbGwoU2xydURlc2MgKmN0bCwgYm9vbCBhbGxvd19yZWRpcnRpZWQpCiB7CiAJ U2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKIAlTbHJ1V3JpdGVBbGxEYXRhIGZk YXRhOwpAQCAtMTQyMiw4ICsxNDM3LDggQEAgU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBj dGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVkKQogCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBh Z2VubywgTlVMTCk7CiAKIAkvKiBFbnN1cmUgdGhhdCBkaXJlY3RvcnkgZW50cmllcyBmb3Ig bmV3IGZpbGVzIGFyZSBvbiBkaXNrLiAqLwotCWlmIChjdGwtPnN5bmNfaGFuZGxlciAhPSBT WU5DX0hBTkRMRVJfTk9ORSkKLQkJZnN5bmNfZm5hbWUoY3RsLT5EaXIsIHRydWUpOworCWlm IChjdGwtPm9wdGlvbnMuc3luY19oYW5kbGVyICE9IFNZTkNfSEFORExFUl9OT05FKQorCQlm c3luY19mbmFtZShjdGwtPm9wdGlvbnMuRGlyLCB0cnVlKTsKIH0KIAogLyoKQEAgLTE0Mzgs NyArMTQ1Myw3IEBAIFNpbXBsZUxydVdyaXRlQWxsKFNscnVDdGwgY3RsLCBib29sIGFsbG93 X3JlZGlydGllZCkKICAqIGFmdGVyIGl0IGhhcyBhY2NydWVkIGZyZXNobHktd3JpdHRlbiBk YXRhLgogICovCiB2b2lkCi1TaW1wbGVMcnVUcnVuY2F0ZShTbHJ1Q3RsIGN0bCwgaW50NjQg Y3V0b2ZmUGFnZSkKK1NpbXBsZUxydVRydW5jYXRlKFNscnVEZXNjICpjdGwsIGludDY0IGN1 dG9mZlBhZ2UpCiB7CiAJU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKIAlpbnQJ CQlwcmV2YmFuazsKQEAgLTE0NjAsMTIgKzE0NzUsMTIgQEAgcmVzdGFydDoKIAkgKiBidWdz IGVsc2V3aGVyZSBpbiBTTFJVIGhhbmRsaW5nLCBzbyB3ZSBkb24ndCBjYXJlIGlmIHdlIHJl YWQgYSBzbGlnaHRseQogCSAqIG91dGRhdGVkIHZhbHVlOyB0aGVyZWZvcmUgd2UgZG9uJ3Qg YWRkIGEgbWVtb3J5IGJhcnJpZXIuCiAJICovCi0JaWYgKGN0bC0+UGFnZVByZWNlZGVzKHBn X2F0b21pY19yZWFkX3U2NCgmc2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIpLAotCQkJCQkJ ICBjdXRvZmZQYWdlKSkKKwlpZiAoY3RsLT5vcHRpb25zLlBhZ2VQcmVjZWRlcyhwZ19hdG9t aWNfcmVhZF91NjQoJnNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyKSwKKwkJCQkJCQkJICBj dXRvZmZQYWdlKSkKIAl7CiAJCWVyZXBvcnQoTE9HLAogCQkJCShlcnJtc2coImNvdWxkIG5v dCB0cnVuY2F0ZSBkaXJlY3RvcnkgXCIlc1wiOiBhcHBhcmVudCB3cmFwYXJvdW5kIiwKLQkJ CQkJCWN0bC0+RGlyKSkpOworCQkJCQkJY3RsLT5vcHRpb25zLkRpcikpKTsKIAkJcmV0dXJu OwogCX0KIApAQCAtMTQ4OCw3ICsxNTAzLDcgQEAgcmVzdGFydDoKIAogCQlpZiAoc2hhcmVk LT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9FTVBUWSkKIAkJCWNvbnRpbnVl OwotCQlpZiAoIWN0bC0+UGFnZVByZWNlZGVzKHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5v XSwgY3V0b2ZmUGFnZSkpCisJCWlmICghY3RsLT5vcHRpb25zLlBhZ2VQcmVjZWRlcyhzaGFy ZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10sIGN1dG9mZlBhZ2UpKQogCQkJY29udGludWU7CiAK IAkJLyoKQEAgLTE1MzMsMTYgKzE1NDgsMTYgQEAgcmVzdGFydDoKICAqIHRoZXkgZWl0aGVy IGNhbid0IHlldCBjb250YWluIGFueXRoaW5nLCBvciBoYXZlIGFscmVhZHkgYmVlbiBjbGVh bmVkIG91dC4KICAqLwogc3RhdGljIHZvaWQKLVNscnVJbnRlcm5hbERlbGV0ZVNlZ21lbnQo U2xydUN0bCBjdGwsIGludDY0IHNlZ25vKQorU2xydUludGVybmFsRGVsZXRlU2VnbWVudChT bHJ1RGVzYyAqY3RsLCBpbnQ2NCBzZWdubykKIHsKIAljaGFyCQlwYXRoW01BWFBHUEFUSF07 CiAKIAkvKiBGb3JnZXQgYW55IGZzeW5jIHJlcXVlc3RzIHF1ZXVlZCBmb3IgdGhpcyBzZWdt ZW50LiAqLwotCWlmIChjdGwtPnN5bmNfaGFuZGxlciAhPSBTWU5DX0hBTkRMRVJfTk9ORSkK KwlpZiAoY3RsLT5vcHRpb25zLnN5bmNfaGFuZGxlciAhPSBTWU5DX0hBTkRMRVJfTk9ORSkK IAl7CiAJCUZpbGVUYWcJCXRhZzsKIAotCQlJTklUX1NMUlVGSUxFVEFHKHRhZywgY3RsLT5z eW5jX2hhbmRsZXIsIHNlZ25vKTsKKwkJSU5JVF9TTFJVRklMRVRBRyh0YWcsIGN0bC0+b3B0 aW9ucy5zeW5jX2hhbmRsZXIsIHNlZ25vKTsKIAkJUmVnaXN0ZXJTeW5jUmVxdWVzdCgmdGFn LCBTWU5DX0ZPUkdFVF9SRVFVRVNULCB0cnVlKTsKIAl9CiAKQEAgLTE1NTYsNyArMTU3MSw3 IEBAIFNscnVJbnRlcm5hbERlbGV0ZVNlZ21lbnQoU2xydUN0bCBjdGwsIGludDY0IHNlZ25v KQogICogRGVsZXRlIGFuIGluZGl2aWR1YWwgU0xSVSBzZWdtZW50LCBpZGVudGlmaWVkIGJ5 IHRoZSBzZWdtZW50IG51bWJlci4KICAqLwogdm9pZAotU2xydURlbGV0ZVNlZ21lbnQoU2xy dUN0bCBjdGwsIGludDY0IHNlZ25vKQorU2xydURlbGV0ZVNlZ21lbnQoU2xydURlc2MgKmN0 bCwgaW50NjQgc2Vnbm8pCiB7CiAJU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsK IAlpbnQJCQlwcmV2YmFuayA9IFNsb3RHZXRCYW5rTnVtYmVyKDApOwpAQCAtMTYzMywxOSAr MTY0OCwxOSBAQCByZXN0YXJ0OgogICogZmlyc3Q+PWN1dG9mZiAmJiBsYXN0Pj1jdXRvZmY6 IG5vOyBldmVyeSBwYWdlIG9mIHRoaXMgc2VnbWVudCBpcyB0b28geW91bmcKICAqLwogc3Rh dGljIGJvb2wKLVNscnVNYXlEZWxldGVTZWdtZW50KFNscnVDdGwgY3RsLCBpbnQ2NCBzZWdw YWdlLCBpbnQ2NCBjdXRvZmZQYWdlKQorU2xydU1heURlbGV0ZVNlZ21lbnQoU2xydURlc2Mg KmN0bCwgaW50NjQgc2VncGFnZSwgaW50NjQgY3V0b2ZmUGFnZSkKIHsKIAlpbnQ2NAkJc2Vn X2xhc3RfcGFnZSA9IHNlZ3BhZ2UgKyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UIC0gMTsKIAog CUFzc2VydChzZWdwYWdlICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCA9PSAwKTsKIAotCXJl dHVybiAoY3RsLT5QYWdlUHJlY2VkZXMoc2VncGFnZSwgY3V0b2ZmUGFnZSkgJiYKLQkJCWN0 bC0+UGFnZVByZWNlZGVzKHNlZ19sYXN0X3BhZ2UsIGN1dG9mZlBhZ2UpKTsKKwlyZXR1cm4g KGN0bC0+b3B0aW9ucy5QYWdlUHJlY2VkZXMoc2VncGFnZSwgY3V0b2ZmUGFnZSkgJiYKKwkJ CWN0bC0+b3B0aW9ucy5QYWdlUHJlY2VkZXMoc2VnX2xhc3RfcGFnZSwgY3V0b2ZmUGFnZSkp OwogfQogCiAjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwogc3RhdGljIHZvaWQKLVNscnVQ YWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UsIHVpbnQz MiBvZmZzZXQpCitTbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChTbHJ1RGVzYyAqY3RsLCBp bnQgcGVyX3BhZ2UsIHVpbnQzMiBvZmZzZXQpCiB7CiAJVHJhbnNhY3Rpb25JZCBsaHMsCiAJ CQkJcmhzOwpAQCAtMTY1NCw2ICsxNjY5LDkgQEAgU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZz ZXQoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkKIAlUcmFuc2Fj dGlvbklkIG5ld2VzdFhhY3QsCiAJCQkJb2xkZXN0WGFjdDsKIAorCS8qIFRoaXMgbXVzdCBi ZSBjYWxsZWQgYWZ0ZXIgdGhlIFNscnUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgKi8KKwlBc3Nl cnQoY3RsLT5vcHRpb25zLlBhZ2VQcmVjZWRlcyk7CisKIAkvKgogCSAqIENvbXBhcmUgYW4g WElEIHBhaXIgaGF2aW5nIHVuZGVmaW5lZCBvcmRlciAoc2VlIFJGQyAxOTgyKSwgYSBwYWly IGF0CiAJICogIm9wcG9zaXRlIGVuZHMiIG9mIHRoZSBYSUQgc3BhY2UuICBUcmFuc2FjdGlv bklkUHJlY2VkZXMoKSB0cmVhdHMgZWFjaApAQCAtMTY3MCwxOSArMTY4OCwxOSBAQCBTbHJ1 UGFnZVByZWNlZGVzVGVzdE9mZnNldChTbHJ1Q3RsIGN0bCwgaW50IHBlcl9wYWdlLCB1aW50 MzIgb2Zmc2V0KQogCUFzc2VydCghVHJhbnNhY3Rpb25JZFByZWNlZGVzKHJocywgbGhzICsg MSkpOwogCUFzc2VydCghVHJhbnNhY3Rpb25JZEZvbGxvd3NPckVxdWFscyhsaHMsIHJocykp OwogCUFzc2VydCghVHJhbnNhY3Rpb25JZEZvbGxvd3NPckVxdWFscyhyaHMsIGxocykpOwot CUFzc2VydCghY3RsLT5QYWdlUHJlY2VkZXMobGhzIC8gcGVyX3BhZ2UsIGxocyAvIHBlcl9w YWdlKSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQcmVjZWRlcyhsaHMgLyBwZXJfcGFnZSwgcmhz IC8gcGVyX3BhZ2UpKTsKLQlBc3NlcnQoIWN0bC0+UGFnZVByZWNlZGVzKHJocyAvIHBlcl9w YWdlLCBsaHMgLyBwZXJfcGFnZSkpOwotCUFzc2VydCghY3RsLT5QYWdlUHJlY2VkZXMoKGxo cyAtIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOwotCUFzc2VydChj dGwtPlBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxocyAtIDMgKiBwZXJfcGFnZSkg LyBwZXJfcGFnZSkpOwotCUFzc2VydChjdGwtPlBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFn ZSwgKGxocyAtIDIgKiBwZXJfcGFnZSkgLyBwZXJfcGFnZSkpOwotCUFzc2VydChjdGwtPlBh Z2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxocyAtIDEgKiBwZXJfcGFnZSkgLyBwZXJf cGFnZSkKKwlBc3NlcnQoIWN0bC0+b3B0aW9ucy5QYWdlUHJlY2VkZXMobGhzIC8gcGVyX3Bh Z2UsIGxocyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KCFjdGwtPm9wdGlvbnMuUGFnZVByZWNl ZGVzKGxocyAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOworCUFzc2VydCghY3RsLT5v cHRpb25zLlBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgbGhzIC8gcGVyX3BhZ2UpKTsK KwlBc3NlcnQoIWN0bC0+b3B0aW9ucy5QYWdlUHJlY2VkZXMoKGxocyAtIHBlcl9wYWdlKSAv IHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOworCUFzc2VydChjdGwtPm9wdGlvbnMuUGFn ZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMyAqIHBlcl9wYWdlKSAvIHBlcl9w YWdlKSk7CisJQXNzZXJ0KGN0bC0+b3B0aW9ucy5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3Bh Z2UsIChsaHMgLSAyICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQoY3RsLT5v cHRpb25zLlBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxocyAtIDEgKiBwZXJfcGFn ZSkgLyBwZXJfcGFnZSkKIAkJICAgfHwgKDFVIDw8IDMxKSAlIHBlcl9wYWdlICE9IDApOwkv KiBTZWUgQ29tbWl0VHNQYWdlUHJlY2VkZXMoKSAqLwotCUFzc2VydChjdGwtPlBhZ2VQcmVj ZWRlcygobGhzICsgMSAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkK KwlBc3NlcnQoY3RsLT5vcHRpb25zLlBhZ2VQcmVjZWRlcygobGhzICsgMSAqIHBlcl9wYWdl KSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkKIAkJICAgfHwgKDFVIDw8IDMxKSAlIHBl cl9wYWdlICE9IDApOwotCUFzc2VydChjdGwtPlBhZ2VQcmVjZWRlcygobGhzICsgMiAqIHBl cl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOwotCUFzc2VydChjdGwtPlBh Z2VQcmVjZWRlcygobGhzICsgMyAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJf cGFnZSkpOwotCUFzc2VydCghY3RsLT5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChs aHMgKyBwZXJfcGFnZSkgLyBwZXJfcGFnZSkpOworCUFzc2VydChjdGwtPm9wdGlvbnMuUGFn ZVByZWNlZGVzKChsaHMgKyAyICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9w YWdlKSk7CisJQXNzZXJ0KGN0bC0+b3B0aW9ucy5QYWdlUHJlY2VkZXMoKGxocyArIDMgKiBw ZXJfcGFnZSkgLyBwZXJfcGFnZSwgcmhzIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQoIWN0bC0+ b3B0aW9ucy5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgKyBwZXJfcGFnZSkg LyBwZXJfcGFnZSkpOwogCiAJLyoKIAkgKiBHZXROZXdUcmFuc2FjdGlvbklkKCkgaGFzIGFz c2lnbmVkIHRoZSBsYXN0IFhJRCBpdCBjYW4gc2FmZWx5IHVzZSwgYW5kCkBAIC0xNzI3LDcg KzE3NDUsNyBAQCBTbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChTbHJ1Q3RsIGN0bCwgaW50 IHBlcl9wYWdlLCB1aW50MzIgb2Zmc2V0KQogICogZG8gbm90IGFwcGx5IHRvIHRoZW0uKQog ICovCiB2b2lkCi1TbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNscnVDdGwgY3RsLCBpbnQg cGVyX3BhZ2UpCitTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNscnVEZXNjICpjdGwsIGlu dCBwZXJfcGFnZSkKIHsKIAkvKiBUZXN0IGZpcnN0LCBtaWRkbGUgYW5kIGxhc3QgZW50cmll cyBvZiBhIHBhZ2UuICovCiAJU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoY3RsLCBwZXJf cGFnZSwgMCk7CkBAIC0xNzQyLDcgKzE3NjAsNyBAQCBTbHJ1UGFnZVByZWNlZGVzVW5pdFRl c3RzKFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UpCiAgKgkJb25lIGNvbnRhaW5pbmcgdGhl IHBhZ2UgcGFzc2VkIGFzICJkYXRhIi4KICAqLwogYm9vbAotU2xydVNjYW5EaXJDYlJlcG9y dFByZXNlbmNlKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50NjQgc2VncGFnZSwK K1NscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShTbHJ1RGVzYyAqY3RsLCBjaGFyICpmaWxl bmFtZSwgaW50NjQgc2VncGFnZSwKIAkJCQkJCQl2b2lkICpkYXRhKQogewogCWludDY0CQlj dXRvZmZQYWdlID0gKihpbnQ2NCAqKSBkYXRhOwpAQCAtMTc1OCw3ICsxNzc2LDcgQEAgU2xy dVNjYW5EaXJDYlJlcG9ydFByZXNlbmNlKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwg aW50NjQgc2VncGFnZSwKICAqCQlUaGlzIGNhbGxiYWNrIGRlbGV0ZXMgc2VnbWVudHMgcHJp b3IgdG8gdGhlIG9uZSBwYXNzZWQgaW4gYXMgImRhdGEiLgogICovCiBzdGF0aWMgYm9vbAot U2xydVNjYW5EaXJDYkRlbGV0ZUN1dG9mZihTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUs IGludDY0IHNlZ3BhZ2UsCitTbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2ZmKFNscnVEZXNjICpj dGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQ2NCBzZWdwYWdlLAogCQkJCQkJICB2b2lkICpkYXRh KQogewogCWludDY0CQljdXRvZmZQYWdlID0gKihpbnQ2NCAqKSBkYXRhOwpAQCAtMTc3NCw3 ICsxNzkyLDcgQEAgU2xydVNjYW5EaXJDYkRlbGV0ZUN1dG9mZihTbHJ1Q3RsIGN0bCwgY2hh ciAqZmlsZW5hbWUsIGludDY0IHNlZ3BhZ2UsCiAgKgkJVGhpcyBjYWxsYmFjayBkZWxldGVz IGFsbCBzZWdtZW50cy4KICAqLwogYm9vbAotU2xydVNjYW5EaXJDYkRlbGV0ZUFsbChTbHJ1 Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsIGludDY0IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCitT bHJ1U2NhbkRpckNiRGVsZXRlQWxsKFNscnVEZXNjICpjdGwsIGNoYXIgKmZpbGVuYW1lLCBp bnQ2NCBzZWdwYWdlLCB2b2lkICpkYXRhKQogewogCVNscnVJbnRlcm5hbERlbGV0ZVNlZ21l bnQoY3RsLCBzZWdwYWdlIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVCk7CiAKQEAgLTE3ODgs OSArMTgwNiw5IEBAIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwoU2xydUN0bCBjdGwsIGNoYXIg KmZpbGVuYW1lLCBpbnQ2NCBzZWdwYWdlLCB2b2lkICpkYXRhKQogICogU0xSVSBzZWdtZW50 LgogICovCiBzdGF0aWMgaW5saW5lIGJvb2wKLVNscnVDb3JyZWN0U2VnbWVudEZpbGVuYW1l TGVuZ3RoKFNscnVDdGwgY3RsLCBzaXplX3QgbGVuKQorU2xydUNvcnJlY3RTZWdtZW50Rmls ZW5hbWVMZW5ndGgoU2xydURlc2MgKmN0bCwgc2l6ZV90IGxlbikKIHsKLQlpZiAoY3RsLT5s b25nX3NlZ21lbnRfbmFtZXMpCisJaWYgKGN0bC0+b3B0aW9ucy5sb25nX3NlZ21lbnRfbmFt ZXMpCiAJCXJldHVybiAobGVuID09IDE1KTsJCS8qIHNlZSBTbHJ1RmlsZU5hbWUoKSAqLwog CWVsc2UKIApAQCAtMTgyMSw3ICsxODM5LDcgQEAgU2xydUNvcnJlY3RTZWdtZW50RmlsZW5h bWVMZW5ndGgoU2xydUN0bCBjdGwsIHNpemVfdCBsZW4pCiAgKiBOb3RlIHRoYXQgbm8gbG9j a2luZyBpcyBhcHBsaWVkLgogICovCiBib29sCi1TbHJ1U2NhbkRpcmVjdG9yeShTbHJ1Q3Rs IGN0bCwgU2xydVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSkKK1NscnVTY2Fu RGlyZWN0b3J5KFNscnVEZXNjICpjdGwsIFNscnVTY2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZv aWQgKmRhdGEpCiB7CiAJYm9vbAkJcmV0dmFsID0gZmFsc2U7CiAJRElSCQkgICAqY2xkaXI7 CkBAIC0xODI5LDggKzE4NDcsOCBAQCBTbHJ1U2NhbkRpcmVjdG9yeShTbHJ1Q3RsIGN0bCwg U2xydVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSkKIAlpbnQ2NAkJc2Vnbm87 CiAJaW50NjQJCXNlZ3BhZ2U7CiAKLQljbGRpciA9IEFsbG9jYXRlRGlyKGN0bC0+RGlyKTsK LQl3aGlsZSAoKGNsZGUgPSBSZWFkRGlyKGNsZGlyLCBjdGwtPkRpcikpICE9IE5VTEwpCisJ Y2xkaXIgPSBBbGxvY2F0ZURpcihjdGwtPm9wdGlvbnMuRGlyKTsKKwl3aGlsZSAoKGNsZGUg PSBSZWFkRGlyKGNsZGlyLCBjdGwtPm9wdGlvbnMuRGlyKSkgIT0gTlVMTCkKIAl7CiAJCXNp emVfdAkJbGVuOwogCkBAIC0xODQzLDcgKzE4NjEsNyBAQCBTbHJ1U2NhbkRpcmVjdG9yeShT bHJ1Q3RsIGN0bCwgU2xydVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSkKIAkJ CXNlZ3BhZ2UgPSBzZWdubyAqIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CiAKIAkJCWVsb2co REVCVUcyLCAiU2xydVNjYW5EaXJlY3RvcnkgaW52b2tpbmcgY2FsbGJhY2sgb24gJXMvJXMi LAotCQkJCSBjdGwtPkRpciwgY2xkZS0+ZF9uYW1lKTsKKwkJCQkgY3RsLT5vcHRpb25zLkRp ciwgY2xkZS0+ZF9uYW1lKTsKIAkJCXJldHZhbCA9IGNhbGxiYWNrKGN0bCwgY2xkZS0+ZF9u YW1lLCBzZWdwYWdlLCBkYXRhKTsKIAkJCWlmIChyZXR2YWwpCiAJCQkJYnJlYWs7CkBAIC0x ODYxLDcgKzE4NzksNyBAQCBTbHJ1U2NhbkRpcmVjdG9yeShTbHJ1Q3RsIGN0bCwgU2xydVNj YW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSkKICAqIHBlcmZvcm1zIHRoZSBmc3lu Yy4KICAqLwogaW50Ci1TbHJ1U3luY0ZpbGVUYWcoU2xydUN0bCBjdGwsIGNvbnN0IEZpbGVU YWcgKmZ0YWcsIGNoYXIgKnBhdGgpCitTbHJ1U3luY0ZpbGVUYWcoU2xydURlc2MgKmN0bCwg Y29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkKIHsKIAlpbnQJCQlmZDsKIAlpbnQJ CQlzYXZlX2Vycm5vOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v c3VidHJhbnMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMKaW5k ZXggYzZjZTcxZmM3MDMuLmNhMjczZmI0NjgwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3N1YnRyYW5zLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvdHJh bnNhbS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnX3RyYWNlLmgi CisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3Vj X2hvb2tzLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogCkBAIC02NiwxNiArNjcs MjIgQEAgVHJhbnNhY3Rpb25JZFRvUGFnZShUcmFuc2FjdGlvbklkIHhpZCkKICNkZWZpbmUg VHJhbnNhY3Rpb25JZFRvRW50cnkoeGlkKSAoKHhpZCkgJSAoVHJhbnNhY3Rpb25JZCkgU1VC VFJBTlNfWEFDVFNfUEVSX1BBR0UpCiAKIAorc3RhdGljIHZvaWQgU1VCVFJBTlNTaG1lbVJl cXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIFNVQlRSQU5TU2htZW1Jbml0KHZvaWQg KmFyZyk7CitzdGF0aWMgYm9vbCBTdWJUcmFuc1BhZ2VQcmVjZWRlcyhpbnQ2NCBwYWdlMSwg aW50NjQgcGFnZTIpOworc3RhdGljIGludAlzdWJ0cmFuc19lcnJkZXRhaWxfZm9yX2lvX2Vy cm9yKGNvbnN0IHZvaWQgKm9wYXF1ZV9kYXRhKTsKKworY29uc3QgU2htZW1DYWxsYmFja3Mg U1VCVFJBTlNTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IFNVQlRSQU5TU2ht ZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gU1VCVFJBTlNTaG1lbUluaXQsCit9OworCiAvKgog ICogTGluayB0byBzaGFyZWQtbWVtb3J5IGRhdGEgc3RydWN0dXJlcyBmb3IgU1VCVFJBTlMg Y29udHJvbAogICovCi1zdGF0aWMgU2xydUN0bERhdGEgU3ViVHJhbnNDdGxEYXRhOwotCi0j ZGVmaW5lIFN1YlRyYW5zQ3RsICAoJlN1YlRyYW5zQ3RsRGF0YSkKK3N0YXRpYyBTbHJ1RGVz YyBTdWJUcmFuc1NscnVEZXNjOwogCi0KLXN0YXRpYyBib29sIFN1YlRyYW5zUGFnZVByZWNl ZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7Ci1zdGF0aWMgaW50CXN1YnRyYW5zX2Vy cmRldGFpbF9mb3JfaW9fZXJyb3IoY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpOworI2RlZmlu ZSBTdWJUcmFuc0N0bCAgKCZTdWJUcmFuc1NscnVEZXNjKQogCiAKIC8qCkBAIC0yMDcsMTcg KzIxNCwxMyBAQCBTVUJUUkFOU1NobWVtQnVmZmVycyh2b2lkKQogCXJldHVybiBNaW4oTWF4 KDE2LCBzdWJ0cmFuc2FjdGlvbl9idWZmZXJzKSwgU0xSVV9NQVhfQUxMT1dFRF9CVUZGRVJT KTsKIH0KIAorCisKIC8qCi0gKiBJbml0aWFsaXphdGlvbiBvZiBzaGFyZWQgbWVtb3J5IGZv ciBTVUJUUkFOUworICogUmVnaXN0ZXIgc2hhcmVkIG1lbW9yeSBmb3IgU1VCVFJBTlMKICAq LwotU2l6ZQotU1VCVFJBTlNTaG1lbVNpemUodm9pZCkKLXsKLQlyZXR1cm4gU2ltcGxlTHJ1 U2htZW1TaXplKFNVQlRSQU5TU2htZW1CdWZmZXJzKCksIDApOwotfQotCi12b2lkCi1TVUJU UkFOU1NobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK1NVQlRSQU5TU2htZW1SZXF1ZXN0 KHZvaWQgKmFyZykKIHsKIAkvKiBJZiBhdXRvLXR1bmluZyBpcyByZXF1ZXN0ZWQsIG5vdyBp cyB0aGUgdGltZSB0byBkbyBpdCAqLwogCWlmIChzdWJ0cmFuc2FjdGlvbl9idWZmZXJzID09 IDApCkBAIC0yNDAsMTEgKzI0MywyNSBAQCBTVUJUUkFOU1NobWVtSW5pdCh2b2lkKQogCX0K IAlBc3NlcnQoc3VidHJhbnNhY3Rpb25fYnVmZmVycyAhPSAwKTsKIAotCVN1YlRyYW5zQ3Rs LT5QYWdlUHJlY2VkZXMgPSBTdWJUcmFuc1BhZ2VQcmVjZWRlczsKLQlTdWJUcmFuc0N0bC0+ ZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IHN1YnRyYW5zX2VycmRldGFpbF9mb3JfaW9fZXJy b3I7Ci0JU2ltcGxlTHJ1SW5pdChTdWJUcmFuc0N0bCwgInN1YnRyYW5zYWN0aW9uIiwgU1VC VFJBTlNTaG1lbUJ1ZmZlcnMoKSwgMCwKLQkJCQkgICJwZ19zdWJ0cmFucyIsIExXVFJBTkNI RV9TVUJUUkFOU19CVUZGRVIsCi0JCQkJICBMV1RSQU5DSEVfU1VCVFJBTlNfU0xSVSwgU1lO Q19IQU5ETEVSX05PTkUsIGZhbHNlKTsKKwlTaW1wbGVMcnVSZXF1ZXN0KCZTdWJUcmFuc1Ns cnVEZXNjLAorCQkubmFtZSA9ICJzdWJ0cmFuc2FjdGlvbiIsCisJCS5EaXIgPSAicGdfc3Vi dHJhbnMiLAorCQkubG9uZ19zZWdtZW50X25hbWVzID0gZmFsc2UsCisKKwkJLm5zbG90cyA9 IFNVQlRSQU5TU2htZW1CdWZmZXJzKCksCisKKwkJLnN5bmNfaGFuZGxlciA9IFNZTkNfSEFO RExFUl9OT05FLAorCQkuUGFnZVByZWNlZGVzID0gU3ViVHJhbnNQYWdlUHJlY2VkZXMsCisJ CS5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gc3VidHJhbnNfZXJyZGV0YWlsX2Zvcl9pb19l cnJvciwKKworCQkuYnVmZmVyX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfU1VCVFJBTlNfQlVG RkVSLAorCQkuYmFua190cmFuY2hlX2lkID0gTFdUUkFOQ0hFX1NVQlRSQU5TX1NMUlUsCisJ KTsKK30KKworc3RhdGljIHZvaWQKK1NVQlRSQU5TU2htZW1Jbml0KHZvaWQgKmFyZykKK3sK IAlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFN1YlRyYW5zQ3RsLCBTVUJUUkFOU19YQUNU U19QRVJfUEFHRSk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Fz eW5jLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCmluZGV4IGU5MWE2MmZmNDJh Li45Y2QyNzY5NTc4NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCkBAIC0xNzksNiArMTc5LDcg QEAKICNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdy LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZHNhLmgiCkBAIC0zNDUsNiAr MzQ2LDE1IEBAIHR5cGVkZWYgc3RydWN0IEFzeW5jUXVldWVDb250cm9sCiAKIHN0YXRpYyBB c3luY1F1ZXVlQ29udHJvbCAqYXN5bmNRdWV1ZUNvbnRyb2w7CiAKK3N0YXRpYyB2b2lkIEFz eW5jU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBBc3luY1NobWVtSW5p dCh2b2lkICphcmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNrcyBBc3luY1NobWVtQ2FsbGJh Y2tzID0geworCS5yZXF1ZXN0X2ZuID0gQXN5bmNTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4g PSBBc3luY1NobWVtSW5pdCwKK307CisKKwogI2RlZmluZSBRVUVVRV9IRUFECQkJCQkoYXN5 bmNRdWV1ZUNvbnRyb2wtPmhlYWQpCiAjZGVmaW5lIFFVRVVFX1RBSUwJCQkJCShhc3luY1F1 ZXVlQ29udHJvbC0+dGFpbCkKICNkZWZpbmUgUVVFVUVfU1RPUF9QQUdFCQkJCShhc3luY1F1 ZXVlQ29udHJvbC0+c3RvcFBhZ2UpCkBAIC0zNTksOSArMzY5LDEzIEBAIHN0YXRpYyBBc3lu Y1F1ZXVlQ29udHJvbCAqYXN5bmNRdWV1ZUNvbnRyb2w7CiAvKgogICogVGhlIFNMUlUgYnVm ZmVyIGFyZWEgdGhyb3VnaCB3aGljaCB3ZSBhY2Nlc3MgdGhlIG5vdGlmaWNhdGlvbiBxdWV1 ZQogICovCi1zdGF0aWMgU2xydUN0bERhdGEgTm90aWZ5Q3RsRGF0YTsKK3N0YXRpYyBpbmxp bmUgYm9vbCBhc3luY1F1ZXVlUGFnZVByZWNlZGVzKGludDY0IHAsIGludDY0IHEpOworc3Rh dGljIGludAlhc3luY1F1ZXVlRXJyZGV0YWlsRm9ySW9FcnJvcihjb25zdCB2b2lkICpvcGFx dWVfZGF0YSk7CisKK3N0YXRpYyBTbHJ1RGVzYyBOb3RpZnlTbHJ1RGVzYzsKIAotI2RlZmlu ZSBOb3RpZnlDdGwJCQkJCSgmTm90aWZ5Q3RsRGF0YSkKKworI2RlZmluZSBOb3RpZnlDdGwJ CQkJCSgmTm90aWZ5U2xydURlc2MpCiAjZGVmaW5lIFFVRVVFX1BBR0VTSVpFCQkJCUJMQ0tT WgogCiAjZGVmaW5lIFFVRVVFX0ZVTExfV0FSTl9JTlRFUlZBTAk1MDAwCS8qIHdhcm4gYXQg bW9zdCBvbmNlIGV2ZXJ5IDVzICovCkBAIC01NzAsOSArNTg0LDcgQEAgYm9vbAkJVHJhY2Vf bm90aWZ5ID0gZmFsc2U7CiBpbnQJCQltYXhfbm90aWZ5X3F1ZXVlX3BhZ2VzID0gMTA0ODU3 NjsKIAogLyogbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIGludAlhc3lu Y1F1ZXVlRXJyZGV0YWlsRm9ySW9FcnJvcihjb25zdCB2b2lkICpvcGFxdWVfZGF0YSk7CiBz dGF0aWMgaW5saW5lIGludDY0IGFzeW5jUXVldWVQYWdlRGlmZihpbnQ2NCBwLCBpbnQ2NCBx KTsKLXN0YXRpYyBpbmxpbmUgYm9vbCBhc3luY1F1ZXVlUGFnZVByZWNlZGVzKGludDY0IHAs IGludDY0IHEpOwogc3RhdGljIGlubGluZSB2b2lkIEdsb2JhbENoYW5uZWxLZXlJbml0KEds b2JhbENoYW5uZWxLZXkgKmtleSwgT2lkIGRib2lkLAogCQkJCQkJCQkJCWNvbnN0IGNoYXIg KmNoYW5uZWwpOwogc3RhdGljIGRzaGFzaF9oYXNoIGdsb2JhbENoYW5uZWxUYWJsZUhhc2go Y29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qgc2l6ZSwKQEAgLTc4MCw3OCArNzkyLDY1IEBAIGlu aXRQZW5kaW5nTGlzdGVuQWN0aW9ucyh2b2lkKQogfQogCiAvKgotICogUmVwb3J0IHNwYWNl IG5lZWRlZCBmb3Igb3VyIHNoYXJlZCBtZW1vcnkgYXJlYQorICogUmVnaXN0ZXIgb3VyIHNo YXJlZCBtZW1vcnkgbmVlZHMKICAqLwotU2l6ZQotQXN5bmNTaG1lbVNpemUodm9pZCkKK3N0 YXRpYyB2b2lkCitBc3luY1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7CisJc3RhdGljIFNo bWVtU3RydWN0RGVzYyBBc3luY1F1ZXVlQ29udHJvbFNobWVtRGVzYzsKIAlTaXplCQlzaXpl OwogCi0JLyogVGhpcyBoYWQgYmV0dGVyIG1hdGNoIEFzeW5jU2htZW1Jbml0ICovCiAJc2l6 ZSA9IG11bF9zaXplKE1heEJhY2tlbmRzLCBzaXplb2YoUXVldWVCYWNrZW5kU3RhdHVzKSk7 CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG9mZnNldG9mKEFzeW5jUXVldWVDb250cm9sLCBi YWNrZW5kKSk7CiAKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2ltcGxlTHJ1U2htZW1TaXpl KG5vdGlmeV9idWZmZXJzLCAwKSk7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZBc3luY1F1ZXVl Q29udHJvbFNobWVtRGVzYywKKwkJLm5hbWUgPSAiQXN5bmMgUXVldWUgQ29udHJvbCIsCisJ CS5zaXplID0gc2l6ZSwKKwkJLnB0ciA9ICh2b2lkICoqKSAmYXN5bmNRdWV1ZUNvbnRyb2ws CisJKTsKIAotCXJldHVybiBzaXplOwotfQorCVNpbXBsZUxydVJlcXVlc3QoJk5vdGlmeVNs cnVEZXNjLAorCQkubmFtZSA9ICJub3RpZnkiLAorCQkuRGlyID0gInBnX25vdGlmeSIsCiAK LS8qCi0gKiBJbml0aWFsaXplIG91ciBzaGFyZWQgbWVtb3J5IGFyZWEKLSAqLwotdm9pZAot QXN5bmNTaG1lbUluaXQodm9pZCkKLXsKLQlib29sCQlmb3VuZDsKLQlTaXplCQlzaXplOwor CQkvKiBsb25nIHNlZ21lbnQgbmFtZXMgYXJlIHVzZWQgaW4gb3JkZXIgdG8gYXZvaWQgd3Jh cGFyb3VuZCAqLworCQkubG9uZ19zZWdtZW50X25hbWVzID0gdHJ1ZSwKIAotCS8qCi0JICog Q3JlYXRlIG9yIGF0dGFjaCB0byB0aGUgQXN5bmNRdWV1ZUNvbnRyb2wgc3RydWN0dXJlLgot CSAqLwotCXNpemUgPSBtdWxfc2l6ZShNYXhCYWNrZW5kcywgc2l6ZW9mKFF1ZXVlQmFja2Vu ZFN0YXR1cykpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBvZmZzZXRvZihBc3luY1F1ZXVl Q29udHJvbCwgYmFja2VuZCkpOworCQkubnNsb3RzID0gbm90aWZ5X2J1ZmZlcnMsCiAKLQlh c3luY1F1ZXVlQ29udHJvbCA9IChBc3luY1F1ZXVlQ29udHJvbCAqKQotCQlTaG1lbUluaXRT dHJ1Y3QoIkFzeW5jIFF1ZXVlIENvbnRyb2wiLCBzaXplLCAmZm91bmQpOworCQkuc3luY19o YW5kbGVyID0gU1lOQ19IQU5ETEVSX05PTkUsCisJCS5QYWdlUHJlY2VkZXMgPSBhc3luY1F1 ZXVlUGFnZVByZWNlZGVzLAorCQkuZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IGFzeW5jUXVl dWVFcnJkZXRhaWxGb3JJb0Vycm9yLAogCi0JaWYgKCFmb3VuZCkKKwkJLmJ1ZmZlcl90cmFu Y2hlX2lkID0gTFdUUkFOQ0hFX05PVElGWV9CVUZGRVIsCisJCS5iYW5rX3RyYW5jaGVfaWQg PSBMV1RSQU5DSEVfTk9USUZZX1NMUlUsCisJKTsKK30KKworc3RhdGljIHZvaWQKK0FzeW5j U2htZW1Jbml0KHZvaWQgKmFyZykKK3sKKwlTRVRfUVVFVUVfUE9TKFFVRVVFX0hFQUQsIDAs IDApOworCVNFVF9RVUVVRV9QT1MoUVVFVUVfVEFJTCwgMCwgMCk7CisJUVVFVUVfU1RPUF9Q QUdFID0gMDsKKwlRVUVVRV9GSVJTVF9MSVNURU5FUiA9IElOVkFMSURfUFJPQ19OVU1CRVI7 CisJYXN5bmNRdWV1ZUNvbnRyb2wtPmxhc3RRdWV1ZUZpbGxXYXJuID0gMDsKKwlhc3luY1F1 ZXVlQ29udHJvbC0+Z2xvYmFsQ2hhbm5lbFRhYmxlRFNBID0gRFNBX0hBTkRMRV9JTlZBTElE OworCWFzeW5jUXVldWVDb250cm9sLT5nbG9iYWxDaGFubmVsVGFibGVEU0ggPSBEU0hBU0hf SEFORExFX0lOVkFMSUQ7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBNYXhCYWNrZW5kczsgaSsr KQogCXsKLQkJLyogRmlyc3QgdGltZSB0aHJvdWdoLCBzbyBpbml0aWFsaXplIGl0ICovCi0J CVNFVF9RVUVVRV9QT1MoUVVFVUVfSEVBRCwgMCwgMCk7Ci0JCVNFVF9RVUVVRV9QT1MoUVVF VUVfVEFJTCwgMCwgMCk7Ci0JCVFVRVVFX1NUT1BfUEFHRSA9IDA7Ci0JCVFVRVVFX0ZJUlNU X0xJU1RFTkVSID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKLQkJYXN5bmNRdWV1ZUNvbnRyb2wt Pmxhc3RRdWV1ZUZpbGxXYXJuID0gMDsKLQkJYXN5bmNRdWV1ZUNvbnRyb2wtPmdsb2JhbENo YW5uZWxUYWJsZURTQSA9IERTQV9IQU5ETEVfSU5WQUxJRDsKLQkJYXN5bmNRdWV1ZUNvbnRy b2wtPmdsb2JhbENoYW5uZWxUYWJsZURTSCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKLQkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBNYXhCYWNrZW5kczsgaSsrKQotCQl7Ci0JCQlRVUVVRV9C QUNLRU5EX1BJRChpKSA9IEludmFsaWRQaWQ7Ci0JCQlRVUVVRV9CQUNLRU5EX0RCT0lEKGkp ID0gSW52YWxpZE9pZDsKLQkJCVFVRVVFX05FWFRfTElTVEVORVIoaSkgPSBJTlZBTElEX1BS T0NfTlVNQkVSOwotCQkJU0VUX1FVRVVFX1BPUyhRVUVVRV9CQUNLRU5EX1BPUyhpKSwgMCwg MCk7Ci0JCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0gZmFsc2U7Ci0JCQlR VUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhpKSA9IGZhbHNlOwotCQl9CisJCVFVRVVFX0JB Q0tFTkRfUElEKGkpID0gSW52YWxpZFBpZDsKKwkJUVVFVUVfQkFDS0VORF9EQk9JRChpKSA9 IEludmFsaWRPaWQ7CisJCVFVRVVFX05FWFRfTElTVEVORVIoaSkgPSBJTlZBTElEX1BST0Nf TlVNQkVSOworCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0JBQ0tFTkRfUE9TKGkpLCAwLCAwKTsK KwkJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSA9IGZhbHNlOworCQlRVUVVRV9C QUNLRU5EX0lTX0FEVkFOQ0lORyhpKSA9IGZhbHNlOwogCX0KIAogCS8qCi0JICogU2V0IHVw IFNMUlUgbWFuYWdlbWVudCBvZiB0aGUgcGdfbm90aWZ5IGRhdGEuIE5vdGUgdGhhdCBsb25n IHNlZ21lbnQKLQkgKiBuYW1lcyBhcmUgdXNlZCBpbiBvcmRlciB0byBhdm9pZCB3cmFwYXJv dW5kLgorCSAqIER1cmluZyBzdGFydCBvciByZWJvb3QsIGNsZWFuIG91dCB0aGUgcGdfbm90 aWZ5IGRpcmVjdG9yeS4KIAkgKi8KLQlOb3RpZnlDdGwtPlBhZ2VQcmVjZWRlcyA9IGFzeW5j UXVldWVQYWdlUHJlY2VkZXM7Ci0JTm90aWZ5Q3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9y ID0gYXN5bmNRdWV1ZUVycmRldGFpbEZvcklvRXJyb3I7Ci0JU2ltcGxlTHJ1SW5pdChOb3Rp ZnlDdGwsICJub3RpZnkiLCBub3RpZnlfYnVmZmVycywgMCwKLQkJCQkgICJwZ19ub3RpZnki LCBMV1RSQU5DSEVfTk9USUZZX0JVRkZFUiwgTFdUUkFOQ0hFX05PVElGWV9TTFJVLAotCQkJ CSAgU1lOQ19IQU5ETEVSX05PTkUsIHRydWUpOwotCi0JaWYgKCFmb3VuZCkKLQl7Ci0JCS8q Ci0JCSAqIER1cmluZyBzdGFydCBvciByZWJvb3QsIGNsZWFuIG91dCB0aGUgcGdfbm90aWZ5 IGRpcmVjdG9yeS4KLQkJICovCi0JCSh2b2lkKSBTbHJ1U2NhbkRpcmVjdG9yeShOb3RpZnlD dGwsIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwsIE5VTEwpOwotCX0KKwkodm9pZCkgU2xydVNj YW5EaXJlY3RvcnkoTm90aWZ5Q3RsLCBTbHJ1U2NhbkRpckNiRGVsZXRlQWxsLCBOVUxMKTsK IH0KIAogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKaW5kZXggYjhjZTRkZTlhYjUuLmZhYWY5 YzQ3MWYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBAIC0xMDEsMTYgKzEwMSwxMSBA QCBDYWxjdWxhdGVTaG1lbVNpemUodm9pZCkKIAkvKiBsZWdhY3kgc3Vic3lzdGVtcyAqLwog CXNpemUgPSBhZGRfc2l6ZShzaXplLCBCdWZmZXJNYW5hZ2VyU2htZW1TaXplKCkpOwogCXNp emUgPSBhZGRfc2l6ZShzaXplLCBMb2NrTWFuYWdlclNobWVtU2l6ZSgpKTsKLQlzaXplID0g YWRkX3NpemUoc2l6ZSwgUHJlZGljYXRlTG9ja1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRk X3NpemUoc2l6ZSwgWExvZ1ByZWZldGNoU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBYTE9HU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBYTG9n UmVjb3ZlcnlTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIENMT0dTaG1l bVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIENvbW1pdFRzU2htZW1TaXplKCkp OwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTVUJUUkFOU1NobWVtU2l6ZSgpKTsKIAlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgVHdvUGhhc2VTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9z aXplKHNpemUsIEJhY2tncm91bmRXb3JrZXJTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9z aXplKHNpemUsIE11bHRpWGFjdFNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6 ZSwgQmFja2VuZFN0YXR1c1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwg Q2hlY2twb2ludGVyU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBBdXRv VmFjdXVtU2htZW1TaXplKCkpOwpAQCAtMTIzLDcgKzExOCw2IEBAIENhbGN1bGF0ZVNobWVt U2l6ZSh2b2lkKQogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBBcHBseUxhdW5jaGVyU2htZW1T aXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCVHJlZVNobWVtU2l6ZSgpKTsKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgU3luY1NjYW5TaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIEFzeW5jU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBTdGF0c1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgV2FpdEV2ZW50 Q3VzdG9tU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBJbmplY3Rpb25Q b2ludFNobWVtU2l6ZSgpKTsKQEAgLTI3MCwxMCArMjY0LDYgQEAgQ3JlYXRlT3JBdHRhY2hT aG1lbVN0cnVjdHModm9pZCkKIAlYTE9HU2htZW1Jbml0KCk7CiAJWExvZ1ByZWZldGNoU2ht ZW1Jbml0KCk7CiAJWExvZ1JlY292ZXJ5U2htZW1Jbml0KCk7Ci0JQ0xPR1NobWVtSW5pdCgp OwotCUNvbW1pdFRzU2htZW1Jbml0KCk7Ci0JU1VCVFJBTlNTaG1lbUluaXQoKTsKLQlNdWx0 aVhhY3RTaG1lbUluaXQoKTsKIAlCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KCk7CiAKIAkvKgpA QCAtMjgxLDExICsyNzEsNiBAQCBDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0cyh2b2lkKQog CSAqLwogCUxvY2tNYW5hZ2VyU2htZW1Jbml0KCk7CiAKLQkvKgotCSAqIFNldCB1cCBwcmVk aWNhdGUgbG9jayBtYW5hZ2VyCi0JICovCi0JUHJlZGljYXRlTG9ja1NobWVtSW5pdCgpOwot CiAJLyoKIAkgKiBTZXQgdXAgcHJvY2VzcyB0YWJsZQogCSAqLwpAQCAtMzEzLDcgKzI5OCw2 IEBAIENyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKHZvaWQpCiAJICovCiAJQlRyZWVTaG1l bUluaXQoKTsKIAlTeW5jU2NhblNobWVtSW5pdCgpOwotCUFzeW5jU2htZW1Jbml0KCk7CiAJ U3RhdHNTaG1lbUluaXQoKTsKIAlXYWl0RXZlbnRDdXN0b21TaG1lbUluaXQoKTsKIAlJbmpl Y3Rpb25Qb2ludFNobWVtSW5pdCgpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvc2htZW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKaW5kZXgg NjA2YjU0NWU4ZmUuLmVkY2ZlY2YyNGJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9zaG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMK QEAgLTEzNCw2ICsxMzQsNyBAQAogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKKyNpbmNsdWRl ICJhY2Nlc3Mvc2xydS5oIgogI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKICNpbmNsdWRlICJm bWdyLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgpAQCAtNTU2LDYgKzU1Nyw5IEBAIEF0dGFj aE9ySW5pdFNobWVtSW5kZXhFbnRyeShTaG1lbVJlcXVlc3QgKnJlcXVlc3QsCiAJCQljYXNl IFNITUVNX0tJTkRfSEFTSDoKIAkJCQlzaG1lbV9oYXNoX2F0dGFjaChkZXNjLCByZXF1ZXN0 LT5vcHRpb25zKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgU0hNRU1fS0lORF9TTFJVOgorCQkJ CXNobWVtX3NscnVfYXR0YWNoKGRlc2MsIHJlcXVlc3QtPm9wdGlvbnMpOworCQkJCWJyZWFr OwogCQl9CiAJfQogCWVsc2UgaWYgKCFtYXlfaW5pdCkKQEAgLTYxNSw2ICs2MTksOSBAQCBB dHRhY2hPckluaXRTaG1lbUluZGV4RW50cnkoU2htZW1SZXF1ZXN0ICpyZXF1ZXN0LAogCQkJ Y2FzZSBTSE1FTV9LSU5EX0hBU0g6CiAJCQkJc2htZW1faGFzaF9pbml0KGRlc2MsIHJlcXVl c3QtPm9wdGlvbnMpOwogCQkJCWJyZWFrOworCQkJY2FzZSBTSE1FTV9LSU5EX1NMUlU6CisJ CQkJc2htZW1fc2xydV9pbml0KGRlc2MsIHJlcXVlc3QtPm9wdGlvbnMpOworCQkJCWJyZWFr OwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJl ZGljYXRlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKaW5kZXgg YWYwMzA3MWE3MWYuLjAyZGJiZjMwOTUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvcHJlZGljYXRlLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3By ZWRpY2F0ZS5jCkBAIC0xNTIsMTAgKzE1Miw2IEBACiAvKgogICogSU5URVJGQUNFIFJPVVRJ TkVTCiAgKgotICogaG91c2VrZWVwaW5nIGZvciBzZXR0aW5nIHVwIHNoYXJlZCBtZW1vcnkg cHJlZGljYXRlIGxvY2sgc3RydWN0dXJlcwotICoJCVByZWRpY2F0ZUxvY2tTaG1lbUluaXQo dm9pZCkKLSAqCQlQcmVkaWNhdGVMb2NrU2htZW1TaXplKHZvaWQpCi0gKgogICogcHJlZGlj YXRlIGxvY2sgcmVwb3J0aW5nCiAgKgkJR2V0UHJlZGljYXRlTG9ja1N0YXR1c0RhdGEodm9p ZCkKICAqCQlQYWdlSXNQcmVkaWNhdGVMb2NrZWQoUmVsYXRpb24gcmVsYXRpb24sIEJsb2Nr TnVtYmVyIGJsa25vKQpAQCAtMjExLDYgKzIwNyw4IEBACiAjaW5jbHVkZSAic3RvcmFnZS9w cmVkaWNhdGVfaW50ZXJuYWxzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgi CisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3Vj X2hvb2tzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvc25h cG1nci5oIgpAQCAtMzIyLDkgKzMyMCwxMiBAQAogLyoKICAqIFRoZSBTTFJVIGJ1ZmZlciBh cmVhIHRocm91Z2ggd2hpY2ggd2UgYWNjZXNzIHRoZSBvbGQgeGlkcy4KICAqLwotc3RhdGlj IFNscnVDdGxEYXRhIFNlcmlhbFNscnVDdGxEYXRhOworc3RhdGljIGJvb2wgU2VyaWFsUGFn ZVByZWNlZGVzTG9naWNhbGx5KGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7CitzdGF0aWMg aW50CXNlcmlhbF9lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKGNvbnN0IHZvaWQgKm9wYXF1ZV9k YXRhKTsKIAotI2RlZmluZSBTZXJpYWxTbHJ1Q3RsCQkJKCZTZXJpYWxTbHJ1Q3RsRGF0YSkK K3N0YXRpYyBTbHJ1RGVzYyBTZXJpYWxTbHJ1RGVzYzsKKworI2RlZmluZSBTZXJpYWxTbHJ1 Q3RsCQkJKCZTZXJpYWxTbHJ1RGVzYykKIAogI2RlZmluZSBTRVJJQUxfUEFHRVNJWkUJCQlC TENLU1oKICNkZWZpbmUgU0VSSUFMX0VOVFJZU0laRQkJCXNpemVvZihTZXJDb21taXRTZXFO bykKQEAgLTM4NCw2ICszODUsMTcgQEAgaW50CQkJbWF4X3ByZWRpY2F0ZV9sb2Nrc19wZXJf cGFnZTsJLyogaW4gZ3VjX3RhYmxlcy5jICovCiAgKi8KIHN0YXRpYyBQcmVkWGFjdExpc3Qg UHJlZFhhY3Q7CiAKK3N0YXRpYyB2b2lkIFByZWRpY2F0ZUxvY2tTaG1lbVJlcXVlc3Qodm9p ZCAqYXJnKTsKK3N0YXRpYyB2b2lkIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCAqYXJn KTsKK3N0YXRpYyB2b2lkIFByZWRpY2F0ZUxvY2tTaG1lbUF0dGFjaCh2b2lkICphcmcpOwor Citjb25zdCBTaG1lbUNhbGxiYWNrcyBQcmVkaWNhdGVMb2NrU2htZW1DYWxsYmFja3MgPSB7 CisJLnJlcXVlc3RfZm4gPSBQcmVkaWNhdGVMb2NrU2htZW1SZXF1ZXN0LAorCS5pbml0X2Zu ID0gUHJlZGljYXRlTG9ja1NobWVtSW5pdCwKKwkuYXR0YWNoX2ZuID0gUHJlZGljYXRlTG9j a1NobWVtQXR0YWNoLAorfTsKKworCiAvKgogICogVGhpcyBwcm92aWRlcyBhIHBvb2wgb2Yg UldDb25mbGljdCBkYXRhIGVsZW1lbnRzIHRvIHVzZSBpbiBjb25mbGljdCBsaXN0cwogICog YmV0d2VlbiB0cmFuc2FjdGlvbnMuCkBAIC00MzEsNiArNDQzLDE2IEBAIHN0YXRpYyBib29s IE15WGFjdERpZFdyaXRlID0gZmFsc2U7CiAgKi8KIHN0YXRpYyBTRVJJQUxJWkFCTEVYQUNU ICpTYXZlZFNlcmlhbGl6YWJsZVhhY3QgPSBJbnZhbGlkU2VyaWFsaXphYmxlWGFjdDsKIAor c3RhdGljIFNobWVtU3RydWN0RGVzYyBQcmVkWGFjdExpc3RTaG1lbURlc2M7CisKK3N0YXRp YyBpbnQ2NCBtYXhfc2VyaWFsaXphYmxlX3hhY3RzOworCitzdGF0aWMgU2htZW1TdHJ1Y3RE ZXNjIFJXQ29uZmxpY3RQb29sU2htZW1EZXNjOworCitzdGF0aWMgU2htZW1TdHJ1Y3REZXNj IEZpbmlzaGVkU2VyaWFsaXphYmxlU2htZW1EZXNjOworCitzdGF0aWMgU2htZW1TdHJ1Y3RE ZXNjIFNlcmlhbENvbnRyb2xTaG1lbURlc2M7CisKIC8qIGxvY2FsIGZ1bmN0aW9ucyAqLwog CiBzdGF0aWMgU0VSSUFMSVpBQkxFWEFDVCAqQ3JlYXRlUHJlZFhhY3Qodm9pZCk7CkBAIC00 NDIsMTMgKzQ2NCwxOCBAQCBzdGF0aWMgdm9pZCBTZXRQb3NzaWJsZVVuc2FmZUNvbmZsaWN0 KFNFUklBTElaQUJMRVhBQ1QgKnJvWGFjdCwgU0VSSUFMSVpBQkxFWEFDVAogc3RhdGljIHZv aWQgUmVsZWFzZVJXQ29uZmxpY3QoUldDb25mbGljdCBjb25mbGljdCk7CiBzdGF0aWMgdm9p ZCBGbGFnU3hhY3RVbnNhZmUoU0VSSUFMSVpBQkxFWEFDVCAqc3hhY3QpOwogCi1zdGF0aWMg Ym9vbCBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHkoaW50NjQgcGFnZTEsIGludDY0IHBh Z2UyKTsKLXN0YXRpYyBpbnQJc2VyaWFsX2VycmRldGFpbF9mb3JfaW9fZXJyb3IoY29uc3Qg dm9pZCAqb3BhcXVlX2RhdGEpOwogc3RhdGljIHZvaWQgU2VyaWFsQWRkKFRyYW5zYWN0aW9u SWQgeGlkLCBTZXJDb21taXRTZXFObyBtaW5Db25mbGljdENvbW1pdFNlcU5vKTsKIHN0YXRp YyBTZXJDb21taXRTZXFObyBTZXJpYWxHZXRNaW5Db25mbGljdENvbW1pdFNlcU5vKFRyYW5z YWN0aW9uSWQgeGlkKTsKIHN0YXRpYyB2b2lkIFNlcmlhbFNldEFjdGl2ZVNlclhtaW4oVHJh bnNhY3Rpb25JZCB4aWQpOwogCiBzdGF0aWMgdWludDMyIHByZWRpY2F0ZWxvY2tfaGFzaChj b25zdCB2b2lkICprZXksIFNpemUga2V5c2l6ZSk7CisKK3N0YXRpYyBTaG1lbUhhc2hEZXNj IFNlcmlhbGl6YWJsZVhpZEhhc2hEZXNjOworCitzdGF0aWMgU2htZW1IYXNoRGVzYyBQcmVk aWNhdGVMb2NrVGFyZ2V0SGFzaERlc2M7CisKK3N0YXRpYyBTaG1lbUhhc2hEZXNjIFByZWRp Y2F0ZUxvY2tIYXNoRGVzYzsKKwogc3RhdGljIHZvaWQgU3VtbWFyaXplT2xkZXN0Q29tbWl0 dGVkU3hhY3Qodm9pZCk7CiBzdGF0aWMgU25hcHNob3QgR2V0U2FmZVNuYXBzaG90KFNuYXBz aG90IG9yaWdTbmFwc2hvdCk7CiBzdGF0aWMgU25hcHNob3QgR2V0U2VyaWFsaXphYmxlVHJh bnNhY3Rpb25TbmFwc2hvdEludChTbmFwc2hvdCBzbmFwc2hvdCwKQEAgLTExMDAsNzEgKzEx MjcsNTggQEAgQ2hlY2tQb2ludFByZWRpY2F0ZSh2b2lkKQogLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0qLwogCiAvKgotICogUHJlZGljYXRlTG9ja1NobWVtSW5pdCAtLSBJbml0aWFsaXplIHRo ZSBwcmVkaWNhdGUgbG9ja2luZyBkYXRhIHN0cnVjdHVyZXMuCi0gKgotICogVGhpcyBpcyBj YWxsZWQgZnJvbSBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKCksIHdoaWNoIHNl ZSBmb3IKLSAqIG1vcmUgY29tbWVudHMuICBJbiB0aGUgbm9ybWFsIHBvc3RtYXN0ZXIgY2Fz ZSwgdGhlIHNoYXJlZCBoYXNoIHRhYmxlcwotICogYXJlIGNyZWF0ZWQgaGVyZS4gIEJhY2tl bmRzIGluaGVyaXQgdGhlIHBvaW50ZXJzCi0gKiB0byB0aGUgc2hhcmVkIHRhYmxlcyB2aWEg Zm9yaygpLiAgSW4gdGhlIEVYRUNfQkFDS0VORCBjYXNlLCBlYWNoCi0gKiBiYWNrZW5kIHJl LWV4ZWN1dGVzIHRoaXMgY29kZSB0byBvYnRhaW4gcG9pbnRlcnMgdG8gdGhlIGFscmVhZHkg ZXhpc3RpbmcKLSAqIHNoYXJlZCBoYXNoIHRhYmxlcy4KKyAqIFByZWRpY2F0ZUxvY2tTaG1l bVJlcXVlc3QgLS0gUmVnaXN0ZXIgdGhlIHByZWRpY2F0ZSBsb2NraW5nIGRhdGEgc3RydWN0 dXJlcy4KICAqLwotdm9pZAotUHJlZGljYXRlTG9ja1NobWVtSW5pdCh2b2lkKQorc3RhdGlj IHZvaWQKK1ByZWRpY2F0ZUxvY2tTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogewotCUhBU0hD VEwJCWluZm87CiAJaW50NjQJCW1heF9wcmVkaWNhdGVfbG9ja190YXJnZXRzOwogCWludDY0 CQltYXhfcHJlZGljYXRlX2xvY2tzOwotCWludDY0CQltYXhfc2VyaWFsaXphYmxlX3hhY3Rz OwogCWludDY0CQltYXhfcndfY29uZmxpY3RzOwotCVNpemUJCXJlcXVlc3RTaXplOwotCWJv b2wJCWZvdW5kOwotCi0jaWZuZGVmIEVYRUNfQkFDS0VORAotCUFzc2VydCghSXNVbmRlclBv c3RtYXN0ZXIpOwotI2VuZGlmCiAKIAkvKgotCSAqIENvbXB1dGUgc2l6ZSBvZiBwcmVkaWNh dGUgbG9jayB0YXJnZXQgaGFzaHRhYmxlLiBOb3RlIHRoZXNlCi0JICogY2FsY3VsYXRpb25z IG11c3QgYWdyZWUgd2l0aCBQcmVkaWNhdGVMb2NrU2htZW1TaXplIQorCSAqIEhhc2ggdGFi bGVzIGFuZCBvdGhlciBzdHJ1Y3RzIGFyZSBzZXQgdXAgYnkgU2htZW1Jbml0UmVnaXN0ZXJl ZCgpIC8KKwkgKiBTaG1lbUF0dGFjaFJlZ2lzdGVyZWQoKSB2aWEgcmVnaXN0ZXJlZCBkZXNj cmlwdG9ycyBpbgorCSAqIFByZWRpY2F0ZUxvY2tTaG1lbVJlZ2lzdGVyKCkuICBIZXJlIHdl IGRvIHRoZSByZW1haW5pbmcgaW5pdGlhbGl6YXRpb24KKwkgKiB0aGF0IGNhbid0IGJlIGRv bmUgaW4gYSBjYWxsYmFjay4KIAkgKi8KIAltYXhfcHJlZGljYXRlX2xvY2tfdGFyZ2V0cyA9 IE5QUkVESUNBVEVMT0NLVEFSR0VURU5UUygpOwogCiAJLyoKLQkgKiBBbGxvY2F0ZSBoYXNo IHRhYmxlIGZvciBQUkVESUNBVEVMT0NLVEFSR0VUIHN0cnVjdHMuICBUaGlzIHN0b3Jlcwor CSAqIFJlZ2lzdGVyIGhhc2ggdGFibGUgZm9yIFBSRURJQ0FURUxPQ0tUQVJHRVQgc3RydWN0 cy4gIFRoaXMgc3RvcmVzCiAJICogcGVyLXByZWRpY2F0ZS1sb2NrLXRhcmdldCBpbmZvcm1h dGlvbi4KIAkgKi8KLQlpbmZvLmtleXNpemUgPSBzaXplb2YoUFJFRElDQVRFTE9DS1RBUkdF VFRBRyk7Ci0JaW5mby5lbnRyeXNpemUgPSBzaXplb2YoUFJFRElDQVRFTE9DS1RBUkdFVCk7 Ci0JaW5mby5udW1fcGFydGl0aW9ucyA9IE5VTV9QUkVESUNBVEVMT0NLX1BBUlRJVElPTlM7 CisJU2htZW1SZXF1ZXN0SGFzaCgmUHJlZGljYXRlTG9ja1RhcmdldEhhc2hEZXNjLAorCQku bmFtZSA9ICJQUkVESUNBVEVMT0NLVEFSR0VUIGhhc2giLAorCQkubmVsZW1zID0gbWF4X3By ZWRpY2F0ZV9sb2NrX3RhcmdldHMsCiAKLQlQcmVkaWNhdGVMb2NrVGFyZ2V0SGFzaCA9IFNo bWVtSW5pdEhhc2goIlBSRURJQ0FURUxPQ0tUQVJHRVQgaGFzaCIsCi0JCQkJCQkJCQkJCW1h eF9wcmVkaWNhdGVfbG9ja190YXJnZXRzLAotCQkJCQkJCQkJCQkmaW5mbywKLQkJCQkJCQkJ CQkJSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyB8Ci0JCQkJCQkJCQkJCUhBU0hfUEFSVElUSU9O IHwgSEFTSF9GSVhFRF9TSVpFKTsKLQotCS8qIFByZS1jYWxjdWxhdGUgdGhlIGhhc2ggYW5k IHBhcnRpdGlvbiBsb2NrIG9mIHRoZSBzY3JhdGNoIGVudHJ5ICovCi0JU2NyYXRjaFRhcmdl dFRhZ0hhc2ggPSBQcmVkaWNhdGVMb2NrVGFyZ2V0VGFnSGFzaENvZGUoJlNjcmF0Y2hUYXJn ZXRUYWcpOwotCVNjcmF0Y2hQYXJ0aXRpb25Mb2NrID0gUHJlZGljYXRlTG9ja0hhc2hQYXJ0 aXRpb25Mb2NrKFNjcmF0Y2hUYXJnZXRUYWdIYXNoKTsKKwkJLnB0ciA9ICZQcmVkaWNhdGVM b2NrVGFyZ2V0SGFzaCwKKwkJLmhhc2hfaW5mby5rZXlzaXplID0gc2l6ZW9mKFBSRURJQ0FU RUxPQ0tUQVJHRVRUQUcpLAorCQkuaGFzaF9pbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihQUkVE SUNBVEVMT0NLVEFSR0VUKSwKKwkJLmhhc2hfaW5mby5udW1fcGFydGl0aW9ucyA9IE5VTV9Q UkVESUNBVEVMT0NLX1BBUlRJVElPTlMsCisJCS5oYXNoX2ZsYWdzID0gSEFTSF9FTEVNIHwg SEFTSF9CTE9CUyB8IEhBU0hfUEFSVElUSU9OIHwgSEFTSF9GSVhFRF9TSVpFLAorCSk7CiAK IAkvKgogCSAqIEFsbG9jYXRlIGhhc2ggdGFibGUgZm9yIFBSRURJQ0FURUxPQ0sgc3RydWN0 cy4gIFRoaXMgc3RvcmVzIHBlcgogCSAqIHhhY3QtbG9jay1vZi1hLXRhcmdldCBpbmZvcm1h dGlvbi4KIAkgKi8KLQlpbmZvLmtleXNpemUgPSBzaXplb2YoUFJFRElDQVRFTE9DS1RBRyk7 Ci0JaW5mby5lbnRyeXNpemUgPSBzaXplb2YoUFJFRElDQVRFTE9DSyk7Ci0JaW5mby5oYXNo ID0gcHJlZGljYXRlbG9ja19oYXNoOwotCWluZm8ubnVtX3BhcnRpdGlvbnMgPSBOVU1fUFJF RElDQVRFTE9DS19QQVJUSVRJT05TOwogCiAJLyogQXNzdW1lIGFuIGF2ZXJhZ2Ugb2YgMiB4 YWN0cyBwZXIgdGFyZ2V0ICovCiAJbWF4X3ByZWRpY2F0ZV9sb2NrcyA9IG1heF9wcmVkaWNh dGVfbG9ja190YXJnZXRzICogMjsKIAotCVByZWRpY2F0ZUxvY2tIYXNoID0gU2htZW1Jbml0 SGFzaCgiUFJFRElDQVRFTE9DSyBoYXNoIiwKLQkJCQkJCQkJCSAgbWF4X3ByZWRpY2F0ZV9s b2NrcywKLQkJCQkJCQkJCSAgJmluZm8sCi0JCQkJCQkJCQkgIEhBU0hfRUxFTSB8IEhBU0hf RlVOQ1RJT04gfAotCQkJCQkJCQkJICBIQVNIX1BBUlRJVElPTiB8IEhBU0hfRklYRURfU0la RSk7CisJU2htZW1SZXF1ZXN0SGFzaCgmUHJlZGljYXRlTG9ja0hhc2hEZXNjLAorCQkubmFt ZSA9ICJQUkVESUNBVEVMT0NLIGhhc2giLAorCisJCS5uZWxlbXMgPSBtYXhfcHJlZGljYXRl X2xvY2tzLAorCisJCS5wdHIgPSAmUHJlZGljYXRlTG9ja0hhc2gsCisJCS5oYXNoX2luZm8u a2V5c2l6ZSA9IHNpemVvZihQUkVESUNBVEVMT0NLVEFHKSwKKwkJLmhhc2hfaW5mby5lbnRy eXNpemUgPSBzaXplb2YoUFJFRElDQVRFTE9DSyksCisJCS5oYXNoX2luZm8uaGFzaCA9IHBy ZWRpY2F0ZWxvY2tfaGFzaCwKKwkJLmhhc2hfaW5mby5udW1fcGFydGl0aW9ucyA9IE5VTV9Q UkVESUNBVEVMT0NLX1BBUlRJVElPTlMsCisJCS5oYXNoX2ZsYWdzID0gSEFTSF9FTEVNIHwg SEFTSF9GVU5DVElPTiB8IEhBU0hfUEFSVElUSU9OIHwgSEFTSF9GSVhFRF9TSVpFLAorCQkp OwogCiAJLyoKIAkgKiBDb21wdXRlIHNpemUgZm9yIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlv biBoYXNodGFibGUuIE5vdGUgdGhlc2UKQEAgLTExNzcsMjkgKzExOTEsMjkgQEAgUHJlZGlj YXRlTG9ja1NobWVtSW5pdCh2b2lkKQogCW1heF9zZXJpYWxpemFibGVfeGFjdHMgPSAoTWF4 QmFja2VuZHMgKyBtYXhfcHJlcGFyZWRfeGFjdHMpICogMTA7CiAKIAkvKgotCSAqIEFsbG9j YXRlIGEgbGlzdCB0byBob2xkIGluZm9ybWF0aW9uIG9uIHRyYW5zYWN0aW9ucyBwYXJ0aWNp cGF0aW5nIGluCisJICogUmVnaXN0ZXIgYSBsaXN0IHRvIGhvbGQgaW5mb3JtYXRpb24gb24g dHJhbnNhY3Rpb25zIHBhcnRpY2lwYXRpbmcgaW4KIAkgKiBwcmVkaWNhdGUgbG9ja2luZy4K IAkgKi8KLQlyZXF1ZXN0U2l6ZSA9IGFkZF9zaXplKFByZWRYYWN0TGlzdERhdGFTaXplLAot CQkJCQkJICAgKG11bF9zaXplKChTaXplKSBtYXhfc2VyaWFsaXphYmxlX3hhY3RzLAotCQkJ CQkJCQkJIHNpemVvZihTRVJJQUxJWkFCTEVYQUNUKSkpKTsKLQlQcmVkWGFjdCA9IFNobWVt SW5pdFN0cnVjdCgiUHJlZFhhY3RMaXN0IiwKLQkJCQkJCQkgICByZXF1ZXN0U2l6ZSwKLQkJ CQkJCQkgICAmZm91bmQpOwotCUFzc2VydChmb3VuZCA9PSBJc1VuZGVyUG9zdG1hc3Rlcik7 CisJU2htZW1SZXF1ZXN0U3RydWN0KCZQcmVkWGFjdExpc3RTaG1lbURlc2MsCisJCQkubmFt ZSA9ICJQcmVkWGFjdExpc3QiLAorCQkJLnNpemUgPSBhZGRfc2l6ZShQcmVkWGFjdExpc3RE YXRhU2l6ZSwKKwkJCQkJCQkgKG11bF9zaXplKChTaXplKSBtYXhfc2VyaWFsaXphYmxlX3hh Y3RzLAorCQkJCQkJCQkJICAgc2l6ZW9mKFNFUklBTElaQUJMRVhBQ1QpKSkpLAorCQkJLnB0 ciA9ICh2b2lkICoqKSAmUHJlZFhhY3QsCisJCSk7CiAKIAkvKgotCSAqIEFsbG9jYXRlIGhh c2ggdGFibGUgZm9yIFNFUklBTElaQUJMRVhJRCBzdHJ1Y3RzLiAgVGhpcyBzdG9yZXMgcGVy LXhpZAorCSAqIFJlZ2lzdGVyIGhhc2ggdGFibGUgZm9yIFNFUklBTElaQUJMRVhJRCBzdHJ1 Y3RzLiAgVGhpcyBzdG9yZXMgcGVyLXhpZAogCSAqIGluZm9ybWF0aW9uIGZvciBzZXJpYWxp emFibGUgdHJhbnNhY3Rpb25zIHdoaWNoIGhhdmUgYWNjZXNzZWQgZGF0YS4KIAkgKi8KLQlp bmZvLmtleXNpemUgPSBzaXplb2YoU0VSSUFMSVpBQkxFWElEVEFHKTsKLQlpbmZvLmVudHJ5 c2l6ZSA9IHNpemVvZihTRVJJQUxJWkFCTEVYSUQpOwotCi0JU2VyaWFsaXphYmxlWGlkSGFz aCA9IFNobWVtSW5pdEhhc2goIlNFUklBTElaQUJMRVhJRCBoYXNoIiwKLQkJCQkJCQkJCQlt YXhfc2VyaWFsaXphYmxlX3hhY3RzLAotCQkJCQkJCQkJCSZpbmZvLAotCQkJCQkJCQkJCUhB U0hfRUxFTSB8IEhBU0hfQkxPQlMgfAotCQkJCQkJCQkJCUhBU0hfRklYRURfU0laRSk7CisJ U2htZW1SZXF1ZXN0SGFzaCgmU2VyaWFsaXphYmxlWGlkSGFzaERlc2MsCisJCQkJCSAubmFt ZSA9ICJTRVJJQUxJWkFCTEVYSUQgaGFzaCIsCisJCQkJCSAubmVsZW1zID0gbWF4X3Nlcmlh bGl6YWJsZV94YWN0cywKKwkJCQkJIC5wdHIgPSAmU2VyaWFsaXphYmxlWGlkSGFzaCwKKwkJ CQkJIC5oYXNoX2luZm8ua2V5c2l6ZSA9IHNpemVvZihTRVJJQUxJWkFCTEVYSURUQUcpLAor CQkJCQkgLmhhc2hfaW5mby5lbnRyeXNpemUgPSBzaXplb2YoU0VSSUFMSVpBQkxFWElEKSwK KwkJCQkJIC5oYXNoX2ZsYWdzID0gSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyB8IEhBU0hfRklY RURfU0laRSwKKwkJKTsKIAogCS8qCiAJICogQWxsb2NhdGUgc3BhY2UgZm9yIHRyYWNraW5n IHJ3LWNvbmZsaWN0cyBpbiBsaXN0cyBhdHRhY2hlZCB0byB0aGUKQEAgLTEyMTQsNTggKzEy MjgsNTMgQEAgUHJlZGljYXRlTG9ja1NobWVtSW5pdCh2b2lkKQogCSAqLwogCW1heF9yd19j b25mbGljdHMgPSBtYXhfc2VyaWFsaXphYmxlX3hhY3RzICogNTsKIAotCXJlcXVlc3RTaXpl ID0gUldDb25mbGljdFBvb2xIZWFkZXJEYXRhU2l6ZSArCi0JCW11bF9zaXplKChTaXplKSBt YXhfcndfY29uZmxpY3RzLAotCQkJCSBSV0NvbmZsaWN0RGF0YVNpemUpOworCVNobWVtUmVx dWVzdFN0cnVjdCgmUldDb25mbGljdFBvb2xTaG1lbURlc2MsCisJCS5uYW1lID0gIlJXQ29u ZmxpY3RQb29sIiwKKwkJLnNpemUgPSBSV0NvbmZsaWN0UG9vbEhlYWRlckRhdGFTaXplICsg bXVsX3NpemUoKFNpemUpIG1heF9yd19jb25mbGljdHMsCisJCQkJCQkJCQkJCQkJCVJXQ29u ZmxpY3REYXRhU2l6ZSksCisJCS5wdHIgPSAodm9pZCAqKikgJlJXQ29uZmxpY3RQb29sLAor CSk7CiAKLQlSV0NvbmZsaWN0UG9vbCA9IFNobWVtSW5pdFN0cnVjdCgiUldDb25mbGljdFBv b2wiLAotCQkJCQkJCQkJIHJlcXVlc3RTaXplLAotCQkJCQkJCQkJICZmb3VuZCk7Ci0JQXNz ZXJ0KGZvdW5kID09IElzVW5kZXJQb3N0bWFzdGVyKTsKLQotCS8qCi0JICogQ3JlYXRlIG9y IGF0dGFjaCB0byB0aGUgaGVhZGVyIGZvciB0aGUgbGlzdCBvZiBmaW5pc2hlZCBzZXJpYWxp emFibGUKLQkgKiB0cmFuc2FjdGlvbnMuCi0JICovCi0JRmluaXNoZWRTZXJpYWxpemFibGVU cmFuc2FjdGlvbnMgPSAoZGxpc3RfaGVhZCAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIkZpbmlz aGVkU2VyaWFsaXphYmxlVHJhbnNhY3Rpb25zIiwKLQkJCQkJCXNpemVvZihkbGlzdF9oZWFk KSwKLQkJCQkJCSZmb3VuZCk7Ci0JQXNzZXJ0KGZvdW5kID09IElzVW5kZXJQb3N0bWFzdGVy KTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkZpbmlzaGVkU2VyaWFsaXphYmxlU2htZW1EZXNj LAorCQkubmFtZSA9ICJGaW5pc2hlZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9ucyIsCisJCS5z aXplID0gc2l6ZW9mKGRsaXN0X2hlYWQpLAorCQkucHRyID0gKHZvaWQgKiopICZGaW5pc2hl ZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9ucywKKwkpOwogCiAJLyoKIAkgKiBJbml0aWFsaXpl IHRoZSBTTFJVIHN0b3JhZ2UgZm9yIG9sZCBjb21taXR0ZWQgc2VyaWFsaXphYmxlCiAJICog dHJhbnNhY3Rpb25zLgogCSAqLwotCVNlcmlhbFNscnVDdGwtPlBhZ2VQcmVjZWRlcyA9IFNl cmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseTsKLQlTZXJpYWxTbHJ1Q3RsLT5lcnJkZXRhaWxf Zm9yX2lvX2Vycm9yID0gc2VyaWFsX2VycmRldGFpbF9mb3JfaW9fZXJyb3I7Ci0JU2ltcGxl THJ1SW5pdChTZXJpYWxTbHJ1Q3RsLCAic2VyaWFsaXphYmxlIiwKLQkJCQkgIHNlcmlhbGl6 YWJsZV9idWZmZXJzLCAwLCAicGdfc2VyaWFsIiwKLQkJCQkgIExXVFJBTkNIRV9TRVJJQUxf QlVGRkVSLCBMV1RSQU5DSEVfU0VSSUFMX1NMUlUsCi0JCQkJICBTWU5DX0hBTkRMRVJfTk9O RSwgZmFsc2UpOworCVNpbXBsZUxydVJlcXVlc3QoJlNlcmlhbFNscnVEZXNjLAorCQkubmFt ZSA9ICJzZXJpYWxpemFibGUiLAorCQkuRGlyID0gInBnX3NlcmlhbCIsCisJCS5sb25nX3Nl Z21lbnRfbmFtZXMgPSBmYWxzZSwKKworCQkubnNsb3RzID0gc2VyaWFsaXphYmxlX2J1ZmZl cnMsCisKKwkJLnN5bmNfaGFuZGxlciA9IFNZTkNfSEFORExFUl9OT05FLAorCQkuUGFnZVBy ZWNlZGVzID0gU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5LAorCQkuZXJyZGV0YWlsX2Zv cl9pb19lcnJvciA9IHNlcmlhbF9lcnJkZXRhaWxfZm9yX2lvX2Vycm9yLAorCisJCS5idWZm ZXJfdHJhbmNoZV9pZCA9IExXVFJBTkNIRV9TRVJJQUxfQlVGRkVSLAorCQkuYmFua190cmFu Y2hlX2lkID0gTFdUUkFOQ0hFX1NFUklBTF9TTFJVLAorCQkpOwogI2lmZGVmIFVTRV9BU1NF UlRfQ0hFQ0tJTkcKIAlTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHlVbml0VGVzdHMoKTsK ICNlbmRpZgotCVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU2VyaWFsU2xydUN0bCwgU0VS SUFMX0VOVFJJRVNQRVJQQUdFKTsKIAotCS8qCi0JICogQ3JlYXRlIG9yIGF0dGFjaCB0byB0 aGUgU2VyaWFsQ29udHJvbCBzdHJ1Y3R1cmUuCi0JICovCi0Jc2VyaWFsQ29udHJvbCA9IChT ZXJpYWxDb250cm9sKQotCQlTaG1lbUluaXRTdHJ1Y3QoIlNlcmlhbENvbnRyb2xEYXRhIiwg c2l6ZW9mKFNlcmlhbENvbnRyb2xEYXRhKSwgJmZvdW5kKTsKLQlBc3NlcnQoZm91bmQgPT0g SXNVbmRlclBvc3RtYXN0ZXIpOworCVNobWVtUmVxdWVzdFN0cnVjdCgmU2VyaWFsQ29udHJv bFNobWVtRGVzYywKKwkJLm5hbWUgPSAiU2VyaWFsQ29udHJvbERhdGEiLAorCQkuc2l6ZSA9 IHNpemVvZihTZXJpYWxDb250cm9sRGF0YSksCisJCS5wdHIgPSAodm9pZCAqKikgJnNlcmlh bENvbnRyb2wsCisJKTsKK30KIAotCS8qCi0JICogSWYgd2UganVzdCBhdHRhY2hlZCB0byBl eGlzdGluZyBzaGFyZWQgbWVtb3J5IChFWEVDX0JBQ0tFTkQpLCB3ZSdyZSBhbGwKLQkgKiBk b25lLiAgT3RoZXJ3aXNlLCBkdXJpbmcgcG9zdG1hc3RlciBzdGFydHVwIHByb2NlZWQgdG8g aW5pdGlhbGl6ZSB0aGUKLQkgKiBzaGFyZWQgbWVtb3J5LgotCSAqLwotCWlmIChJc1VuZGVy UG9zdG1hc3RlcikKLQl7Ci0JCS8qIFRoaXMgbmV2ZXIgY2hhbmdlcywgc28gbGV0J3Mga2Vl cCBhIGxvY2FsIGNvcHkuICovCi0JCU9sZENvbW1pdHRlZFN4YWN0ID0gUHJlZFhhY3QtPk9s ZENvbW1pdHRlZFN4YWN0OwotCQlyZXR1cm47Ci0JfQorc3RhdGljIHZvaWQKK1ByZWRpY2F0 ZUxvY2tTaG1lbUluaXQodm9pZCAqYXJnKQoreworCWludAkJCW1heF9yd19jb25mbGljdHM7 CisJYm9vbAkJZm91bmQ7CiAKIAkvKgogCSAqIFJlc2VydmUgYSBkdW1teSBlbnRyeSBpbiB0 aGUgaGFzaCB0YWJsZTsgd2UgdXNlIGl0IHRvIG1ha2Ugc3VyZSB0aGVyZSdzCkBAIC0xMjc3 LDcgKzEyODYsNiBAQCBQcmVkaWNhdGVMb2NrU2htZW1Jbml0KHZvaWQpCiAJCQkJCSAgIEhB U0hfRU5URVIsICZmb3VuZCk7CiAJQXNzZXJ0KCFmb3VuZCk7CiAKLQkvKiBJbml0aWFsaXpl IFByZWRYYWN0IGxpc3QgKi8KIAlkbGlzdF9pbml0KCZQcmVkWGFjdC0+YXZhaWxhYmxlTGlz dCk7CiAJZGxpc3RfaW5pdCgmUHJlZFhhY3QtPmFjdGl2ZUxpc3QpOwogCVByZWRYYWN0LT5T eGFjdEdsb2JhbFhtaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKQEAgLTEzMTksNiArMTMy Nyw5IEBAIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkKIAlkbGlzdF9pbml0KCZSV0Nv bmZsaWN0UG9vbC0+YXZhaWxhYmxlTGlzdCk7CiAJUldDb25mbGljdFBvb2wtPmVsZW1lbnQg PSAoUldDb25mbGljdCkgKChjaGFyICopIFJXQ29uZmxpY3RQb29sICsKIAkJCQkJCQkJCQkJ UldDb25mbGljdFBvb2xIZWFkZXJEYXRhU2l6ZSk7CisKKwltYXhfcndfY29uZmxpY3RzID0g bWF4X3NlcmlhbGl6YWJsZV94YWN0cyAqIDU7CisKIAkvKiBBZGQgYWxsIGVsZW1lbnRzIHRv IGF2YWlsYWJsZSBsaXN0LCBjbGVhbi4gKi8KIAlmb3IgKGludCBpID0gMDsgaSA8IG1heF9y d19jb25mbGljdHM7IGkrKykKIAl7CkBAIC0xMzM1LDU3ICsxMzQ2LDI4IEBAIFByZWRpY2F0 ZUxvY2tTaG1lbUluaXQodm9pZCkKIAlzZXJpYWxDb250cm9sLT5oZWFkWGlkID0gSW52YWxp ZFRyYW5zYWN0aW9uSWQ7CiAJc2VyaWFsQ29udHJvbC0+dGFpbFhpZCA9IEludmFsaWRUcmFu c2FjdGlvbklkOwogCUxXTG9ja1JlbGVhc2UoU2VyaWFsQ29udHJvbExvY2spOwotfQotCi0v KgotICogRXN0aW1hdGUgc2hhcmVkLW1lbW9yeSBzcGFjZSB1c2VkIGZvciBwcmVkaWNhdGUg bG9jayB0YWJsZQotICovCi1TaXplCi1QcmVkaWNhdGVMb2NrU2htZW1TaXplKHZvaWQpCi17 Ci0JU2l6ZQkJc2l6ZSA9IDA7Ci0JaW50NjQJCW1heF9wcmVkaWNhdGVfbG9ja190YXJnZXRz OwotCWludDY0CQltYXhfcHJlZGljYXRlX2xvY2tzOwotCWludDY0CQltYXhfc2VyaWFsaXph YmxlX3hhY3RzOwotCWludDY0CQltYXhfcndfY29uZmxpY3RzOwotCi0JLyogcHJlZGljYXRl IGxvY2sgdGFyZ2V0IGhhc2ggdGFibGUgKi8KLQltYXhfcHJlZGljYXRlX2xvY2tfdGFyZ2V0 cyA9IE5QUkVESUNBVEVMT0NLVEFSR0VURU5UUygpOwotCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBoYXNoX2VzdGltYXRlX3NpemUobWF4X3ByZWRpY2F0ZV9sb2NrX3RhcmdldHMsCi0JCQkJ CQkJCQkJCSBzaXplb2YoUFJFRElDQVRFTE9DS1RBUkdFVCkpKTsKLQotCS8qIHByZWRpY2F0 ZSBsb2NrIGhhc2ggdGFibGUgKi8KLQltYXhfcHJlZGljYXRlX2xvY2tzID0gbWF4X3ByZWRp Y2F0ZV9sb2NrX3RhcmdldHMgKiAyOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBoYXNoX2Vz dGltYXRlX3NpemUobWF4X3ByZWRpY2F0ZV9sb2NrcywKLQkJCQkJCQkJCQkJIHNpemVvZihQ UkVESUNBVEVMT0NLKSkpOwogCi0JLyogdHJhbnNhY3Rpb24gbGlzdCAqLwotCW1heF9zZXJp YWxpemFibGVfeGFjdHMgPSAoTWF4QmFja2VuZHMgKyBtYXhfcHJlcGFyZWRfeGFjdHMpICog MTA7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFByZWRYYWN0TGlzdERhdGFTaXplKTsKLQlz aXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoKFNpemUpIG1heF9zZXJpYWxpemFibGVf eGFjdHMsCi0JCQkJCQkJCSAgIHNpemVvZihTRVJJQUxJWkFCTEVYQUNUKSkpOwotCi0JLyog dHJhbnNhY3Rpb24geGlkIHRhYmxlICovCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIGhhc2hf ZXN0aW1hdGVfc2l6ZShtYXhfc2VyaWFsaXphYmxlX3hhY3RzLAotCQkJCQkJCQkJCQkgc2l6 ZW9mKFNFUklBTElaQUJMRVhJRCkpKTsKKwkvKiBUaGlzIG5ldmVyIGNoYW5nZXMsIHNvIGxl dCdzIGtlZXAgYSBsb2NhbCBjb3B5LiAqLworCU9sZENvbW1pdHRlZFN4YWN0ID0gUHJlZFhh Y3QtPk9sZENvbW1pdHRlZFN4YWN0OwogCi0JLyogcnctY29uZmxpY3QgcG9vbCAqLwotCW1h eF9yd19jb25mbGljdHMgPSBtYXhfc2VyaWFsaXphYmxlX3hhY3RzICogNTsKLQlzaXplID0g YWRkX3NpemUoc2l6ZSwgUldDb25mbGljdFBvb2xIZWFkZXJEYXRhU2l6ZSk7Ci0Jc2l6ZSA9 IGFkZF9zaXplKHNpemUsIG11bF9zaXplKChTaXplKSBtYXhfcndfY29uZmxpY3RzLAotCQkJ CQkJCQkgICBSV0NvbmZsaWN0RGF0YVNpemUpKTsKKwkvKiBQcmUtY2FsY3VsYXRlIHRoZSBo YXNoIGFuZCBwYXJ0aXRpb24gbG9jayBvZiB0aGUgc2NyYXRjaCBlbnRyeSAqLworCVNjcmF0 Y2hUYXJnZXRUYWdIYXNoID0gUHJlZGljYXRlTG9ja1RhcmdldFRhZ0hhc2hDb2RlKCZTY3Jh dGNoVGFyZ2V0VGFnKTsKKwlTY3JhdGNoUGFydGl0aW9uTG9jayA9IFByZWRpY2F0ZUxvY2tI YXNoUGFydGl0aW9uTG9jayhTY3JhdGNoVGFyZ2V0VGFnSGFzaCk7CiAKLQkvKiBIZWFkIGZv ciBsaXN0IG9mIGZpbmlzaGVkIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlvbnMuICovCi0Jc2l6 ZSA9IGFkZF9zaXplKHNpemUsIHNpemVvZihkbGlzdF9oZWFkKSk7CisJU2xydVBhZ2VQcmVj ZWRlc1VuaXRUZXN0cyhTZXJpYWxTbHJ1Q3RsLCBTRVJJQUxfRU5UUklFU1BFUlBBR0UpOwor fQogCi0JLyogU2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmVzIGZvciBTTFJVIHRyYWNraW5nIG9m IG9sZCBjb21taXR0ZWQgeGlkcy4gKi8KLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9m KFNlcmlhbENvbnRyb2xEYXRhKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNpbXBsZUxy dVNobWVtU2l6ZShzZXJpYWxpemFibGVfYnVmZmVycywgMCkpOworc3RhdGljIHZvaWQKK1By ZWRpY2F0ZUxvY2tTaG1lbUF0dGFjaCh2b2lkICphcmcpCit7CisJLyogVGhpcyBuZXZlciBj aGFuZ2VzLCBzbyBsZXQncyBrZWVwIGEgbG9jYWwgY29weS4gKi8KKwlPbGRDb21taXR0ZWRT eGFjdCA9IFByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdDsKIAotCXJldHVybiBzaXplOwor CS8qIFByZS1jYWxjdWxhdGUgdGhlIGhhc2ggYW5kIHBhcnRpdGlvbiBsb2NrIG9mIHRoZSBz Y3JhdGNoIGVudHJ5ICovCisJU2NyYXRjaFRhcmdldFRhZ0hhc2ggPSBQcmVkaWNhdGVMb2Nr VGFyZ2V0VGFnSGFzaENvZGUoJlNjcmF0Y2hUYXJnZXRUYWcpOworCVNjcmF0Y2hQYXJ0aXRp b25Mb2NrID0gUHJlZGljYXRlTG9ja0hhc2hQYXJ0aXRpb25Mb2NrKFNjcmF0Y2hUYXJnZXRU YWdIYXNoKTsKIH0KIAotCiAvKgogICogQ29tcHV0ZSB0aGUgaGFzaCBjb2RlIGFzc29jaWF0 ZWQgd2l0aCBhIFBSRURJQ0FURUxPQ0tUQUcuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3NscnUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fj dGl2aXR5L3Bnc3RhdF9zbHJ1LmMKaW5kZXggMjE5MGYzODhlYWUuLmY0ZGZlODY5N2Q3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfc2xydS5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9zbHJ1LmMKQEAgLTExOSw2 ICsxMTksNyBAQCBwZ3N0YXRfZ2V0X3NscnVfaW5kZXgoY29uc3QgY2hhciAqbmFtZSkKIHsK IAlpbnQJCQlpOwogCisJQXNzZXJ0KG5hbWUpOwogCWZvciAoaSA9IDA7IGkgPCBTTFJVX05V TV9FTEVNRU5UUzsgaSsrKQogCXsKIAkJaWYgKHN0cmNtcChzbHJ1X25hbWVzW2ldLCBuYW1l KSA9PSAwKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2Nsb2cuaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9jbG9nLmgKaW5kZXggYTFjZmVkNWY0M2MuLjc4OTQ5OThjNzYzIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvY2xvZy5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9jbG9nLmgKQEAgLTQwLDggKzQwLDYgQEAgZXh0ZXJuIHZvaWQgVHJhbnNhY3Rp b25JZFNldFRyZWVTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKIAkJ CQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgKnN1YnhpZHMsIFhpZFN0YXR1cyBzdGF0dXMsIFhM b2dSZWNQdHIgbHNuKTsKIGV4dGVybiBYaWRTdGF0dXMgVHJhbnNhY3Rpb25JZEdldFN0YXR1 cyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciAqbHNuKTsKIAotZXh0ZXJuIFNpemUg Q0xPR1NobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIENMT0dTaG1lbUluaXQodm9pZCk7 CiBleHRlcm4gdm9pZCBCb290U3RyYXBDTE9HKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhcnR1 cENMT0codm9pZCk7CiBleHRlcm4gdm9pZCBUcmltQ0xPRyh2b2lkKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9jb21taXRfdHMuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9j b21taXRfdHMuaAppbmRleCA0OWVlMjFjZDVkMi4uODI1Y2NkYTkwZWQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9jb21taXRfdHMuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvY29tbWl0X3RzLmgKQEAgLTI3LDggKzI3LDYgQEAgZXh0ZXJuIGJvb2wgVHJhbnNhY3Rp b25JZEdldENvbW1pdFRzRGF0YShUcmFuc2FjdGlvbklkIHhpZCwKIGV4dGVybiBUcmFuc2Fj dGlvbklkIEdldExhdGVzdENvbW1pdFRzRGF0YShUaW1lc3RhbXBUeiAqdHMsCiAJCQkJCQkJ CQkJICAgUmVwbE9yaWdpbklkICpub2RlaWQpOwogCi1leHRlcm4gU2l6ZSBDb21taXRUc1No bWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIENvbW1pdFRzU2htZW1Jbml0KHZvaWQpOwog ZXh0ZXJuIHZvaWQgQm9vdFN0cmFwQ29tbWl0VHModm9pZCk7CiBleHRlcm4gdm9pZCBTdGFy dHVwQ29tbWl0VHModm9pZCk7CiBleHRlcm4gdm9pZCBDb21taXRUc1BhcmFtZXRlckNoYW5n ZShib29sIG5ld3ZhbHVlLCBib29sIG9sZHZhbHVlKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9tdWx0aXhhY3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3Qu aAppbmRleCAyYWU4YjU3MWRjYy4uNmJlNTI5OWFiNjggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4 YWN0LmgKQEAgLTEyMSw4ICsxMjEsNiBAQCBleHRlcm4gdm9pZCBBdEVPWGFjdF9NdWx0aVhh Y3Qodm9pZCk7CiBleHRlcm4gdm9pZCBBdFByZXBhcmVfTXVsdGlYYWN0KHZvaWQpOwogZXh0 ZXJuIHZvaWQgUG9zdFByZXBhcmVfTXVsdGlYYWN0KEZ1bGxUcmFuc2FjdGlvbklkIGZ4aWQp OwogCi1leHRlcm4gU2l6ZSBNdWx0aVhhY3RTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9p ZCBNdWx0aVhhY3RTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBCb290U3RyYXBNdWx0 aVhhY3Qodm9pZCk7CiBleHRlcm4gdm9pZCBTdGFydHVwTXVsdGlYYWN0KHZvaWQpOwogZXh0 ZXJuIHZvaWQgVHJpbU11bHRpWGFjdCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9zbHJ1LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oCmluZGV4IGY5NjZk MGQ5ZmU3Li44MjBjNzk4Njg1NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3Ns cnUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oCkBAIC0xNiw2ICsxNiw3IEBA CiAjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2Rl ZnMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgorI2luY2x1ZGUgInN0b3JhZ2Uv c2htZW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL3N5bmMuaCIKIAogLyoKQEAgLTEwNiwyMyAr MTA3LDIwIEBAIHR5cGVkZWYgc3RydWN0IFNscnVTaGFyZWREYXRhCiAKIHR5cGVkZWYgU2xy dVNoYXJlZERhdGEgKlNscnVTaGFyZWQ7CiAKLS8qCi0gKiBTbHJ1Q3RsRGF0YSBpcyBhbiB1 bnNoYXJlZCBzdHJ1Y3R1cmUgdGhhdCBwb2ludHMgdG8gdGhlIGFjdGl2ZSBpbmZvcm1hdGlv bgotICogaW4gc2hhcmVkIG1lbW9yeS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgU2xydUN0bERh dGEKK3R5cGVkZWYgc3RydWN0IFNscnVPcHRzCiB7Ci0JU2xydVNoYXJlZAlzaGFyZWQ7Ci0K LQkvKiBOdW1iZXIgb2YgYmFua3MgaW4gdGhpcyBTTFJVLiAqLwotCXVpbnQxNgkJbmJhbmtz OworCVNobWVtU3RydWN0T3B0cyBiYXNlOwogCiAJLyoKLQkgKiBJZiB0cnVlLCB1c2UgbG9u ZyBzZWdtZW50IGZpbGUgbmFtZXMuICBPdGhlcndpc2UsIHVzZSBzaG9ydCBmaWxlIG5hbWVz LgotCSAqCi0JICogRm9yIGRldGFpbHMgYWJvdXQgdGhlIGZpbGUgbmFtZSBmb3JtYXQsIHNl ZSBTbHJ1RmlsZU5hbWUoKS4KKwkgKiBuYW1lIG9mIFNMUlUuICAoVGhpcyBpcyB1c2VyLXZp c2libGUsIHBpY2sgd2l0aCBjYXJlISkKIAkgKi8KLQlib29sCQlsb25nX3NlZ21lbnRfbmFt ZXM7CisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qIG51bWJlciBvZiBwYWdlIHNsb3RzIHRv IHVzZS4gKi8KKwlpbnQJCQluc2xvdHM7CisKKwkvKiBudW1iZXIgb2YgTFNOIGdyb3VwcyBw ZXIgcGFnZSAoc2V0IHRvIHplcm8gaWYgbm90IHJlbGV2YW50KS4gKi8KKwlpbnQJCQlubHNu czsKIAogCS8qCiAJICogV2hpY2ggc3luYyBoYW5kbGVyIGZ1bmN0aW9uIHRvIHVzZSB3aGVu IGhhbmRpbmcgc3luYyByZXF1ZXN0cyBvdmVyIHRvCkBAIC0xMzAsNiArMTI4LDE5IEBAIHR5 cGVkZWYgc3RydWN0IFNscnVDdGxEYXRhCiAJICovCiAJU3luY1JlcXVlc3RIYW5kbGVyIHN5 bmNfaGFuZGxlcjsKIAorCS8qCisJICogUEdEQVRBLXJlbGF0aXZlIHN1YmRpcmVjdG9yeSB0 aGF0IHdpbGwgY29udGFpbiB0aGUgZmlsZXMuCisJICovCisJY29uc3QgY2hhciAqRGlyOwor CisJLyoKKwkgKiBJZiB0cnVlLCB1c2UgbG9uZyBzZWdtZW50IGZpbGUgbmFtZXMuICBPdGhl cndpc2UsIHVzZSBzaG9ydCBmaWxlIG5hbWVzLgorCSAqCisJICogRm9yIGRldGFpbHMgYWJv dXQgdGhlIGZpbGUgbmFtZSBmb3JtYXQsIHNlZSBTbHJ1RmlsZU5hbWUoKS4KKwkgKi8KKwli b29sCQlsb25nX3NlZ21lbnRfbmFtZXM7CisKKwogCS8qCiAJICogRGVjaWRlIHdoZXRoZXIg YSBwYWdlIGlzICJvbGRlciIgZm9yIHRydW5jYXRpb24gYW5kIGFzIGEgaGludCBmb3IKIAkg KiBldmljdGluZyBwYWdlcyBpbiBMUlUgb3JkZXIuICBSZXR1cm4gdHJ1ZSBpZiBldmVyeSBl bnRyeSBvZiB0aGUgZmlyc3QKQEAgLTE1MywxMyArMTY0LDI4IEBAIHR5cGVkZWYgc3RydWN0 IFNscnVDdGxEYXRhCiAJaW50CQkJKCplcnJkZXRhaWxfZm9yX2lvX2Vycm9yKSAoY29uc3Qg dm9pZCAqb3BhcXVlX2RhdGEpOwogCiAJLyoKLQkgKiBEaXIgaXMgc2V0IGR1cmluZyBTaW1w bGVMcnVJbml0IGFuZCBkb2VzIG5vdCBjaGFuZ2UgdGhlcmVhZnRlci4gU2luY2UKLQkgKiBp dCdzIGFsd2F5cyB0aGUgc2FtZSwgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGluIHNoYXJlZCBt ZW1vcnkuCisJICogVHJhbmNoZSBJRHMgdG8gdXNlIGZvciB0aGUgU0xSVSdzIHBlci1idWZm ZXIgYW5kIHBlci1iYW5rIExXTG9ja3MuICBJZgorCSAqIHRoZXNlIGFyZSBsZWZ0IGFzIHpl cm9zLCBuZXcgdHJhbmNoZXMgd2lsbCBiZSBhc3NpZ25lZCBkeW5hbWljYWxseS4KIAkgKi8K LQljaGFyCQlEaXJbNjRdOwotfSBTbHJ1Q3RsRGF0YTsKKwlpbnQJCQlidWZmZXJfdHJhbmNo ZV9pZDsKKwlpbnQJCQliYW5rX3RyYW5jaGVfaWQ7Cit9IFNscnVPcHRzOworCisvKgorICog U2xydURlc2MgaXMgYW4gdW5zaGFyZWQgc3RydWN0dXJlIHRoYXQgcG9pbnRzIHRvIHRoZSBh Y3RpdmUgaW5mb3JtYXRpb24KKyAqIGluIHNoYXJlZCBtZW1vcnkuCisgKi8KK3R5cGVkZWYg c3RydWN0IFNscnVEZXNjCit7CisJU2htZW1TdHJ1Y3REZXNjIGJhc2U7CisKKwlTbHJ1T3B0 cyBvcHRpb25zOwogCi10eXBlZGVmIFNscnVDdGxEYXRhICpTbHJ1Q3RsOworCVNscnVTaGFy ZWQJc2hhcmVkOworCisJLyogTnVtYmVyIG9mIGJhbmtzIGluIHRoaXMgU0xSVS4gKi8KKwl1 aW50MTYJCW5iYW5rczsKK30gU2xydURlc2M7CiAKIC8qCiAgKiBHZXQgdGhlIFNMUlUgYmFu ayBsb2NrIGZvciBnaXZlbiBTbHJ1Q3RsIGFuZCB0aGUgcGFnZW5vLgpAQCAtMTY4LDQ4ICsx OTQsNTIgQEAgdHlwZWRlZiBTbHJ1Q3RsRGF0YSAqU2xydUN0bDsKICAqIHJlc3BlY3RpdmUg YmFuay4KICAqLwogc3RhdGljIGlubGluZSBMV0xvY2sgKgotU2ltcGxlTHJ1R2V0QmFua0xv Y2soU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubykKK1NpbXBsZUxydUdldEJhbmtMb2NrKFNs cnVEZXNjICpjdGwsIGludDY0IHBhZ2VubykKIHsKIAlpbnQJCQliYW5rbm87CiAKKwlBc3Nl cnQoY3RsLT5uYmFua3MgIT0gMCk7CiAJYmFua25vID0gcGFnZW5vICUgY3RsLT5uYmFua3M7 CiAJcmV0dXJuICYoY3RsLT5zaGFyZWQtPmJhbmtfbG9ja3NbYmFua25vXS5sb2NrKTsKIH0K IAotZXh0ZXJuIFNpemUgU2ltcGxlTHJ1U2htZW1TaXplKGludCBuc2xvdHMsIGludCBubHNu cyk7CitleHRlcm4gdm9pZCBTaW1wbGVMcnVSZXF1ZXN0V2l0aE9wdHMoU2xydURlc2MgKmRl c2MsIGNvbnN0IFNscnVPcHRzICpvcHRpb25zKTsKKworI2RlZmluZSBTaW1wbGVMcnVSZXF1 ZXN0KGRlc2MsIC4uLikgIFwKKwlTaW1wbGVMcnVSZXF1ZXN0V2l0aE9wdHMoZGVzYywgJihT bHJ1T3B0cyl7X19WQV9BUkdTX199KQorCiBleHRlcm4gaW50CVNpbXBsZUxydUF1dG90dW5l QnVmZmVycyhpbnQgZGl2aXNvciwgaW50IG1heCk7Ci1leHRlcm4gdm9pZCBTaW1wbGVMcnVJ bml0KFNscnVDdGwgY3RsLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbnNsb3RzLCBpbnQgbmxz bnMsCi0JCQkJCQkgIGNvbnN0IGNoYXIgKnN1YmRpciwgaW50IGJ1ZmZlcl90cmFuY2hlX2lk LAotCQkJCQkJICBpbnQgYmFua190cmFuY2hlX2lkLCBTeW5jUmVxdWVzdEhhbmRsZXIgc3lu Y19oYW5kbGVyLAotCQkJCQkJICBib29sIGxvbmdfc2VnbWVudF9uYW1lcyk7Ci1leHRlcm4g aW50CVNpbXBsZUxydVplcm9QYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8pOwotZXh0 ZXJuIHZvaWQgU2ltcGxlTHJ1WmVyb0FuZFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQg cGFnZW5vKTsKLWV4dGVybiBpbnQJU2ltcGxlTHJ1UmVhZFBhZ2UoU2xydUN0bCBjdGwsIGlu dDY0IHBhZ2VubywgYm9vbCB3cml0ZV9vaywKK2V4dGVybiBpbnQJU2ltcGxlTHJ1WmVyb1Bh Z2UoU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vKTsKK2V4dGVybiB2b2lkIFNpbXBsZUxy dVplcm9BbmRXcml0ZVBhZ2UoU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vKTsKK2V4dGVy biBpbnQJU2ltcGxlTHJ1UmVhZFBhZ2UoU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vLCBi b29sIHdyaXRlX29rLAogCQkJCQkJCSAgY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpOwotZXh0 ZXJuIGludAlTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShTbHJ1Q3RsIGN0bCwgaW50NjQg cGFnZW5vLAorZXh0ZXJuIGludAlTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShTbHJ1RGVz YyAqY3RsLCBpbnQ2NCBwYWdlbm8sCiAJCQkJCQkJCQkgICBjb25zdCB2b2lkICpvcGFxdWVf ZGF0YSk7Ci1leHRlcm4gdm9pZCBTaW1wbGVMcnVXcml0ZVBhZ2UoU2xydUN0bCBjdGwsIGlu dCBzbG90bm8pOwotZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBjdGws IGJvb2wgYWxsb3dfcmVkaXJ0aWVkKTsKK2V4dGVybiB2b2lkIFNpbXBsZUxydVdyaXRlUGFn ZShTbHJ1RGVzYyAqY3RsLCBpbnQgc2xvdG5vKTsKK2V4dGVybiB2b2lkIFNpbXBsZUxydVdy aXRlQWxsKFNscnVEZXNjICpjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVkKTsKICNpZmRlZiBV U0VfQVNTRVJUX0NIRUNLSU5HCi1leHRlcm4gdm9pZCBTbHJ1UGFnZVByZWNlZGVzVW5pdFRl c3RzKFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UpOworZXh0ZXJuIHZvaWQgU2xydVBhZ2VQ cmVjZWRlc1VuaXRUZXN0cyhTbHJ1RGVzYyAqY3RsLCBpbnQgcGVyX3BhZ2UpOwogI2Vsc2UK ICNkZWZpbmUgU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhjdGwsIHBlcl9wYWdlKSBkbyB7 fSB3aGlsZSAoMCkKICNlbmRpZgotZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1VHJ1bmNhdGUoU2xy dUN0bCBjdGwsIGludDY0IGN1dG9mZlBhZ2UpOwotZXh0ZXJuIGJvb2wgU2ltcGxlTHJ1RG9l c1BoeXNpY2FsUGFnZUV4aXN0KFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8pOworZXh0ZXJu IHZvaWQgU2ltcGxlTHJ1VHJ1bmNhdGUoU2xydURlc2MgKmN0bCwgaW50NjQgY3V0b2ZmUGFn ZSk7CitleHRlcm4gYm9vbCBTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3QoU2xydURl c2MgKmN0bCwgaW50NjQgcGFnZW5vKTsKIAotdHlwZWRlZiBib29sICgqU2xydVNjYW5DYWxs YmFjaykgKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50NjQgc2VncGFnZSwKK3R5 cGVkZWYgYm9vbCAoKlNscnVTY2FuQ2FsbGJhY2spIChTbHJ1RGVzYyAqY3RsLCBjaGFyICpm aWxlbmFtZSwgaW50NjQgc2VncGFnZSwKIAkJCQkJCQkJICB2b2lkICpkYXRhKTsKLWV4dGVy biBib29sIFNscnVTY2FuRGlyZWN0b3J5KFNscnVDdGwgY3RsLCBTbHJ1U2NhbkNhbGxiYWNr IGNhbGxiYWNrLCB2b2lkICpkYXRhKTsKLWV4dGVybiB2b2lkIFNscnVEZWxldGVTZWdtZW50 KFNscnVDdGwgY3RsLCBpbnQ2NCBzZWdubyk7CitleHRlcm4gYm9vbCBTbHJ1U2NhbkRpcmVj dG9yeShTbHJ1RGVzYyAqY3RsLCBTbHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpk YXRhKTsKK2V4dGVybiB2b2lkIFNscnVEZWxldGVTZWdtZW50KFNscnVEZXNjICpjdGwsIGlu dDY0IHNlZ25vKTsKIAotZXh0ZXJuIGludAlTbHJ1U3luY0ZpbGVUYWcoU2xydUN0bCBjdGws IGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpOworZXh0ZXJuIGludAlTbHJ1U3lu Y0ZpbGVUYWcoU2xydURlc2MgKmN0bCwgY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0 aCk7CiAKIC8qIFNscnVTY2FuRGlyZWN0b3J5IHB1YmxpYyBjYWxsYmFja3MgKi8KLWV4dGVy biBib29sIFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShTbHJ1Q3RsIGN0bCwgY2hhciAq ZmlsZW5hbWUsCitleHRlcm4gYm9vbCBTbHJ1U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UoU2xy dURlc2MgKmN0bCwgY2hhciAqZmlsZW5hbWUsCiAJCQkJCQkJCQkJaW50NjQgc2VncGFnZSwg dm9pZCAqZGF0YSk7Ci1leHRlcm4gYm9vbCBTbHJ1U2NhbkRpckNiRGVsZXRlQWxsKFNscnVD dGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50NjQgc2VncGFnZSwKK2V4dGVybiBib29sIFNs cnVTY2FuRGlyQ2JEZWxldGVBbGwoU2xydURlc2MgKmN0bCwgY2hhciAqZmlsZW5hbWUsIGlu dDY0IHNlZ3BhZ2UsCiAJCQkJCQkJCSAgIHZvaWQgKmRhdGEpOwogZXh0ZXJuIGJvb2wgY2hl Y2tfc2xydV9idWZmZXJzKGNvbnN0IGNoYXIgKm5hbWUsIGludCAqbmV3dmFsKTsKIAorZXh0 ZXJuIHZvaWQgc2htZW1fc2xydV9pbml0KFNobWVtU3RydWN0RGVzYyAqYmFzZV9kZXNjLCBT aG1lbVN0cnVjdE9wdHMgKm9wdGlvbnMpOworZXh0ZXJuIHZvaWQgc2htZW1fc2xydV9hdHRh Y2goU2htZW1TdHJ1Y3REZXNjICpiYXNlX2Rlc2MsIFNobWVtU3RydWN0T3B0cyAqb3B0aW9u cyk7CisKICNlbmRpZgkJCQkJCQkvKiBTTFJVX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9zdWJ0cmFucy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3N1YnRyYW5zLmgK aW5kZXggMTFiNzM1NWRiZGYuLmQ5ODZjZDllODAyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3Mvc3VidHJhbnMuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJhbnMu aApAQCAtMTUsOCArMTUsNiBAQCBleHRlcm4gdm9pZCBTdWJUcmFuc1NldFBhcmVudChUcmFu c2FjdGlvbklkIHhpZCwgVHJhbnNhY3Rpb25JZCBwYXJlbnQpOwogZXh0ZXJuIFRyYW5zYWN0 aW9uSWQgU3ViVHJhbnNHZXRQYXJlbnQoVHJhbnNhY3Rpb25JZCB4aWQpOwogZXh0ZXJuIFRy YW5zYWN0aW9uSWQgU3ViVHJhbnNHZXRUb3Btb3N0VHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25J ZCB4aWQpOwogCi1leHRlcm4gU2l6ZSBTVUJUUkFOU1NobWVtU2l6ZSh2b2lkKTsKLWV4dGVy biB2b2lkIFNVQlRSQU5TU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgQm9vdFN0cmFw U1VCVFJBTlModm9pZCk7CiBleHRlcm4gdm9pZCBTdGFydHVwU1VCVFJBTlMoVHJhbnNhY3Rp b25JZCBvbGRlc3RBY3RpdmVYSUQpOwogZXh0ZXJuIHZvaWQgQ2hlY2tQb2ludFNVQlRSQU5T KHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvYXN5bmMuaCBiL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2FzeW5jLmgKaW5kZXggM2JhYWU3Y2I4ZGMuLjIwMmU0YWE1 ZTc0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9hc3luYy5oCisrKyBiL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2FzeW5jLmgKQEAgLTE5LDkgKzE5LDYgQEAgZXh0ZXJuIFBH RExMSU1QT1JUIGJvb2wgVHJhY2Vfbm90aWZ5OwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBt YXhfbm90aWZ5X3F1ZXVlX3BhZ2VzOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNp Z19hdG9taWNfdCBub3RpZnlJbnRlcnJ1cHRQZW5kaW5nOwogCi1leHRlcm4gU2l6ZSBBc3lu Y1NobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIEFzeW5jU2htZW1Jbml0KHZvaWQpOwot CiBleHRlcm4gdm9pZCBOb3RpZnlNeUZyb250RW5kKGNvbnN0IGNoYXIgKmNoYW5uZWwsCiAJ CQkJCQkJIGNvbnN0IGNoYXIgKnBheWxvYWQsCiAJCQkJCQkJIGludDMyIHNyY1BpZCk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3ByZWRpY2F0ZS5oIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9wcmVkaWNhdGUuaAppbmRleCBhNWFjNTViOGY3ZS4uNDQzYmZmYjU4ZmQg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJlZGljYXRlLmgKKysrIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcmVkaWNhdGUuaApAQCAtNDEsMTEgKzQxLDYgQEAgdHlwZWRl ZiB2b2lkICpTZXJpYWxpemFibGVYYWN0SGFuZGxlOwogLyoKICAqIGZ1bmN0aW9uIHByb3Rv dHlwZXMKICAqLwotCi0vKiBob3VzZWtlZXBpbmcgZm9yIHNoYXJlZCBtZW1vcnkgcHJlZGlj YXRlIGxvY2sgc3RydWN0dXJlcyAqLwotZXh0ZXJuIHZvaWQgUHJlZGljYXRlTG9ja1NobWVt SW5pdCh2b2lkKTsKLWV4dGVybiBTaXplIFByZWRpY2F0ZUxvY2tTaG1lbVNpemUodm9pZCk7 Ci0KIGV4dGVybiB2b2lkIENoZWNrUG9pbnRQcmVkaWNhdGUodm9pZCk7CiAKIC8qIHByZWRp Y2F0ZSBsb2NrIHJlcG9ydGluZyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9zaG1lbS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oCmluZGV4IGY1NzY3MmZi YzU4Li40MjAzMDE0NTMyOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1l bS5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaApAQCAtMjksNiArMjksNyBA QCB0eXBlZGVmIGVudW0KIHsKIAlTSE1FTV9LSU5EX1NUUlVDVCA9IDAsCQkvKiBwbGFpbiwg Y29udGlndW91cyBhcmVhIG9mIG1lbW9yeSAqLwogCVNITUVNX0tJTkRfSEFTSCwJCQkvKiBh IGhhc2ggdGFibGUgKi8KKwlTSE1FTV9LSU5EX1NMUlUsCQkJLyogU0xSVSBidWZmZXJzIGFu ZCBjb250cm9sIHN0cnVjdHVyZXMgKi8KIH0gU2htZW1BcmVhS2luZDsKIAogLyoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmgKaW5kZXggZDYyYzI5ZjEzNjEuLmMxOTlmMThh MjdhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaAor KysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaApAQCAtMzIsNiArMzIs MTMgQEAgUEdfU0hNRU1fU1VCU1lTVEVNKERTTVJlZ2lzdHJ5U2htZW1DYWxsYmFja3MpCiAK IC8qIHhsb2csIGNsb2csIGFuZCBidWZmZXJzICovCiBQR19TSE1FTV9TVUJTWVNURU0oVmFy c3VwU2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oQ0xPR1NobWVtQ2FsbGJh Y2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKENvbW1pdFRzU2htZW1DYWxsYmFja3MpCitQR19T SE1FTV9TVUJTWVNURU0oU1VCVFJBTlNTaG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZ U1RFTShNdWx0aVhhY3RTaG1lbUNhbGxiYWNrcykKKworLyogcHJlZGljYXRlIGxvY2sgbWFu YWdlciAqLworUEdfU0hNRU1fU1VCU1lTVEVNKFByZWRpY2F0ZUxvY2tTaG1lbUNhbGxiYWNr cykKIAogLyogcHJvY2VzcyB0YWJsZSAqLwogUEdfU0hNRU1fU1VCU1lTVEVNKFByb2NHbG9i YWxTaG1lbUNhbGxiYWNrcykKQEAgLTQzLDMgKzUwLDYgQEAgUEdfU0hNRU1fU1VCU1lTVEVN KFNoYXJlZEludmFsU2htZW1DYWxsYmFja3MpCiAvKiBpbnRlcnByb2Nlc3Mgc2lnbmFsaW5n IG1lY2hhbmlzbXMgKi8KIFBHX1NITUVNX1NVQlNZU1RFTShQTVNpZ25hbFNobWVtQ2FsbGJh Y2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKFByb2NTaWduYWxTaG1lbUNhbGxiYWNrcykKKwor Lyogb3RoZXIgbW9kdWxlcyB0aGF0IG5lZWQgc29tZSBzaGFyZWQgbWVtb3J5IHNwYWNlICov CitQR19TSE1FTV9TVUJTWVNURU0oQXN5bmNTaG1lbUNhbGxiYWNrcykKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zbHJ1L3Rlc3Rfc2xydS5jIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X3NscnUvdGVzdF9zbHJ1LmMKaW5kZXggZTRiZDJhZjBiZjUuLjNjMmExNDNi NGQ1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS90ZXN0X3NscnUu YworKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS90ZXN0X3NscnUuYwpAQCAtNDAs MTQgKzQwLDIyIEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9zbHJ1X2RlbGV0ZV9hbGwp OwogLyogTnVtYmVyIG9mIFNMUlUgcGFnZSBzbG90cyAqLwogI2RlZmluZSBOVU1fVEVTVF9C VUZGRVJTCQkxNgogCi1zdGF0aWMgU2xydUN0bERhdGEgVGVzdFNscnVDdGxEYXRhOwotI2Rl ZmluZSBUZXN0U2xydUN0bAkJCSgmVGVzdFNscnVDdGxEYXRhKQorc3RhdGljIHZvaWQgdGVz dF9zbHJ1X3NobWVtX3JlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyBib29sIHRlc3Rfc2xy dV9wYWdlX3ByZWNlZGVzX2xvZ2ljYWxseShpbnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIpOwor c3RhdGljIGludAl0ZXN0X3NscnVfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihjb25zdCB2b2lk ICpvcGFxdWVfZGF0YSk7CiAKLXN0YXRpYyBzaG1lbV9yZXF1ZXN0X2hvb2tfdHlwZSBwcmV2 X3NobWVtX3JlcXVlc3RfaG9vayA9IE5VTEw7Ci1zdGF0aWMgc2htZW1fc3RhcnR1cF9ob29r X3R5cGUgcHJldl9zaG1lbV9zdGFydHVwX2hvb2sgPSBOVUxMOworc3RhdGljIGNvbnN0IGNo YXIgKlRlc3RTbHJ1RGlyID0gInBnX3Rlc3Rfc2xydSI7CisKK3N0YXRpYyBTbHJ1RGVzYyBU ZXN0U2xydURlc2M7CisKK3N0YXRpYyBjb25zdCBTaG1lbUNhbGxiYWNrcyB0ZXN0X3NscnVf c2htZW1fY2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gdGVzdF9zbHJ1X3NobWVtX3Jl cXVlc3QKK307CisKKyNkZWZpbmUgVGVzdFNscnVDdGwJCQkoJlRlc3RTbHJ1RGVzYykKIAog c3RhdGljIGJvb2wKLXRlc3Rfc2xydV9zY2FuX2NiKFNscnVDdGwgY3RsLCBjaGFyICpmaWxl bmFtZSwgaW50NjQgc2VncGFnZSwgdm9pZCAqZGF0YSkKK3Rlc3Rfc2xydV9zY2FuX2NiKFNs cnVEZXNjICpjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQ2NCBzZWdwYWdlLCB2b2lkICpkYXRh KQogewogCWVsb2coTk9USUNFLCAiQ2FsbGluZyB0ZXN0X3NscnVfc2Nhbl9jYigpIik7CiAJ cmV0dXJuIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwoY3RsLCBmaWxlbmFtZSwgc2VncGFnZSwg ZGF0YSk7CkBAIC0xOTAsMjAgKzE5OCw2IEBAIHRlc3Rfc2xydV9kZWxldGVfYWxsKFBHX0ZV TkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1ZPSUQoKTsKIH0KIAotLyoKLSAqIE1vZHVsZSBs b2FkIGNhbGxiYWNrcyBhbmQgaW5pdGlhbGl6YXRpb24uCi0gKi8KLQotc3RhdGljIHZvaWQK LXRlc3Rfc2xydV9zaG1lbV9yZXF1ZXN0KHZvaWQpCi17Ci0JaWYgKHByZXZfc2htZW1fcmVx dWVzdF9ob29rKQotCQlwcmV2X3NobWVtX3JlcXVlc3RfaG9vaygpOwotCi0JLyogcmVzZXJ2 ZSBzaGFyZWQgbWVtb3J5IGZvciB0aGUgdGVzdCBTTFJVICovCi0JUmVxdWVzdEFkZGluU2ht ZW1TcGFjZShTaW1wbGVMcnVTaG1lbVNpemUoTlVNX1RFU1RfQlVGRkVSUywgMCkpOwotfQot CiBzdGF0aWMgYm9vbAogdGVzdF9zbHJ1X3BhZ2VfcHJlY2VkZXNfbG9naWNhbGx5KGludDY0 IHBhZ2UxLCBpbnQ2NCBwYWdlMikKIHsKQEAgLTIxOCw0OCArMjEyLDYgQEAgdGVzdF9zbHJ1 X2VycmRldGFpbF9mb3JfaW9fZXJyb3IoY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpCiAJcmV0 dXJuIGVycmRldGFpbCgiQ291bGQgbm90IGFjY2VzcyB0ZXN0X3NscnUgZW50cnkgJXUuIiwg eGlkKTsKIH0KIAotc3RhdGljIHZvaWQKLXRlc3Rfc2xydV9zaG1lbV9zdGFydHVwKHZvaWQp Ci17Ci0JLyoKLQkgKiBTaG9ydCBzZWdtZW50cyBuYW1lcyBhcmUgd2VsbCB0ZXN0ZWQgZWxz ZXdoZXJlIHNvIGluIHRoaXMgdGVzdCB3ZSBhcmUKLQkgKiBmb2N1c2luZyBvbiBsb25nIG5h bWVzLgotCSAqLwotCWNvbnN0IGJvb2wJbG9uZ19zZWdtZW50X25hbWVzID0gdHJ1ZTsKLQlj b25zdCBjaGFyCXNscnVfZGlyX25hbWVbXSA9ICJwZ190ZXN0X3NscnUiOwotCWludAkJCXRl c3RfdHJhbmNoZV9pZCA9IC0xOwotCWludAkJCXRlc3RfYnVmZmVyX3RyYW5jaGVfaWQgPSAt MTsKLQotCWlmIChwcmV2X3NobWVtX3N0YXJ0dXBfaG9vaykKLQkJcHJldl9zaG1lbV9zdGFy dHVwX2hvb2soKTsKLQotCS8qCi0JICogQ3JlYXRlIHRoZSBTTFJVIGRpcmVjdG9yeSBpZiBp dCBkb2VzIG5vdCBleGlzdCB5ZXQsIGZyb20gdGhlIHJvb3Qgb2YKLQkgKiB0aGUgZGF0YSBk aXJlY3RvcnkuCi0JICovCi0JKHZvaWQpIE1ha2VQR0RpcmVjdG9yeShzbHJ1X2Rpcl9uYW1l KTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgU0xSVSBmYWNpbGl0eS4gIEluIEVYRUNf QkFDS0VORCBidWlsZHMsIHRoZQotCSAqIHNobWVtX3N0YXJ0dXBfaG9vayBpcyBjYWxsZWQg aW4gdGhlIHBvc3RtYXN0ZXIgYW5kIGluIGVhY2ggYmFja2VuZCwgYnV0Ci0JICogd2Ugb25s eSBuZWVkIHRvIGdlbmVyYXRlIHRoZSBMV0xvY2sgdHJhbmNoZXMgb25jZS4gIE5vdGUgdGhh dCB0aGVzZQotCSAqIHRyYW5jaGUgSUQgdmFyaWFibGVzIGFyZSBub3QgdXNlZCBieSBTaW1w bGVMcnVJbml0KCkgd2hlbgotCSAqIElzVW5kZXJQb3N0bWFzdGVyIGlzIHRydWUuCi0JICov Ci0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQl7Ci0JCXRlc3RfdHJhbmNoZV9pZCA9IExX TG9ja05ld1RyYW5jaGVJZCgidGVzdF9zbHJ1X3RyYW5jaGUiKTsKLQkJdGVzdF9idWZmZXJf dHJhbmNoZV9pZCA9IExXTG9ja05ld1RyYW5jaGVJZCgidGVzdF9idWZmZXJfdHJhbmNoZSIp OwotCX0KLQotCVRlc3RTbHJ1Q3RsLT5QYWdlUHJlY2VkZXMgPSB0ZXN0X3NscnVfcGFnZV9w cmVjZWRlc19sb2dpY2FsbHk7Ci0JVGVzdFNscnVDdGwtPmVycmRldGFpbF9mb3JfaW9fZXJy b3IgPSB0ZXN0X3NscnVfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcjsKLQlTaW1wbGVMcnVJbml0 KFRlc3RTbHJ1Q3RsLCAiVGVzdFNMUlUiLAotCQkJCSAgTlVNX1RFU1RfQlVGRkVSUywgMCwg c2xydV9kaXJfbmFtZSwKLQkJCQkgIHRlc3RfYnVmZmVyX3RyYW5jaGVfaWQsIHRlc3RfdHJh bmNoZV9pZCwgU1lOQ19IQU5ETEVSX05PTkUsCi0JCQkJICBsb25nX3NlZ21lbnRfbmFtZXMp OwotfQotCiB2b2lkCiBfUEdfaW5pdCh2b2lkKQogewpAQCAtMjY5LDkgKzIyMSwzNyBAQCBf UEdfaW5pdCh2b2lkKQogCQkJCSBlcnJkZXRhaWwoIlwiJXNcIiBtdXN0IGJlIGxvYWRlZCB3 aXRoIFwic2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzXCIuIiwKIAkJCQkJCSAgICJ0ZXN0X3Ns cnUiKSkpOwogCi0JcHJldl9zaG1lbV9yZXF1ZXN0X2hvb2sgPSBzaG1lbV9yZXF1ZXN0X2hv b2s7Ci0Jc2htZW1fcmVxdWVzdF9ob29rID0gdGVzdF9zbHJ1X3NobWVtX3JlcXVlc3Q7CisJ LyoKKwkgKiBDcmVhdGUgdGhlIFNMUlUgZGlyZWN0b3J5IGlmIGl0IGRvZXMgbm90IGV4aXN0 IHlldCwgZnJvbSB0aGUgcm9vdCBvZgorCSAqIHRoZSBkYXRhIGRpcmVjdG9yeS4KKwkgKi8K Kwkodm9pZCkgTWFrZVBHRGlyZWN0b3J5KFRlc3RTbHJ1RGlyKTsKIAotCXByZXZfc2htZW1f c3RhcnR1cF9ob29rID0gc2htZW1fc3RhcnR1cF9ob29rOwotCXNobWVtX3N0YXJ0dXBfaG9v ayA9IHRlc3Rfc2xydV9zaG1lbV9zdGFydHVwOworCVJlZ2lzdGVyU2htZW1DYWxsYmFja3Mo JnRlc3Rfc2xydV9zaG1lbV9jYWxsYmFja3MpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9z bHJ1X3NobWVtX3JlcXVlc3Qodm9pZCAqYXJnKQoreworCVNpbXBsZUxydVJlcXVlc3QoJlRl c3RTbHJ1RGVzYywKKwkJLm5hbWUgPSAiVGVzdFNMUlUiLAorCQkuRGlyID0gVGVzdFNscnVE aXIsCisKKwkJLyoKKwkJICogU2hvcnQgc2VnbWVudHMgbmFtZXMgYXJlIHdlbGwgdGVzdGVk IGVsc2V3aGVyZSBzbyBpbiB0aGlzIHRlc3Qgd2UgYXJlCisJCSAqIGZvY3VzaW5nIG9uIGxv bmcgbmFtZXMuCisJCSAqLworCQkubG9uZ19zZWdtZW50X25hbWVzID0gdHJ1ZSwKKworCQku bnNsb3RzID0gTlVNX1RFU1RfQlVGRkVSUywKKwkJLm5sc25zID0gMCwKKworCQkuc3luY19o YW5kbGVyID0gU1lOQ19IQU5ETEVSX05PTkUsCisJCS5QYWdlUHJlY2VkZXMgPSB0ZXN0X3Ns cnVfcGFnZV9wcmVjZWRlc19sb2dpY2FsbHksCisJCS5lcnJkZXRhaWxfZm9yX2lvX2Vycm9y ID0gdGVzdF9zbHJ1X2VycmRldGFpbF9mb3JfaW9fZXJyb3IsCisKKwkJLyogbGV0IHNscnUu YyBhc3NpZ24gdGhlc2UgKi8KKwkJLmJ1ZmZlcl90cmFuY2hlX2lkID0gMCwKKwkJLmJhbmtf dHJhbmNoZV9pZCA9IDAsCisJKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5k ZXggNTM1ODIyOWI3M2YuLjQyMDQ5ZDc2MTJlIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdApAQCAtMjkwMSwxMCArMjkwMSwxMCBAQCBTbG90SW52YWxpZGF0aW9uQ2F1c2VNYXAK IFNsb3ROdW1iZXIKIFNsb3RTeW5jQ3R4U3RydWN0CiBTbG90U3luY1NraXBSZWFzb24KLVNs cnVDdGwKLVNscnVDdGxEYXRhCitTbHJ1RGVzYwogU2xydUVycm9yQ2F1c2UKIFNscnVQYWdl U3RhdHVzCitTbHJ1UmVxdWVzdE9wdHMKIFNscnVTY2FuQ2FsbGJhY2sKIFNscnVTZWdTdGF0 ZQogU2xydVNoYXJlZAotLSAKMi40Ny4zCgo= --------------ilO2of90F4UvkC4IFxh0ppYz Content-Type: text/x-patch; charset=UTF-8; name="0011-Convert-AIO-to-the-new-interface.patch" Content-Disposition: attachment; filename="0011-Convert-AIO-to-the-new-interface.patch" Content-Transfer-Encoding: base64 RnJvbSA2OWU2NmQwNDA2MWEzODA0MTgxMDE1YzU0M2UzYWMxOWE3Nzc5M2I2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMTI6NDM6MTYgKzAyMDAK U3ViamVjdDogW1BBVENIIDExLzE0XSBDb252ZXJ0IEFJTyB0byB0aGUgbmV3IGludGVyZmFj ZQoKVGhpcyByZXBsYWNlcyB0aGUgInNobWVtX3NpemUiIGFuZCAic2htZW1faW5pdCIgY2Fs bGJhY2tzIGluIHRoZSBJTwptZXRob2RzIHRhYmxlIHdpdGggdGhlIHNhbWUgU2htZW1DYWxs YmFjayBzdHJ1Y3QgdGhhdCB3ZSBub3cgdXNlIGluCm90aGVyIHN1YnN5c3RlbXMKLS0tCiBz cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMgICAgICAgICB8ICAyMCArKy0tCiBz cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYyAgICB8ICAyNCArKy0tLQog c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgICAgfCAgNDIgKysrKy0t LS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYyAgICAgICAgIHwgICA4ICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jICAgICB8ICAyMCArKy0t CiBzcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jICAgICAgICAgICAgICB8ICAzMCArKyst LS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0LmMgICAgICAgIHwgMTIxICsr KysrKysrKysrKysrLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9p b191cmluZy5jIHwgIDQyICsrKysrLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRo b2Rfd29ya2VyLmMgICB8ICA4NiArKysrKysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL2lwY2kuYyAgICAgICAgICAgIHwgICAyIC0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9wcmVkaWNhdGUuYyAgICAgIHwgIDg5ICsrKysrKysrLS0tLS0tLS0KIHNyYy9pbmNs dWRlL2FjY2Vzcy9zbHJ1LmggICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvaW5jbHVk ZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oICAgICAgICB8ICAxNiArLS0KIHNyYy9pbmNsdWRl L3N0b3JhZ2UvYWlvX3N1YnN5cy5oICAgICAgICAgIHwgICA0IC0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oICAgICAgIHwgICAzICsKIHNyYy90ZXN0L21vZHVsZXMv dGVzdF9zbHJ1L3Rlc3Rfc2xydS5jICAgIHwgIDQwICsrKy0tLS0KIDE2IGZpbGVzIGNoYW5n ZWQsIDI5NiBpbnNlcnRpb25zKCspLCAyNTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vY2xvZy5jCmluZGV4IDg3ZjdmNTcwN2RlLi45NWYxNjA4NzllMCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYwpAQCAtODEwLDE5ICs4MTAsMTkgQEAgQ0xPR1No bWVtUmVxdWVzdCh2b2lkICphcmcpCiAJfQogCUFzc2VydCh0cmFuc2FjdGlvbl9idWZmZXJz ICE9IDApOwogCVNpbXBsZUxydVJlcXVlc3QoJlhhY3RTbHJ1RGVzYywKLQkJLm5hbWUgPSAi dHJhbnNhY3Rpb24iLAotCQkuRGlyID0gInBnX3hhY3QiLAotCQkubG9uZ19zZWdtZW50X25h bWVzID0gZmFsc2UsCisJCQkJCSAubmFtZSA9ICJ0cmFuc2FjdGlvbiIsCisJCQkJCSAuRGly ID0gInBnX3hhY3QiLAorCQkJCQkgLmxvbmdfc2VnbWVudF9uYW1lcyA9IGZhbHNlLAogCi0J CS5uc2xvdHMgPSBDTE9HU2htZW1CdWZmZXJzKCksCi0JCS5ubHNucyA9IENMT0dfTFNOU19Q RVJfUEFHRSwKKwkJCQkJIC5uc2xvdHMgPSBDTE9HU2htZW1CdWZmZXJzKCksCisJCQkJCSAu bmxzbnMgPSBDTE9HX0xTTlNfUEVSX1BBR0UsCiAKLQkJLnN5bmNfaGFuZGxlciA9IFNZTkNf SEFORExFUl9DTE9HLAotCQkuUGFnZVByZWNlZGVzID0gQ0xPR1BhZ2VQcmVjZWRlcywKLQkJ LmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBjbG9nX2VycmRldGFpbF9mb3JfaW9fZXJyb3Is CisJCQkJCSAuc3luY19oYW5kbGVyID0gU1lOQ19IQU5ETEVSX0NMT0csCisJCQkJCSAuUGFn ZVByZWNlZGVzID0gQ0xPR1BhZ2VQcmVjZWRlcywKKwkJCQkJIC5lcnJkZXRhaWxfZm9yX2lv X2Vycm9yID0gY2xvZ19lcnJkZXRhaWxfZm9yX2lvX2Vycm9yLAogCi0JCS5idWZmZXJfdHJh bmNoZV9pZCA9IExXVFJBTkNIRV9YQUNUX0JVRkZFUiwKLQkJLmJhbmtfdHJhbmNoZV9pZCA9 IExXVFJBTkNIRV9YQUNUX1NMUlUsCisJCQkJCSAuYnVmZmVyX3RyYW5jaGVfaWQgPSBMV1RS QU5DSEVfWEFDVF9CVUZGRVIsCisJCQkJCSAuYmFua190cmFuY2hlX2lkID0gTFdUUkFOQ0hF X1hBQ1RfU0xSVSwKIAkJKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vY29tbWl0X3RzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21t aXRfdHMuYwppbmRleCAyMzZkOGZiNGJhYS4uNjc1ZGFjOWU0MGYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCkBAIC01NTEsMjQgKzU1MSwyNCBAQCBDb21t aXRUc1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiAJfQogCUFzc2VydChjb21taXRfdGltZXN0 YW1wX2J1ZmZlcnMgIT0gMCk7CiAJU2ltcGxlTHJ1UmVxdWVzdCgmQ29tbWl0VHNTbHJ1RGVz YywKLQkJLm5hbWUgPSAiY29tbWl0X3RpbWVzdGFtcCIsCi0JCS5EaXIgPSAicGdfY29tbWl0 X3RzIiwKLQkJLmxvbmdfc2VnbWVudF9uYW1lcyA9IGZhbHNlLAorCQkJCQkgLm5hbWUgPSAi Y29tbWl0X3RpbWVzdGFtcCIsCisJCQkJCSAuRGlyID0gInBnX2NvbW1pdF90cyIsCisJCQkJ CSAubG9uZ19zZWdtZW50X25hbWVzID0gZmFsc2UsCiAKLQkJLm5zbG90cyA9IENvbW1pdFRz U2htZW1CdWZmZXJzKCksCisJCQkJCSAubnNsb3RzID0gQ29tbWl0VHNTaG1lbUJ1ZmZlcnMo KSwKIAotCQkuUGFnZVByZWNlZGVzID0gQ29tbWl0VHNQYWdlUHJlY2VkZXMsCi0JCS5lcnJk ZXRhaWxfZm9yX2lvX2Vycm9yID0gY29tbWl0X3RzX2VycmRldGFpbF9mb3JfaW9fZXJyb3Is CisJCQkJCSAuUGFnZVByZWNlZGVzID0gQ29tbWl0VHNQYWdlUHJlY2VkZXMsCisJCQkJCSAu ZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IGNvbW1pdF90c19lcnJkZXRhaWxfZm9yX2lvX2Vy cm9yLAogCi0JCS5zeW5jX2hhbmRsZXIgPSBTWU5DX0hBTkRMRVJfQ09NTUlUX1RTLAotCQku YnVmZmVyX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfQ09NTUlUVFNfQlVGRkVSLAotCQkuYmFu a190cmFuY2hlX2lkID0gTFdUUkFOQ0hFX0NPTU1JVFRTX1NMUlUsCisJCQkJCSAuc3luY19o YW5kbGVyID0gU1lOQ19IQU5ETEVSX0NPTU1JVF9UUywKKwkJCQkJIC5idWZmZXJfdHJhbmNo ZV9pZCA9IExXVFJBTkNIRV9DT01NSVRUU19CVUZGRVIsCisJCQkJCSAuYmFua190cmFuY2hl X2lkID0gTFdUUkFOQ0hFX0NPTU1JVFRTX1NMUlUsCiAJCSk7CiAKIAlTaG1lbVJlcXVlc3RT dHJ1Y3QoJkNvbW1pdFRzU2htZW1EZXNjLAotCQkubmFtZSA9ICJDb21taXRUcyBzaGFyZWQi LAotCQkuc2l6ZSA9IHNpemVvZihDb21taXRUaW1lc3RhbXBTaGFyZWQpLAotCQkucHRyID0g KHZvaWQgKiopICZjb21taXRUc1NoYXJlZCwKKwkJCQkJICAgLm5hbWUgPSAiQ29tbWl0VHMg c2hhcmVkIiwKKwkJCQkJICAgLnNpemUgPSBzaXplb2YoQ29tbWl0VGltZXN0YW1wU2hhcmVk KSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmY29tbWl0VHNTaGFyZWQsCiAJCSk7CiB9 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKaW5kZXggOTQwYWM1 YTc4ZDYuLjg4ZTQ2ZDY4NjhkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0 aXhhY3QuYwpAQCAtMTc3OSwzOSArMTc3OSwzOSBAQCBNdWx0aVhhY3RTaG1lbVJlcXVlc3Qo dm9pZCAqYXJnKQogCXNpemUgPSBhZGRfc2l6ZShzaXplLAogCQkJCQltdWxfc2l6ZShzaXpl b2YoTXVsdGlYYWN0SWQpLCBOdW1WaXNpYmxlU2xvdHMpKTsKIAlTaG1lbVJlcXVlc3RTdHJ1 Y3QoJk11bHRpWGFjdFNobWVtRGVzYywKLQkJLm5hbWUgPSAiU2hhcmVkIE11bHRpWGFjdCBT dGF0ZSIsCi0JCS5zaXplID0gc2l6ZSwKLQkJLnB0ciA9ICh2b2lkICoqKSAmTXVsdGlYYWN0 U3RhdGUsCisJCQkJCSAgIC5uYW1lID0gIlNoYXJlZCBNdWx0aVhhY3QgU3RhdGUiLAorCQkJ CQkgICAuc2l6ZSA9IHNpemUsCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJk11bHRpWGFj dFN0YXRlLAogCQkpOwogCiAJU2ltcGxlTHJ1UmVxdWVzdCgmTXVsdGlYYWN0T2Zmc2V0U2xy dURlc2MsCi0JCS5uYW1lID0gIm11bHRpeGFjdF9vZmZzZXQiLAotCQkuRGlyID0gInBnX211 bHRpeGFjdC9vZmZzZXRzIiwKLQkJLmxvbmdfc2VnbWVudF9uYW1lcyA9IGZhbHNlLAorCQkJ CQkgLm5hbWUgPSAibXVsdGl4YWN0X29mZnNldCIsCisJCQkJCSAuRGlyID0gInBnX211bHRp eGFjdC9vZmZzZXRzIiwKKwkJCQkJIC5sb25nX3NlZ21lbnRfbmFtZXMgPSBmYWxzZSwKIAot CQkubnNsb3RzID0gbXVsdGl4YWN0X29mZnNldF9idWZmZXJzLAorCQkJCQkgLm5zbG90cyA9 IG11bHRpeGFjdF9vZmZzZXRfYnVmZmVycywKIAotCQkuc3luY19oYW5kbGVyID0gU1lOQ19I QU5ETEVSX01VTFRJWEFDVF9PRkZTRVQsCi0JCS5QYWdlUHJlY2VkZXMgPSBNdWx0aVhhY3RP ZmZzZXRQYWdlUHJlY2VkZXMsCi0JCS5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gTXVsdGlY YWN0T2Zmc2V0SW9FcnJvckRldGFpbCwKKwkJCQkJIC5zeW5jX2hhbmRsZXIgPSBTWU5DX0hB TkRMRVJfTVVMVElYQUNUX09GRlNFVCwKKwkJCQkJIC5QYWdlUHJlY2VkZXMgPSBNdWx0aVhh Y3RPZmZzZXRQYWdlUHJlY2VkZXMsCisJCQkJCSAuZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9 IE11bHRpWGFjdE9mZnNldElvRXJyb3JEZXRhaWwsCiAKLQkJLmJ1ZmZlcl90cmFuY2hlX2lk ID0gTFdUUkFOQ0hFX01VTFRJWEFDVE9GRlNFVF9CVUZGRVIsCi0JCS5iYW5rX3RyYW5jaGVf aWQgPSBMV1RSQU5DSEVfTVVMVElYQUNUT0ZGU0VUX1NMUlUsCisJCQkJCSAuYnVmZmVyX3Ry YW5jaGVfaWQgPSBMV1RSQU5DSEVfTVVMVElYQUNUT0ZGU0VUX0JVRkZFUiwKKwkJCQkJIC5i YW5rX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfTVVMVElYQUNUT0ZGU0VUX1NMUlUsCiAJCSk7 CiAKIAlTaW1wbGVMcnVSZXF1ZXN0KCZNdWx0aVhhY3RNZW1iZXJTbHJ1RGVzYywKLQkJLm5h bWUgPSAibXVsdGl4YWN0X21lbWJlciIsCi0JCS5EaXIgPSAicGdfbXVsdGl4YWN0L21lbWJl cnMiLAotCQkubG9uZ19zZWdtZW50X25hbWVzID0gdHJ1ZSwKKwkJCQkJIC5uYW1lID0gIm11 bHRpeGFjdF9tZW1iZXIiLAorCQkJCQkgLkRpciA9ICJwZ19tdWx0aXhhY3QvbWVtYmVycyIs CisJCQkJCSAubG9uZ19zZWdtZW50X25hbWVzID0gdHJ1ZSwKIAotCQkubnNsb3RzID0gbXVs dGl4YWN0X21lbWJlcl9idWZmZXJzLAorCQkJCQkgLm5zbG90cyA9IG11bHRpeGFjdF9tZW1i ZXJfYnVmZmVycywKIAotCQkuc3luY19oYW5kbGVyID0gU1lOQ19IQU5ETEVSX01VTFRJWEFD VF9NRU1CRVIsCi0JCS5QYWdlUHJlY2VkZXMgPSBNdWx0aVhhY3RNZW1iZXJQYWdlUHJlY2Vk ZXMsCi0JCS5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gTXVsdGlYYWN0TWVtYmVySW9FcnJv ckRldGFpbCwKKwkJCQkJIC5zeW5jX2hhbmRsZXIgPSBTWU5DX0hBTkRMRVJfTVVMVElYQUNU X01FTUJFUiwKKwkJCQkJIC5QYWdlUHJlY2VkZXMgPSBNdWx0aVhhY3RNZW1iZXJQYWdlUHJl Y2VkZXMsCisJCQkJCSAuZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IE11bHRpWGFjdE1lbWJl cklvRXJyb3JEZXRhaWwsCiAKLQkJLmJ1ZmZlcl90cmFuY2hlX2lkID0gTFdUUkFOQ0hFX01V TFRJWEFDVE1FTUJFUl9CVUZGRVIsCi0JCS5iYW5rX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVf TVVMVElYQUNUTUVNQkVSX1NMUlUsCisJCQkJCSAuYnVmZmVyX3RyYW5jaGVfaWQgPSBMV1RS QU5DSEVfTVVMVElYQUNUTUVNQkVSX0JVRkZFUiwKKwkJCQkJIC5iYW5rX3RyYW5jaGVfaWQg PSBMV1RSQU5DSEVfTVVMVElYQUNUTUVNQkVSX1NMUlUsCiAJCSk7CiAKIAkvKgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vc2xydS5jCmluZGV4IDNmZTYwYzU4MDRiLi42ZDlkZGE2YjI5YiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYwpAQCAtMjQyLDkgKzI0Miw5IEBAIFNp bXBsZUxydUF1dG90dW5lQnVmZmVycyhpbnQgZGl2aXNvciwgaW50IG1heCkKICAqIFJlZ2lz dGVyIGEgc2ltcGxlIExSVSBjYWNoZSBpbiBzaGFyZWQgbWVtb3J5LgogICovCiB2b2lkCi1T aW1wbGVMcnVSZXF1ZXN0V2l0aE9wdHMoU2xydURlc2MgKmRlc2MsIGNvbnN0IFNscnVPcHRz ICpvcHRpb25zKQorU2ltcGxlTHJ1UmVxdWVzdFdpdGhPcHRzKFNscnVEZXNjICpkZXNjLCBj b25zdCBTbHJ1T3B0cyAqIG9wdGlvbnMpCiB7Ci0JU2xydU9wdHMgKm9wdGlvbnNfY29weTsK KwlTbHJ1T3B0cyAgICpvcHRpb25zX2NvcHk7CiAKIAlBc3NlcnQob3B0aW9ucy0+bmFtZSAh PSBOVUxMKTsKIAlBc3NlcnQob3B0aW9ucy0+bnNsb3RzID4gMCk7CkBAIC0yNjUsNyArMjY1 LDcgQEAgU2ltcGxlTHJ1UmVxdWVzdFdpdGhPcHRzKFNscnVEZXNjICpkZXNjLCBjb25zdCBT bHJ1T3B0cyAqb3B0aW9ucykKIHZvaWQKIHNobWVtX3NscnVfaW5pdChTaG1lbVN0cnVjdERl c2MgKmJhc2VfZGVzYywgU2htZW1TdHJ1Y3RPcHRzICpiYXNlX29wdGlvbnMpCiB7Ci0JU2xy dU9wdHMgKm9wdGlvbnMgPSAoU2xydU9wdHMgKikgYmFzZV9vcHRpb25zOworCVNscnVPcHRz ICAgKm9wdGlvbnMgPSAoU2xydU9wdHMgKikgYmFzZV9vcHRpb25zOwogCVNscnVEZXNjICAg KmRlc2MgPSAoU2xydURlc2MgKikgYmFzZV9kZXNjOwogCWNoYXIJCW5hbWVidWZbTkFNRURB VEFMRU5dOwogCVNscnVTaGFyZWQJc2hhcmVkOwpAQCAtMzU2LDcgKzM1Niw3IEBAIHNobWVt X3NscnVfaW5pdChTaG1lbVN0cnVjdERlc2MgKmJhc2VfZGVzYywgU2htZW1TdHJ1Y3RPcHRz ICpiYXNlX29wdGlvbnMpCiB2b2lkCiBzaG1lbV9zbHJ1X2F0dGFjaChTaG1lbVN0cnVjdERl c2MgKmJhc2VfZGVzYywgU2htZW1TdHJ1Y3RPcHRzICpiYXNlX29wdGlvbnMpCiB7Ci0JU2xy dU9wdHMgKm9wdGlvbnMgPSAoU2xydU9wdHMgKikgYmFzZV9vcHRpb25zOworCVNscnVPcHRz ICAgKm9wdGlvbnMgPSAoU2xydU9wdHMgKikgYmFzZV9vcHRpb25zOwogCVNscnVEZXNjICAg KmRlc2MgPSAoU2xydURlc2MgKikgYmFzZV9kZXNjOwogCWludAkJCW5zbG90cyA9IG9wdGlv bnMtPm5zbG90czsKIAlpbnQJCQluYmFua3MgPSBuc2xvdHMgLyBTTFJVX0JBTktfU0laRTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jCmluZGV4IGNhMjczZmI0Njgw Li41ZjY4YzNmMGNjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v c3VidHJhbnMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5j CkBAIC0yNDQsMTkgKzI0NCwxOSBAQCBTVUJUUkFOU1NobWVtUmVxdWVzdCh2b2lkICphcmcp CiAJQXNzZXJ0KHN1YnRyYW5zYWN0aW9uX2J1ZmZlcnMgIT0gMCk7CiAKIAlTaW1wbGVMcnVS ZXF1ZXN0KCZTdWJUcmFuc1NscnVEZXNjLAotCQkubmFtZSA9ICJzdWJ0cmFuc2FjdGlvbiIs Ci0JCS5EaXIgPSAicGdfc3VidHJhbnMiLAotCQkubG9uZ19zZWdtZW50X25hbWVzID0gZmFs c2UsCisJCQkJCSAubmFtZSA9ICJzdWJ0cmFuc2FjdGlvbiIsCisJCQkJCSAuRGlyID0gInBn X3N1YnRyYW5zIiwKKwkJCQkJIC5sb25nX3NlZ21lbnRfbmFtZXMgPSBmYWxzZSwKIAotCQku bnNsb3RzID0gU1VCVFJBTlNTaG1lbUJ1ZmZlcnMoKSwKKwkJCQkJIC5uc2xvdHMgPSBTVUJU UkFOU1NobWVtQnVmZmVycygpLAogCi0JCS5zeW5jX2hhbmRsZXIgPSBTWU5DX0hBTkRMRVJf Tk9ORSwKLQkJLlBhZ2VQcmVjZWRlcyA9IFN1YlRyYW5zUGFnZVByZWNlZGVzLAotCQkuZXJy ZGV0YWlsX2Zvcl9pb19lcnJvciA9IHN1YnRyYW5zX2VycmRldGFpbF9mb3JfaW9fZXJyb3Is CisJCQkJCSAuc3luY19oYW5kbGVyID0gU1lOQ19IQU5ETEVSX05PTkUsCisJCQkJCSAuUGFn ZVByZWNlZGVzID0gU3ViVHJhbnNQYWdlUHJlY2VkZXMsCisJCQkJCSAuZXJyZGV0YWlsX2Zv cl9pb19lcnJvciA9IHN1YnRyYW5zX2VycmRldGFpbF9mb3JfaW9fZXJyb3IsCiAKLQkJLmJ1 ZmZlcl90cmFuY2hlX2lkID0gTFdUUkFOQ0hFX1NVQlRSQU5TX0JVRkZFUiwKLQkJLmJhbmtf dHJhbmNoZV9pZCA9IExXVFJBTkNIRV9TVUJUUkFOU19TTFJVLAotCSk7CisJCQkJCSAuYnVm ZmVyX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfU1VCVFJBTlNfQlVGRkVSLAorCQkJCQkgLmJh bmtfdHJhbmNoZV9pZCA9IExXVFJBTkNIRV9TVUJUUkFOU19TTFJVLAorCQkpOwogfQogCiBz dGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKaW5kZXggOWNkMjc2OTU3ODcuLmI4MzQ1 Mjk1ZjBkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKQEAgLTgwNCwyNyArODA0LDI3IEBAIEFz eW5jU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgb2Zm c2V0b2YoQXN5bmNRdWV1ZUNvbnRyb2wsIGJhY2tlbmQpKTsKIAogCVNobWVtUmVxdWVzdFN0 cnVjdCgmQXN5bmNRdWV1ZUNvbnRyb2xTaG1lbURlc2MsCi0JCS5uYW1lID0gIkFzeW5jIFF1 ZXVlIENvbnRyb2wiLAotCQkuc2l6ZSA9IHNpemUsCi0JCS5wdHIgPSAodm9pZCAqKikgJmFz eW5jUXVldWVDb250cm9sLAotCSk7CisJCQkJCSAgIC5uYW1lID0gIkFzeW5jIFF1ZXVlIENv bnRyb2wiLAorCQkJCQkgICAuc2l6ZSA9IHNpemUsCisJCQkJCSAgIC5wdHIgPSAodm9pZCAq KikgJmFzeW5jUXVldWVDb250cm9sLAorCQkpOwogCiAJU2ltcGxlTHJ1UmVxdWVzdCgmTm90 aWZ5U2xydURlc2MsCi0JCS5uYW1lID0gIm5vdGlmeSIsCi0JCS5EaXIgPSAicGdfbm90aWZ5 IiwKKwkJCQkJIC5uYW1lID0gIm5vdGlmeSIsCisJCQkJCSAuRGlyID0gInBnX25vdGlmeSIs CiAKLQkJLyogbG9uZyBzZWdtZW50IG5hbWVzIGFyZSB1c2VkIGluIG9yZGVyIHRvIGF2b2lk IHdyYXBhcm91bmQgKi8KLQkJLmxvbmdfc2VnbWVudF9uYW1lcyA9IHRydWUsCisJLyogbG9u ZyBzZWdtZW50IG5hbWVzIGFyZSB1c2VkIGluIG9yZGVyIHRvIGF2b2lkIHdyYXBhcm91bmQg Ki8KKwkJCQkJIC5sb25nX3NlZ21lbnRfbmFtZXMgPSB0cnVlLAogCi0JCS5uc2xvdHMgPSBu b3RpZnlfYnVmZmVycywKKwkJCQkJIC5uc2xvdHMgPSBub3RpZnlfYnVmZmVycywKIAotCQku c3luY19oYW5kbGVyID0gU1lOQ19IQU5ETEVSX05PTkUsCi0JCS5QYWdlUHJlY2VkZXMgPSBh c3luY1F1ZXVlUGFnZVByZWNlZGVzLAotCQkuZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IGFz eW5jUXVldWVFcnJkZXRhaWxGb3JJb0Vycm9yLAorCQkJCQkgLnN5bmNfaGFuZGxlciA9IFNZ TkNfSEFORExFUl9OT05FLAorCQkJCQkgLlBhZ2VQcmVjZWRlcyA9IGFzeW5jUXVldWVQYWdl UHJlY2VkZXMsCisJCQkJCSAuZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IGFzeW5jUXVldWVF cnJkZXRhaWxGb3JJb0Vycm9yLAogCi0JCS5idWZmZXJfdHJhbmNoZV9pZCA9IExXVFJBTkNI RV9OT1RJRllfQlVGRkVSLAotCQkuYmFua190cmFuY2hlX2lkID0gTFdUUkFOQ0hFX05PVElG WV9TTFJVLAotCSk7CisJCQkJCSAuYnVmZmVyX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfTk9U SUZZX0JVRkZFUiwKKwkJCQkJIC5iYW5rX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfTk9USUZZ X1NMUlUsCisJCSk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2Fpby9haW9faW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlv X2luaXQuYwppbmRleCBkM2M2OGQ4YjA0Yy4uOWVmZTUzOTEyZWMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9haW8vYWlvX2luaXQuYwpAQCAtMjMsMTYgKzIzLDI0IEBACiAjaW5jbHVkZSAic3Rv cmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9y YWdlL3NobWVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVk ZSAidXRpbHMvZ3VjLmgiCiAKIAorc3RhdGljIHZvaWQgQWlvU2htZW1SZXF1ZXN0KHZvaWQg KmFyZyk7CitzdGF0aWMgdm9pZCBBaW9TaG1lbUluaXQodm9pZCAqYXJnKTsKK3N0YXRpYyB2 b2lkIEFpb1NobWVtQXR0YWNoKHZvaWQgKmFyZyk7CiAKLXN0YXRpYyBTaXplCi1BaW9DdGxT aG1lbVNpemUodm9pZCkKLXsKLQkvKiBwZ2Fpb19jdGwgaXRzZWxmICovCi0JcmV0dXJuIHNp emVvZihQZ0Fpb0N0bCk7Ci19Citjb25zdCBTaG1lbUNhbGxiYWNrcyBBaW9TaG1lbUNhbGxi YWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IEFpb1NobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9 IEFpb1NobWVtSW5pdCwKKwkuYXR0YWNoX2ZuID0gQWlvU2htZW1BdHRhY2gsCit9OworCitz dGF0aWMgUGdBaW9CYWNrZW5kICpBaW9CYWNrZW5kU2htZW1QdHI7CitzdGF0aWMgUGdBaW9I YW5kbGUgKkFpb0hhbmRsZVNobWVtUHRyOworc3RhdGljIHN0cnVjdCBpb3ZlYyAqQWlvSGFu ZGxlSU9WU2htZW1QdHI7CitzdGF0aWMgdWludDY0ICpBaW9IYW5kbGVEYXRhU2htZW1QdHI7 CiAKIHN0YXRpYyB1aW50MzIKIEFpb1Byb2NzKHZvaWQpCkBAIC0xMDksMTIgKzExNywyMSBA QCBBaW9DaG9vc2VNYXhDb25jdXJyZW5jeSh2b2lkKQogCXJldHVybiBNaW4obWF4X3Byb3Bv cnRpb25hbF9waW5zLCA2NCk7CiB9CiAKLVNpemUKLUFpb1NobWVtU2l6ZSh2b2lkKQorLyoK KyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgYXJlYSBmb3IgQUlPIHN1YnN5c3RlbS4KKyAq Lworc3RhdGljIHZvaWQKK0Fpb1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7Ci0JU2l6ZQkJ c3ogPSAwOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgQWlvQ3RsU2htZW1EZXNjOworCXN0 YXRpYyBTaG1lbVN0cnVjdERlc2MgQWlvQmFja2VuZFNobWVtRGVzYzsKKwlzdGF0aWMgU2ht ZW1TdHJ1Y3REZXNjIEFpb0hhbmRsZVNobWVtRGVzYzsKKwlzdGF0aWMgU2htZW1TdHJ1Y3RE ZXNjIEFpb0hhbmRsZUlPVlNobWVtRGVzYzsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEFp b0hhbmRsZURhdGFTaG1lbURlc2M7CiAKIAkvKgorCSAqIFJlc29sdmUgaW9fbWF4X2NvbmN1 cnJlbmN5IGlmIG5vdCBhbHJlYWR5IGRvbmUKKwkgKgogCSAqIFdlIHByZWZlciB0byByZXBv cnQgdGhpcyB2YWx1ZSdzIHNvdXJjZSBhcyBQR0NfU19EWU5BTUlDX0RFRkFVTFQuCiAJICog SG93ZXZlciwgaWYgdGhlIERCQSBleHBsaWNpdGx5IHNldCBpb19tYXhfY29uY3VycmVuY3kg PSAtMSBpbiB0aGUKIAkgKiBjb25maWcgZmlsZSwgdGhlbiBQR0NfU19EWU5BTUlDX0RFRkFV TFQgd2lsbCBmYWlsIHRvIG92ZXJyaWRlIHRoYXQgYW5kCkBAIC0xMzIsNDggKzE0OSw1NyBA QCBBaW9TaG1lbVNpemUodm9pZCkKIAkJCQkJCQlQR0NfU19PVkVSUklERSk7CiAJfQogCi0J c3ogPSBhZGRfc2l6ZShzeiwgQWlvQ3RsU2htZW1TaXplKCkpOwotCXN6ID0gYWRkX3NpemUo c3osIEFpb0JhY2tlbmRTaG1lbVNpemUoKSk7Ci0Jc3ogPSBhZGRfc2l6ZShzeiwgQWlvSGFu ZGxlU2htZW1TaXplKCkpOwotCXN6ID0gYWRkX3NpemUoc3osIEFpb0hhbmRsZUlPVlNobWVt U2l6ZSgpKTsKLQlzeiA9IGFkZF9zaXplKHN6LCBBaW9IYW5kbGVEYXRhU2htZW1TaXplKCkp OwotCi0JLyogUmVzZXJ2ZSBzcGFjZSBmb3IgbWV0aG9kIHNwZWNpZmljIHJlc291cmNlcy4g Ki8KLQlpZiAocGdhaW9fbWV0aG9kX29wcy0+c2htZW1fc2l6ZSkKLQkJc3ogPSBhZGRfc2l6 ZShzeiwgcGdhaW9fbWV0aG9kX29wcy0+c2htZW1fc2l6ZSgpKTsKLQotCXJldHVybiBzejsK KwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkFpb0N0bFNobWVtRGVzYywKKwkJCQkJICAgLm5hbWUg PSAiQWlvQ3RsIiwKKwkJCQkJICAgLnNpemUgPSBzaXplb2YoUGdBaW9DdGwpLAorCQkJCQkg ICAucHRyID0gKHZvaWQgKiopICZwZ2Fpb19jdGwsCisJCSk7CisKKwlTaG1lbVJlcXVlc3RT dHJ1Y3QoJkFpb0JhY2tlbmRTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIkFpb0JhY2tl bmQiLAorCQkJCQkgICAuc2l6ZSA9IEFpb0JhY2tlbmRTaG1lbVNpemUoKSwKKwkJCQkJICAg LnB0ciA9ICh2b2lkICoqKSAmQWlvQmFja2VuZFNobWVtUHRyLAorCQkpOworCisJU2htZW1S ZXF1ZXN0U3RydWN0KCZBaW9IYW5kbGVTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIkFp b0hhbmRsZSIsCisJCQkJCSAgIC5zaXplID0gQWlvSGFuZGxlU2htZW1TaXplKCksCisJCQkJ CSAgIC5wdHIgPSAodm9pZCAqKikgJkFpb0hhbmRsZVNobWVtUHRyLAorCQkpOworCisJU2ht ZW1SZXF1ZXN0U3RydWN0KCZBaW9IYW5kbGVJT1ZTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1l ID0gIkFpb0hhbmRsZUlPViIsCisJCQkJCSAgIC5zaXplID0gQWlvSGFuZGxlSU9WU2htZW1T aXplKCksCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJkFpb0hhbmRsZUlPVlNobWVtUHRy LAorCQkpOworCisJU2htZW1SZXF1ZXN0U3RydWN0KCZBaW9IYW5kbGVEYXRhU2htZW1EZXNj LAorCQkJCQkgICAubmFtZSA9ICJBaW9IYW5kbGVEYXRhIiwKKwkJCQkJICAgLnNpemUgPSBB aW9IYW5kbGVEYXRhU2htZW1TaXplKCksCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJkFp b0hhbmRsZURhdGFTaG1lbVB0ciwKKwkJKTsKKworCWlmIChwZ2Fpb19tZXRob2Rfb3BzLT5z aG1lbV9jYWxsYmFja3MucmVxdWVzdF9mbikKKwkJcGdhaW9fbWV0aG9kX29wcy0+c2htZW1f Y2FsbGJhY2tzLnJlcXVlc3RfZm4ocGdhaW9fbWV0aG9kX29wcy0+c2htZW1fY2FsbGJhY2tz LnJlcXVlc3RfZm5fYXJnKTsKIH0KIAotdm9pZAotQWlvU2htZW1Jbml0KHZvaWQpCisvKgor ICogSW5pdGlhbGl6ZSBBSU8gc2hhcmVkIG1lbW9yeSBkdXJpbmcgcG9zdG1hc3RlciBzdGFy dHVwLgorICovCitzdGF0aWMgdm9pZAorQWlvU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQli b29sCQlmb3VuZDsKIAl1aW50MzIJCWlvX2hhbmRsZV9vZmYgPSAwOwogCXVpbnQzMgkJaW92 ZWNfb2ZmID0gMDsKIAl1aW50MzIJCXBlcl9iYWNrZW5kX2lvdmVjcyA9IGlvX21heF9jb25j dXJyZW5jeSAqIGlvX21heF9jb21iaW5lX2xpbWl0OwogCi0JcGdhaW9fY3RsID0gKFBnQWlv Q3RsICopCi0JCVNobWVtSW5pdFN0cnVjdCgiQWlvQ3RsIiwgQWlvQ3RsU2htZW1TaXplKCks ICZmb3VuZCk7Ci0KLQlpZiAoZm91bmQpCi0JCWdvdG8gb3V0OwotCi0JbWVtc2V0KHBnYWlv X2N0bCwgMCwgQWlvQ3RsU2htZW1TaXplKCkpOwotCiAJcGdhaW9fY3RsLT5pb19oYW5kbGVf Y291bnQgPSBBaW9Qcm9jcygpICogaW9fbWF4X2NvbmN1cnJlbmN5OwogCXBnYWlvX2N0bC0+ aW92ZWNfY291bnQgPSBBaW9Qcm9jcygpICogcGVyX2JhY2tlbmRfaW92ZWNzOwogCi0JcGdh aW9fY3RsLT5iYWNrZW5kX3N0YXRlID0gKFBnQWlvQmFja2VuZCAqKQotCQlTaG1lbUluaXRT dHJ1Y3QoIkFpb0JhY2tlbmQiLCBBaW9CYWNrZW5kU2htZW1TaXplKCksICZmb3VuZCk7Ci0K LQlwZ2Fpb19jdGwtPmlvX2hhbmRsZXMgPSAoUGdBaW9IYW5kbGUgKikKLQkJU2htZW1Jbml0 U3RydWN0KCJBaW9IYW5kbGUiLCBBaW9IYW5kbGVTaG1lbVNpemUoKSwgJmZvdW5kKTsKLQot CXBnYWlvX2N0bC0+aW92ZWNzID0gKHN0cnVjdCBpb3ZlYyAqKQotCQlTaG1lbUluaXRTdHJ1 Y3QoIkFpb0hhbmRsZUlPViIsIEFpb0hhbmRsZUlPVlNobWVtU2l6ZSgpLCAmZm91bmQpOwot CXBnYWlvX2N0bC0+aGFuZGxlX2RhdGEgPSAodWludDY0ICopCi0JCVNobWVtSW5pdFN0cnVj dCgiQWlvSGFuZGxlRGF0YSIsIEFpb0hhbmRsZURhdGFTaG1lbVNpemUoKSwgJmZvdW5kKTsK KwlwZ2Fpb19jdGwtPmJhY2tlbmRfc3RhdGUgPSBBaW9CYWNrZW5kU2htZW1QdHI7CisJcGdh aW9fY3RsLT5pb19oYW5kbGVzID0gQWlvSGFuZGxlU2htZW1QdHI7CisJcGdhaW9fY3RsLT5p b3ZlY3MgPSBBaW9IYW5kbGVJT1ZTaG1lbVB0cjsKKwlwZ2Fpb19jdGwtPmhhbmRsZV9kYXRh ID0gQWlvSGFuZGxlRGF0YVNobWVtUHRyOwogCiAJZm9yIChpbnQgcHJvY25vID0gMDsgcHJv Y25vIDwgQWlvUHJvY3MoKTsgcHJvY25vKyspCiAJewpAQCAtMjA4LDEwICsyMzQsMTUgQEAg QWlvU2htZW1Jbml0KHZvaWQpCiAJCX0KIAl9CiAKLW91dDoKLQkvKiBJbml0aWFsaXplIElP IG1ldGhvZCBzcGVjaWZpYyByZXNvdXJjZXMuICovCi0JaWYgKHBnYWlvX21ldGhvZF9vcHMt PnNobWVtX2luaXQpCi0JCXBnYWlvX21ldGhvZF9vcHMtPnNobWVtX2luaXQoIWZvdW5kKTsK KwlpZiAocGdhaW9fbWV0aG9kX29wcy0+c2htZW1fY2FsbGJhY2tzLmluaXRfZm4pCisJCXBn YWlvX21ldGhvZF9vcHMtPnNobWVtX2NhbGxiYWNrcy5pbml0X2ZuKHBnYWlvX21ldGhvZF9v cHMtPnNobWVtX2NhbGxiYWNrcy5pbml0X2ZuX2FyZyk7Cit9CisKK3N0YXRpYyB2b2lkCitB aW9TaG1lbUF0dGFjaCh2b2lkICphcmcpCit7CisJaWYgKHBnYWlvX21ldGhvZF9vcHMtPnNo bWVtX2NhbGxiYWNrcy5hdHRhY2hfZm4pCisJCXBnYWlvX21ldGhvZF9vcHMtPnNobWVtX2Nh bGxiYWNrcy5hdHRhY2hfZm4ocGdhaW9fbWV0aG9kX29wcy0+c2htZW1fY2FsbGJhY2tzLmF0 dGFjaF9mbl9hcmcpOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2Fpby9tZXRob2RfaW9fdXJpbmcuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21l dGhvZF9pb191cmluZy5jCmluZGV4IDM5OTg0ZGYzMWI0Li44MmZiYmVmYzBiNiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKQEAgLTQ5LDggKzQ5 LDggQEAKIAogCiAvKiBFbnRyeSBwb2ludHMgZm9yIElvTWV0aG9kT3BzLiAqLwotc3RhdGlj IHNpemVfdCBwZ2Fpb191cmluZ19zaG1lbV9zaXplKHZvaWQpOwotc3RhdGljIHZvaWQgcGdh aW9fdXJpbmdfc2htZW1faW5pdChib29sIGZpcnN0X3RpbWUpOworc3RhdGljIHZvaWQgcGdh aW9fdXJpbmdfc2htZW1fcmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgcGdhaW9f dXJpbmdfc2htZW1faW5pdCh2b2lkICphcmcpOwogc3RhdGljIHZvaWQgcGdhaW9fdXJpbmdf aW5pdF9iYWNrZW5kKHZvaWQpOwogc3RhdGljIGludAlwZ2Fpb191cmluZ19zdWJtaXQodWlu dDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpOwogc3RhdGlj IHZvaWQgcGdhaW9fdXJpbmdfd2FpdF9vbmUoUGdBaW9IYW5kbGUgKmlvaCwgdWludDY0IHJl Zl9nZW5lcmF0aW9uKTsKQEAgLTU5LDcgKzU5LDYgQEAgc3RhdGljIHZvaWQgcGdhaW9fdXJp bmdfY2hlY2tfb25lKFBnQWlvSGFuZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbik7 CiAvKiBoZWxwZXIgZnVuY3Rpb25zICovCiBzdGF0aWMgdm9pZCBwZ2Fpb191cmluZ19zcV9m cm9tX2lvKFBnQWlvSGFuZGxlICppb2gsIHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7CiAK LQogY29uc3QgSW9NZXRob2RPcHMgcGdhaW9fdXJpbmdfb3BzID0gewogCS8qCiAJICogV2hp bGUgaW9fdXJpbmcgbW9zdGx5IGlzIE9LIHdpdGggRkRzIGdldHRpbmcgY2xvc2VkIHdoaWxl IHRoZSBJTyBpcyBpbgpAQCAtNzAsOCArNjksOCBAQCBjb25zdCBJb01ldGhvZE9wcyBwZ2Fp b191cmluZ19vcHMgPSB7CiAJICovCiAJLndhaXRfb25fZmRfYmVmb3JlX2Nsb3NlID0gdHJ1 ZSwKIAotCS5zaG1lbV9zaXplID0gcGdhaW9fdXJpbmdfc2htZW1fc2l6ZSwKLQkuc2htZW1f aW5pdCA9IHBnYWlvX3VyaW5nX3NobWVtX2luaXQsCisJLnNobWVtX2NhbGxiYWNrcy5yZXF1 ZXN0X2ZuID0gcGdhaW9fdXJpbmdfc2htZW1fcmVxdWVzdCwKKwkuc2htZW1fY2FsbGJhY2tz LmluaXRfZm4gPSBwZ2Fpb191cmluZ19zaG1lbV9pbml0LAogCS5pbml0X2JhY2tlbmQgPSBw Z2Fpb191cmluZ19pbml0X2JhY2tlbmQsCiAKIAkuc3VibWl0ID0gcGdhaW9fdXJpbmdfc3Vi bWl0LApAQCAtMjY3LDIzICsyNjYsMzQgQEAgcGdhaW9fdXJpbmdfc2htZW1fc2l6ZSh2b2lk KQogewogCXNpemVfdAkJc3o7CiAKKwlzeiA9IHBnYWlvX3VyaW5nX2NvbnRleHRfc2htZW1f c2l6ZSgpOworCXN6ID0gYWRkX3NpemUoc3osIHBnYWlvX3VyaW5nX3Jpbmdfc2htZW1fc2l6 ZSgpKTsKKworCXJldHVybiBzejsKK30KKworc3RhdGljIHZvaWQKK3BnYWlvX3VyaW5nX3No bWVtX3JlcXVlc3Qodm9pZCAqYXJnKQoreworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgQWlv VXJpbmdTaG1lbURlc2M7CisKIAkvKgogCSAqIEtlcm5lbCBhbmQgbGlidXJpbmcgc3VwcG9y dCBmb3IgdmFyaW91cyBmZWF0dXJlcyBpbmZsdWVuY2VzIGhvdyBtdWNoCiAJICogc2htZW0g d2UgbmVlZCwgcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IGNoZWNrcy4KIAkgKi8KIAlwZ2Fpb191 cmluZ19jaGVja19jYXBhYmlsaXRpZXMoKTsKIAotCXN6ID0gcGdhaW9fdXJpbmdfY29udGV4 dF9zaG1lbV9zaXplKCk7Ci0Jc3ogPSBhZGRfc2l6ZShzeiwgcGdhaW9fdXJpbmdfcmluZ19z aG1lbV9zaXplKCkpOwotCi0JcmV0dXJuIHN6OworCVNobWVtUmVxdWVzdFN0cnVjdCgmQWlv VXJpbmdTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIkFpb1VyaW5nQ29udGV4dCIsCisJ CQkJCSAgIC5zaXplID0gcGdhaW9fdXJpbmdfc2htZW1fc2l6ZSgpLAorCQkJCQkgICAucHRy ID0gKHZvaWQgKiopICZwZ2Fpb191cmluZ19jb250ZXh0cywKKwkJKTsKIH0KIAogc3RhdGlj IHZvaWQKLXBnYWlvX3VyaW5nX3NobWVtX2luaXQoYm9vbCBmaXJzdF90aW1lKQorcGdhaW9f dXJpbmdfc2htZW1faW5pdCh2b2lkICphcmcpCiB7CiAJaW50CQkJVG90YWxQcm9jcyA9IHBn YWlvX3VyaW5nX3Byb2NzKCk7Ci0JYm9vbAkJZm91bmQ7CiAJY2hhcgkgICAqc2htZW07CiAJ c2l6ZV90CQlyaW5nX21lbV9yZW1haW4gPSAwOwogCWNoYXIJICAgKnJpbmdfbWVtX25leHQg PSAwOwpAQCAtMjkxLDEzICszMDEsMTEgQEAgcGdhaW9fdXJpbmdfc2htZW1faW5pdChib29s IGZpcnN0X3RpbWUpCiAJLyoKIAkgKiBXZSBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFsbCBQZ0Fp b1VyaW5nQ29udGV4dCBpbnN0YW5jZXMgYW5kLCBpZgogCSAqIHN1cHBvcnRlZCwgdGhlIG1l bW9yeSByZXF1aXJlZCBmb3IgZWFjaCBvZiB0aGUgaW9fdXJpbmcgaW5zdGFuY2VzLCBpbgot CSAqIG9uZSBTaG1lbUluaXRTdHJ1Y3QoKS4KKwkgKiBvbmUgY29tYmluZWQgYWxsb2NhdGlv bi4KKwkgKgorCSAqIHBnYWlvX3VyaW5nX2NvbnRleHRzIGlzIGFscmVhZHkgc2V0IHRvIHRo ZSBiYXNlIG9mIHRoZSBhbGxvY2F0aW9uLgogCSAqLwotCXNobWVtID0gU2htZW1Jbml0U3Ry dWN0KCJBaW9VcmluZ0NvbnRleHQiLCBwZ2Fpb191cmluZ19zaG1lbV9zaXplKCksICZmb3Vu ZCk7Ci0JaWYgKGZvdW5kKQotCQlyZXR1cm47Ci0KLQlwZ2Fpb191cmluZ19jb250ZXh0cyA9 IChQZ0Fpb1VyaW5nQ29udGV4dCAqKSBzaG1lbTsKKwlzaG1lbSA9IChjaGFyICopIHBnYWlv X3VyaW5nX2NvbnRleHRzOwogCXNobWVtICs9IHBnYWlvX3VyaW5nX2NvbnRleHRfc2htZW1f c2l6ZSgpOwogCiAJLyogaWYgc3VwcG9ydGVkLCBoYW5kbGUgbWVtb3J5IGFsaWdubWVudCAv IHNpemluZyBmb3IgaW9fdXJpbmcgbWVtb3J5ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fp by9tZXRob2Rfd29ya2VyLmMKaW5kZXggZWZlMzhlOWYxMTMuLjc2OTdhZTM0ZDY2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jCkBAIC00MSw2ICs0MSw3 IEBACiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xhdGNo LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1l bS5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9pbmpl Y3Rpb25fcG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5oIgpAQCAtNzMsMTYg Kzc0LDIwIEBAIHR5cGVkZWYgc3RydWN0IFBnQWlvV29ya2VyQ29udHJvbAogfSBQZ0Fpb1dv cmtlckNvbnRyb2w7CiAKIAotc3RhdGljIHNpemVfdCBwZ2Fpb193b3JrZXJfc2htZW1fc2l6 ZSh2b2lkKTsKLXN0YXRpYyB2b2lkIHBnYWlvX3dvcmtlcl9zaG1lbV9pbml0KGJvb2wgZmly c3RfdGltZSk7CitzdGF0aWMgdm9pZCBwZ2Fpb193b3JrZXJfc2htZW1fcmVxdWVzdCh2b2lk ICphcmcpOworc3RhdGljIHZvaWQgcGdhaW9fd29ya2VyX3NobWVtX2luaXQodm9pZCAqYXJn KTsKK3N0YXRpYyB2b2lkIHBnYWlvX3dvcmtlcl9zaG1lbV9hdHRhY2godm9pZCAqYXJnKTsK Kworc3RhdGljIFBnQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlICppb193b3JrZXJfc3VibWlz c2lvbl9xdWV1ZTsKIAogc3RhdGljIGJvb2wgcGdhaW9fd29ya2VyX25lZWRzX3N5bmNocm9u b3VzX2V4ZWN1dGlvbihQZ0Fpb0hhbmRsZSAqaW9oKTsKIHN0YXRpYyBpbnQJcGdhaW9fd29y a2VyX3N1Ym1pdCh1aW50MTYgbnVtX3N0YWdlZF9pb3MsIFBnQWlvSGFuZGxlICoqc3RhZ2Vk X2lvcyk7CiAKIAogY29uc3QgSW9NZXRob2RPcHMgcGdhaW9fd29ya2VyX29wcyA9IHsKLQku c2htZW1fc2l6ZSA9IHBnYWlvX3dvcmtlcl9zaG1lbV9zaXplLAotCS5zaG1lbV9pbml0ID0g cGdhaW9fd29ya2VyX3NobWVtX2luaXQsCisJLnNobWVtX2NhbGxiYWNrcy5yZXF1ZXN0X2Zu ID0gcGdhaW9fd29ya2VyX3NobWVtX3JlcXVlc3QsCisJLnNobWVtX2NhbGxiYWNrcy5pbml0 X2ZuID0gcGdhaW9fd29ya2VyX3NobWVtX2luaXQsCisJLnNobWVtX2NhbGxiYWNrcy5hdHRh Y2hfZm4gPSBwZ2Fpb193b3JrZXJfc2htZW1fYXR0YWNoLAogCiAJLm5lZWRzX3N5bmNocm9u b3VzX2V4ZWN1dGlvbiA9IHBnYWlvX3dvcmtlcl9uZWVkc19zeW5jaHJvbm91c19leGVjdXRp b24sCiAJLnN1Ym1pdCA9IHBnYWlvX3dvcmtlcl9zdWJtaXQsCkBAIC05NSw3ICsxMDAsNiBA QCBpbnQJCQlpb193b3JrZXJzID0gMzsKIAogc3RhdGljIGludAlpb193b3JrZXJfcXVldWVf c2l6ZSA9IDY0Owogc3RhdGljIGludAlNeUlvV29ya2VySWQ7Ci1zdGF0aWMgUGdBaW9Xb3Jr ZXJTdWJtaXNzaW9uUXVldWUgKmlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlOwogc3RhdGlj IFBnQWlvV29ya2VyQ29udHJvbCAqaW9fd29ya2VyX2NvbnRyb2w7CiAKIApAQCAtMTE2LDUw ICsxMjAsNjIgQEAgcGdhaW9fd29ya2VyX2NvbnRyb2xfc2htZW1fc2l6ZSh2b2lkKQogCQlz aXplb2YoUGdBaW9Xb3JrZXJTbG90KSAqIE1BWF9JT19XT1JLRVJTOwogfQogCi1zdGF0aWMg c2l6ZV90Ci1wZ2Fpb193b3JrZXJfc2htZW1fc2l6ZSh2b2lkKQorLyoKKyAqIFNldCBzZWNv bmRhcnkgQUlPIHdvcmtlciBwb2ludGVyIGZyb20gdGhlIGNvbWJpbmVkIGFsbG9jYXRpb24u CisgKi8KK3N0YXRpYyB2b2lkCitwZ2Fpb193b3JrZXJfc2V0X3NlY29uZGFyeV9wdHIodm9p ZCkKIHsKLQlzaXplX3QJCXN6OwogCWludAkJCXF1ZXVlX3NpemU7CisJU2l6ZQkJcXVldWVf c3ogPSBwZ2Fpb193b3JrZXJfcXVldWVfc2htZW1fc2l6ZSgmcXVldWVfc2l6ZSk7CiAKLQlz eiA9IHBnYWlvX3dvcmtlcl9xdWV1ZV9zaG1lbV9zaXplKCZxdWV1ZV9zaXplKTsKLQlzeiA9 IGFkZF9zaXplKHN6LCBwZ2Fpb193b3JrZXJfY29udHJvbF9zaG1lbV9zaXplKCkpOwotCi0J cmV0dXJuIHN6OworCWlvX3dvcmtlcl9jb250cm9sID0gKFBnQWlvV29ya2VyQ29udHJvbCAq KQorCQkoKGNoYXIgKikgaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWUgKyBNQVhBTElHTihx dWV1ZV9zeikpOwogfQogCiBzdGF0aWMgdm9pZAotcGdhaW9fd29ya2VyX3NobWVtX2luaXQo Ym9vbCBmaXJzdF90aW1lKQorcGdhaW9fd29ya2VyX3NobWVtX2luaXQodm9pZCAqYXJnKQog ewotCWJvb2wJCWZvdW5kOwogCWludAkJCXF1ZXVlX3NpemU7CiAKLQlpb193b3JrZXJfc3Vi bWlzc2lvbl9xdWV1ZSA9Ci0JCVNobWVtSW5pdFN0cnVjdCgiQWlvV29ya2VyU3VibWlzc2lv blF1ZXVlIiwKLQkJCQkJCXBnYWlvX3dvcmtlcl9xdWV1ZV9zaG1lbV9zaXplKCZxdWV1ZV9z aXplKSwKLQkJCQkJCSZmb3VuZCk7Ci0JaWYgKCFmb3VuZCkKLQl7Ci0JCWlvX3dvcmtlcl9z dWJtaXNzaW9uX3F1ZXVlLT5zaXplID0gcXVldWVfc2l6ZTsKLQkJaW9fd29ya2VyX3N1Ym1p c3Npb25fcXVldWUtPmhlYWQgPSAwOwotCQlpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZS0+ dGFpbCA9IDA7Ci0JfQorCXBnYWlvX3dvcmtlcl9xdWV1ZV9zaG1lbV9zaXplKCZxdWV1ZV9z aXplKTsKKwlpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZS0+c2l6ZSA9IHF1ZXVlX3NpemU7 CisJaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWUtPmhlYWQgPSAwOworCWlvX3dvcmtlcl9z dWJtaXNzaW9uX3F1ZXVlLT50YWlsID0gMDsKIAotCWlvX3dvcmtlcl9jb250cm9sID0KLQkJ U2htZW1Jbml0U3RydWN0KCJBaW9Xb3JrZXJDb250cm9sIiwKLQkJCQkJCXBnYWlvX3dvcmtl cl9jb250cm9sX3NobWVtX3NpemUoKSwKLQkJCQkJCSZmb3VuZCk7Ci0JaWYgKCFmb3VuZCkK KwlwZ2Fpb193b3JrZXJfc2V0X3NlY29uZGFyeV9wdHIoKTsKKworCWlvX3dvcmtlcl9jb250 cm9sLT5pZGxlX3dvcmtlcl9tYXNrID0gMDsKKwlmb3IgKGludCBpID0gMDsgaSA8IE1BWF9J T19XT1JLRVJTOyArK2kpCiAJewotCQlpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJf bWFzayA9IDA7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0lPX1dPUktFUlM7ICsraSkK LQkJewotCQkJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0ubGF0Y2ggPSBOVUxMOwot CQkJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0uaW5fdXNlID0gZmFsc2U7Ci0JCX0K KwkJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0ubGF0Y2ggPSBOVUxMOworCQlpb193 b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5pbl91c2UgPSBmYWxzZTsKIAl9CiB9CiAKK3N0 YXRpYyB2b2lkCitwZ2Fpb193b3JrZXJfc2htZW1fYXR0YWNoKHZvaWQgKmFyZykKK3sKKwlw Z2Fpb193b3JrZXJfc2V0X3NlY29uZGFyeV9wdHIoKTsKK30KKworc3RhdGljIHZvaWQKK3Bn YWlvX3dvcmtlcl9zaG1lbV9yZXF1ZXN0KHZvaWQgKmFyZykKK3sKKwlzdGF0aWMgU2htZW1T dHJ1Y3REZXNjIEFpb1dvcmtlclNobWVtRGVzYzsKKwlzaXplX3QJCXNpemU7CisJaW50CQkJ cXVldWVfc2l6ZTsKKworCXNpemUgPSBNQVhBTElHTihwZ2Fpb193b3JrZXJfcXVldWVfc2ht ZW1fc2l6ZSgmcXVldWVfc2l6ZSkpICsKKwkJcGdhaW9fd29ya2VyX2NvbnRyb2xfc2htZW1f c2l6ZSgpOworCisJU2htZW1SZXF1ZXN0U3RydWN0KCZBaW9Xb3JrZXJTaG1lbURlc2MsCisJ CQkJCSAgIC5uYW1lID0gIkFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZSIsCisJCQkJCSAgIC5z aXplID0gc2l6ZSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmaW9fd29ya2VyX3N1Ym1p c3Npb25fcXVldWUsCisJCSk7Cit9CisKIHN0YXRpYyBpbnQKIHBnYWlvX3dvcmtlcl9jaG9v c2VfaWRsZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv aXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IGZhYWY5YzQ3 MWYyLi5iZDY3ZjgxY2VhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv aXBjaS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtMTIyLDcg KzEyMiw2IEBAIENhbGN1bGF0ZVNobWVtU2l6ZSh2b2lkKQogCXNpemUgPSBhZGRfc2l6ZShz aXplLCBXYWl0RXZlbnRDdXN0b21TaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNp emUsIEluamVjdGlvblBvaW50U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBTbG90U3luY1NobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgQWlvU2ht ZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBXYWl0TFNOU2htZW1TaXplKCkp OwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBMb2dpY2FsRGVjb2RpbmdDdGxTaG1lbVNpemUo KSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIERhdGFDaGVja3N1bXNTaG1lbVNpemUoKSk7 CkBAIC0zMDEsNyArMzAwLDYgQEAgQ3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVjdHModm9pZCkK IAlTdGF0c1NobWVtSW5pdCgpOwogCVdhaXRFdmVudEN1c3RvbVNobWVtSW5pdCgpOwogCUlu amVjdGlvblBvaW50U2htZW1Jbml0KCk7Ci0JQWlvU2htZW1Jbml0KCk7CiAJV2FpdExTTlNo bWVtSW5pdCgpOwogCUxvZ2ljYWxEZWNvZGluZ0N0bFNobWVtSW5pdCgpOwogfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCmluZGV4IDAyZGJiZjMwOTUwLi5mMWQzODMz OGM4MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwpAQCAtMTE0OSwx NSArMTE0OSwxNCBAQCBQcmVkaWNhdGVMb2NrU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIAkg KiBwZXItcHJlZGljYXRlLWxvY2stdGFyZ2V0IGluZm9ybWF0aW9uLgogCSAqLwogCVNobWVt UmVxdWVzdEhhc2goJlByZWRpY2F0ZUxvY2tUYXJnZXRIYXNoRGVzYywKLQkJLm5hbWUgPSAi UFJFRElDQVRFTE9DS1RBUkdFVCBoYXNoIiwKLQkJLm5lbGVtcyA9IG1heF9wcmVkaWNhdGVf bG9ja190YXJnZXRzLAotCi0JCS5wdHIgPSAmUHJlZGljYXRlTG9ja1RhcmdldEhhc2gsCi0J CS5oYXNoX2luZm8ua2V5c2l6ZSA9IHNpemVvZihQUkVESUNBVEVMT0NLVEFSR0VUVEFHKSwK LQkJLmhhc2hfaW5mby5lbnRyeXNpemUgPSBzaXplb2YoUFJFRElDQVRFTE9DS1RBUkdFVCks Ci0JCS5oYXNoX2luZm8ubnVtX3BhcnRpdGlvbnMgPSBOVU1fUFJFRElDQVRFTE9DS19QQVJU SVRJT05TLAotCQkuaGFzaF9mbGFncyA9IEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMgfCBIQVNI X1BBUlRJVElPTiB8IEhBU0hfRklYRURfU0laRSwKLQkpOworCQkJCQkgLm5hbWUgPSAiUFJF RElDQVRFTE9DS1RBUkdFVCBoYXNoIiwKKwkJCQkJIC5uZWxlbXMgPSBtYXhfcHJlZGljYXRl X2xvY2tfdGFyZ2V0cywKKwkJCQkJIC5wdHIgPSAmUHJlZGljYXRlTG9ja1RhcmdldEhhc2gs CisJCQkJCSAuaGFzaF9pbmZvLmtleXNpemUgPSBzaXplb2YoUFJFRElDQVRFTE9DS1RBUkdF VFRBRyksCisJCQkJCSAuaGFzaF9pbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihQUkVESUNBVEVM T0NLVEFSR0VUKSwKKwkJCQkJIC5oYXNoX2luZm8ubnVtX3BhcnRpdGlvbnMgPSBOVU1fUFJF RElDQVRFTE9DS19QQVJUSVRJT05TLAorCQkJCQkgLmhhc2hfZmxhZ3MgPSBIQVNIX0VMRU0g fCBIQVNIX0JMT0JTIHwgSEFTSF9QQVJUSVRJT04gfCBIQVNIX0ZJWEVEX1NJWkUsCisJCSk7 CiAKIAkvKgogCSAqIEFsbG9jYXRlIGhhc2ggdGFibGUgZm9yIFBSRURJQ0FURUxPQ0sgc3Ry dWN0cy4gIFRoaXMgc3RvcmVzIHBlcgpAQCAtMTE2OCwxNiArMTE2NywxNCBAQCBQcmVkaWNh dGVMb2NrU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIAltYXhfcHJlZGljYXRlX2xvY2tzID0g bWF4X3ByZWRpY2F0ZV9sb2NrX3RhcmdldHMgKiAyOwogCiAJU2htZW1SZXF1ZXN0SGFzaCgm UHJlZGljYXRlTG9ja0hhc2hEZXNjLAotCQkubmFtZSA9ICJQUkVESUNBVEVMT0NLIGhhc2gi LAotCi0JCS5uZWxlbXMgPSBtYXhfcHJlZGljYXRlX2xvY2tzLAotCi0JCS5wdHIgPSAmUHJl ZGljYXRlTG9ja0hhc2gsCi0JCS5oYXNoX2luZm8ua2V5c2l6ZSA9IHNpemVvZihQUkVESUNB VEVMT0NLVEFHKSwKLQkJLmhhc2hfaW5mby5lbnRyeXNpemUgPSBzaXplb2YoUFJFRElDQVRF TE9DSyksCi0JCS5oYXNoX2luZm8uaGFzaCA9IHByZWRpY2F0ZWxvY2tfaGFzaCwKLQkJLmhh c2hfaW5mby5udW1fcGFydGl0aW9ucyA9IE5VTV9QUkVESUNBVEVMT0NLX1BBUlRJVElPTlMs Ci0JCS5oYXNoX2ZsYWdzID0gSEFTSF9FTEVNIHwgSEFTSF9GVU5DVElPTiB8IEhBU0hfUEFS VElUSU9OIHwgSEFTSF9GSVhFRF9TSVpFLAorCQkJCQkgLm5hbWUgPSAiUFJFRElDQVRFTE9D SyBoYXNoIiwKKwkJCQkJIC5uZWxlbXMgPSBtYXhfcHJlZGljYXRlX2xvY2tzLAorCQkJCQkg LnB0ciA9ICZQcmVkaWNhdGVMb2NrSGFzaCwKKwkJCQkJIC5oYXNoX2luZm8ua2V5c2l6ZSA9 IHNpemVvZihQUkVESUNBVEVMT0NLVEFHKSwKKwkJCQkJIC5oYXNoX2luZm8uZW50cnlzaXpl ID0gc2l6ZW9mKFBSRURJQ0FURUxPQ0spLAorCQkJCQkgLmhhc2hfaW5mby5oYXNoID0gcHJl ZGljYXRlbG9ja19oYXNoLAorCQkJCQkgLmhhc2hfaW5mby5udW1fcGFydGl0aW9ucyA9IE5V TV9QUkVESUNBVEVMT0NLX1BBUlRJVElPTlMsCisJCQkJCSAuaGFzaF9mbGFncyA9IEhBU0hf RUxFTSB8IEhBU0hfRlVOQ1RJT04gfCBIQVNIX1BBUlRJVElPTiB8IEhBU0hfRklYRURfU0la RSwKIAkJKTsKIAogCS8qCkBAIC0xMTk1LDExICsxMTkyLDExIEBAIFByZWRpY2F0ZUxvY2tT aG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogCSAqIHByZWRpY2F0ZSBsb2NraW5nLgogCSAqLwog CVNobWVtUmVxdWVzdFN0cnVjdCgmUHJlZFhhY3RMaXN0U2htZW1EZXNjLAotCQkJLm5hbWUg PSAiUHJlZFhhY3RMaXN0IiwKLQkJCS5zaXplID0gYWRkX3NpemUoUHJlZFhhY3RMaXN0RGF0 YVNpemUsCi0JCQkJCQkJIChtdWxfc2l6ZSgoU2l6ZSkgbWF4X3NlcmlhbGl6YWJsZV94YWN0 cywKLQkJCQkJCQkJCSAgIHNpemVvZihTRVJJQUxJWkFCTEVYQUNUKSkpKSwKLQkJCS5wdHIg PSAodm9pZCAqKikgJlByZWRYYWN0LAorCQkJCQkgICAubmFtZSA9ICJQcmVkWGFjdExpc3Qi LAorCQkJCQkgICAuc2l6ZSA9IGFkZF9zaXplKFByZWRYYWN0TGlzdERhdGFTaXplLAorCQkJ CQkJCQkJCShtdWxfc2l6ZSgoU2l6ZSkgbWF4X3NlcmlhbGl6YWJsZV94YWN0cywKKwkJCQkJ CQkJCQkJCSAgc2l6ZW9mKFNFUklBTElaQUJMRVhBQ1QpKSkpLAorCQkJCQkgICAucHRyID0g KHZvaWQgKiopICZQcmVkWGFjdCwKIAkJKTsKIAogCS8qCkBAIC0xMjI5LDQ1ICsxMjI2LDQ1 IEBAIFByZWRpY2F0ZUxvY2tTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogCW1heF9yd19jb25m bGljdHMgPSBtYXhfc2VyaWFsaXphYmxlX3hhY3RzICogNTsKIAogCVNobWVtUmVxdWVzdFN0 cnVjdCgmUldDb25mbGljdFBvb2xTaG1lbURlc2MsCi0JCS5uYW1lID0gIlJXQ29uZmxpY3RQ b29sIiwKLQkJLnNpemUgPSBSV0NvbmZsaWN0UG9vbEhlYWRlckRhdGFTaXplICsgbXVsX3Np emUoKFNpemUpIG1heF9yd19jb25mbGljdHMsCi0JCQkJCQkJCQkJCQkJCVJXQ29uZmxpY3RE YXRhU2l6ZSksCi0JCS5wdHIgPSAodm9pZCAqKikgJlJXQ29uZmxpY3RQb29sLAotCSk7CisJ CQkJCSAgIC5uYW1lID0gIlJXQ29uZmxpY3RQb29sIiwKKwkJCQkJICAgLnNpemUgPSBSV0Nv bmZsaWN0UG9vbEhlYWRlckRhdGFTaXplICsgbXVsX3NpemUoKFNpemUpIG1heF9yd19jb25m bGljdHMsCisJCQkJCQkJCQkJCQkJCQkJCSAgIFJXQ29uZmxpY3REYXRhU2l6ZSksCisJCQkJ CSAgIC5wdHIgPSAodm9pZCAqKikgJlJXQ29uZmxpY3RQb29sLAorCQkpOwogCiAJU2htZW1S ZXF1ZXN0U3RydWN0KCZGaW5pc2hlZFNlcmlhbGl6YWJsZVNobWVtRGVzYywKLQkJLm5hbWUg PSAiRmluaXNoZWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbnMiLAotCQkuc2l6ZSA9IHNpemVv ZihkbGlzdF9oZWFkKSwKLQkJLnB0ciA9ICh2b2lkICoqKSAmRmluaXNoZWRTZXJpYWxpemFi bGVUcmFuc2FjdGlvbnMsCi0JKTsKKwkJCQkJICAgLm5hbWUgPSAiRmluaXNoZWRTZXJpYWxp emFibGVUcmFuc2FjdGlvbnMiLAorCQkJCQkgICAuc2l6ZSA9IHNpemVvZihkbGlzdF9oZWFk KSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmRmluaXNoZWRTZXJpYWxpemFibGVUcmFu c2FjdGlvbnMsCisJCSk7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIFNMUlUgc3RvcmFn ZSBmb3Igb2xkIGNvbW1pdHRlZCBzZXJpYWxpemFibGUKIAkgKiB0cmFuc2FjdGlvbnMuCiAJ ICovCiAJU2ltcGxlTHJ1UmVxdWVzdCgmU2VyaWFsU2xydURlc2MsCi0JCS5uYW1lID0gInNl cmlhbGl6YWJsZSIsCi0JCS5EaXIgPSAicGdfc2VyaWFsIiwKLQkJLmxvbmdfc2VnbWVudF9u YW1lcyA9IGZhbHNlLAorCQkJCQkgLm5hbWUgPSAic2VyaWFsaXphYmxlIiwKKwkJCQkJIC5E aXIgPSAicGdfc2VyaWFsIiwKKwkJCQkJIC5sb25nX3NlZ21lbnRfbmFtZXMgPSBmYWxzZSwK IAotCQkubnNsb3RzID0gc2VyaWFsaXphYmxlX2J1ZmZlcnMsCisJCQkJCSAubnNsb3RzID0g c2VyaWFsaXphYmxlX2J1ZmZlcnMsCiAKLQkJLnN5bmNfaGFuZGxlciA9IFNZTkNfSEFORExF Ul9OT05FLAotCQkuUGFnZVByZWNlZGVzID0gU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5 LAotCQkuZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IHNlcmlhbF9lcnJkZXRhaWxfZm9yX2lv X2Vycm9yLAorCQkJCQkgLnN5bmNfaGFuZGxlciA9IFNZTkNfSEFORExFUl9OT05FLAorCQkJ CQkgLlBhZ2VQcmVjZWRlcyA9IFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseSwKKwkJCQkJ IC5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gc2VyaWFsX2VycmRldGFpbF9mb3JfaW9fZXJy b3IsCiAKLQkJLmJ1ZmZlcl90cmFuY2hlX2lkID0gTFdUUkFOQ0hFX1NFUklBTF9CVUZGRVIs Ci0JCS5iYW5rX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfU0VSSUFMX1NMUlUsCisJCQkJCSAu YnVmZmVyX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfU0VSSUFMX0JVRkZFUiwKKwkJCQkJIC5i YW5rX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfU0VSSUFMX1NMUlUsCiAJCSk7CiAjaWZkZWYg VVNFX0FTU0VSVF9DSEVDS0lORwogCVNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseVVuaXRU ZXN0cygpOwogI2VuZGlmCiAKIAlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlNlcmlhbENvbnRyb2xT aG1lbURlc2MsCi0JCS5uYW1lID0gIlNlcmlhbENvbnRyb2xEYXRhIiwKLQkJLnNpemUgPSBz aXplb2YoU2VyaWFsQ29udHJvbERhdGEpLAotCQkucHRyID0gKHZvaWQgKiopICZzZXJpYWxD b250cm9sLAotCSk7CisJCQkJCSAgIC5uYW1lID0gIlNlcmlhbENvbnRyb2xEYXRhIiwKKwkJ CQkJICAgLnNpemUgPSBzaXplb2YoU2VyaWFsQ29udHJvbERhdGEpLAorCQkJCQkgICAucHRy ID0gKHZvaWQgKiopICZzZXJpYWxDb250cm9sLAorCQkpOwogfQogCiBzdGF0aWMgdm9pZApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9zbHJ1LmgKaW5kZXggODIwYzc5ODY4NTQuLjFkYmIwYjYyNTI1IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9z bHJ1LmgKQEAgLTE2OSw3ICsxNjksNyBAQCB0eXBlZGVmIHN0cnVjdCBTbHJ1T3B0cwogCSAq LwogCWludAkJCWJ1ZmZlcl90cmFuY2hlX2lkOwogCWludAkJCWJhbmtfdHJhbmNoZV9pZDsK LX0gU2xydU9wdHM7Cit9CQkJU2xydU9wdHM7CiAKIC8qCiAgKiBTbHJ1RGVzYyBpcyBhbiB1 bnNoYXJlZCBzdHJ1Y3R1cmUgdGhhdCBwb2ludHMgdG8gdGhlIGFjdGl2ZSBpbmZvcm1hdGlv bgpAQCAtMTc5LDcgKzE3OSw3IEBAIHR5cGVkZWYgc3RydWN0IFNscnVEZXNjCiB7CiAJU2ht ZW1TdHJ1Y3REZXNjIGJhc2U7CiAKLQlTbHJ1T3B0cyBvcHRpb25zOworCVNscnVPcHRzCW9w dGlvbnM7CiAKIAlTbHJ1U2hhcmVkCXNoYXJlZDsKIApAQCAtMjAzLDcgKzIwMyw3IEBAIFNp bXBsZUxydUdldEJhbmtMb2NrKFNscnVEZXNjICpjdGwsIGludDY0IHBhZ2VubykKIAlyZXR1 cm4gJihjdGwtPnNoYXJlZC0+YmFua19sb2Nrc1tiYW5rbm9dLmxvY2spOwogfQogCi1leHRl cm4gdm9pZCBTaW1wbGVMcnVSZXF1ZXN0V2l0aE9wdHMoU2xydURlc2MgKmRlc2MsIGNvbnN0 IFNscnVPcHRzICpvcHRpb25zKTsKK2V4dGVybiB2b2lkIFNpbXBsZUxydVJlcXVlc3RXaXRo T3B0cyhTbHJ1RGVzYyAqZGVzYywgY29uc3QgU2xydU9wdHMgKiBvcHRpb25zKTsKIAogI2Rl ZmluZSBTaW1wbGVMcnVSZXF1ZXN0KGRlc2MsIC4uLikgIFwKIAlTaW1wbGVMcnVSZXF1ZXN0 V2l0aE9wdHMoZGVzYywgJihTbHJ1T3B0cyl7X19WQV9BUkdTX199KQpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYWlvX2ludGVybmFsLmgKaW5kZXggMzNlMWUyZGMwNDguLjljYTQwODdhYTdmIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oCisrKyBiL3NyYy9p bmNsdWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmgKQEAgLTIwLDYgKzIwLDggQEAKICNpbmNs dWRlICJwb3J0L3BnX2lvdmVjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9haW8uaCIKICNpbmNs dWRlICJzdG9yYWdlL2NvbmRpdGlvbl92YXJpYWJsZS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uv aXBjLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgogCiAKIC8qCkBAIC0yNjcsMjAg KzI2OSw4IEBAIHR5cGVkZWYgc3RydWN0IElvTWV0aG9kT3BzCiAJICovCiAJYm9vbAkJd2Fp dF9vbl9mZF9iZWZvcmVfY2xvc2U7CiAKLQogCS8qIGdsb2JhbCBpbml0aWFsaXphdGlvbiAq LwotCi0JLyoKLQkgKiBBbW91bnQgb2YgYWRkaXRpb25hbCBzaGFyZWQgbWVtb3J5IHRvIHJl c2VydmUgZm9yIHRoZSBpb19tZXRob2QuIENhbGxlZAotCSAqIGp1c3QgbGlrZSBhIG5vcm1h bCBpcGNpLmMgc3R5bGUgKlNpemUoKSBmdW5jdGlvbi4gT3B0aW9uYWwuCi0JICovCi0Jc2l6 ZV90CQkoKnNobWVtX3NpemUpICh2b2lkKTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSBzaGFy ZWQgbWVtb3J5LiBGaXJzdCB0aW1lIGlzIHRydWUgaWYgQUlPJ3Mgc2hhcmVkIG1lbW9yeSB3 YXMKLQkgKiBqdXN0IGluaXRpYWxpemVkLCBmYWxzZSBvdGhlcndpc2UuIE9wdGlvbmFsLgot CSAqLwotCXZvaWQJCSgqc2htZW1faW5pdCkgKGJvb2wgZmlyc3RfdGltZSk7CisJU2htZW1D YWxsYmFja3Mgc2htZW1fY2FsbGJhY2tzOwogCiAJLyoKIAkgKiBQZXItYmFja2VuZCBpbml0 aWFsaXphdGlvbi4gT3B0aW9uYWwuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdl L2Fpb19zdWJzeXMuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX3N1YnN5cy5oCmluZGV4 IDI3NmNiM2UzMWM0Li5kZDU0ODY5MzUxZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9haW9fc3Vic3lzLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9fc3Vic3lz LmgKQEAgLTIwLDEyICsyMCw4IEBACiAKIAogLyogYWlvX2luaXQuYyAqLwotZXh0ZXJuIFNp emUgQWlvU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgQWlvU2htZW1Jbml0KHZvaWQp OwotCiBleHRlcm4gdm9pZCBwZ2Fpb19pbml0X2JhY2tlbmQodm9pZCk7CiAKLQogLyogYWlv LmMgKi8KIGV4dGVybiB2b2lkIHBnYWlvX2Vycm9yX2NsZWFudXAodm9pZCk7CiBleHRlcm4g dm9pZCBBdEVPWGFjdF9BaW8oYm9vbCBpc19jb21taXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1 YnN5c3RlbWxpc3QuaAppbmRleCBjMTk5ZjE4YTI3YS4uYjQzODc5NGQ0NmQgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCisrKyBiL3NyYy9pbmNs dWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCkBAIC01MywzICs1Myw2IEBAIFBHX1NITUVN X1NVQlNZU1RFTShQcm9jU2lnbmFsU2htZW1DYWxsYmFja3MpCiAKIC8qIG90aGVyIG1vZHVs ZXMgdGhhdCBuZWVkIHNvbWUgc2hhcmVkIG1lbW9yeSBzcGFjZSAqLwogUEdfU0hNRU1fU1VC U1lTVEVNKEFzeW5jU2htZW1DYWxsYmFja3MpCisKKy8qIEFJTyBzdWJzeXN0ZW0uIFRoaXMg ZGVsZWdhdGVzIHRvIHRoZSBtZXRob2Qtc3BlY2lmaWMgY2FsbGJhY2tzICovCitQR19TSE1F TV9TVUJTWVNURU0oQWlvU2htZW1DYWxsYmFja3MpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3Rfc2xydS90ZXN0X3NscnUuYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9z bHJ1L3Rlc3Rfc2xydS5jCmluZGV4IDNjMmExNDNiNGQ1Li42YmQxYmVjNzJjNSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvdGVzdF9zbHJ1LmMKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvdGVzdF9zbHJ1LmMKQEAgLTIzNCwyNCArMjM0LDI0 IEBAIHN0YXRpYyB2b2lkCiB0ZXN0X3NscnVfc2htZW1fcmVxdWVzdCh2b2lkICphcmcpCiB7 CiAJU2ltcGxlTHJ1UmVxdWVzdCgmVGVzdFNscnVEZXNjLAotCQkubmFtZSA9ICJUZXN0U0xS VSIsCi0JCS5EaXIgPSBUZXN0U2xydURpciwKLQotCQkvKgotCQkgKiBTaG9ydCBzZWdtZW50 cyBuYW1lcyBhcmUgd2VsbCB0ZXN0ZWQgZWxzZXdoZXJlIHNvIGluIHRoaXMgdGVzdCB3ZSBh cmUKLQkJICogZm9jdXNpbmcgb24gbG9uZyBuYW1lcy4KLQkJICovCi0JCS5sb25nX3NlZ21l bnRfbmFtZXMgPSB0cnVlLAotCi0JCS5uc2xvdHMgPSBOVU1fVEVTVF9CVUZGRVJTLAotCQku bmxzbnMgPSAwLAotCi0JCS5zeW5jX2hhbmRsZXIgPSBTWU5DX0hBTkRMRVJfTk9ORSwKLQkJ LlBhZ2VQcmVjZWRlcyA9IHRlc3Rfc2xydV9wYWdlX3ByZWNlZGVzX2xvZ2ljYWxseSwKLQkJ LmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSB0ZXN0X3NscnVfZXJyZGV0YWlsX2Zvcl9pb19l cnJvciwKLQotCQkvKiBsZXQgc2xydS5jIGFzc2lnbiB0aGVzZSAqLwotCQkuYnVmZmVyX3Ry YW5jaGVfaWQgPSAwLAotCQkuYmFua190cmFuY2hlX2lkID0gMCwKLQkpOworCQkJCQkgLm5h bWUgPSAiVGVzdFNMUlUiLAorCQkJCQkgLkRpciA9IFRlc3RTbHJ1RGlyLAorCisJLyoKKwkg KiBTaG9ydCBzZWdtZW50cyBuYW1lcyBhcmUgd2VsbCB0ZXN0ZWQgZWxzZXdoZXJlIHNvIGlu IHRoaXMgdGVzdCB3ZSBhcmUKKwkgKiBmb2N1c2luZyBvbiBsb25nIG5hbWVzLgorCSAqLwor CQkJCQkgLmxvbmdfc2VnbWVudF9uYW1lcyA9IHRydWUsCisKKwkJCQkJIC5uc2xvdHMgPSBO VU1fVEVTVF9CVUZGRVJTLAorCQkJCQkgLm5sc25zID0gMCwKKworCQkJCQkgLnN5bmNfaGFu ZGxlciA9IFNZTkNfSEFORExFUl9OT05FLAorCQkJCQkgLlBhZ2VQcmVjZWRlcyA9IHRlc3Rf c2xydV9wYWdlX3ByZWNlZGVzX2xvZ2ljYWxseSwKKwkJCQkJIC5lcnJkZXRhaWxfZm9yX2lv X2Vycm9yID0gdGVzdF9zbHJ1X2VycmRldGFpbF9mb3JfaW9fZXJyb3IsCisKKwkvKiBsZXQg c2xydS5jIGFzc2lnbiB0aGVzZSAqLworCQkJCQkgLmJ1ZmZlcl90cmFuY2hlX2lkID0gMCwK KwkJCQkJIC5iYW5rX3RyYW5jaGVfaWQgPSAwLAorCQkpOwogfQotLSAKMi40Ny4zCgo= --------------ilO2of90F4UvkC4IFxh0ppYz Content-Type: text/x-patch; charset=UTF-8; name="0012-Add-option-for-aligning-shmem-allocations.patch" Content-Disposition: attachment; filename="0012-Add-option-for-aligning-shmem-allocations.patch" Content-Transfer-Encoding: base64 RnJvbSBmMTNjY2ZkNzNhYTkzMGVjNjM1MWY2YTgwMThkN2M5YmU0OGY0ODFmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMjM6NDQ6MTUgKzAyMDAK U3ViamVjdDogW1BBVENIIDEyLzE0XSBBZGQgb3B0aW9uIGZvciBhbGlnbmluZyBzaG1lbSBh bGxvY2F0aW9ucwoKVGhlIGJ1ZmZlciBibG9ja3MgKGluIHRoZSBuZXh0IGNvbW1pdCkgYXJl IElPLWFsaWduZWQuIFRoaXMgbWlnaHQgY29tZQpoYW5keSBpbiBvdGhlciBwbGFjZXMgdG9v LCBzbyBtYWtlIGl0IGFuIGV4cGxpY2l0IGZlYXR1cmUgb2YKU2htZW1SZXF1ZXN0U3RydWN0 LgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMgfCAyMiArKysrKysrKysr KysrLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmggICAgIHwgIDYgKysr KysrCiAyIGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKaW5kZXggZWRjZmVjZjI0YmEuLmMzMThhODBi ZWNjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKQEAgLTIzOSw3ICsyMzksNyBAQCB0 eXBlZGVmIHN0cnVjdCBTaG1lbUFsbG9jYXRvckRhdGEKIAogI2RlZmluZSBTaG1lbUluZGV4 TG9jayAoJlNobWVtQWxsb2NhdG9yLT5pbmRleF9sb2NrKQogCi1zdGF0aWMgdm9pZCAqU2ht ZW1BbGxvY1JhdyhTaXplIHNpemUsIFNpemUgKmFsbG9jYXRlZF9zaXplKTsKK3N0YXRpYyB2 b2lkICpTaG1lbUFsbG9jUmF3KFNpemUgc2l6ZSwgU2l6ZSBhbGlnbm1lbnQsIFNpemUgKmFs bG9jYXRlZF9zaXplKTsKIAogLyogc2hhcmVkIG1lbW9yeSBnbG9iYWwgdmFyaWFibGVzICov CiAKQEAgLTM5OSw2ICszOTksNyBAQCBTaG1lbUdldFJlcXVlc3RlZFNpemUodm9pZCkKIAlm b3JlYWNoX3B0cihTaG1lbVJlcXVlc3QsIHJlcXVlc3QsIHBlbmRpbmdfc2htZW1fcmVxdWVz dHMpCiAJewogCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgcmVxdWVzdC0+b3B0aW9ucy0+c2l6 ZSk7CisJCXNpemUgPSBhZGRfc2l6ZShzaXplLCByZXF1ZXN0LT5vcHRpb25zLT5hbGlnbm1l bnQpOwogCX0KIAogCXJldHVybiBzaXplOwpAQCAtNTg4LDcgKzU4OSw3IEBAIEF0dGFjaE9y SW5pdFNobWVtSW5kZXhFbnRyeShTaG1lbVJlcXVlc3QgKnJlcXVlc3QsCiAJCXNpemVfdAkJ YWxsb2NhdGVkX3NpemU7CiAJCXZvaWQJICAgKnN0cnVjdFB0cjsKIAotCQlzdHJ1Y3RQdHIg PSBTaG1lbUFsbG9jUmF3KHJlcXVlc3QtPm9wdGlvbnMtPnNpemUsICZhbGxvY2F0ZWRfc2l6 ZSk7CisJCXN0cnVjdFB0ciA9IFNobWVtQWxsb2NSYXcocmVxdWVzdC0+b3B0aW9ucy0+c2l6 ZSwgcmVxdWVzdC0+b3B0aW9ucy0+YWxpZ25tZW50LCAmYWxsb2NhdGVkX3NpemUpOwogCQlp ZiAoc3RydWN0UHRyID09IE5VTEwpCiAJCXsKIAkJCS8qIG91dCBvZiBtZW1vcnk7IHJlbW92 ZSB0aGUgZmFpbGVkIFNobWVtSW5kZXggZW50cnkgKi8KQEAgLTc2OCw3ICs3NjksNyBAQCBT aG1lbUFsbG9jKFNpemUgc2l6ZSkKIAl2b2lkCSAgICpuZXdTcGFjZTsKIAlTaXplCQlhbGxv Y2F0ZWRfc2l6ZTsKIAotCW5ld1NwYWNlID0gU2htZW1BbGxvY1JhdyhzaXplLCAmYWxsb2Nh dGVkX3NpemUpOworCW5ld1NwYWNlID0gU2htZW1BbGxvY1JhdyhzaXplLCAwLCAmYWxsb2Nh dGVkX3NpemUpOwogCWlmICghbmV3U3BhY2UpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVy cmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKQEAgLTc4Nyw3ICs3ODgsNyBAQCBTaG1l bUFsbG9jTm9FcnJvcihTaXplIHNpemUpCiB7CiAJU2l6ZQkJYWxsb2NhdGVkX3NpemU7CiAK LQlyZXR1cm4gU2htZW1BbGxvY1JhdyhzaXplLCAmYWxsb2NhdGVkX3NpemUpOworCXJldHVy biBTaG1lbUFsbG9jUmF3KHNpemUsIDAsICZhbGxvY2F0ZWRfc2l6ZSk7CiB9CiAKIC8qCkBA IC03OTcsOCArNzk4LDkgQEAgU2htZW1BbGxvY05vRXJyb3IoU2l6ZSBzaXplKQogICogYmUg ZXF1YWwgdG8gdGhlIG51bWJlciByZXF1ZXN0ZWQgcGx1cyBhbnkgcGFkZGluZyB3ZSBjaG9v c2UgdG8gYWRkLgogICovCiBzdGF0aWMgdm9pZCAqCi1TaG1lbUFsbG9jUmF3KFNpemUgc2l6 ZSwgU2l6ZSAqYWxsb2NhdGVkX3NpemUpCitTaG1lbUFsbG9jUmF3KFNpemUgc2l6ZSwgU2l6 ZSBhbGlnbm1lbnQsIFNpemUgKmFsbG9jYXRlZF9zaXplKQogeworCVNpemUJCXJhd1N0YXJ0 OwogCVNpemUJCW5ld1N0YXJ0OwogCVNpemUJCW5ld0ZyZWU7CiAJdm9pZAkgICAqbmV3U3Bh Y2U7CkBAIC04MTQsMTQgKzgxNiwxNSBAQCBTaG1lbUFsbG9jUmF3KFNpemUgc2l6ZSwgU2l6 ZSAqYWxsb2NhdGVkX3NpemUpCiAJICogc3RydWN0dXJlcyBvdXQgdG8gYSBwb3dlci1vZi10 d28gc2l6ZSAtIGJ1dCB3aXRob3V0IHRoaXMsIGV2ZW4gdGhhdAogCSAqIHdvbid0IGJlIHN1 ZmZpY2llbnQuCiAJICovCi0Jc2l6ZSA9IENBQ0hFTElORUFMSUdOKHNpemUpOwotCSphbGxv Y2F0ZWRfc2l6ZSA9IHNpemU7CisJaWYgKGFsaWdubWVudCA8IFBHX0NBQ0hFX0xJTkVfU0la RSkKKwkJYWxpZ25tZW50ID0gUEdfQ0FDSEVfTElORV9TSVpFOwogCiAJQXNzZXJ0KFNobWVt U2VnSGRyICE9IE5VTEwpOwogCiAJU3BpbkxvY2tBY3F1aXJlKCZTaG1lbUFsbG9jYXRvci0+ c2htZW1fbG9jayk7CiAKLQluZXdTdGFydCA9IFNobWVtQWxsb2NhdG9yLT5mcmVlX29mZnNl dDsKKwlyYXdTdGFydCA9IFNobWVtQWxsb2NhdG9yLT5mcmVlX29mZnNldDsKKwluZXdTdGFy dCA9IFRZUEVBTElHTihhbGlnbm1lbnQsIHJhd1N0YXJ0KTsKIAogCW5ld0ZyZWUgPSBuZXdT dGFydCArIHNpemU7CiAJaWYgKG5ld0ZyZWUgPD0gU2htZW1TZWdIZHItPnRvdGFsc2l6ZSkK QEAgLTgzNSw4ICs4MzgsOSBAQCBTaG1lbUFsbG9jUmF3KFNpemUgc2l6ZSwgU2l6ZSAqYWxs b2NhdGVkX3NpemUpCiAJU3BpbkxvY2tSZWxlYXNlKCZTaG1lbUFsbG9jYXRvci0+c2htZW1f bG9jayk7CiAKIAkvKiBub3RlIHRoaXMgYXNzZXJ0IGlzIG9rYXkgd2l0aCBuZXdTcGFjZSA9 PSBOVUxMICovCi0JQXNzZXJ0KG5ld1NwYWNlID09ICh2b2lkICopIENBQ0hFTElORUFMSUdO KG5ld1NwYWNlKSk7CisJQXNzZXJ0KG5ld1NwYWNlID09ICh2b2lkICopIFRZUEVBTElHTihh bGlnbm1lbnQsIG5ld1NwYWNlKSk7CiAKKwkqYWxsb2NhdGVkX3NpemUgPSBuZXdGcmVlIC0g cmF3U3RhcnQ7CiAJcmV0dXJuIG5ld1NwYWNlOwogfQogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9zdG9yYWdlL3NobWVtLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmgKaW5k ZXggNDIwMzAxNDUzMjguLjdlM2M5YzdmMjc3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9z dG9yYWdlL3NobWVtLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oCkBAIC02 Myw2ICs2MywxMiBAQCB0eXBlZGVmIHN0cnVjdCBTaG1lbVN0cnVjdE9wdHMKIAogCXNzaXpl X3QJCXNpemU7CiAKKwkvKgorCSAqIEFsaWdubWVudCBvZiB0aGUgc3RhcnRpbmcgYWRkcmVz cy4gSWYgbm90IHNldCwgZGVmYXVsdHMgdG8gY2FjaGVsaW5lCisJICogYm91bmRhcnkuIE11 c3QgYmUgYSBwb3dlciBvZiB0d28uCisJICovCisJc2l6ZV90CQlhbGlnbm1lbnQ7CisKIAkv KgogCSAqIFdoZW4gdGhlIHNobWVtIGFyZWEgaXMgaW5pdGlhbGl6ZWQgb3IgYXR0YWNoZWQg dG8sIHBvaW50ZXIgdG8gaXQgaXMKIAkgKiBzdG9yZWQgaW4gKnB0ci4gIEl0IHVzdWFsbHkg cG9pbnRzIHRvIGEgZ2xvYmFsIHZhcmlhYmxlLCB1c2VkIHRvIGFjY2VzcwotLSAKMi40Ny4z Cgo= --------------ilO2of90F4UvkC4IFxh0ppYz Content-Type: text/x-patch; charset=UTF-8; name="0013-Convert-buffer-manager-to-the-new-API.patch" Content-Disposition: attachment; filename="0013-Convert-buffer-manager-to-the-new-API.patch" Content-Transfer-Encoding: base64 RnJvbSA5OTYxMGI1MGY2OTliYmY4ZTk1M2M3OTM0OTljZjU1ZGIzNmEyNDM5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMiBBcHIgMjAyNiAwMDo0NDowMiArMDMwMApT dWJqZWN0OiBbUEFUQ0ggMTMvMTRdIENvbnZlcnQgYnVmZmVyIG1hbmFnZXIgdG8gdGhlIG5l dyBBUEkKCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYyAgfCAx NTggKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmX3RhYmxlLmMgfCAgNTYgKysrKystLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9mcmVlbGlzdC5jICB8ICA5NCArKysrKy0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL2lwY2kuYyAgICAgICAgIHwgICAzIC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2Uv YnVmX2ludGVybmFscy5oICAgIHwgICA1IC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdy LmggICAgICAgICAgIHwgICA0IC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlz dC5oICAgIHwgICAzICsKIDcgZmlsZXMgY2hhbmdlZCwgMTM3IGluc2VydGlvbnMoKyksIDE4 NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZl ci9idWZfaW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwpp bmRleCBjMGMyMjNiMmUzMi4uNzFlN2MyOTExNmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9i dWZmZXIvYnVmX2luaXQuYwpAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgInN0b3JhZ2Uv YnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcm9jbGlzdC5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNp bmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKIAogQnVmZmVyRGVzY1BhZGRlZCAqQnVm ZmVyRGVzY3JpcHRvcnM7CiBjaGFyCSAgICpCdWZmZXJCbG9ja3M7CkBAIC0yNSw2ICsyNywx NSBAQCBDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRlZCAqQnVmZmVySU9DVkFycmF5 OwogV3JpdGViYWNrQ29udGV4dCBCYWNrZW5kV3JpdGViYWNrQ29udGV4dDsKIENrcHRTb3J0 SXRlbSAqQ2twdEJ1ZmZlcklkczsKIAorc3RhdGljIHZvaWQgQnVmZmVyTWFuYWdlclNobWVt UmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgQnVmZmVyTWFuYWdlclNobWVtSW5p dCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgQnVmZmVyTWFuYWdlclNobWVtQXR0YWNoKHZv aWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIEJ1ZmZlck1hbmFnZXJTaG1lbUNh bGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IEJ1ZmZlck1hbmFnZXJTaG1lbVJlcXVlc3Qs CisJLmluaXRfZm4gPSBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0LAorCS5hdHRhY2hfZm4gPSBC dWZmZXJNYW5hZ2VyU2htZW1BdHRhY2gsCit9OwogCiAvKgogICogRGF0YSBTdHJ1Y3R1cmVz OgpAQCAtNjAsMzcgKzcxLDM5IEBAIENrcHRTb3J0SXRlbSAqQ2twdEJ1ZmZlcklkczsKIAog CiAvKgotICogSW5pdGlhbGl6ZSBzaGFyZWQgYnVmZmVyIHBvb2wKLSAqCi0gKiBUaGlzIGlz IGNhbGxlZCBvbmNlIGR1cmluZyBzaGFyZWQtbWVtb3J5IGluaXRpYWxpemF0aW9uIChlaXRo ZXIgaW4gdGhlCi0gKiBwb3N0bWFzdGVyLCBvciBpbiBhIHN0YW5kYWxvbmUgYmFja2VuZCku CisgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IGFyZWEgZm9yIHRoZSBidWZmZXIgcG9vbC4K ICAqLwotdm9pZAotQnVmZmVyTWFuYWdlclNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQK K0J1ZmZlck1hbmFnZXJTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5k QnVmcywKLQkJCQlmb3VuZERlc2NzLAotCQkJCWZvdW5kSU9DViwKLQkJCQlmb3VuZEJ1ZkNr cHQ7Ci0KKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEJ1ZmZlckRlc2NyaXB0b3JzU2htZW1E ZXNjOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgQnVmZmVyQmxvY2tzU2htZW1EZXNjOwor CXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgQnVmZmVySU9DVkFycmF5U2htZW1EZXNjOworCXN0 YXRpYyBTaG1lbVN0cnVjdERlc2MgQ2twdEJ1ZmZlcklkc1NobWVtRGVzYzsKKworCVNobWVt UmVxdWVzdFN0cnVjdCgmQnVmZmVyRGVzY3JpcHRvcnNTaG1lbURlc2MsCisJCQkJCSAgIC5u YW1lID0gIkJ1ZmZlciBEZXNjcmlwdG9ycyIsCisJCQkJCSAgIC5zaXplID0gTkJ1ZmZlcnMg KiBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCksCiAJLyogQWxpZ24gZGVzY3JpcHRvcnMgdG8g YSBjYWNoZWxpbmUgYm91bmRhcnkuICovCi0JQnVmZmVyRGVzY3JpcHRvcnMgPSAoQnVmZmVy RGVzY1BhZGRlZCAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBEZXNjcmlwdG9ycyIs Ci0JCQkJCQlOQnVmZmVycyAqIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSwKLQkJCQkJCSZm b3VuZERlc2NzKTsKKwkJCQkJICAgLmFsaWdubWVudCA9IFBHX0NBQ0hFX0xJTkVfU0laRSwK KwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmQnVmZmVyRGVzY3JpcHRvcnMsCisJCSk7CiAK KwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkJ1ZmZlckJsb2Nrc1NobWVtRGVzYywKKwkJCQkJICAg Lm5hbWUgPSAiQnVmZmVyIEJsb2NrcyIsCisJCQkJCSAgIC5zaXplID0gTkJ1ZmZlcnMgKiAo U2l6ZSkgQkxDS1NaLAogCS8qIEFsaWduIGJ1ZmZlciBwb29sIG9uIElPIHBhZ2Ugc2l6ZSBi b3VuZGFyeS4gKi8KLQlCdWZmZXJCbG9ja3MgPSAoY2hhciAqKQotCQlUWVBFQUxJR04oUEdf SU9fQUxJR05fU0laRSwKLQkJCQkgIFNobWVtSW5pdFN0cnVjdCgiQnVmZmVyIEJsb2NrcyIs Ci0JCQkJCQkJCSAgTkJ1ZmZlcnMgKiAoU2l6ZSkgQkxDS1NaICsgUEdfSU9fQUxJR05fU0la RSwKLQkJCQkJCQkJICAmZm91bmRCdWZzKSk7Ci0KLQkvKiBBbGlnbiBjb25kaXRpb24gdmFy aWFibGVzIHRvIGNhY2hlbGluZSBib3VuZGFyeS4gKi8KLQlCdWZmZXJJT0NWQXJyYXkgPSAo Q29uZGl0aW9uVmFyaWFibGVNaW5pbWFsbHlQYWRkZWQgKikKLQkJU2htZW1Jbml0U3RydWN0 KCJCdWZmZXIgSU8gQ29uZGl0aW9uIFZhcmlhYmxlcyIsCi0JCQkJCQlOQnVmZmVycyAqIHNp emVvZihDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRlZCksCi0JCQkJCQkmZm91bmRJ T0NWKTsKKwkJCQkJICAgLmFsaWdubWVudCA9IFBHX0lPX0FMSUdOX1NJWkUsCisJCQkJCSAg IC5wdHIgPSAodm9pZCAqKikgJkJ1ZmZlckJsb2NrcywKKwkJKTsKKworCVNobWVtUmVxdWVz dFN0cnVjdCgmQnVmZmVySU9DVkFycmF5U2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJC dWZmZXIgSU8gQ29uZGl0aW9uIFZhcmlhYmxlcyIsCisJCQkJCSAgIC5zaXplID0gTkJ1ZmZl cnMgKiBzaXplb2YoQ29uZGl0aW9uVmFyaWFibGVNaW5pbWFsbHlQYWRkZWQpLAorCS8qIEFs aWduIGRlc2NyaXB0b3JzIHRvIGEgY2FjaGVsaW5lIGJvdW5kYXJ5LiAqLworCQkJCQkgICAu YWxpZ25tZW50ID0gUEdfQ0FDSEVfTElORV9TSVpFLAorCQkJCQkgICAucHRyID0gKHZvaWQg KiopICZCdWZmZXJJT0NWQXJyYXksCisJCSk7CiAKIAkvKgogCSAqIFRoZSBhcnJheSB1c2Vk IHRvIHNvcnQgdG8tYmUtY2hlY2twb2ludGVkIGJ1ZmZlciBpZHMgaXMgbG9jYXRlZCBpbgpA QCAtOTksODAgKzExMiw1MSBAQCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQpCiAJICog dGhlIGNoZWNrcG9pbnRlciBpcyByZXN0YXJ0ZWQsIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1 cmVzIHdvdWxkIGJlCiAJICogcGFpbmZ1bC4KIAkgKi8KLQlDa3B0QnVmZmVySWRzID0gKENr cHRTb3J0SXRlbSAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIkNoZWNrcG9pbnQgQnVmZmVySWRz IiwKLQkJCQkJCU5CdWZmZXJzICogc2l6ZW9mKENrcHRTb3J0SXRlbSksICZmb3VuZEJ1ZkNr cHQpOworCVNobWVtUmVxdWVzdFN0cnVjdCgmQ2twdEJ1ZmZlcklkc1NobWVtRGVzYywKKwkJ CQkJICAgLm5hbWUgPSAiQ2hlY2twb2ludCBCdWZmZXJJZHMiLAorCQkJCQkgICAuc2l6ZSA9 IE5CdWZmZXJzICogc2l6ZW9mKENrcHRTb3J0SXRlbSksCisJCQkJCSAgIC5wdHIgPSAodm9p ZCAqKikgJkNrcHRCdWZmZXJJZHMsCisJCSk7Cit9CiAKLQlpZiAoZm91bmREZXNjcyB8fCBm b3VuZEJ1ZnMgfHwgZm91bmRJT0NWIHx8IGZvdW5kQnVmQ2twdCkKLQl7Ci0JCS8qIHNob3Vs ZCBmaW5kIGFsbCBvZiB0aGVzZSwgb3Igbm9uZSBvZiB0aGVtICovCi0JCUFzc2VydChmb3Vu ZERlc2NzICYmIGZvdW5kQnVmcyAmJiBmb3VuZElPQ1YgJiYgZm91bmRCdWZDa3B0KTsKLQkJ Lyogbm90ZTogdGhpcyBwYXRoIGlzIG9ubHkgdGFrZW4gaW4gRVhFQ19CQUNLRU5EIGNhc2Ug Ki8KLQl9Ci0JZWxzZQorLyoKKyAqIEluaXRpYWxpemUgc2hhcmVkIGJ1ZmZlciBwb29sCisg KgorICogVGhpcyBpcyBjYWxsZWQgb25jZSBkdXJpbmcgc2hhcmVkLW1lbW9yeSBpbml0aWFs aXphdGlvbiAoZWl0aGVyIGluIHRoZQorICogcG9zdG1hc3Rlciwgb3IgaW4gYSBzdGFuZGFs b25lIGJhY2tlbmQpLgorICovCitzdGF0aWMgdm9pZAorQnVmZmVyTWFuYWdlclNobWVtSW5p dCh2b2lkICphcmcpCit7CisJLyoKKwkgKiBJbml0aWFsaXplIGFsbCB0aGUgYnVmZmVyIGhl YWRlcnMuCisJICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBOQnVmZmVyczsgaSsrKQogCXsK LQkJaW50CQkJaTsKKwkJQnVmZmVyRGVzYyAqYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihp KTsKIAotCQkvKgotCQkgKiBJbml0aWFsaXplIGFsbCB0aGUgYnVmZmVyIGhlYWRlcnMuCi0J CSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgTkJ1ZmZlcnM7IGkrKykKLQkJewotCQkJQnVmZmVy RGVzYyAqYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihpKTsKKwkJQ2xlYXJCdWZmZXJUYWco JmJ1Zi0+dGFnKTsKIAotCQkJQ2xlYXJCdWZmZXJUYWcoJmJ1Zi0+dGFnKTsKKwkJcGdfYXRv bWljX2luaXRfdTY0KCZidWYtPnN0YXRlLCAwKTsKKwkJYnVmLT53YWl0X2JhY2tlbmRfcGdw cm9jbm8gPSBJTlZBTElEX1BST0NfTlVNQkVSOwogCi0JCQlwZ19hdG9taWNfaW5pdF91NjQo JmJ1Zi0+c3RhdGUsIDApOwotCQkJYnVmLT53YWl0X2JhY2tlbmRfcGdwcm9jbm8gPSBJTlZB TElEX1BST0NfTlVNQkVSOworCQlidWYtPmJ1Zl9pZCA9IGk7CiAKLQkJCWJ1Zi0+YnVmX2lk ID0gaTsKKwkJcGdhaW9fd3JlZl9jbGVhcigmYnVmLT5pb193cmVmKTsKIAotCQkJcGdhaW9f d3JlZl9jbGVhcigmYnVmLT5pb193cmVmKTsKLQotCQkJcHJvY2xpc3RfaW5pdCgmYnVmLT5s b2NrX3dhaXRlcnMpOwotCQkJQ29uZGl0aW9uVmFyaWFibGVJbml0KEJ1ZmZlckRlc2NyaXB0 b3JHZXRJT0NWKGJ1ZikpOwotCQl9CisJCXByb2NsaXN0X2luaXQoJmJ1Zi0+bG9ja193YWl0 ZXJzKTsKKwkJQ29uZGl0aW9uVmFyaWFibGVJbml0KEJ1ZmZlckRlc2NyaXB0b3JHZXRJT0NW KGJ1ZikpOwogCX0KIAotCS8qIEluaXQgb3RoZXIgc2hhcmVkIGJ1ZmZlci1tYW5hZ2VtZW50 IHN0dWZmICovCi0JU3RyYXRlZ3lJbml0aWFsaXplKCFmb3VuZERlc2NzKTsKLQogCS8qIElu aXRpYWxpemUgcGVyLWJhY2tlbmQgZmlsZSBmbHVzaCBjb250ZXh0ICovCiAJV3JpdGViYWNr Q29udGV4dEluaXQoJkJhY2tlbmRXcml0ZWJhY2tDb250ZXh0LAogCQkJCQkJICZiYWNrZW5k X2ZsdXNoX2FmdGVyKTsKIH0KIAotLyoKLSAqIEJ1ZmZlck1hbmFnZXJTaG1lbVNpemUKLSAq Ci0gKiBjb21wdXRlIHRoZSBzaXplIG9mIHNoYXJlZCBtZW1vcnkgZm9yIHRoZSBidWZmZXIg cG9vbCBpbmNsdWRpbmcKLSAqIGRhdGEgcGFnZXMsIGJ1ZmZlciBkZXNjcmlwdG9ycywgaGFz aCB0YWJsZXMsIGV0Yy4KLSAqLwotU2l6ZQotQnVmZmVyTWFuYWdlclNobWVtU2l6ZSh2b2lk KQorc3RhdGljIHZvaWQKK0J1ZmZlck1hbmFnZXJTaG1lbUF0dGFjaCh2b2lkICphcmcpCiB7 Ci0JU2l6ZQkJc2l6ZSA9IDA7Ci0KLQkvKiBzaXplIG9mIGJ1ZmZlciBkZXNjcmlwdG9ycyAq LwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShOQnVmZmVycywgc2l6ZW9mKEJ1 ZmZlckRlc2NQYWRkZWQpKSk7Ci0JLyogdG8gYWxsb3cgYWxpZ25pbmcgYnVmZmVyIGRlc2Ny aXB0b3JzICovCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFBHX0NBQ0hFX0xJTkVfU0laRSk7 Ci0KLQkvKiBzaXplIG9mIGRhdGEgcGFnZXMsIHBsdXMgYWxpZ25tZW50IHBhZGRpbmcgKi8K LQlzaXplID0gYWRkX3NpemUoc2l6ZSwgUEdfSU9fQUxJR05fU0laRSk7Ci0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIG11bF9zaXplKE5CdWZmZXJzLCBCTENLU1opKTsKLQotCS8qIHNpemUg b2Ygc3R1ZmYgY29udHJvbGxlZCBieSBmcmVlbGlzdC5jICovCi0Jc2l6ZSA9IGFkZF9zaXpl KHNpemUsIFN0cmF0ZWd5U2htZW1TaXplKCkpOwotCi0JLyogc2l6ZSBvZiBJL08gY29uZGl0 aW9uIHZhcmlhYmxlcyAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShOQnVm ZmVycywKLQkJCQkJCQkJICAgc2l6ZW9mKENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFk ZGVkKSkpOwotCS8qIHRvIGFsbG93IGFsaWduaW5nIHRoZSBhYm92ZSAqLwotCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBQR19DQUNIRV9MSU5FX1NJWkUpOwotCi0JLyogc2l6ZSBvZiBjaGVj a3BvaW50IHNvcnQgYXJyYXkgaW4gYnVmbWdyLmMgKi8KLQlzaXplID0gYWRkX3NpemUoc2l6 ZSwgbXVsX3NpemUoTkJ1ZmZlcnMsIHNpemVvZihDa3B0U29ydEl0ZW0pKSk7Ci0KLQlyZXR1 cm4gc2l6ZTsKKwkvKiBJbml0aWFsaXplIHBlci1iYWNrZW5kIGZpbGUgZmx1c2ggY29udGV4 dCAqLworCVdyaXRlYmFja0NvbnRleHRJbml0KCZCYWNrZW5kV3JpdGViYWNrQ29udGV4dCwK KwkJCQkJCSAmYmFja2VuZF9mbHVzaF9hZnRlcik7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfdGFibGUuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zl90YWJsZS5jCmluZGV4IGQwNGVmNzRiODUwLi5hYWY2NjM1MTIyMCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX3RhYmxlLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX3RhYmxlLmMKQEAgLTIyLDYgKzIyLDcg QEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAic3RvcmFnZS9idWZfaW50 ZXJuYWxzLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAKIC8qIGVudHJ5 IGZvciBidWZmZXIgbG9va3VwIGhhc2h0YWJsZSAqLwogdHlwZWRlZiBzdHJ1Y3QKQEAgLTMy LDM3ICszMyw0NCBAQCB0eXBlZGVmIHN0cnVjdAogCiBzdGF0aWMgSFRBQiAqU2hhcmVkQnVm SGFzaDsKIAorc3RhdGljIHZvaWQgQnVmVGFibGVTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsK IAotLyoKLSAqIEVzdGltYXRlIHNwYWNlIG5lZWRlZCBmb3IgbWFwcGluZyBoYXNodGFibGUK LSAqCQlzaXplIGlzIHRoZSBkZXNpcmVkIGhhc2ggdGFibGUgc2l6ZSAocG9zc2libHkgbW9y ZSB0aGFuIE5CdWZmZXJzKQotICovCi1TaXplCi1CdWZUYWJsZVNobWVtU2l6ZShpbnQgc2l6 ZSkKLXsKLQlyZXR1cm4gaGFzaF9lc3RpbWF0ZV9zaXplKHNpemUsIHNpemVvZihCdWZmZXJM b29rdXBFbnQpKTsKLX0KK2NvbnN0IFNobWVtQ2FsbGJhY2tzIEJ1ZlRhYmxlU2htZW1DYWxs YmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBCdWZUYWJsZVNobWVtUmVxdWVzdCwKKwkvKiBu byBzcGVjaWFsIGluaXRpYWxpemF0aW9uIG5lZWRlZCwgdGhlIGhhc2ggdGFibGUgd2lsbCBz dGFydCBlbXB0eSAqLworfTsKIAogLyoKLSAqIEluaXRpYWxpemUgc2htZW0gaGFzaCB0YWJs ZSBmb3IgbWFwcGluZyBidWZmZXJzCisgKiBSZWdpc3RlciBzaG1lbSBoYXNoIHRhYmxlIGZv ciBtYXBwaW5nIGJ1ZmZlcnMuCiAgKgkJc2l6ZSBpcyB0aGUgZGVzaXJlZCBoYXNoIHRhYmxl IHNpemUgKHBvc3NpYmx5IG1vcmUgdGhhbiBOQnVmZmVycykKICAqLwogdm9pZAotSW5pdEJ1 ZlRhYmxlKGludCBzaXplKQorQnVmVGFibGVTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogewot CUhBU0hDVEwJCWluZm87Ci0KLQkvKiBhc3N1bWUgbm8gbG9ja2luZyBpcyBuZWVkZWQgeWV0 ICovCi0KLQkvKiBCdWZmZXJUYWcgbWFwcyB0byBCdWZmZXIgKi8KLQlpbmZvLmtleXNpemUg PSBzaXplb2YoQnVmZmVyVGFnKTsKLQlpbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihCdWZmZXJM b29rdXBFbnQpOwotCWluZm8ubnVtX3BhcnRpdGlvbnMgPSBOVU1fQlVGRkVSX1BBUlRJVElP TlM7Ci0KLQlTaGFyZWRCdWZIYXNoID0gU2htZW1Jbml0SGFzaCgiU2hhcmVkIEJ1ZmZlciBM b29rdXAgVGFibGUiLAotCQkJCQkJCQkgIHNpemUsCi0JCQkJCQkJCSAgJmluZm8sCi0JCQkJ CQkJCSAgSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyB8IEhBU0hfUEFSVElUSU9OIHwgSEFTSF9G SVhFRF9TSVpFKTsKKwlzdGF0aWMgU2htZW1IYXNoRGVzYyBTaGFyZWRCdWZIYXNoRGVzYzsK KwlpbnQJCQlzaXplOworCisJLyoKKwkgKiBSZXF1ZXN0IHRoZSBzaGFyZWQgYnVmZmVyIGxv b2t1cCBoYXNodGFibGUuCisJICoKKwkgKiBTaW5jZSB3ZSBjYW4ndCB0b2xlcmF0ZSBydW5u aW5nIG91dCBvZiBsb29rdXAgdGFibGUgZW50cmllcywgd2UgbXVzdCBiZQorCSAqIHN1cmUg dG8gc3BlY2lmeSBhbiBhZGVxdWF0ZSB0YWJsZSBzaXplIGhlcmUuICBUaGUgbWF4aW11bSBz dGVhZHktc3RhdGUKKwkgKiB1c2FnZSBpcyBvZiBjb3Vyc2UgTkJ1ZmZlcnMgZW50cmllcywg YnV0IEJ1ZmZlckFsbG9jKCkgdHJpZXMgdG8gaW5zZXJ0CisJICogYSBuZXcgZW50cnkgYmVm b3JlIGRlbGV0aW5nIHRoZSBvbGQuICBJbiBwcmluY2lwbGUgdGhpcyBjb3VsZCBiZQorCSAq IGhhcHBlbmluZyBpbiBlYWNoIHBhcnRpdGlvbiBjb25jdXJyZW50bHksIHNvIHdlIGNvdWxk IG5lZWQgYXMgbWFueSBhcworCSAqIE5CdWZmZXJzICsgTlVNX0JVRkZFUl9QQVJUSVRJT05T IGVudHJpZXMuCisJICovCisJc2l6ZSA9IE5CdWZmZXJzICsgTlVNX0JVRkZFUl9QQVJUSVRJ T05TOworCisJU2htZW1SZXF1ZXN0SGFzaCgmU2hhcmVkQnVmSGFzaERlc2MsCisJCQkJCSAu bmFtZSA9ICJTaGFyZWQgQnVmZmVyIExvb2t1cCBUYWJsZSIsCisJCQkJCSAubmVsZW1zID0g c2l6ZSwKKwkJCQkJIC5wdHIgPSAmU2hhcmVkQnVmSGFzaCwKKwkJCQkJIC5oYXNoX2luZm8u a2V5c2l6ZSA9IHNpemVvZihCdWZmZXJUYWcpLAorCQkJCQkgLmhhc2hfaW5mby5lbnRyeXNp emUgPSBzaXplb2YoQnVmZmVyTG9va3VwRW50KSwKKwkJCQkJIC5oYXNoX2luZm8ubnVtX3Bh cnRpdGlvbnMgPSBOVU1fQlVGRkVSX1BBUlRJVElPTlMsCisJCQkJCSAuaGFzaF9mbGFncyA9 IEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMgfCBIQVNIX1BBUlRJVElPTiB8IEhBU0hfRklYRURf U0laRSwKKwkJKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2ZyZWVsaXN0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlz dC5jCmluZGV4IGI3Njg3ODM2MTg4Li4zMTNhNWUyOWY1NyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9mcmVlbGlzdC5jCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5jbHVkZSAic3Rv cmFnZS9idWZfaW50ZXJuYWxzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNp bmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisj aW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAKICNkZWZpbmUgSU5UX0FDQ0VTU19P TkNFKHZhcikJKChpbnQpKCooKHZvbGF0aWxlIGludCAqKSYodmFyKSkpKQogCkBAIC01Niw2 ICs1OCwxNCBAQCB0eXBlZGVmIHN0cnVjdAogLyogUG9pbnRlcnMgdG8gc2hhcmVkIHN0YXRl ICovCiBzdGF0aWMgQnVmZmVyU3RyYXRlZ3lDb250cm9sICpTdHJhdGVneUNvbnRyb2wgPSBO VUxMOwogCitzdGF0aWMgdm9pZCBTdHJhdGVneUN0bFNobWVtUmVxdWVzdCh2b2lkICphcmcp Oworc3RhdGljIHZvaWQgU3RyYXRlZ3lDdGxTaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29u c3QgU2htZW1DYWxsYmFja3MgU3RyYXRlZ3lDdGxTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVx dWVzdF9mbiA9IFN0cmF0ZWd5Q3RsU2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gU3RyYXRl Z3lDdGxTaG1lbUluaXQsCit9OworCiAvKgogICogUHJpdmF0ZSAobm9uLXNoYXJlZCkgc3Rh dGUgZm9yIG1hbmFnaW5nIGEgcmluZyBvZiBzaGFyZWQgYnVmZmVycyB0byByZS11c2UuCiAg KiBUaGlzIGlzIGN1cnJlbnRseSB0aGUgb25seSBraW5kIG9mIEJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IG9iamVjdCwgYnV0IHNvbWVkYXkKQEAgLTM2OSw4MCArMzc5LDM4IEBAIFN0cmF0ZWd5 Tm90aWZ5QmdXcml0ZXIoaW50IGJnd3Byb2NubykKIAogCiAvKgotICogU3RyYXRlZ3lTaG1l bVNpemUKLSAqCi0gKiBlc3RpbWF0ZSB0aGUgc2l6ZSBvZiBzaGFyZWQgbWVtb3J5IHVzZWQg YnkgdGhlIGZyZWVsaXN0LXJlbGF0ZWQgc3RydWN0dXJlcy4KLSAqCi0gKiBOb3RlOiBmb3Ig c29tZXdoYXQgaGlzdG9yaWNhbCByZWFzb25zLCB0aGUgYnVmZmVyIGxvb2t1cCBoYXNodGFi bGUgc2l6ZQotICogaXMgYWxzbyBkZXRlcm1pbmVkIGhlcmUuCisgKiBTdHJhdGVneUN0bFNo bWVtUmVxdWVzdCAtLSByZXF1ZXN0IHNoYXJlZCBtZW1vcnkgZm9yIHRoZSBidWZmZXIKKyAq CQljYWNoZSByZXBsYWNlbWVudCBzdHJhdGVneS4KICAqLwotU2l6ZQotU3RyYXRlZ3lTaG1l bVNpemUodm9pZCkKK3N0YXRpYyB2b2lkCitTdHJhdGVneUN0bFNobWVtUmVxdWVzdCh2b2lk ICphcmcpCiB7Ci0JU2l6ZQkJc2l6ZSA9IDA7Ci0KLQkvKiBzaXplIG9mIGxvb2t1cCBoYXNo IHRhYmxlIC4uLiBzZWUgY29tbWVudCBpbiBTdHJhdGVneUluaXRpYWxpemUgKi8KLQlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgQnVmVGFibGVTaG1lbVNpemUoTkJ1ZmZlcnMgKyBOVU1fQlVG RkVSX1BBUlRJVElPTlMpKTsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIFN0cmF0ZWd5Q3Rs U2htZW1EZXNjOwogCi0JLyogc2l6ZSBvZiB0aGUgc2hhcmVkIHJlcGxhY2VtZW50IHN0cmF0 ZWd5IGNvbnRyb2wgYmxvY2sgKi8KLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgTUFYQUxJR04o c2l6ZW9mKEJ1ZmZlclN0cmF0ZWd5Q29udHJvbCkpKTsKLQotCXJldHVybiBzaXplOworCVNo bWVtUmVxdWVzdFN0cnVjdCgmU3RyYXRlZ3lDdGxTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1l ID0gIkJ1ZmZlciBTdHJhdGVneSBTdGF0dXMiLAorCQkJCQkgICAuc2l6ZSA9IHNpemVvZihC dWZmZXJTdHJhdGVneUNvbnRyb2wpLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZTdHJh dGVneUNvbnRyb2wKKwkJKTsKIH0KIAogLyoKLSAqIFN0cmF0ZWd5SW5pdGlhbGl6ZSAtLSBp bml0aWFsaXplIHRoZSBidWZmZXIgY2FjaGUgcmVwbGFjZW1lbnQKLSAqCQlzdHJhdGVneS4K LSAqCi0gKiBBc3N1bWVzOiBBbGwgb2YgdGhlIGJ1ZmZlcnMgYXJlIGFscmVhZHkgYnVpbHQg aW50byBhIGxpbmtlZCBsaXN0LgotICoJCU9ubHkgY2FsbGVkIGJ5IHBvc3RtYXN0ZXIgYW5k IG9ubHkgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICogU3RyYXRlZ3lDdGxTaG1lbUluaXQg LS0gaW5pdGlhbGl6ZSB0aGUgYnVmZmVyIGNhY2hlIHJlcGxhY2VtZW50IHN0cmF0ZWd5Lgog ICovCi12b2lkCi1TdHJhdGVneUluaXRpYWxpemUoYm9vbCBpbml0KQorc3RhdGljIHZvaWQK K1N0cmF0ZWd5Q3RsU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsKLQot CS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGJ1ZmZlciBsb29rdXAgaGFzaHRhYmxl LgotCSAqCi0JICogU2luY2Ugd2UgY2FuJ3QgdG9sZXJhdGUgcnVubmluZyBvdXQgb2YgbG9v a3VwIHRhYmxlIGVudHJpZXMsIHdlIG11c3QgYmUKLQkgKiBzdXJlIHRvIHNwZWNpZnkgYW4g YWRlcXVhdGUgdGFibGUgc2l6ZSBoZXJlLiAgVGhlIG1heGltdW0gc3RlYWR5LXN0YXRlCi0J ICogdXNhZ2UgaXMgb2YgY291cnNlIE5CdWZmZXJzIGVudHJpZXMsIGJ1dCBCdWZmZXJBbGxv YygpIHRyaWVzIHRvIGluc2VydAotCSAqIGEgbmV3IGVudHJ5IGJlZm9yZSBkZWxldGluZyB0 aGUgb2xkLiAgSW4gcHJpbmNpcGxlIHRoaXMgY291bGQgYmUKLQkgKiBoYXBwZW5pbmcgaW4g ZWFjaCBwYXJ0aXRpb24gY29uY3VycmVudGx5LCBzbyB3ZSBjb3VsZCBuZWVkIGFzIG1hbnkg YXMKLQkgKiBOQnVmZmVycyArIE5VTV9CVUZGRVJfUEFSVElUSU9OUyBlbnRyaWVzLgotCSAq LwotCUluaXRCdWZUYWJsZShOQnVmZmVycyArIE5VTV9CVUZGRVJfUEFSVElUSU9OUyk7Ci0K LQkvKgotCSAqIEdldCBvciBjcmVhdGUgdGhlIHNoYXJlZCBzdHJhdGVneSBjb250cm9sIGJs b2NrCi0JICovCi0JU3RyYXRlZ3lDb250cm9sID0gKEJ1ZmZlclN0cmF0ZWd5Q29udHJvbCAq KQotCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBTdHJhdGVneSBTdGF0dXMiLAotCQkJCQkJ c2l6ZW9mKEJ1ZmZlclN0cmF0ZWd5Q29udHJvbCksCi0JCQkJCQkmZm91bmQpOwotCi0JaWYg KCFmb3VuZCkKLQl7Ci0JCS8qCi0JCSAqIE9ubHkgZG9uZSBvbmNlLCB1c3VhbGx5IGluIHBv c3RtYXN0ZXIKLQkJICovCi0JCUFzc2VydChpbml0KTsKKwlTcGluTG9ja0luaXQoJlN0cmF0 ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2spOwogCi0JCVNwaW5Mb2NrSW5pdCgm U3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7CisJLyogSW5pdGlhbGl6 ZSB0aGUgY2xvY2stc3dlZXAgcG9pbnRlciAqLworCXBnX2F0b21pY19pbml0X3UzMigmU3Ry YXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyLCAwKTsKIAotCQkvKiBJbml0aWFsaXpl IHRoZSBjbG9jay1zd2VlcCBwb2ludGVyICovCi0JCXBnX2F0b21pY19pbml0X3UzMigmU3Ry YXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyLCAwKTsKKwkvKiBDbGVhciBzdGF0aXN0 aWNzICovCisJU3RyYXRlZ3lDb250cm9sLT5jb21wbGV0ZVBhc3NlcyA9IDA7CisJcGdfYXRv bWljX2luaXRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm51bUJ1ZmZlckFsbG9jcywgMCk7CiAK LQkJLyogQ2xlYXIgc3RhdGlzdGljcyAqLwotCQlTdHJhdGVneUNvbnRyb2wtPmNvbXBsZXRl UGFzc2VzID0gMDsKLQkJcGdfYXRvbWljX2luaXRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm51 bUJ1ZmZlckFsbG9jcywgMCk7Ci0KLQkJLyogTm8gcGVuZGluZyBub3RpZmljYXRpb24gKi8K LQkJU3RyYXRlZ3lDb250cm9sLT5iZ3dwcm9jbm8gPSAtMTsKLQl9Ci0JZWxzZQotCQlBc3Nl cnQoIWluaXQpOworCS8qIE5vIHBlbmRpbmcgbm90aWZpY2F0aW9uICovCisJU3RyYXRlZ3lD b250cm9sLT5iZ3dwcm9jbm8gPSAtMTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9pcGNpLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMK aW5kZXggYmQ2N2Y4MWNlYTMuLmVjYzUzODhhZDQ3IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9pcGNpLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBj aS5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2FscmVjZWl2 ZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxzZW5kZXIuaCIKICNpbmNsdWRlICJz dG9yYWdlL2Fpb19zdWJzeXMuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvZHNtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNs dWRlICJzdG9yYWdlL3BnX3NobWVtLmgiCkBAIC05OSw3ICs5OCw2IEBAIENhbGN1bGF0ZVNo bWVtU2l6ZSh2b2lkKQogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaG1lbUdldFJlcXVlc3Rl ZFNpemUoKSk7CiAKIAkvKiBsZWdhY3kgc3Vic3lzdGVtcyAqLwotCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBCdWZmZXJNYW5hZ2VyU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShz aXplLCBMb2NrTWFuYWdlclNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwg WExvZ1ByZWZldGNoU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBYTE9H U2htZW1TaXplKCkpOwpAQCAtMjYzLDcgKzI2MSw2IEBAIENyZWF0ZU9yQXR0YWNoU2htZW1T dHJ1Y3RzKHZvaWQpCiAJWExPR1NobWVtSW5pdCgpOwogCVhMb2dQcmVmZXRjaFNobWVtSW5p dCgpOwogCVhMb2dSZWNvdmVyeVNobWVtSW5pdCgpOwotCUJ1ZmZlck1hbmFnZXJTaG1lbUlu aXQoKTsKIAogCS8qCiAJICogU2V0IHVwIGxvY2sgbWFuYWdlcgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdl L2J1Zl9pbnRlcm5hbHMuaAppbmRleCBhZDFiN2IyMjE2YS4uODk2MTVhMjU0YTMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCisrKyBiL3NyYy9p bmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCkBAIC01ODcsMTIgKzU4Nyw3IEBAIGV4 dGVybiBib29sIFN0cmF0ZWd5UmVqZWN0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0 cmF0ZWd5LAogZXh0ZXJuIGludAlTdHJhdGVneVN5bmNTdGFydCh1aW50MzIgKmNvbXBsZXRl X3Bhc3NlcywgdWludDMyICpudW1fYnVmX2FsbG9jKTsKIGV4dGVybiB2b2lkIFN0cmF0ZWd5 Tm90aWZ5QmdXcml0ZXIoaW50IGJnd3Byb2Nubyk7CiAKLWV4dGVybiBTaXplIFN0cmF0ZWd5 U2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgU3RyYXRlZ3lJbml0aWFsaXplKGJvb2wg aW5pdCk7Ci0KIC8qIGJ1Zl90YWJsZS5jICovCi1leHRlcm4gU2l6ZSBCdWZUYWJsZVNobWVt U2l6ZShpbnQgc2l6ZSk7Ci1leHRlcm4gdm9pZCBJbml0QnVmVGFibGUoaW50IHNpemUpOwog ZXh0ZXJuIHVpbnQzMiBCdWZUYWJsZUhhc2hDb2RlKEJ1ZmZlclRhZyAqdGFnUHRyKTsKIGV4 dGVybiBpbnQJQnVmVGFibGVMb29rdXAoQnVmZmVyVGFnICp0YWdQdHIsIHVpbnQzMiBoYXNo Y29kZSk7CiBleHRlcm4gaW50CUJ1ZlRhYmxlSW5zZXJ0KEJ1ZmZlclRhZyAqdGFnUHRyLCB1 aW50MzIgaGFzaGNvZGUsIGludCBidWZfaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9idWZtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXgg YWE2MWEzOWQ5ZTYuLjY4MzdiMzVmYzZkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9y YWdlL2J1Zm1nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKQEAgLTM3 MSwxMCArMzcxLDYgQEAgZXh0ZXJuIHZvaWQgTWFya0RpcnR5QWxsVW5waW5uZWRCdWZmZXJz KGludDMyICpidWZmZXJzX2RpcnRpZWQsCiAJCQkJCQkJCQkJaW50MzIgKmJ1ZmZlcnNfYWxy ZWFkeV9kaXJ0eSwKIAkJCQkJCQkJCQlpbnQzMiAqYnVmZmVyc19za2lwcGVkKTsKIAotLyog aW4gYnVmX2luaXQuYyAqLwotZXh0ZXJuIHZvaWQgQnVmZmVyTWFuYWdlclNobWVtSW5pdCh2 b2lkKTsKLWV4dGVybiBTaXplIEJ1ZmZlck1hbmFnZXJTaG1lbVNpemUodm9pZCk7Ci0KIC8q IGluIGxvY2FsYnVmLmMgKi8KIGV4dGVybiB2b2lkIEF0UHJvY0V4aXRfTG9jYWxCdWZmZXJz KHZvaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxp c3QuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCmluZGV4IGI0Mzg3 OTRkNDZkLi5kOGUxMTc1NmE2MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9z dWJzeXN0ZW1saXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0 LmgKQEAgLTM2LDYgKzM2LDkgQEAgUEdfU0hNRU1fU1VCU1lTVEVNKENMT0dTaG1lbUNhbGxi YWNrcykKIFBHX1NITUVNX1NVQlNZU1RFTShDb21taXRUc1NobWVtQ2FsbGJhY2tzKQogUEdf U0hNRU1fU1VCU1lTVEVNKFNVQlRSQU5TU2htZW1DYWxsYmFja3MpCiBQR19TSE1FTV9TVUJT WVNURU0oTXVsdGlYYWN0U2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oQnVm ZmVyTWFuYWdlclNobWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKFN0cmF0ZWd5 Q3RsU2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oQnVmVGFibGVTaG1lbUNh bGxiYWNrcykKIAogLyogcHJlZGljYXRlIGxvY2sgbWFuYWdlciAqLwogUEdfU0hNRU1fU1VC U1lTVEVNKFByZWRpY2F0ZUxvY2tTaG1lbUNhbGxiYWNrcykKLS0gCjIuNDcuMwoK --------------ilO2of90F4UvkC4IFxh0ppYz Content-Type: text/x-patch; charset=UTF-8; name="0014-Convert-all-remaining-subsystems-to-use-the-new-API.patch" Content-Disposition: attachment; filename*0="0014-Convert-all-remaining-subsystems-to-use-the-new-API.pat"; filename*1="ch" Content-Transfer-Encoding: base64 RnJvbSAwZmNjYTQzNmQ2OTQxYTI1MDgxNmI5Yzc3N2FhN2M1ZjlkMzI0MGRkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMTk6MDU6MjYgKzAyMDAK U3ViamVjdDogW1BBVENIIDE0LzE0XSBDb252ZXJ0IGFsbCByZW1haW5pbmcgc3Vic3lzdGVt cyB0byB1c2UgdGhlIG5ldyBBUEkKCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9z eW5jc2Nhbi5jICAgICAgICAgIHwgIDc5ICsrKystLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHV0aWxzLmMgICAgICAgICAgfCAgNTYgKysrLS0tCiBzcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS90d29waGFzZS5jICAgICAgICAgfCAgNzcgKysrLS0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jICAgICAgICAgICAgIHwgIDg2ICsrKystLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJlZmV0Y2hlci5jICAgfCAgNTQg KystLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jICAgICB8 ICAzNiArKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nd2FpdC5jICAgICAg ICAgfCAgNTIgKystLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jICAg ICAgICAgICB8ICA4MSArKysrLS0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtl ci5jICAgICAgICAgICAgIHwgMTA3ICsrKysrLS0tLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvY2hlY2twb2ludGVyLmMgICAgICAgICB8ICA1OCArKystLS0KIHNyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvZGF0YWNoZWNrc3VtX3N0YXRlLmMgICB8ICA0MiArKy0tCiBzcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3BnYXJjaC5jICAgICAgICAgICAgICAgfCAgNDYgKysrLS0KIHNyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jICAgICAgICB8ICA2MyArKystLS0K IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYyAgICB8ICA1OCAr KystLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGN0bC5jICB8 ICAzMCArLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMgICAg ICB8ICA2MSArKystLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5 bmMuYyAgICB8ICA0NCArKy0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMgICAg ICAgICAgICAgICAgfCAgNjYgKysrLS0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxy ZWNlaXZlcmZ1bmNzLmMgICAgfCAgNTIgKystLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3dhbHNlbmRlci5jICAgICAgICAgICB8ICA2MSArKystLS0KIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL2lwY2kuYyAgICAgICAgICAgICAgICB8IDEyNCArLS0tLS0tLS0tLS0KIHNyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMgICAgICAgICAgICAgICB8IDExNSArKysrKy0t LS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFja2VuZF9zdGF0dXMuYyAgIHwg MTkwICsrKysrKysrLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdz dGF0X3NobWVtLmMgICAgIHwgMTYxICsrKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRp bHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jICAgICAgIHwgIDkwICsrKystLS0tLQogc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9pbmplY3Rpb25fcG9pbnQuYyAgICAgIHwgIDYwICsrKy0tLQog c3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oICAgICAgICAgICAgICAgICAgIHwgICAyIC0K IHNyYy9pbmNsdWRlL2FjY2Vzcy9zeW5jc2Nhbi5oICAgICAgICAgICAgICAgICB8ICAgMiAt CiBzcmMvaW5jbHVkZS9hY2Nlc3MvdHdvcGhhc2UuaCAgICAgICAgICAgICAgICAgfCAgIDMg LQogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaCAgICAgICAgICAgICAgICAgICAgIHwgICAy IC0KIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncHJlZmV0Y2hlci5oICAgICAgICAgICB8ICAg MyAtCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5LmggICAgICAgICAgICAgfCAg IDMgLQogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2d3YWl0LmggICAgICAgICAgICAgICAgIHwg ICAyIC0KIHNyYy9pbmNsdWRlL3Bnc3RhdC5oICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgNCAtCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0uaCAgICAgICAgICAg fCAgIDQgLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCAg IHwgICAyIC0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuaCAgICAgICAgICAg ICB8ICAgMyAtCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2RhdGFjaGVja3N1bV9zdGF0ZS5o ICAgfCAgIDQgLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9wZ2FyY2guaCAgICAgICAgICAg ICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5oICAg ICAgICB8ICAgMiAtCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsY3RsLmggICAg ICAgICAgfCAgIDIgLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVy LmggICAgIHwgICAzIC0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oICAgICAg ICAgICAgICB8ICAgNCAtCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90LmggICAgICAg ICAgICAgICAgfCAgIDQgLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdHN5bmMuaCAg ICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVy LmggICAgICAgICB8ICAgMiAtCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxzZW5kZXIu aCAgICAgICAgICAgfCAgIDIgLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmggICAgICAg ICAgICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlz dC5oICAgICAgICAgICB8ICAyNyArKysKIHNyYy9pbmNsdWRlL3V0aWxzL2JhY2tlbmRfc3Rh dHVzLmggICAgICAgICAgICB8ICAgOCAtCiBzcmMvaW5jbHVkZS91dGlscy9pbmplY3Rpb25f cG9pbnQuaCAgICAgICAgICAgfCAgIDMgLQogc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVu dC5oICAgICAgICAgICAgICAgIHwgICAyIC0KIC4uLi9pbmplY3Rpb25fcG9pbnRzL2luamVj dGlvbl9wb2ludHMuYyAgICAgICB8ICA2MCArKy0tLS0KIHNyYy90ZXN0L21vZHVsZXMvdGVz dF9haW8vdGVzdF9haW8uYyAgICAgICAgICB8IDEwOCArKysrKy0tLS0tCiA1NCBmaWxlcyBj aGFuZ2VkLCAxMDIwIGluc2VydGlvbnMoKyksIDExOTYgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9zeW5jc2Nhbi5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2NvbW1vbi9zeW5jc2Nhbi5jCmluZGV4IDZmY2ZjYjBlNTYwLi4yNTUyMjI4 NGZhYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9zeW5jc2Nhbi5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vc3luY3NjYW4uYwpAQCAtNTAsNiAr NTAsNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbHds b2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uv c3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKQEAgLTExMSw2ICsx MTIsMTQgQEAgdHlwZWRlZiBzdHJ1Y3Qgc3Nfc2Nhbl9sb2NhdGlvbnNfdAogI2RlZmluZSBT aXplT2ZTY2FuTG9jYXRpb25zKE4pIFwKIAkob2Zmc2V0b2Yoc3Nfc2Nhbl9sb2NhdGlvbnNf dCwgaXRlbXMpICsgKE4pICogc2l6ZW9mKHNzX2xydV9pdGVtX3QpKQogCitzdGF0aWMgdm9p ZCBTeW5jU2NhblNobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgU3luY1Nj YW5TaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgU3luY1Nj YW5TaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IFN5bmNTY2FuU2htZW1SZXF1 ZXN0LAorCS5pbml0X2ZuID0gU3luY1NjYW5TaG1lbUluaXQsCit9OworCiAvKiBQb2ludGVy IHRvIHN0cnVjdCBpbiBzaGFyZWQgbWVtb3J5ICovCiBzdGF0aWMgc3Nfc2Nhbl9sb2NhdGlv bnNfdCAqc2Nhbl9sb2NhdGlvbnM7CiAKQEAgLTEyMCw1OCArMTI5LDUwIEBAIHN0YXRpYyBC bG9ja051bWJlciBzc19zZWFyY2goUmVsRmlsZUxvY2F0b3IgcmVsZmlsZWxvY2F0b3IsCiAK IAogLyoKLSAqIFN5bmNTY2FuU2htZW1TaXplIC0tLSByZXBvcnQgYW1vdW50IG9mIHNoYXJl ZCBtZW1vcnkgc3BhY2UgbmVlZGVkCisgKiBTeW5jU2NhblNobWVtUmVxdWVzdCAtLS0gcmVn aXN0ZXIgdGhpcyBtb2R1bGUncyBzaGFyZWQgbWVtb3J5CiAgKi8KLVNpemUKLVN5bmNTY2Fu U2htZW1TaXplKHZvaWQpCitzdGF0aWMgdm9pZAorU3luY1NjYW5TaG1lbVJlcXVlc3Qodm9p ZCAqYXJnKQogewotCXJldHVybiBTaXplT2ZTY2FuTG9jYXRpb25zKFNZTkNfU0NBTl9ORUxF TSk7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBTeW5jU2NhblNobWVtRGVzYzsKKworCVNo bWVtUmVxdWVzdFN0cnVjdCgmU3luY1NjYW5TaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0g IlN5bmMgU2NhbiBMb2NhdGlvbnMgTGlzdCIsCisJCQkJCSAgIC5zaXplID0gU2l6ZU9mU2Nh bkxvY2F0aW9ucyhTWU5DX1NDQU5fTkVMRU0pLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiop ICZzY2FuX2xvY2F0aW9ucywKKwkJKTsKIH0KIAogLyoKICAqIFN5bmNTY2FuU2htZW1Jbml0 IC0tLSBpbml0aWFsaXplIHRoaXMgbW9kdWxlJ3Mgc2hhcmVkIG1lbW9yeQogICovCi12b2lk Ci1TeW5jU2NhblNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK1N5bmNTY2FuU2htZW1J bml0KHZvaWQgKmFyZykKIHsKIAlpbnQJCQlpOwotCWJvb2wJCWZvdW5kOwogCi0Jc2Nhbl9s b2NhdGlvbnMgPSAoc3Nfc2Nhbl9sb2NhdGlvbnNfdCAqKQotCQlTaG1lbUluaXRTdHJ1Y3Qo IlN5bmMgU2NhbiBMb2NhdGlvbnMgTGlzdCIsCi0JCQkJCQlTaXplT2ZTY2FuTG9jYXRpb25z KFNZTkNfU0NBTl9ORUxFTSksCi0JCQkJCQkmZm91bmQpOworCXNjYW5fbG9jYXRpb25zLT5o ZWFkID0gJnNjYW5fbG9jYXRpb25zLT5pdGVtc1swXTsKKwlzY2FuX2xvY2F0aW9ucy0+dGFp bCA9ICZzY2FuX2xvY2F0aW9ucy0+aXRlbXNbU1lOQ19TQ0FOX05FTEVNIC0gMV07CiAKLQlp ZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQorCWZvciAoaSA9IDA7IGkgPCBTWU5DX1NDQU5fTkVM RU07IGkrKykKIAl7Ci0JCS8qIEluaXRpYWxpemUgc2hhcmVkIG1lbW9yeSBhcmVhICovCi0J CUFzc2VydCghZm91bmQpOwotCi0JCXNjYW5fbG9jYXRpb25zLT5oZWFkID0gJnNjYW5fbG9j YXRpb25zLT5pdGVtc1swXTsKLQkJc2Nhbl9sb2NhdGlvbnMtPnRhaWwgPSAmc2Nhbl9sb2Nh dGlvbnMtPml0ZW1zW1NZTkNfU0NBTl9ORUxFTSAtIDFdOwotCi0JCWZvciAoaSA9IDA7IGkg PCBTWU5DX1NDQU5fTkVMRU07IGkrKykKLQkJewotCQkJc3NfbHJ1X2l0ZW1fdCAqaXRlbSA9 ICZzY2FuX2xvY2F0aW9ucy0+aXRlbXNbaV07Ci0KLQkJCS8qCi0JCQkgKiBJbml0aWFsaXpl IGFsbCBzbG90cyB3aXRoIGludmFsaWQgdmFsdWVzLiBBcyBzY2FucyBhcmUgc3RhcnRlZCwK LQkJCSAqIHRoZXNlIGludmFsaWQgZW50cmllcyB3aWxsIGZhbGwgb2ZmIHRoZSBMUlUgbGlz dCBhbmQgZ2V0Ci0JCQkgKiByZXBsYWNlZCB3aXRoIHJlYWwgZW50cmllcy4KLQkJCSAqLwot CQkJaXRlbS0+bG9jYXRpb24ucmVsZmlsZWxvY2F0b3Iuc3BjT2lkID0gSW52YWxpZE9pZDsK LQkJCWl0ZW0tPmxvY2F0aW9uLnJlbGZpbGVsb2NhdG9yLmRiT2lkID0gSW52YWxpZE9pZDsK LQkJCWl0ZW0tPmxvY2F0aW9uLnJlbGZpbGVsb2NhdG9yLnJlbE51bWJlciA9IEludmFsaWRS ZWxGaWxlTnVtYmVyOwotCQkJaXRlbS0+bG9jYXRpb24ubG9jYXRpb24gPSBJbnZhbGlkQmxv Y2tOdW1iZXI7Ci0KLQkJCWl0ZW0tPnByZXYgPSAoaSA+IDApID8KLQkJCQkoJnNjYW5fbG9j YXRpb25zLT5pdGVtc1tpIC0gMV0pIDogTlVMTDsKLQkJCWl0ZW0tPm5leHQgPSAoaSA8IFNZ TkNfU0NBTl9ORUxFTSAtIDEpID8KLQkJCQkoJnNjYW5fbG9jYXRpb25zLT5pdGVtc1tpICsg MV0pIDogTlVMTDsKLQkJfQorCQlzc19scnVfaXRlbV90ICppdGVtID0gJnNjYW5fbG9jYXRp b25zLT5pdGVtc1tpXTsKKworCQkvKgorCQkgKiBJbml0aWFsaXplIGFsbCBzbG90cyB3aXRo IGludmFsaWQgdmFsdWVzLiBBcyBzY2FucyBhcmUgc3RhcnRlZCwKKwkJICogdGhlc2UgaW52 YWxpZCBlbnRyaWVzIHdpbGwgZmFsbCBvZmYgdGhlIExSVSBsaXN0IGFuZCBnZXQgcmVwbGFj ZWQKKwkJICogd2l0aCByZWFsIGVudHJpZXMuCisJCSAqLworCQlpdGVtLT5sb2NhdGlvbi5y ZWxmaWxlbG9jYXRvci5zcGNPaWQgPSBJbnZhbGlkT2lkOworCQlpdGVtLT5sb2NhdGlvbi5y ZWxmaWxlbG9jYXRvci5kYk9pZCA9IEludmFsaWRPaWQ7CisJCWl0ZW0tPmxvY2F0aW9uLnJl bGZpbGVsb2NhdG9yLnJlbE51bWJlciA9IEludmFsaWRSZWxGaWxlTnVtYmVyOworCQlpdGVt LT5sb2NhdGlvbi5sb2NhdGlvbiA9IEludmFsaWRCbG9ja051bWJlcjsKKworCQlpdGVtLT5w cmV2ID0gKGkgPiAwKSA/CisJCQkoJnNjYW5fbG9jYXRpb25zLT5pdGVtc1tpIC0gMV0pIDog TlVMTDsKKwkJaXRlbS0+bmV4dCA9IChpIDwgU1lOQ19TQ0FOX05FTEVNIC0gMSkgPworCQkJ KCZzY2FuX2xvY2F0aW9ucy0+aXRlbXNbaSArIDFdKSA6IE5VTEw7CiAJfQotCWVsc2UKLQkJ QXNzZXJ0KGZvdW5kKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0dXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRp bHMuYwppbmRleCA3MzJiYzc1MGM5ZS4uZWNkNGZiNGRmNmYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHV0aWxzLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJsaWIv cXVuaXF1ZS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv bHdsb2NrLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAi dXRpbHMvZGF0dW0uaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRl ICJ1dGlscy9yZWwuaCIKQEAgLTQxNyw2ICs0MTgsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRW YWNJbmZvCiAKIHN0YXRpYyBCVFZhY0luZm8gKmJ0dmFjaW5mbzsKIAorc3RhdGljIHZvaWQg QlRyZWVTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIEJUcmVlU2htZW1J bml0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIEJUcmVlU2htZW1DYWxs YmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBCVHJlZVNobWVtUmVxdWVzdCwKKwkuaW5pdF9m biA9IEJUcmVlU2htZW1Jbml0LAorfTsKIAogLyoKICAqIF9idF92YWN1dW1fY3ljbGVpZCAt LS0gZ2V0IHRoZSBhY3RpdmUgdmFjdXVtIGN5Y2xlIElEIGZvciBhbiBpbmRleCwKQEAgLTU1 Myw0NyArNTYxLDM5IEBAIF9idF9lbmRfdmFjdXVtX2NhbGxiYWNrKGludCBjb2RlLCBEYXR1 bSBhcmcpCiB9CiAKIC8qCi0gKiBCVHJlZVNobWVtU2l6ZSAtLS0gcmVwb3J0IGFtb3VudCBv ZiBzaGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRlZAorICogQlRyZWVTaG1lbVJlcXVlc3QgLS0t IHJlZ2lzdGVyIHRoaXMgbW9kdWxlJ3Mgc2hhcmVkIG1lbW9yeQogICovCi1TaXplCi1CVHJl ZVNobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK0JUcmVlU2htZW1SZXF1ZXN0KHZvaWQg KmFyZykKIHsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEJUcmVlU2htZW1EZXNjOwogCVNp emUJCXNpemU7CiAKIAlzaXplID0gb2Zmc2V0b2YoQlRWYWNJbmZvLCB2YWN1dW1zKTsKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoTWF4QmFja2VuZHMsIHNpemVvZihCVE9u ZVZhY0luZm8pKSk7Ci0JcmV0dXJuIHNpemU7CisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkJU cmVlU2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJCVHJlZSBWYWN1dW0gU3RhdGUiLAor CQkJCQkgICAuc2l6ZSA9IHNpemUsCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJmJ0dmFj aW5mbywKKwkJKTsKIH0KIAogLyoKICAqIEJUcmVlU2htZW1Jbml0IC0tLSBpbml0aWFsaXpl IHRoaXMgbW9kdWxlJ3Mgc2hhcmVkIG1lbW9yeQogICovCi12b2lkCi1CVHJlZVNobWVtSW5p dCh2b2lkKQorc3RhdGljIHZvaWQKK0JUcmVlU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQli b29sCQlmb3VuZDsKLQotCWJ0dmFjaW5mbyA9IChCVFZhY0luZm8gKikgU2htZW1Jbml0U3Ry dWN0KCJCVHJlZSBWYWN1dW0gU3RhdGUiLAotCQkJCQkJCQkJCQkgIEJUcmVlU2htZW1TaXpl KCksCi0JCQkJCQkJCQkJCSAgJmZvdW5kKTsKLQotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIp Ci0JewotCQkvKiBJbml0aWFsaXplIHNoYXJlZCBtZW1vcnkgYXJlYSAqLwotCQlBc3NlcnQo IWZvdW5kKTsKLQotCQkvKgotCQkgKiBJdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hhdCB0 aGUgY3ljbGUgY291bnRlciBzdGFydHMgYXQsIGJ1dAotCQkgKiBoYXZpbmcgaXQgYWx3YXlz IHN0YXJ0IHRoZSBzYW1lIGRvZXNuJ3Qgc2VlbSBnb29kLiAgU2VlZCB3aXRoCi0JCSAqIGxv dy1vcmRlciBiaXRzIG9mIHRpbWUoKSBpbnN0ZWFkLgotCQkgKi8KLQkJYnR2YWNpbmZvLT5j eWNsZV9jdHIgPSAoQlRDeWNsZUlkKSB0aW1lKE5VTEwpOworCS8qCisJICogSXQgZG9lc24n dCByZWFsbHkgbWF0dGVyIHdoYXQgdGhlIGN5Y2xlIGNvdW50ZXIgc3RhcnRzIGF0LCBidXQg aGF2aW5nCisJICogaXQgYWx3YXlzIHN0YXJ0IHRoZSBzYW1lIGRvZXNuJ3Qgc2VlbSBnb29k LiAgU2VlZCB3aXRoIGxvdy1vcmRlciBiaXRzCisJICogb2YgdGltZSgpIGluc3RlYWQuCisJ ICovCisJYnR2YWNpbmZvLT5jeWNsZV9jdHIgPSAoQlRDeWNsZUlkKSB0aW1lKE5VTEwpOwog Ci0JCWJ0dmFjaW5mby0+bnVtX3ZhY3V1bXMgPSAwOwotCQlidHZhY2luZm8tPm1heF92YWN1 dW1zID0gTWF4QmFja2VuZHM7Ci0JfQotCWVsc2UKLQkJQXNzZXJ0KGZvdW5kKTsKKwlidHZh Y2luZm8tPm51bV92YWN1dW1zID0gMDsKKwlidHZhY2luZm8tPm1heF92YWN1dW1zID0gTWF4 QmFja2VuZHM7CiB9CiAKIGJ5dGVhICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3R3b3BoYXNlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29w aGFzZS5jCmluZGV4IGFiMWNiZDY3YmFjLi5mMDdjZGFlMDMyNSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCkBAIC0xMDIsNiArMTAyLDcgQEAKICNpbmNsdWRl ICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0 ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9p bmplY3Rpb25fcG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgpAQCAtMTg3 LDggKzE4OCwxNiBAQCB0eXBlZGVmIHN0cnVjdCBUd29QaGFzZVN0YXRlRGF0YQogCUdsb2Jh bFRyYW5zYWN0aW9uIHByZXBYYWN0c1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwogfSBUd29Q aGFzZVN0YXRlRGF0YTsKIAorc3RhdGljIHZvaWQgVHdvUGhhc2VTaG1lbVJlcXVlc3Qodm9p ZCAqYXJnKTsKK3N0YXRpYyB2b2lkIFR3b1BoYXNlU2htZW1Jbml0KHZvaWQgKmFyZyk7CisK IHN0YXRpYyBUd29QaGFzZVN0YXRlRGF0YSAqVHdvUGhhc2VTdGF0ZTsKIAorY29uc3QgU2ht ZW1DYWxsYmFja3MgVHdvUGhhc2VTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9 IFR3b1BoYXNlU2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gVHdvUGhhc2VTaG1lbUluaXQs Cit9OworCiAvKgogICogR2xvYmFsIHRyYW5zYWN0aW9uIGVudHJ5IGN1cnJlbnRseSBsb2Nr ZWQgYnkgdXMsIGlmIGFueS4gIE5vdGUgdGhhdCBhbnkKICAqIGFjY2VzcyB0byB0aGUgZW50 cnkgcG9pbnRlZCB0byBieSB0aGlzIHZhcmlhYmxlIG11c3QgYmUgcHJvdGVjdGVkIGJ5CkBA IC0yMzQsMTEgKzI0MywxMiBAQCBzdGF0aWMgdm9pZCBSZW1vdmVUd29QaGFzZUZpbGUoRnVs bFRyYW5zYWN0aW9uSWQgZnhpZCwgYm9vbCBnaXZlV2FybmluZyk7CiBzdGF0aWMgdm9pZCBS ZWNyZWF0ZVR3b1BoYXNlRmlsZShGdWxsVHJhbnNhY3Rpb25JZCBmeGlkLCB2b2lkICpjb250 ZW50LCBpbnQgbGVuKTsKIAogLyoKLSAqIEluaXRpYWxpemF0aW9uIG9mIHNoYXJlZCBtZW1v cnkKKyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgZm9yIHR3by1waGFzZSBzdGF0ZS4KICAq LwotU2l6ZQotVHdvUGhhc2VTaG1lbVNpemUodm9pZCkKK3N0YXRpYyB2b2lkCitUd29QaGFz ZVNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBU d29QaGFzZVNobWVtRGVzYzsKIAlTaXplCQlzaXplOwogCiAJLyogTmVlZCB0aGUgZml4ZWQg c3RydWN0LCB0aGUgYXJyYXkgb2YgcG9pbnRlcnMsIGFuZCB0aGUgR1REIHN0cnVjdHMgKi8K QEAgLTI0OCw0NiArMjU4LDQxIEBAIFR3b1BoYXNlU2htZW1TaXplKHZvaWQpCiAJc2l6ZSA9 IE1BWEFMSUdOKHNpemUpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShtYXhf cHJlcGFyZWRfeGFjdHMsCiAJCQkJCQkJCSAgIHNpemVvZihHbG9iYWxUcmFuc2FjdGlvbkRh dGEpKSk7Ci0KLQlyZXR1cm4gc2l6ZTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlR3b1BoYXNl U2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJQcmVwYXJlZCBUcmFuc2FjdGlvbiBUYWJs ZSIsCisJCQkJCSAgIC5zaXplID0gc2l6ZSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAm VHdvUGhhc2VTdGF0ZSwKKwkJKTsKIH0KIAotdm9pZAotVHdvUGhhc2VTaG1lbUluaXQodm9p ZCkKKy8qCisgKiBJbml0aWFsaXplIHNoYXJlZCBtZW1vcnkgZm9yIHR3by1waGFzZSBzdGF0 ZS4KKyAqLworc3RhdGljIHZvaWQKK1R3b1BoYXNlU2htZW1Jbml0KHZvaWQgKmFyZykKIHsK LQlib29sCQlmb3VuZDsKLQotCVR3b1BoYXNlU3RhdGUgPSBTaG1lbUluaXRTdHJ1Y3QoIlBy ZXBhcmVkIFRyYW5zYWN0aW9uIFRhYmxlIiwKLQkJCQkJCQkJCVR3b1BoYXNlU2htZW1TaXpl KCksCi0JCQkJCQkJCQkmZm91bmQpOwotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCi0Jewot CQlHbG9iYWxUcmFuc2FjdGlvbiBneGFjdHM7Ci0JCWludAkJCWk7CisJR2xvYmFsVHJhbnNh Y3Rpb24gZ3hhY3RzOworCWludAkJCWk7CiAKLQkJQXNzZXJ0KCFmb3VuZCk7Ci0JCVR3b1Bo YXNlU3RhdGUtPmZyZWVHWGFjdHMgPSBOVUxMOwotCQlUd29QaGFzZVN0YXRlLT5udW1QcmVw WGFjdHMgPSAwOworCVR3b1BoYXNlU3RhdGUtPmZyZWVHWGFjdHMgPSBOVUxMOworCVR3b1Bo YXNlU3RhdGUtPm51bVByZXBYYWN0cyA9IDA7CiAKLQkJLyoKLQkJICogSW5pdGlhbGl6ZSB0 aGUgbGlua2VkIGxpc3Qgb2YgZnJlZSBHbG9iYWxUcmFuc2FjdGlvbkRhdGEgc3RydWN0cwot CQkgKi8KLQkJZ3hhY3RzID0gKEdsb2JhbFRyYW5zYWN0aW9uKQotCQkJKChjaGFyICopIFR3 b1BoYXNlU3RhdGUgKwotCQkJIE1BWEFMSUdOKG9mZnNldG9mKFR3b1BoYXNlU3RhdGVEYXRh LCBwcmVwWGFjdHMpICsKLQkJCQkJICBzaXplb2YoR2xvYmFsVHJhbnNhY3Rpb24pICogbWF4 X3ByZXBhcmVkX3hhY3RzKSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBtYXhfcHJlcGFyZWRfeGFj dHM7IGkrKykKLQkJewotCQkJLyogaW5zZXJ0IGludG8gbGlua2VkIGxpc3QgKi8KLQkJCWd4 YWN0c1tpXS5uZXh0ID0gVHdvUGhhc2VTdGF0ZS0+ZnJlZUdYYWN0czsKLQkJCVR3b1BoYXNl U3RhdGUtPmZyZWVHWGFjdHMgPSAmZ3hhY3RzW2ldOworCS8qCisJICogSW5pdGlhbGl6ZSB0 aGUgbGlua2VkIGxpc3Qgb2YgZnJlZSBHbG9iYWxUcmFuc2FjdGlvbkRhdGEgc3RydWN0cwor CSAqLworCWd4YWN0cyA9IChHbG9iYWxUcmFuc2FjdGlvbikKKwkJKChjaGFyICopIFR3b1Bo YXNlU3RhdGUgKworCQkgTUFYQUxJR04ob2Zmc2V0b2YoVHdvUGhhc2VTdGF0ZURhdGEsIHBy ZXBYYWN0cykgKworCQkJCSAgc2l6ZW9mKEdsb2JhbFRyYW5zYWN0aW9uKSAqIG1heF9wcmVw YXJlZF94YWN0cykpOworCWZvciAoaSA9IDA7IGkgPCBtYXhfcHJlcGFyZWRfeGFjdHM7IGkr KykKKwl7CisJCS8qIGluc2VydCBpbnRvIGxpbmtlZCBsaXN0ICovCisJCWd4YWN0c1tpXS5u ZXh0ID0gVHdvUGhhc2VTdGF0ZS0+ZnJlZUdYYWN0czsKKwkJVHdvUGhhc2VTdGF0ZS0+ZnJl ZUdYYWN0cyA9ICZneGFjdHNbaV07CiAKLQkJCS8qIGFzc29jaWF0ZSBpdCB3aXRoIGEgUEdQ Uk9DIGFzc2lnbmVkIGJ5IFByb2NHbG9iYWxTaG1lbUluaXQgKi8KLQkJCWd4YWN0c1tpXS5w Z3Byb2NubyA9IEdldE51bWJlckZyb21QR1Byb2MoJlByZXBhcmVkWGFjdFByb2NzW2ldKTsK LQkJfQorCQkvKiBhc3NvY2lhdGUgaXQgd2l0aCBhIFBHUFJPQyBhc3NpZ25lZCBieSBQcm9j R2xvYmFsU2htZW1Jbml0ICovCisJCWd4YWN0c1tpXS5wZ3Byb2NubyA9IEdldE51bWJlckZy b21QR1Byb2MoJlByZXBhcmVkWGFjdFByb2NzW2ldKTsKIAl9Ci0JZWxzZQotCQlBc3NlcnQo Zm91bmQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IDll ODk5OWJiYjYxLi40OTE4ZWU5MzQ1MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cu YwpAQCAtOTYsNiArOTYsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcmVpbml0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgi CisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9z eW5jLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX2hvb2tzLmgiCiAjaW5jbHVkZSAidXRpbHMv Z3VjX3RhYmxlcy5oIgpAQCAtNTcxLDYgKzU3MiwxNiBAQCB0eXBlZGVmIGVudW0KIAlXQUxJ TlNFUlRfU1BFQ0lBTF9DSEVDS1BPSU5UCiB9IFdhbEluc2VydENsYXNzOwogCitzdGF0aWMg dm9pZCBYTE9HU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBYTE9HU2ht ZW1Jbml0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBYTE9HU2htZW1BdHRhY2godm9pZCAq YXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgWExPR1NobWVtQ2FsbGJhY2tzID0gewor CS5yZXF1ZXN0X2ZuID0gWExPR1NobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFhMT0dTaG1l bUluaXQsCisJLmF0dGFjaF9mbiA9IFhMT0dTaG1lbUF0dGFjaCwKK307CisKIHN0YXRpYyBY TG9nQ3RsRGF0YSAqWExvZ0N0bCA9IE5VTEw7CiAKIC8qIGEgcHJpdmF0ZSBjb3B5IG9mIFhM b2dDdGwtPkluc2VydC5XQUxJbnNlcnRMb2NrcywgZm9yIGNvbnZlbmllbmNlICovCkBAIC01 NzksNiArNTkwLDcgQEAgc3RhdGljIFdBTEluc2VydExvY2tQYWRkZWQgKldBTEluc2VydExv Y2tzID0gTlVMTDsKIC8qCiAgKiBXZSBtYWludGFpbiBhbiBpbWFnZSBvZiBwZ19jb250cm9s IGluIHNoYXJlZCBtZW1vcnkuCiAgKi8KK3N0YXRpYyBDb250cm9sRmlsZURhdGEgKkxvY2Fs Q29udHJvbEZpbGUgPSBOVUxMOwogc3RhdGljIENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZp bGUgPSBOVUxMOwogCiAvKgpAQCAtNTI1Nyw3ICs1MjY5LDggQEAgdm9pZAogTG9jYWxQcm9j ZXNzQ29udHJvbEZpbGUoYm9vbCByZXNldCkKIHsKIAlBc3NlcnQocmVzZXQgfHwgQ29udHJv bEZpbGUgPT0gTlVMTCk7Ci0JQ29udHJvbEZpbGUgPSBwYWxsb2Nfb2JqZWN0KENvbnRyb2xG aWxlRGF0YSk7CisJTG9jYWxDb250cm9sRmlsZSA9IHBhbGxvY19vYmplY3QoQ29udHJvbEZp bGVEYXRhKTsKKwlDb250cm9sRmlsZSA9IExvY2FsQ29udHJvbEZpbGU7CiAJUmVhZENvbnRy b2xGaWxlKCk7CiAJU2V0TG9jYWxEYXRhQ2hlY2tzdW1TdGF0ZShDb250cm9sRmlsZS0+ZGF0 YV9jaGVja3N1bV92ZXJzaW9uKTsKIH0KQEAgLTUyNzQsMTEgKzUyODcsMTMgQEAgR2V0QWN0 aXZlV2FsTGV2ZWxPblN0YW5kYnkodm9pZCkKIH0KIAogLyoKLSAqIEluaXRpYWxpemF0aW9u IG9mIHNoYXJlZCBtZW1vcnkgZm9yIFhMT0cKKyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkg Zm9yIFhMT0cuCiAgKi8KLVNpemUKLVhMT0dTaG1lbVNpemUodm9pZCkKK3N0YXRpYyB2b2lk CitYTE9HU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsKKwlzdGF0aWMgU2htZW1TdHJ1Y3RE ZXNjIFhMb2dDdGxTaG1lbURlc2M7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBDb250cm9s RmlsZVNobWVtRGVzYzsKIAlTaXplCQlzaXplOwogCiAJLyoKQEAgLTUzMTcsMjMgKzUzMzIs MjYgQEAgWExPR1NobWVtU2l6ZSh2b2lkKQogCS8qIGFuZCB0aGUgYnVmZmVycyB0aGVtc2Vs dmVzICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFhMT0dfQkxDS1NaLCBY TE9HYnVmZmVycykpOwogCi0JLyoKLQkgKiBOb3RlOiB3ZSBkb24ndCBjb3VudCBDb250cm9s RmlsZURhdGEsIGl0IGNvbWVzIG91dCBvZiB0aGUgInNsb3AgZmFjdG9yIgotCSAqIGFkZGVk IGJ5IENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMuICBUaGlzIGxldHMgdXMgdXNl IHRoaXMKLQkgKiByb3V0aW5lIGFnYWluIGJlbG93IHRvIGNvbXB1dGUgdGhlIGFjdHVhbCBh bGxvY2F0aW9uIHNpemUuCi0JICovCi0KLQlyZXR1cm4gc2l6ZTsKKwlTaG1lbVJlcXVlc3RT dHJ1Y3QoJlhMb2dDdGxTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIlhMT0cgQ3RsIiwK KwkJCQkJICAgLnNpemUgPSBzaXplLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZYTG9n Q3RsLAorCQkpOworCVNobWVtUmVxdWVzdFN0cnVjdCgmQ29udHJvbEZpbGVTaG1lbURlc2Ms CisJCQkJCSAgIC5uYW1lID0gIkNvbnRyb2wgRmlsZSIsCisJCQkJCSAgIC5zaXplID0gc2l6 ZW9mKENvbnRyb2xGaWxlRGF0YSksCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJkNvbnRy b2xGaWxlLAorCQkpOwogfQogCi12b2lkCi1YTE9HU2htZW1Jbml0KHZvaWQpCisvKgorICog WExPR1NobWVtSW5pdCAtIGluaXRpYWxpemUgdGhlIFhMb2dDdGwgc2hhcmVkIG1lbW9yeSBh cmVhLgorICovCitzdGF0aWMgdm9pZAorWExPR1NobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0J Ym9vbAkJZm91bmRDRmlsZSwKLQkJCQlmb3VuZFhMb2c7CiAJY2hhcgkgICAqYWxsb2NwdHI7 CiAJaW50CQkJaTsKLQlDb250cm9sRmlsZURhdGEgKmxvY2FsQ29udHJvbEZpbGU7CiAKICNp ZmRlZiBXQUxfREVCVUcKIApAQCAtNTM1MSwzNiArNTM2OSwxNyBAQCBYTE9HU2htZW1Jbml0 KHZvaWQpCiAJfQogI2VuZGlmCiAKLQotCVhMb2dDdGwgPSAoWExvZ0N0bERhdGEgKikKLQkJ U2htZW1Jbml0U3RydWN0KCJYTE9HIEN0bCIsIFhMT0dTaG1lbVNpemUoKSwgJmZvdW5kWExv Zyk7Ci0KLQlsb2NhbENvbnRyb2xGaWxlID0gQ29udHJvbEZpbGU7Ci0JQ29udHJvbEZpbGUg PSAoQ29udHJvbEZpbGVEYXRhICopCi0JCVNobWVtSW5pdFN0cnVjdCgiQ29udHJvbCBGaWxl Iiwgc2l6ZW9mKENvbnRyb2xGaWxlRGF0YSksICZmb3VuZENGaWxlKTsKLQotCWlmIChmb3Vu ZENGaWxlIHx8IGZvdW5kWExvZykKLQl7Ci0JCS8qIGJvdGggc2hvdWxkIGJlIHByZXNlbnQg b3IgbmVpdGhlciAqLwotCQlBc3NlcnQoZm91bmRDRmlsZSAmJiBmb3VuZFhMb2cpOwotCi0J CS8qIEluaXRpYWxpemUgbG9jYWwgY29weSBvZiBXQUxJbnNlcnRMb2NrcyAqLwotCQlXQUxJ bnNlcnRMb2NrcyA9IFhMb2dDdGwtPkluc2VydC5XQUxJbnNlcnRMb2NrczsKLQotCQlpZiAo bG9jYWxDb250cm9sRmlsZSkKLQkJCXBmcmVlKGxvY2FsQ29udHJvbEZpbGUpOwotCQlyZXR1 cm47Ci0JfQogCW1lbXNldChYTG9nQ3RsLCAwLCBzaXplb2YoWExvZ0N0bERhdGEpKTsKIAog CS8qCiAJICogQWxyZWFkeSBoYXZlIHJlYWQgY29udHJvbCBmaWxlIGxvY2FsbHksIHVubGVz cyBpbiBib290c3RyYXAgbW9kZS4gTW92ZQogCSAqIGNvbnRlbnRzIGludG8gc2hhcmVkIG1l bW9yeS4KIAkgKi8KLQlpZiAobG9jYWxDb250cm9sRmlsZSkKKwlpZiAoTG9jYWxDb250cm9s RmlsZSkKIAl7Ci0JCW1lbWNweShDb250cm9sRmlsZSwgbG9jYWxDb250cm9sRmlsZSwgc2l6 ZW9mKENvbnRyb2xGaWxlRGF0YSkpOwotCQlwZnJlZShsb2NhbENvbnRyb2xGaWxlKTsKKwkJ bWVtY3B5KENvbnRyb2xGaWxlLCBMb2NhbENvbnRyb2xGaWxlLCBzaXplb2YoQ29udHJvbEZp bGVEYXRhKSk7CisJCXBmcmVlKExvY2FsQ29udHJvbEZpbGUpOworCQlMb2NhbENvbnRyb2xG aWxlID0gTlVMTDsKIAl9CiAKIAkvKgpAQCAtNTQ0Miw2ICs1NDQxLDE1IEBAIFhMT0dTaG1l bUluaXQodm9pZCkKIAlwZ19hdG9taWNfaW5pdF91NjQoJlhMb2dDdGwtPnVubG9nZ2VkTFNO LCBJbnZhbGlkWExvZ1JlY1B0cik7CiB9CiAKKy8qCisgKiBYTE9HU2htZW1BdHRhY2ggLSBz ZXQgdXAgV0FMSW5zZXJ0TG9ja3MgcG9pbnRlciBhZnRlciBhdHRhY2hpbmcuCisgKi8KK3N0 YXRpYyB2b2lkCitYTE9HU2htZW1BdHRhY2godm9pZCAqYXJnKQoreworCVdBTEluc2VydExv Y2tzID0gWExvZ0N0bC0+SW5zZXJ0LldBTEluc2VydExvY2tzOworfQorCiAvKgogICogVGhp cyBmdW5jIG11c3QgYmUgY2FsbGVkIE9OQ0Ugb24gc3lzdGVtIGluc3RhbGwuICBJdCBjcmVh dGVzIHBnX2NvbnRyb2wKICAqIGFuZCB0aGUgaW5pdGlhbCBYTE9HIHNlZ21lbnQuCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJlZmV0Y2hlci5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3ByZWZldGNoZXIuYwppbmRleCBjMjM1 ZWNhN2M1MS4uNWMyZDNjZGNkYzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3hsb2dwcmVmZXRjaGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZ3ByZWZldGNoZXIuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgInN0b3Jh Z2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9zbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAi dXRpbHMvZm1ncnByb3Rvcy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Y19ob29rcy5oIgogI2lu Y2x1ZGUgInV0aWxzL2hzZWFyY2guaCIKQEAgLTIwMCw2ICsyMDEsMTQgQEAgc3RhdGljIExz blJlYWRRdWV1ZU5leHRTdGF0dXMgWExvZ1ByZWZldGNoZXJOZXh0QmxvY2sodWludHB0cl90 IHBnc3JfcHJpdmF0ZSwKIAogc3RhdGljIFhMb2dQcmVmZXRjaFN0YXRzICpTaGFyZWRTdGF0 czsKIAorc3RhdGljIHZvaWQgWExvZ1ByZWZldGNoU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7 CitzdGF0aWMgdm9pZCBYTG9nUHJlZmV0Y2hTaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29u c3QgU2htZW1DYWxsYmFja3MgWExvZ1ByZWZldGNoU2htZW1DYWxsYmFja3MgPSB7CisJLnJl cXVlc3RfZm4gPSBYTG9nUHJlZmV0Y2hTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBYTG9n UHJlZmV0Y2hTaG1lbUluaXQsCit9OworCiBzdGF0aWMgaW5saW5lIExzblJlYWRRdWV1ZSAq CiBscnFfYWxsb2ModWludDMyIG1heF9kaXN0YW5jZSwKIAkJICB1aW50MzIgbWF4X2luZmxp Z2h0LApAQCAtMjkyLDEwICszMDEsMjggQEAgbHJxX2NvbXBsZXRlX2xzbihMc25SZWFkUXVl dWUgKmxycSwgWExvZ1JlY1B0ciBsc24pCiAJCWxycV9wcmVmZXRjaChscnEpOwogfQogCi1z aXplX3QKLVhMb2dQcmVmZXRjaFNobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK1hMb2dQ cmVmZXRjaFNobWVtUmVxdWVzdCh2b2lkICphcmcpCit7CisJc3RhdGljIFNobWVtU3RydWN0 RGVzYyBYTG9nUHJlZmV0Y2hTaG1lbURlc2M7CisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlhM b2dQcmVmZXRjaFNobWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiWExvZ1ByZWZldGNoU3Rh dHMiLAorCQkJCQkgICAuc2l6ZSA9IHNpemVvZihYTG9nUHJlZmV0Y2hTdGF0cyksCisJCQkJ CSAgIC5wdHIgPSAodm9pZCAqKikgJlNoYXJlZFN0YXRzLAorCQkpOworfQorCitzdGF0aWMg dm9pZAorWExvZ1ByZWZldGNoU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlyZXR1cm4gc2l6 ZW9mKFhMb2dQcmVmZXRjaFN0YXRzKTsKKwlwZ19hdG9taWNfaW5pdF91NjQoJlNoYXJlZFN0 YXRzLT5yZXNldF90aW1lLCBHZXRDdXJyZW50VGltZXN0YW1wKCkpOworCXBnX2F0b21pY19p bml0X3U2NCgmU2hhcmVkU3RhdHMtPnByZWZldGNoLCAwKTsKKwlwZ19hdG9taWNfaW5pdF91 NjQoJlNoYXJlZFN0YXRzLT5oaXQsIDApOworCXBnX2F0b21pY19pbml0X3U2NCgmU2hhcmVk U3RhdHMtPnNraXBfaW5pdCwgMCk7CisJcGdfYXRvbWljX2luaXRfdTY0KCZTaGFyZWRTdGF0 cy0+c2tpcF9uZXcsIDApOworCXBnX2F0b21pY19pbml0X3U2NCgmU2hhcmVkU3RhdHMtPnNr aXBfZnB3LCAwKTsKKwlwZ19hdG9taWNfaW5pdF91NjQoJlNoYXJlZFN0YXRzLT5za2lwX3Jl cCwgMCk7CiB9CiAKIC8qCkBAIC0zMTMsMjcgKzM0MCw2IEBAIFhMb2dQcmVmZXRjaFJlc2V0 U3RhdHModm9pZCkKIAlwZ19hdG9taWNfd3JpdGVfdTY0KCZTaGFyZWRTdGF0cy0+c2tpcF9y ZXAsIDApOwogfQogCi12b2lkCi1YTG9nUHJlZmV0Y2hTaG1lbUluaXQodm9pZCkKLXsKLQli b29sCQlmb3VuZDsKLQotCVNoYXJlZFN0YXRzID0gKFhMb2dQcmVmZXRjaFN0YXRzICopCi0J CVNobWVtSW5pdFN0cnVjdCgiWExvZ1ByZWZldGNoU3RhdHMiLAotCQkJCQkJc2l6ZW9mKFhM b2dQcmVmZXRjaFN0YXRzKSwKLQkJCQkJCSZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQotCXsK LQkJcGdfYXRvbWljX2luaXRfdTY0KCZTaGFyZWRTdGF0cy0+cmVzZXRfdGltZSwgR2V0Q3Vy cmVudFRpbWVzdGFtcCgpKTsKLQkJcGdfYXRvbWljX2luaXRfdTY0KCZTaGFyZWRTdGF0cy0+ cHJlZmV0Y2gsIDApOwotCQlwZ19hdG9taWNfaW5pdF91NjQoJlNoYXJlZFN0YXRzLT5oaXQs IDApOwotCQlwZ19hdG9taWNfaW5pdF91NjQoJlNoYXJlZFN0YXRzLT5za2lwX2luaXQsIDAp OwotCQlwZ19hdG9taWNfaW5pdF91NjQoJlNoYXJlZFN0YXRzLT5za2lwX25ldywgMCk7Ci0J CXBnX2F0b21pY19pbml0X3U2NCgmU2hhcmVkU3RhdHMtPnNraXBfZnB3LCAwKTsKLQkJcGdf YXRvbWljX2luaXRfdTY0KCZTaGFyZWRTdGF0cy0+c2tpcF9yZXAsIDApOwotCX0KLX0KIAog LyoKICAqIENhbGxlZCB3aGVuIGFueSBHVUMgaXMgY2hhbmdlZCB0aGF0IGFmZmVjdHMgcHJl ZmV0Y2hpbmcuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n cmVjb3ZlcnkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5j CmluZGV4IGZkMWMzNmQwNjFkLi5lM2QwNGUxZjBkZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRl ICJzdG9yYWdlL3Btc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3Rl bXMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRldGltZS5oIgogI2luY2x1ZGUgInV0aWxzL2Zt Z3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy9ndWNfaG9va3MuaCIKQEAgLTMwNyw2ICsz MDgsMTQgQEAgc3RhdGljIGNoYXIgKnByaW1hcnlfaW1hZ2VfbWFza2VkID0gTlVMTDsKIAog WExvZ1JlY292ZXJ5Q3RsRGF0YSAqWExvZ1JlY292ZXJ5Q3RsID0gTlVMTDsKIAorc3RhdGlj IHZvaWQgWExvZ1JlY292ZXJ5U2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9p ZCBYTG9nUmVjb3ZlcnlTaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxs YmFja3MgWExvZ1JlY292ZXJ5U2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBY TG9nUmVjb3ZlcnlTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBYTG9nUmVjb3ZlcnlTaG1l bUluaXQsCit9OworCiAvKgogICogYWJvcnRlZFJlY1B0ciBpcyB0aGUgc3RhcnQgcG9pbnRl ciBvZiBhIGJyb2tlbiByZWNvcmQgYXQgZW5kIG9mIFdBTCB3aGVuCiAgKiByZWNvdmVyeSBj b21wbGV0ZXM7IG1pc3NpbmdDb250cmVjUHRyIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmly c3QKQEAgLTM4NSwyOCArMzk0LDIzIEBAIHN0YXRpYyB2b2lkIFNldEN1cnJlbnRDaHVua1N0 YXJ0VGltZShUaW1lc3RhbXBUeiB4dGltZSk7CiBzdGF0aWMgdm9pZCBTZXRMYXRlc3RYVGlt ZShUaW1lc3RhbXBUeiB4dGltZSk7CiAKIC8qCi0gKiBJbml0aWFsaXphdGlvbiBvZiBzaGFy ZWQgbWVtb3J5IGZvciBXQUwgcmVjb3ZlcnkKKyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkg Zm9yIFdBTCByZWNvdmVyeQogICovCi1TaXplCi1YTG9nUmVjb3ZlcnlTaG1lbVNpemUodm9p ZCkKK3N0YXRpYyB2b2lkCitYTG9nUmVjb3ZlcnlTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQog ewotCVNpemUJCXNpemU7Ci0KLQkvKiBYTG9nUmVjb3ZlcnlDdGwgKi8KLQlzaXplID0gc2l6 ZW9mKFhMb2dSZWNvdmVyeUN0bERhdGEpOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgWExv Z1JlY292ZXJ5U2htZW1EZXNjOwogCi0JcmV0dXJuIHNpemU7CisJU2htZW1SZXF1ZXN0U3Ry dWN0KCZYTG9nUmVjb3ZlcnlTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIlhMT0cgUmVj b3ZlcnkgQ3RsIiwKKwkJCQkJICAgLnNpemUgPSBzaXplb2YoWExvZ1JlY292ZXJ5Q3RsRGF0 YSksCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJlhMb2dSZWNvdmVyeUN0bCwKKwkJKTsK IH0KIAotdm9pZAotWExvZ1JlY292ZXJ5U2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAor WExvZ1JlY292ZXJ5U2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsKLQot CVhMb2dSZWNvdmVyeUN0bCA9IChYTG9nUmVjb3ZlcnlDdGxEYXRhICopCi0JCVNobWVtSW5p dFN0cnVjdCgiWExPRyBSZWNvdmVyeSBDdGwiLCBYTG9nUmVjb3ZlcnlTaG1lbVNpemUoKSwg JmZvdW5kKTsKLQlpZiAoZm91bmQpCi0JCXJldHVybjsKIAltZW1zZXQoWExvZ1JlY292ZXJ5 Q3RsLCAwLCBzaXplb2YoWExvZ1JlY292ZXJ5Q3RsRGF0YSkpOwogCiAJU3BpbkxvY2tJbml0 KCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2d3YWl0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9nd2FpdC5jCmluZGV4IGJmNDYzMDY3N2I0Li4zYWY5ZjEwMTMzYyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3dhaXQuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nd2FpdC5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5j bHVkZSAic3RvcmFnZS9sYXRjaC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2lu Y2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMu aCIKICNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9zLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdf bHNuLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgpAQCAtNjgsNiArNjksMTQgQEAg c3RhdGljIGludAl3YWl0bHNuX2NtcChjb25zdCBwYWlyaW5naGVhcF9ub2RlICphLCBjb25z dCBwYWlyaW5naGVhcF9ub2RlICpiLAogCiBzdHJ1Y3QgV2FpdExTTlN0YXRlICp3YWl0TFNO U3RhdGUgPSBOVUxMOwogCitzdGF0aWMgdm9pZCBXYWl0TFNOU2htZW1SZXF1ZXN0KHZvaWQg KmFyZyk7CitzdGF0aWMgdm9pZCBXYWl0TFNOU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2Nv bnN0IFNobWVtQ2FsbGJhY2tzIFdhaXRMU05TaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVz dF9mbiA9IFdhaXRMU05TaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBXYWl0TFNOU2htZW1J bml0LAorfTsKKwogLyoKICAqIFdhaXQgZXZlbnQgZm9yIGVhY2ggV2FpdExTTlR5cGUsIHVz ZWQgd2l0aCBXYWl0TGF0Y2goKSB0byByZXBvcnQKICAqIHRoZSB3YWl0IGluIHBnX3N0YXRf YWN0aXZpdHkuCkBAIC0xMDksNDEgKzExOCwzNiBAQCBHZXRDdXJyZW50TFNORm9yV2FpdFR5 cGUoV2FpdExTTlR5cGUgbHNuVHlwZSkKIAlwZ191bnJlYWNoYWJsZSgpOwogfQogCi0vKiBS ZXBvcnQgdGhlIGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRlZCBmb3IgV2Fp dExTTlN0YXRlLiAqLwotU2l6ZQotV2FpdExTTlNobWVtU2l6ZSh2b2lkKQorLyogUmVnaXN0 ZXIgdGhlIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkIGZvciBXYWl0TFNOU3RhdGUuICov CitzdGF0aWMgdm9pZAorV2FpdExTTlNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7CisJc3Rh dGljIFNobWVtU3RydWN0RGVzYyBXYWl0TFNOU2htZW1EZXNjOwogCVNpemUJCXNpemU7CiAK IAlzaXplID0gb2Zmc2V0b2YoV2FpdExTTlN0YXRlLCBwcm9jSW5mb3MpOwogCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJP Q1MsIHNpemVvZihXYWl0TFNOUHJvY0luZm8pKSk7Ci0JcmV0dXJuIHNpemU7CisJU2htZW1S ZXF1ZXN0U3RydWN0KCZXYWl0TFNOU2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJXYWl0 TFNOU3RhdGUiLAorCQkJCQkgICAuc2l6ZSA9IHNpemUsCisJCQkJCSAgIC5wdHIgPSAodm9p ZCAqKikgJndhaXRMU05TdGF0ZSwKKwkJKTsKIH0KIAogLyogSW5pdGlhbGl6ZSB0aGUgV2Fp dExTTlN0YXRlIGluIHRoZSBzaGFyZWQgbWVtb3J5LiAqLwotdm9pZAotV2FpdExTTlNobWVt SW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK1dhaXRMU05TaG1lbUluaXQodm9pZCAqYXJnKQog ewotCWJvb2wJCWZvdW5kOwotCi0Jd2FpdExTTlN0YXRlID0gKFdhaXRMU05TdGF0ZSAqKSBT aG1lbUluaXRTdHJ1Y3QoIldhaXRMU05TdGF0ZSIsCi0JCQkJCQkJCQkJCQkJV2FpdExTTlNo bWVtU2l6ZSgpLAotCQkJCQkJCQkJCQkJCSZmb3VuZCk7Ci0JaWYgKCFmb3VuZCkKKwkvKiBJ bml0aWFsaXplIGhlYXBzIGFuZCB0cmFja2luZyAqLworCWZvciAoaW50IGkgPSAwOyBpIDwg V0FJVF9MU05fVFlQRV9DT1VOVDsgaSsrKQogCXsKLQkJaW50CQkJaTsKLQotCQkvKiBJbml0 aWFsaXplIGhlYXBzIGFuZCB0cmFja2luZyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgV0FJVF9M U05fVFlQRV9DT1VOVDsgaSsrKQotCQl7Ci0JCQlwZ19hdG9taWNfaW5pdF91NjQoJndhaXRM U05TdGF0ZS0+bWluV2FpdGVkTFNOW2ldLCBQR19VSU5UNjRfTUFYKTsKLQkJCXBhaXJpbmdo ZWFwX2luaXRpYWxpemUoJndhaXRMU05TdGF0ZS0+d2FpdGVyc0hlYXBbaV0sIHdhaXRsc25f Y21wLCBOVUxMKTsKLQkJfQotCi0JCS8qIEluaXRpYWxpemUgcHJvY2VzcyBpbmZvIGFycmF5 ICovCi0JCW1lbXNldCgmd2FpdExTTlN0YXRlLT5wcm9jSW5mb3MsIDAsCi0JCQkgICAoTWF4 QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZX1BST0NTKSAqIHNpemVvZihXYWl0TFNOUHJvY0lu Zm8pKTsKKwkJcGdfYXRvbWljX2luaXRfdTY0KCZ3YWl0TFNOU3RhdGUtPm1pbldhaXRlZExT TltpXSwgUEdfVUlOVDY0X01BWCk7CisJCXBhaXJpbmdoZWFwX2luaXRpYWxpemUoJndhaXRM U05TdGF0ZS0+d2FpdGVyc0hlYXBbaV0sIHdhaXRsc25fY21wLCBOVUxMKTsKIAl9CisKKwkv KiBJbml0aWFsaXplIHByb2Nlc3MgaW5mbyBhcnJheSAqLworCW1lbXNldCgmd2FpdExTTlN0 YXRlLT5wcm9jSW5mb3MsIDAsCisJCSAgIChNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllf UFJPQ1MpICogc2l6ZW9mKFdhaXRMU05Qcm9jSW5mbykpOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2F1dG92YWN1dW0uYwppbmRleCA4NDAwZTY3MjJjYy4uOTExZWEwN2MyYTYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCisrKyBi L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCkBAIC05OCw2ICs5OCw3IEBA CiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2ln bmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9z dWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0 aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgpAQCAtMzA5 LDYgKzMxMCwxNCBAQCB0eXBlZGVmIHN0cnVjdAogCiBzdGF0aWMgQXV0b1ZhY3V1bVNobWVt U3RydWN0ICpBdXRvVmFjdXVtU2htZW07CiAKK3N0YXRpYyB2b2lkIEF1dG9WYWN1dW1TaG1l bVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIEF1dG9WYWN1dW1TaG1lbUluaXQo dm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgQXV0b1ZhY3V1bVNobWVtQ2Fs bGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gQXV0b1ZhY3V1bVNobWVtUmVxdWVzdCwKKwku aW5pdF9mbiA9IEF1dG9WYWN1dW1TaG1lbUluaXQsCit9OworCiAvKgogICogdGhlIGRhdGFi YXNlIGxpc3QgKG9mIGF2bF9kYmFzZSBlbGVtZW50cykgaW4gdGhlIGxhdW5jaGVyLCBhbmQg dGhlIGNvbnRleHQKICAqIHRoYXQgY29udGFpbnMgaXQKQEAgLTM1NDUsMTIgKzM1NTQsMTMg QEAgYXV0b3ZhY19pbml0KHZvaWQpCiB9CiAKIC8qCi0gKiBBdXRvVmFjdXVtU2htZW1TaXpl Ci0gKgkJQ29tcHV0ZSBzcGFjZSBuZWVkZWQgZm9yIGF1dG92YWN1dW0tcmVsYXRlZCBzaGFy ZWQgbWVtb3J5CisgKiBBdXRvVmFjdXVtU2htZW1SZXF1ZXN0CisgKgkJUmVnaXN0ZXIgc2hh cmVkIG1lbW9yeSBzcGFjZSBuZWVkZWQgZm9yIGF1dG92YWN1dW0KICAqLwotU2l6ZQotQXV0 b1ZhY3V1bVNobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK0F1dG9WYWN1dW1TaG1lbVJl cXVlc3Qodm9pZCAqYXJnKQogeworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgQXV0b1ZhY3V1 bVNobWVtRGVzYzsKIAlTaXplCQlzaXplOwogCiAJLyoKQEAgLTM1NjAsNTMgKzM1NzAsNDIg QEAgQXV0b1ZhY3V1bVNobWVtU2l6ZSh2b2lkKQogCXNpemUgPSBNQVhBTElHTihzaXplKTsK IAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoYXV0b3ZhY3V1bV93b3JrZXJfc2xv dHMsCiAJCQkJCQkJCSAgIHNpemVvZihXb3JrZXJJbmZvRGF0YSkpKTsKLQlyZXR1cm4gc2l6 ZTsKKworCVNobWVtUmVxdWVzdFN0cnVjdCgmQXV0b1ZhY3V1bVNobWVtRGVzYywKKwkJCQkJ ICAgLm5hbWUgPSAiQXV0b1ZhY3V1bSBEYXRhIiwKKwkJCQkJICAgLnNpemUgPSBzaXplLAor CQkJCQkgICAucHRyID0gKHZvaWQgKiopICZBdXRvVmFjdXVtU2htZW0sCisJCSk7CiB9CiAK IC8qCiAgKiBBdXRvVmFjdXVtU2htZW1Jbml0Ci0gKgkJQWxsb2NhdGUgYW5kIGluaXRpYWxp emUgYXV0b3ZhY3V1bS1yZWxhdGVkIHNoYXJlZCBtZW1vcnkKKyAqCQlJbml0aWFsaXplIGF1 dG92YWN1dW0tcmVsYXRlZCBzaGFyZWQgbWVtb3J5CiAgKi8KLXZvaWQKLUF1dG9WYWN1dW1T aG1lbUluaXQodm9pZCkKK3N0YXRpYyB2b2lkCitBdXRvVmFjdXVtU2htZW1Jbml0KHZvaWQg KmFyZykKIHsKLQlib29sCQlmb3VuZDsKLQotCUF1dG9WYWN1dW1TaG1lbSA9IChBdXRvVmFj dXVtU2htZW1TdHJ1Y3QgKikKLQkJU2htZW1Jbml0U3RydWN0KCJBdXRvVmFjdXVtIERhdGEi LAotCQkJCQkJQXV0b1ZhY3V1bVNobWVtU2l6ZSgpLAotCQkJCQkJJmZvdW5kKTsKLQotCWlm ICghSXNVbmRlclBvc3RtYXN0ZXIpCi0JewotCQlXb3JrZXJJbmZvCXdvcmtlcjsKLQkJaW50 CQkJaTsKKwlXb3JrZXJJbmZvCXdvcmtlcjsKIAotCQlBc3NlcnQoIWZvdW5kKTsKLQotCQlB dXRvVmFjdXVtU2htZW0tPmF2X2xhdW5jaGVycGlkID0gMDsKLQkJZGNsaXN0X2luaXQoJkF1 dG9WYWN1dW1TaG1lbS0+YXZfZnJlZVdvcmtlcnMpOwotCQlkbGlzdF9pbml0KCZBdXRvVmFj dXVtU2htZW0tPmF2X3J1bm5pbmdXb3JrZXJzKTsKLQkJQXV0b1ZhY3V1bVNobWVtLT5hdl9z dGFydGluZ1dvcmtlciA9IE5VTEw7Ci0JCW1lbXNldChBdXRvVmFjdXVtU2htZW0tPmF2X3dv cmtJdGVtcywgMCwKLQkJCSAgIHNpemVvZihBdXRvVmFjdXVtV29ya0l0ZW0pICogTlVNX1dP UktJVEVNUyk7Ci0KLQkJd29ya2VyID0gKFdvcmtlckluZm8pICgoY2hhciAqKSBBdXRvVmFj dXVtU2htZW0gKwotCQkJCQkJCSAgIE1BWEFMSUdOKHNpemVvZihBdXRvVmFjdXVtU2htZW1T dHJ1Y3QpKSk7Ci0KLQkJLyogaW5pdGlhbGl6ZSB0aGUgV29ya2VySW5mbyBmcmVlIGxpc3Qg Ki8KLQkJZm9yIChpID0gMDsgaSA8IGF1dG92YWN1dW1fd29ya2VyX3Nsb3RzOyBpKyspCi0J CXsKLQkJCWRjbGlzdF9wdXNoX2hlYWQoJkF1dG9WYWN1dW1TaG1lbS0+YXZfZnJlZVdvcmtl cnMsCi0JCQkJCQkJICZ3b3JrZXJbaV0ud2lfbGlua3MpOwotCQkJcGdfYXRvbWljX2luaXRf ZmxhZygmd29ya2VyW2ldLndpX2RvYmFsYW5jZSk7Ci0JCX0KKwlBdXRvVmFjdXVtU2htZW0t PmF2X2xhdW5jaGVycGlkID0gMDsKKwlkY2xpc3RfaW5pdCgmQXV0b1ZhY3V1bVNobWVtLT5h dl9mcmVlV29ya2Vycyk7CisJZGxpc3RfaW5pdCgmQXV0b1ZhY3V1bVNobWVtLT5hdl9ydW5u aW5nV29ya2Vycyk7CisJQXV0b1ZhY3V1bVNobWVtLT5hdl9zdGFydGluZ1dvcmtlciA9IE5V TEw7CisJbWVtc2V0KEF1dG9WYWN1dW1TaG1lbS0+YXZfd29ya0l0ZW1zLCAwLAorCQkgICBz aXplb2YoQXV0b1ZhY3V1bVdvcmtJdGVtKSAqIE5VTV9XT1JLSVRFTVMpOwogCi0JCXBnX2F0 b21pY19pbml0X3UzMigmQXV0b1ZhY3V1bVNobWVtLT5hdl9ud29ya2Vyc0ZvckJhbGFuY2Us IDApOworCXdvcmtlciA9IChXb3JrZXJJbmZvKSAoKGNoYXIgKikgQXV0b1ZhY3V1bVNobWVt ICsKKwkJCQkJCSAgIE1BWEFMSUdOKHNpemVvZihBdXRvVmFjdXVtU2htZW1TdHJ1Y3QpKSk7 CiAKKwkvKiBpbml0aWFsaXplIHRoZSBXb3JrZXJJbmZvIGZyZWUgbGlzdCAqLworCWZvciAo aW50IGkgPSAwOyBpIDwgYXV0b3ZhY3V1bV93b3JrZXJfc2xvdHM7IGkrKykKKwl7CisJCWRj bGlzdF9wdXNoX2hlYWQoJkF1dG9WYWN1dW1TaG1lbS0+YXZfZnJlZVdvcmtlcnMsCisJCQkJ CQkgJndvcmtlcltpXS53aV9saW5rcyk7CisJCXBnX2F0b21pY19pbml0X2ZsYWcoJndvcmtl cltpXS53aV9kb2JhbGFuY2UpOwogCX0KLQllbHNlCi0JCUFzc2VydChmb3VuZCk7CisKKwlw Z19hdG9taWNfaW5pdF91MzIoJkF1dG9WYWN1dW1TaG1lbS0+YXZfbndvcmtlcnNGb3JCYWxh bmNlLCAwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv Ymd3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwppbmRleCA1 MzZhZmY3Y2EwNS4uMWFhMjY5NjczODEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvYmd3b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2Vy LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ht ZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ0Y29w L3Rjb3Bwcm90LmgiCiAjaW5jbHVkZSAidXRpbHMvYXNjaWkuaCIKICNpbmNsdWRlICJ1dGls cy9tZW11dGlscy5oIgpAQCAtMTEwLDYgKzExMSwxNCBAQCBzdHJ1Y3QgQmFja2dyb3VuZFdv cmtlckhhbmRsZQogCiBzdGF0aWMgQmFja2dyb3VuZFdvcmtlckFycmF5ICpCYWNrZ3JvdW5k V29ya2VyRGF0YTsKIAorc3RhdGljIHZvaWQgQmFja2dyb3VuZFdvcmtlclNobWVtUmVxdWVz dCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgQmFja2dyb3VuZFdvcmtlclNobWVtSW5pdCh2 b2lkICphcmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNrcyBCYWNrZ3JvdW5kV29ya2VyU2ht ZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBCYWNrZ3JvdW5kV29ya2VyU2htZW1S ZXF1ZXN0LAorCS5pbml0X2ZuID0gQmFja2dyb3VuZFdvcmtlclNobWVtSW5pdCwKK307CisK IC8qCiAgKiBMaXN0IG9mIGludGVybmFsIGJhY2tncm91bmQgd29ya2VyIGVudHJ5IHBvaW50 cy4gIFdlIG5lZWQgdGhpcyBmb3IKICAqIHJlYXNvbnMgZXhwbGFpbmVkIGluIExvb2t1cEJh Y2tncm91bmRXb3JrZXJGdW5jdGlvbigpLCBiZWxvdy4KQEAgLTE2MCw3NyArMTY5LDcxIEBA IHN0YXRpYyBiZ3dvcmtlcl9tYWluX3R5cGUgTG9va3VwQmFja2dyb3VuZFdvcmtlckZ1bmN0 aW9uKGNvbnN0IGNoYXIgKmxpYnJhcnluYW1lCiAKIAogLyoKLSAqIENhbGN1bGF0ZSBzaGFy ZWQgbWVtb3J5IG5lZWRlZC4KKyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgbmVlZGVkIGZv ciBiYWNrZ3JvdW5kIHdvcmtlcnMuCiAgKi8KLVNpemUKLUJhY2tncm91bmRXb3JrZXJTaG1l bVNpemUodm9pZCkKK3N0YXRpYyB2b2lkCitCYWNrZ3JvdW5kV29ya2VyU2htZW1SZXF1ZXN0 KHZvaWQgKmFyZykKIHsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEJhY2tncm91bmRXb3Jr ZXJTaG1lbURlc2M7CiAJU2l6ZQkJc2l6ZTsKIAogCS8qIEFycmF5IG9mIHdvcmtlcnMgaXMg dmFyaWFibHkgc2l6ZWQuICovCiAJc2l6ZSA9IG9mZnNldG9mKEJhY2tncm91bmRXb3JrZXJB cnJheSwgc2xvdCk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKG1heF93b3Jr ZXJfcHJvY2Vzc2VzLAogCQkJCQkJCQkgICBzaXplb2YoQmFja2dyb3VuZFdvcmtlclNsb3Qp KSk7Ci0KLQlyZXR1cm4gc2l6ZTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkJhY2tncm91bmRX b3JrZXJTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIkJhY2tncm91bmQgV29ya2VyIERh dGEiLAorCQkJCQkgICAuc2l6ZSA9IHNpemUsCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikg JkJhY2tncm91bmRXb3JrZXJEYXRhLAorCQkpOwogfQogCiAvKgotICogSW5pdGlhbGl6ZSBz aGFyZWQgbWVtb3J5LgorICogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IGZvciBiYWNrZ3Jv dW5kIHdvcmtlcnMuCiAgKi8KLXZvaWQKLUJhY2tncm91bmRXb3JrZXJTaG1lbUluaXQodm9p ZCkKK3N0YXRpYyB2b2lkCitCYWNrZ3JvdW5kV29ya2VyU2htZW1Jbml0KHZvaWQgKmFyZykK IHsKLQlib29sCQlmb3VuZDsKLQotCUJhY2tncm91bmRXb3JrZXJEYXRhID0gU2htZW1Jbml0 U3RydWN0KCJCYWNrZ3JvdW5kIFdvcmtlciBEYXRhIiwKLQkJCQkJCQkJCQkgICBCYWNrZ3Jv dW5kV29ya2VyU2htZW1TaXplKCksCi0JCQkJCQkJCQkJICAgJmZvdW5kKTsKLQlpZiAoIUlz VW5kZXJQb3N0bWFzdGVyKQotCXsKLQkJZGxpc3RfaXRlcglpdGVyOwotCQlpbnQJCQlzbG90 bm8gPSAwOworCWRsaXN0X2l0ZXIJaXRlcjsKKwlpbnQJCQlzbG90bm8gPSAwOwogCi0JCUJh Y2tncm91bmRXb3JrZXJEYXRhLT50b3RhbF9zbG90cyA9IG1heF93b3JrZXJfcHJvY2Vzc2Vz OwotCQlCYWNrZ3JvdW5kV29ya2VyRGF0YS0+cGFyYWxsZWxfcmVnaXN0ZXJfY291bnQgPSAw OwotCQlCYWNrZ3JvdW5kV29ya2VyRGF0YS0+cGFyYWxsZWxfdGVybWluYXRlX2NvdW50ID0g MDsKKwlCYWNrZ3JvdW5kV29ya2VyRGF0YS0+dG90YWxfc2xvdHMgPSBtYXhfd29ya2VyX3By b2Nlc3NlczsKKwlCYWNrZ3JvdW5kV29ya2VyRGF0YS0+cGFyYWxsZWxfcmVnaXN0ZXJfY291 bnQgPSAwOworCUJhY2tncm91bmRXb3JrZXJEYXRhLT5wYXJhbGxlbF90ZXJtaW5hdGVfY291 bnQgPSAwOwogCi0JCS8qCi0JCSAqIENvcHkgY29udGVudHMgb2Ygd29ya2VyIGxpc3QgaW50 byBzaGFyZWQgbWVtb3J5LiAgUmVjb3JkIHRoZSBzaGFyZWQKLQkJICogbWVtb3J5IHNsb3Qg YXNzaWduZWQgdG8gZWFjaCB3b3JrZXIuICBUaGlzIGVuc3VyZXMgYSAxLXRvLTEKLQkJICog Y29ycmVzcG9uZGVuY2UgYmV0d2VlbiB0aGUgcG9zdG1hc3RlcidzIHByaXZhdGUgbGlzdCBh bmQgdGhlIGFycmF5Ci0JCSAqIGluIHNoYXJlZCBtZW1vcnkuCi0JCSAqLwotCQlkbGlzdF9m b3JlYWNoKGl0ZXIsICZCYWNrZ3JvdW5kV29ya2VyTGlzdCkKLQkJewotCQkJQmFja2dyb3Vu ZFdvcmtlclNsb3QgKnNsb3QgPSAmQmFja2dyb3VuZFdvcmtlckRhdGEtPnNsb3Rbc2xvdG5v XTsKLQkJCVJlZ2lzdGVyZWRCZ1dvcmtlciAqcnc7CisJLyoKKwkgKiBDb3B5IGNvbnRlbnRz IG9mIHdvcmtlciBsaXN0IGludG8gc2hhcmVkIG1lbW9yeS4gIFJlY29yZCB0aGUgc2hhcmVk CisJICogbWVtb3J5IHNsb3QgYXNzaWduZWQgdG8gZWFjaCB3b3JrZXIuICBUaGlzIGVuc3Vy ZXMgYSAxLXRvLTEKKwkgKiBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIHRoZSBwb3N0bWFzdGVy J3MgcHJpdmF0ZSBsaXN0IGFuZCB0aGUgYXJyYXkgaW4KKwkgKiBzaGFyZWQgbWVtb3J5Lgor CSAqLworCWRsaXN0X2ZvcmVhY2goaXRlciwgJkJhY2tncm91bmRXb3JrZXJMaXN0KQorCXsK KwkJQmFja2dyb3VuZFdvcmtlclNsb3QgKnNsb3QgPSAmQmFja2dyb3VuZFdvcmtlckRhdGEt PnNsb3Rbc2xvdG5vXTsKKwkJUmVnaXN0ZXJlZEJnV29ya2VyICpydzsKIAotCQkJcncgPSBk bGlzdF9jb250YWluZXIoUmVnaXN0ZXJlZEJnV29ya2VyLCByd19sbm9kZSwgaXRlci5jdXIp OwotCQkJQXNzZXJ0KHNsb3RubyA8IG1heF93b3JrZXJfcHJvY2Vzc2VzKTsKLQkJCXNsb3Qt PmluX3VzZSA9IHRydWU7Ci0JCQlzbG90LT50ZXJtaW5hdGUgPSBmYWxzZTsKLQkJCXNsb3Qt PnBpZCA9IEludmFsaWRQaWQ7Ci0JCQlzbG90LT5nZW5lcmF0aW9uID0gMDsKLQkJCXJ3LT5y d19zaG1lbV9zbG90ID0gc2xvdG5vOwotCQkJcnctPnJ3X3dvcmtlci5iZ3dfbm90aWZ5X3Bp ZCA9IDA7CS8qIG1pZ2h0IGJlIHJlaW5pdCBhZnRlciBjcmFzaCAqLwotCQkJbWVtY3B5KCZz bG90LT53b3JrZXIsICZydy0+cndfd29ya2VyLCBzaXplb2YoQmFja2dyb3VuZFdvcmtlcikp OwotCQkJKytzbG90bm87Ci0JCX0KKwkJcncgPSBkbGlzdF9jb250YWluZXIoUmVnaXN0ZXJl ZEJnV29ya2VyLCByd19sbm9kZSwgaXRlci5jdXIpOworCQlBc3NlcnQoc2xvdG5vIDwgbWF4 X3dvcmtlcl9wcm9jZXNzZXMpOworCQlzbG90LT5pbl91c2UgPSB0cnVlOworCQlzbG90LT50 ZXJtaW5hdGUgPSBmYWxzZTsKKwkJc2xvdC0+cGlkID0gSW52YWxpZFBpZDsKKwkJc2xvdC0+ Z2VuZXJhdGlvbiA9IDA7CisJCXJ3LT5yd19zaG1lbV9zbG90ID0gc2xvdG5vOworCQlydy0+ cndfd29ya2VyLmJnd19ub3RpZnlfcGlkID0gMDsJLyogbWlnaHQgYmUgcmVpbml0IGFmdGVy IGNyYXNoICovCisJCW1lbWNweSgmc2xvdC0+d29ya2VyLCAmcnctPnJ3X3dvcmtlciwgc2l6 ZW9mKEJhY2tncm91bmRXb3JrZXIpKTsKKwkJKytzbG90bm87CisJfQogCi0JCS8qCi0JCSAq IE1hcmsgYW55IHJlbWFpbmluZyBzbG90cyBhcyBub3QgaW4gdXNlLgotCQkgKi8KLQkJd2hp bGUgKHNsb3RubyA8IG1heF93b3JrZXJfcHJvY2Vzc2VzKQotCQl7Ci0JCQlCYWNrZ3JvdW5k V29ya2VyU2xvdCAqc2xvdCA9ICZCYWNrZ3JvdW5kV29ya2VyRGF0YS0+c2xvdFtzbG90bm9d OworCS8qCisJICogTWFyayBhbnkgcmVtYWluaW5nIHNsb3RzIGFzIG5vdCBpbiB1c2UuCisJ ICovCisJd2hpbGUgKHNsb3RubyA8IG1heF93b3JrZXJfcHJvY2Vzc2VzKQorCXsKKwkJQmFj a2dyb3VuZFdvcmtlclNsb3QgKnNsb3QgPSAmQmFja2dyb3VuZFdvcmtlckRhdGEtPnNsb3Rb c2xvdG5vXTsKIAotCQkJc2xvdC0+aW5fdXNlID0gZmFsc2U7Ci0JCQkrK3Nsb3RubzsKLQkJ fQorCQlzbG90LT5pbl91c2UgPSBmYWxzZTsKKwkJKytzbG90bm87CiAJfQotCWVsc2UKLQkJ QXNzZXJ0KGZvdW5kKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvY2hlY2twb2ludGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9p bnRlci5jCmluZGV4IDNjOTgyYzZmZmFjLi5kYTYyZmNlZjQyMSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYworKysgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSAi c3RvcmFnZS9zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc21nci5oIgogI2luY2x1ZGUg InN0b3JhZ2Uvc3Bpbi5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2lu Y2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgogI2luY2x1ZGUg InV0aWxzL21lbXV0aWxzLmgiCkBAIC0xNDMsNiArMTQ0LDE0IEBAIHR5cGVkZWYgc3RydWN0 CiAKIHN0YXRpYyBDaGVja3BvaW50ZXJTaG1lbVN0cnVjdCAqQ2hlY2twb2ludGVyU2htZW07 CiAKK3N0YXRpYyB2b2lkIENoZWNrcG9pbnRlclNobWVtUmVxdWVzdCh2b2lkICphcmcpOwor c3RhdGljIHZvaWQgQ2hlY2twb2ludGVyU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0 IFNobWVtQ2FsbGJhY2tzIENoZWNrcG9pbnRlclNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1 ZXN0X2ZuID0gQ2hlY2twb2ludGVyU2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gQ2hlY2tw b2ludGVyU2htZW1Jbml0LAorfTsKKwogLyogaW50ZXJ2YWwgZm9yIGNhbGxpbmcgQWJzb3Ji U3luY1JlcXVlc3RzIGluIENoZWNrcG9pbnRXcml0ZURlbGF5ICovCiAjZGVmaW5lIFdSSVRF U19QRVJfQUJTT1JCCQkxMDAwCiAKQEAgLTk1MCwxMiArOTU5LDEzIEBAIFJlcVNodXRkb3du WExPRyhTSUdOQUxfQVJHUykKICAqLwogCiAvKgotICogQ2hlY2twb2ludGVyU2htZW1TaXpl Ci0gKgkJQ29tcHV0ZSBzcGFjZSBuZWVkZWQgZm9yIGNoZWNrcG9pbnRlci1yZWxhdGVkIHNo YXJlZCBtZW1vcnkKKyAqIENoZWNrcG9pbnRlclNobWVtUmVxdWVzdAorICoJCVJlZ2lzdGVy IHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkIGZvciBjaGVja3BvaW50ZXIKICAqLwotU2l6 ZQotQ2hlY2twb2ludGVyU2htZW1TaXplKHZvaWQpCitzdGF0aWMgdm9pZAorQ2hlY2twb2lu dGVyU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNj IENoZWNrcG9pbnRlclNobWVtRGVzYzsKIAlTaXplCQlzaXplOwogCiAJLyoKQEAgLTk2Nywz OSArOTc3LDI1IEBAIENoZWNrcG9pbnRlclNobWVtU2l6ZSh2b2lkKQogCXNpemUgPSBhZGRf c2l6ZShzaXplLCBtdWxfc2l6ZShNaW4oTkJ1ZmZlcnMsCiAJCQkJCQkJCQkgICBNQVhfQ0hF Q0tQT0lOVF9SRVFVRVNUUyksCiAJCQkJCQkJCSAgIHNpemVvZihDaGVja3BvaW50ZXJSZXF1 ZXN0KSkpOwotCi0JcmV0dXJuIHNpemU7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZDaGVja3Bv aW50ZXJTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIkNoZWNrcG9pbnRlciBEYXRhIiwK KwkJCQkJICAgLnNpemUgPSBzaXplLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZDaGVj a3BvaW50ZXJTaG1lbSwKKwkJKTsKIH0KIAogLyoKICAqIENoZWNrcG9pbnRlclNobWVtSW5p dAotICoJCUFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGNoZWNrcG9pbnRlci1yZWxhdGVkIHNo YXJlZCBtZW1vcnkKKyAqCQlJbml0aWFsaXplIGNoZWNrcG9pbnRlci1yZWxhdGVkIHNoYXJl ZCBtZW1vcnkKICAqLwotdm9pZAotQ2hlY2twb2ludGVyU2htZW1Jbml0KHZvaWQpCitzdGF0 aWMgdm9pZAorQ2hlY2twb2ludGVyU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlTaXplCQlz aXplID0gQ2hlY2twb2ludGVyU2htZW1TaXplKCk7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlDaGVj a3BvaW50ZXJTaG1lbSA9IChDaGVja3BvaW50ZXJTaG1lbVN0cnVjdCAqKQotCQlTaG1lbUlu aXRTdHJ1Y3QoIkNoZWNrcG9pbnRlciBEYXRhIiwKLQkJCQkJCXNpemUsCi0JCQkJCQkmZm91 bmQpOwotCi0JaWYgKCFmb3VuZCkKLQl7Ci0JCS8qCi0JCSAqIEZpcnN0IHRpbWUgdGhyb3Vn aCwgc28gaW5pdGlhbGl6ZS4gIE5vdGUgdGhhdCB3ZSB6ZXJvIHRoZSB3aG9sZQotCQkgKiBy ZXF1ZXN0cyBhcnJheTsgdGhpcyBpcyBzbyB0aGF0IENvbXBhY3RDaGVja3BvaW50ZXJSZXF1 ZXN0UXVldWUgY2FuCi0JCSAqIGFzc3VtZSB0aGF0IGFueSBwYWQgYnl0ZXMgaW4gdGhlIHJl cXVlc3Qgc3RydWN0cyBhcmUgemVyb2VzLgotCQkgKi8KLQkJTWVtU2V0KENoZWNrcG9pbnRl clNobWVtLCAwLCBzaXplKTsKLQkJU3BpbkxvY2tJbml0KCZDaGVja3BvaW50ZXJTaG1lbS0+ Y2twdF9sY2spOwotCQlDaGVja3BvaW50ZXJTaG1lbS0+bWF4X3JlcXVlc3RzID0gTWluKE5C dWZmZXJzLCBNQVhfQ0hFQ0tQT0lOVF9SRVFVRVNUUyk7Ci0JCUNoZWNrcG9pbnRlclNobWVt LT5oZWFkID0gQ2hlY2twb2ludGVyU2htZW0tPnRhaWwgPSAwOwotCQlDb25kaXRpb25WYXJp YWJsZUluaXQoJkNoZWNrcG9pbnRlclNobWVtLT5zdGFydF9jdik7Ci0JCUNvbmRpdGlvblZh cmlhYmxlSW5pdCgmQ2hlY2twb2ludGVyU2htZW0tPmRvbmVfY3YpOwotCX0KKwlTcGluTG9j a0luaXQoJkNoZWNrcG9pbnRlclNobWVtLT5ja3B0X2xjayk7CisJQ2hlY2twb2ludGVyU2ht ZW0tPm1heF9yZXF1ZXN0cyA9IE1pbihOQnVmZmVycywgTUFYX0NIRUNLUE9JTlRfUkVRVUVT VFMpOworCUNoZWNrcG9pbnRlclNobWVtLT5oZWFkID0gQ2hlY2twb2ludGVyU2htZW0tPnRh aWwgPSAwOworCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmQ2hlY2twb2ludGVyU2htZW0tPnN0 YXJ0X2N2KTsKKwlDb25kaXRpb25WYXJpYWJsZUluaXQoJkNoZWNrcG9pbnRlclNobWVtLT5k b25lX2N2KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv ZGF0YWNoZWNrc3VtX3N0YXRlLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2RhdGFjaGVj a3N1bV9zdGF0ZS5jCmluZGV4IDc2MDA0YmNlZGM2Li45NmYwNGE4YmZiYyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9kYXRhY2hlY2tzdW1fc3RhdGUuYworKysgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2RhdGFjaGVja3N1bV9zdGF0ZS5jCkBAIC0yMTEsNiAr MjExLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCisjaW5jbHVkZSAi c3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIK QEAgLTM0Niw2ICszNDcsNyBAQCBzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IGxhdW5j aGVyX3J1bm5pbmcgPSBmYWxzZTsKIHN0YXRpYyBEYXRhQ2hlY2tzdW1zV29ya2VyT3BlcmF0 aW9uIG9wZXJhdGlvbjsKIAogLyogUHJvdG90eXBlcyAqLworc3RhdGljIHZvaWQgRGF0YUNo ZWNrc3Vtc1NobWVtUmVxdWVzdCh2b2lkICphcmcpOwogc3RhdGljIGJvb2wgRGF0YWJhc2VF eGlzdHMoT2lkIGRib2lkKTsKIHN0YXRpYyBMaXN0ICpCdWlsZERhdGFiYXNlTGlzdCh2b2lk KTsKIHN0YXRpYyBMaXN0ICpCdWlsZFJlbGF0aW9uTGlzdChib29sIHRlbXBfcmVsYXRpb25z LCBib29sIGluY2x1ZGVfc2hhcmVkKTsKQEAgLTM1Niw2ICszNTgsMTAgQEAgc3RhdGljIGJv b2wgUHJvY2Vzc1NpbmdsZVJlbGF0aW9uRm9yayhSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtOdW0sIEJ1ZmZlckEKIHN0YXRpYyB2b2lkIGxhdW5jaGVyX2NhbmNlbF9oYW5kbGVy KFNJR05BTF9BUkdTKTsKIHN0YXRpYyB2b2lkIFdhaXRGb3JBbGxUcmFuc2FjdGlvbnNUb0Zp bmlzaCh2b2lkKTsKIAorY29uc3QgU2htZW1DYWxsYmFja3MgRGF0YUNoZWNrc3Vtc1NobWVt Q2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gRGF0YUNoZWNrc3Vtc1NobWVtUmVxdWVz dCwKK307CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogRnVuY3Rpb25hbGl0eSBm b3IgbWFuaXB1bGF0aW5nIHRoZSBkYXRhIGNoZWNrc3VtIHN0YXRlIGluIHRoZSBjbHVzdGVy CiAgKi8KQEAgLTEyMzYsMzUgKzEyNDIsMTkgQEAgUHJvY2Vzc0FsbERhdGFiYXNlcyh2b2lk KQogfQogCiAvKgotICogRGF0YUNoZWNrc3VtU3RhdGVTaXplCi0gKgkJQ29tcHV0ZSByZXF1 aXJlZCBzcGFjZSBmb3IgZGF0YWNoZWNrc3Vtc3dvcmtlci1yZWxhdGVkIHNoYXJlZCBtZW1v cnkKKyAqIERhdGFDaGVja3N1bVNobWVtUmVxdWVzdAorICoJCVJlcXVlc3QgZGF0YWNoZWNr c3Vtc3dvcmtlci1yZWxhdGVkIHNoYXJlZCBtZW1vcnkKICAqLwotU2l6ZQotRGF0YUNoZWNr c3Vtc1NobWVtU2l6ZSh2b2lkKQotewotCVNpemUJCXNpemU7Ci0KLQlzaXplID0gc2l6ZW9m KERhdGFDaGVja3N1bXNTdGF0ZVN0cnVjdCk7Ci0Jc2l6ZSA9IE1BWEFMSUdOKHNpemUpOwot Ci0JcmV0dXJuIHNpemU7Ci19Ci0KLS8qCi0gKiBEYXRhQ2hlY2tzdW1TdGF0ZUluaXQKLSAq CQlBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBkYXRhY2hlY2tzdW1zd29ya2VyLXJlbGF0ZWQg c2hhcmVkIG1lbW9yeQotICovCi12b2lkCi1EYXRhQ2hlY2tzdW1zU2htZW1Jbml0KHZvaWQp CitzdGF0aWMgdm9pZAorRGF0YUNoZWNrc3Vtc1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7 Ci0JYm9vbAkJZm91bmQ7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBEYXRhQ2hlY2tzdW1z U3RhdGVTdHJ1Y3RTaG1lbURlc2M7CiAKLQlEYXRhQ2hlY2tzdW1TdGF0ZSA9IChEYXRhQ2hl Y2tzdW1zU3RhdGVTdHJ1Y3QgKikKLQkJU2htZW1Jbml0U3RydWN0KCJEYXRhQ2hlY2tzdW1z V29ya2VyIERhdGEiLAotCQkJCQkJRGF0YUNoZWNrc3Vtc1NobWVtU2l6ZSgpLAotCQkJCQkJ JmZvdW5kKTsKLQlpZiAoIWZvdW5kKQotCQlNZW1TZXQoRGF0YUNoZWNrc3VtU3RhdGUsIDAs IERhdGFDaGVja3N1bXNTaG1lbVNpemUoKSk7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZEYXRh Q2hlY2tzdW1zU3RhdGVTdHJ1Y3RTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIkRhdGFD aGVja3N1bXNXb3JrZXIgRGF0YSIsCisJCQkJCSAgIC5zaXplID0gc2l6ZW9mKERhdGFDaGVj a3N1bXNTdGF0ZVN0cnVjdCksCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJkRhdGFDaGVj a3N1bVN0YXRlLAorCQkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9wZ2FyY2guYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKaW5k ZXggZmE0YmRmZTlhYjkuLjg4OGE1M2U5NmQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL3BnYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNo LmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNs dWRlICJzdG9yYWdlL3Byb2NzaWduYWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgi CisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3Vj LmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9wc19z dGF0dXMuaCIKQEAgLTE1NCwzMyArMTU1LDM0IEBAIHN0YXRpYyBpbnQJcmVhZHlfZmlsZV9j b21wYXJhdG9yKERhdHVtIGEsIERhdHVtIGIsIHZvaWQgKmFyZyk7CiBzdGF0aWMgdm9pZCBM b2FkQXJjaGl2ZUxpYnJhcnkodm9pZCk7CiBzdGF0aWMgdm9pZCBwZ2FyY2hfY2FsbF9tb2R1 bGVfc2h1dGRvd25fY2IoaW50IGNvZGUsIERhdHVtIGFyZyk7CiAKLS8qIFJlcG9ydCBzaGFy ZWQgbWVtb3J5IHNwYWNlIG5lZWRlZCBieSBQZ0FyY2hTaG1lbUluaXQgKi8KLVNpemUKLVBn QXJjaFNobWVtU2l6ZSh2b2lkKQotewotCVNpemUJCXNpemUgPSAwOwotCi0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIHNpemVvZihQZ0FyY2hEYXRhKSk7CitzdGF0aWMgdm9pZCBQZ0FyY2hT aG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIFBnQXJjaFNobWVtSW5pdCh2 b2lkICphcmcpOwogCi0JcmV0dXJuIHNpemU7Ci19Citjb25zdCBTaG1lbUNhbGxiYWNrcyBQ Z0FyY2hTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IFBnQXJjaFNobWVtUmVx dWVzdCwKKwkuaW5pdF9mbiA9IFBnQXJjaFNobWVtSW5pdCwKK307CiAKLS8qIEFsbG9jYXRl IGFuZCBpbml0aWFsaXplIGFyY2hpdmVyLXJlbGF0ZWQgc2hhcmVkIG1lbW9yeSAqLwotdm9p ZAotUGdBcmNoU2htZW1Jbml0KHZvaWQpCisvKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IHNw YWNlIG5lZWRlZCBieSB0aGUgYXJjaGl2ZXIgKi8KK3N0YXRpYyB2b2lkCitQZ0FyY2hTaG1l bVJlcXVlc3Qodm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOworCXN0YXRpYyBTaG1lbVN0 cnVjdERlc2MgUGdBcmNoU2htZW1EZXNjOwogCi0JUGdBcmNoID0gKFBnQXJjaERhdGEgKikK LQkJU2htZW1Jbml0U3RydWN0KCJBcmNoaXZlciBEYXRhIiwgUGdBcmNoU2htZW1TaXplKCks ICZmb3VuZCk7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZQZ0FyY2hTaG1lbURlc2MsCisJCQkJ CSAgIC5uYW1lID0gIkFyY2hpdmVyIERhdGEiLAorCQkJCQkgICAuc2l6ZSA9IHNpemVvZihQ Z0FyY2hEYXRhKSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmUGdBcmNoLAorCQkpOwor fQogCi0JaWYgKCFmb3VuZCkKLQl7Ci0JCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgc28gaW5p dGlhbGl6ZSAqLwotCQlNZW1TZXQoUGdBcmNoLCAwLCBQZ0FyY2hTaG1lbVNpemUoKSk7Ci0J CVBnQXJjaC0+cGdwcm9jbm8gPSBJTlZBTElEX1BST0NfTlVNQkVSOwotCQlwZ19hdG9taWNf aW5pdF91MzIoJlBnQXJjaC0+Zm9yY2VfZGlyX3NjYW4sIDApOwotCX0KKy8qIEluaXRpYWxp emUgYXJjaGl2ZXItcmVsYXRlZCBzaGFyZWQgbWVtb3J5ICovCitzdGF0aWMgdm9pZAorUGdB cmNoU2htZW1Jbml0KHZvaWQgKmFyZykKK3sKKwlNZW1TZXQoUGdBcmNoLCAwLCBzaXplb2Yo UGdBcmNoRGF0YSkpOworCVBnQXJjaC0+cGdwcm9jbm8gPSBJTlZBTElEX1BST0NfTlVNQkVS OworCXBnX2F0b21pY19pbml0X3UzMigmUGdBcmNoLT5mb3JjZV9kaXJfc2NhbiwgMCk7CiB9 CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6 ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jCmluZGV4IGEz N2IzMDE4YWJmLi45Zjg3YmQwZjI0MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci93YWxzdW1tYXJpemVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxz dW1tYXJpemVyLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3Byb2Mu aCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NzaWduYWwuaCIKICNpbmNsdWRlICJzdG9yYWdl L3NobWVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAi dXRpbHMvZ3VjLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1 dGlscy93YWl0X2V2ZW50LmgiCkBAIC0xMDksNiArMTEwLDE0IEBAIHR5cGVkZWYgc3RydWN0 CiAvKiBQb2ludGVyIHRvIHNoYXJlZCBtZW1vcnkgc3RhdGUuICovCiBzdGF0aWMgV2FsU3Vt bWFyaXplckRhdGEgKldhbFN1bW1hcml6ZXJDdGw7CiAKK3N0YXRpYyB2b2lkIFdhbFN1bW1h cml6ZXJTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIFdhbFN1bW1hcml6 ZXJTaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgV2FsU3Vt bWFyaXplclNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gV2FsU3VtbWFyaXpl clNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFdhbFN1bW1hcml6ZXJTaG1lbUluaXQsCit9 OworCiAvKgogICogV2hlbiB3ZSByZWFjaCBlbmQgb2YgV0FMIGFuZCBuZWVkIHRvIHJlYWQg bW9yZSwgd2Ugc2xlZXAgZm9yIGEgbnVtYmVyIG9mCiAgKiBtaWxsaXNlY29uZHMgdGhhdCBp cyBhbiBpbnRlZ2VyIG11bHRpcGxlIG9mIE1TX1BFUl9TTEVFUF9RVUFOVFVNLiBUaGlzIGlz CkBAIC0xNjgsNDMgKzE3NywzNyBAQCBzdGF0aWMgdm9pZCBzdW1tYXJpemVyX3dhaXRfZm9y X3dhbCh2b2lkKTsKIHN0YXRpYyB2b2lkIE1heWJlUmVtb3ZlT2xkV2FsU3VtbWFyaWVzKHZv aWQpOwogCiAvKgotICogQW1vdW50IG9mIHNoYXJlZCBtZW1vcnkgcmVxdWlyZWQgZm9yIHRo aXMgbW9kdWxlLgorICogUmVnaXN0ZXIgc2hhcmVkIG1lbW9yeSBzcGFjZSBuZWVkZWQgYnkg dGhpcyBtb2R1bGUuCiAgKi8KLVNpemUKLVdhbFN1bW1hcml6ZXJTaG1lbVNpemUodm9pZCkK K3N0YXRpYyB2b2lkCitXYWxTdW1tYXJpemVyU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsK LQlyZXR1cm4gc2l6ZW9mKFdhbFN1bW1hcml6ZXJEYXRhKTsKKwlzdGF0aWMgU2htZW1TdHJ1 Y3REZXNjIFdhbFN1bW1hcml6ZXJTaG1lbURlc2M7CisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3Qo JldhbFN1bW1hcml6ZXJTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIldhbCBTdW1tYXJp emVyIEN0bCIsCisJCQkJCSAgIC5zaXplID0gc2l6ZW9mKFdhbFN1bW1hcml6ZXJEYXRhKSwK KwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmV2FsU3VtbWFyaXplckN0bCwKKwkJKTsKIH0K IAogLyoKLSAqIENyZWF0ZSBvciBhdHRhY2ggdG8gc2hhcmVkIG1lbW9yeSBzZWdtZW50IGZv ciB0aGlzIG1vZHVsZS4KKyAqIEluaXRpYWxpemUgc2hhcmVkIG1lbW9yeSBmb3IgdGhpcyBt b2R1bGUuCiAgKi8KLXZvaWQKLVdhbFN1bW1hcml6ZXJTaG1lbUluaXQodm9pZCkKK3N0YXRp YyB2b2lkCitXYWxTdW1tYXJpemVyU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlm b3VuZDsKLQotCVdhbFN1bW1hcml6ZXJDdGwgPSAoV2FsU3VtbWFyaXplckRhdGEgKikKLQkJ U2htZW1Jbml0U3RydWN0KCJXYWwgU3VtbWFyaXplciBDdGwiLCBXYWxTdW1tYXJpemVyU2ht ZW1TaXplKCksCi0JCQkJCQkmZm91bmQpOwotCi0JaWYgKCFmb3VuZCkKLQl7Ci0JCS8qCi0J CSAqIEZpcnN0IHRpbWUgdGhyb3VnaCwgc28gaW5pdGlhbGl6ZS4KLQkJICoKLQkJICogV2Un cmUganVzdCBmaWxsaW5nIGluIGR1bW15IHZhbHVlcyBoZXJlIC0tIHRoZSByZWFsIGluaXRp YWxpemF0aW9uCi0JCSAqIHdpbGwgaGFwcGVuIHdoZW4gR2V0T2xkZXN0VW5zdW1tYXJpemVk TFNOKCkgaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QKLQkJICogdGltZS4KLQkJICovCi0JCVdh bFN1bW1hcml6ZXJDdGwtPmluaXRpYWxpemVkID0gZmFsc2U7Ci0JCVdhbFN1bW1hcml6ZXJD dGwtPnN1bW1hcml6ZWRfdGxpID0gMDsKLQkJV2FsU3VtbWFyaXplckN0bC0+c3VtbWFyaXpl ZF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKLQkJV2FsU3VtbWFyaXplckN0bC0+bHNuX2lz X2V4YWN0ID0gZmFsc2U7Ci0JCVdhbFN1bW1hcml6ZXJDdGwtPnN1bW1hcml6ZXJfcGdwcm9j bm8gPSBJTlZBTElEX1BST0NfTlVNQkVSOwotCQlXYWxTdW1tYXJpemVyQ3RsLT5wZW5kaW5n X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwotCQlDb25kaXRpb25WYXJpYWJsZUluaXQoJldh bFN1bW1hcml6ZXJDdGwtPnN1bW1hcnlfZmlsZV9jdik7Ci0JfQorCS8qCisJICogV2UncmUg anVzdCBmaWxsaW5nIGluIGR1bW15IHZhbHVlcyBoZXJlIC0tIHRoZSByZWFsIGluaXRpYWxp emF0aW9uIHdpbGwKKwkgKiBoYXBwZW4gd2hlbiBHZXRPbGRlc3RVbnN1bW1hcml6ZWRMU04o KSBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lLgorCSAqLworCVdhbFN1bW1hcml6ZXJD dGwtPmluaXRpYWxpemVkID0gZmFsc2U7CisJV2FsU3VtbWFyaXplckN0bC0+c3VtbWFyaXpl ZF90bGkgPSAwOworCVdhbFN1bW1hcml6ZXJDdGwtPnN1bW1hcml6ZWRfbHNuID0gSW52YWxp ZFhMb2dSZWNQdHI7CisJV2FsU3VtbWFyaXplckN0bC0+bHNuX2lzX2V4YWN0ID0gZmFsc2U7 CisJV2FsU3VtbWFyaXplckN0bC0+c3VtbWFyaXplcl9wZ3Byb2NubyA9IElOVkFMSURfUFJP Q19OVU1CRVI7CisJV2FsU3VtbWFyaXplckN0bC0+cGVuZGluZ19sc24gPSBJbnZhbGlkWExv Z1JlY1B0cjsKKwlDb25kaXRpb25WYXJpYWJsZUluaXQoJldhbFN1bW1hcml6ZXJDdGwtPnN1 bW1hcnlfZmlsZV9jdik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2xhdW5jaGVyLmMKaW5kZXggMDk5NjQxOTg1NTAuLmYxNzczMjc5OTkxIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCkBAIC0zOCw2 ICszOCw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdl L3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInN0 b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNs dWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBA IC03MSw2ICs3MiwxNCBAQCB0eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVwQ3R4U3RydWN0CiAK IHN0YXRpYyBMb2dpY2FsUmVwQ3R4U3RydWN0ICpMb2dpY2FsUmVwQ3R4OwogCitzdGF0aWMg dm9pZCBBcHBseUxhdW5jaGVyU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9p ZCBBcHBseUxhdW5jaGVyU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2Fs bGJhY2tzIEFwcGx5TGF1bmNoZXJTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9 IEFwcGx5TGF1bmNoZXJTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBBcHBseUxhdW5jaGVy U2htZW1Jbml0LAorfTsKKwogLyogYW4gZW50cnkgaW4gdGhlIGxhc3Qtc3RhcnQtdGltZXMg c2hhcmVkIGhhc2ggdGFibGUgKi8KIHR5cGVkZWYgc3RydWN0IExhdW5jaGVyTGFzdFN0YXJ0 VGltZXNFbnRyeQogewpAQCAtOTcyLDEyICs5ODEsMTMgQEAgbG9naWNhbHJlcF9wYV93b3Jr ZXJfY291bnQoT2lkIHN1YmlkKQogfQogCiAvKgotICogQXBwbHlMYXVuY2hlclNobWVtU2l6 ZQotICoJCUNvbXB1dGUgc3BhY2UgbmVlZGVkIGZvciByZXBsaWNhdGlvbiBsYXVuY2hlciBz aGFyZWQgbWVtb3J5CisgKiBBcHBseUxhdW5jaGVyU2htZW1SZXF1ZXN0CisgKgkJUmVnaXN0 ZXIgc2hhcmVkIG1lbW9yeSBzcGFjZSBuZWVkZWQgZm9yIHJlcGxpY2F0aW9uIGxhdW5jaGVy CiAgKi8KLVNpemUKLUFwcGx5TGF1bmNoZXJTaG1lbVNpemUodm9pZCkKK3N0YXRpYyB2b2lk CitBcHBseUxhdW5jaGVyU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsKKwlzdGF0aWMgU2ht ZW1TdHJ1Y3REZXNjIEFwcGx5TGF1bmNoZXJTaG1lbURlc2M7CiAJU2l6ZQkJc2l6ZTsKIAog CS8qCkBAIC05ODcsNyArOTk3LDExIEBAIEFwcGx5TGF1bmNoZXJTaG1lbVNpemUodm9pZCkK IAlzaXplID0gTUFYQUxJR04oc2l6ZSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9z aXplKG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMsCiAJCQkJCQkJCSAgIHNpemVv ZihMb2dpY2FsUmVwV29ya2VyKSkpOwotCXJldHVybiBzaXplOworCVNobWVtUmVxdWVzdFN0 cnVjdCgmQXBwbHlMYXVuY2hlclNobWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiTG9naWNh bCBSZXBsaWNhdGlvbiBMYXVuY2hlciBEYXRhIiwKKwkJCQkJICAgLnNpemUgPSBzaXplLAor CQkJCQkgICAucHRyID0gKHZvaWQgKiopICZMb2dpY2FsUmVwQ3R4LAorCQkpOwogfQogCiAv KgpAQCAtMTAyOCwzNSArMTA0MiwyMyBAQCBBcHBseUxhdW5jaGVyUmVnaXN0ZXIodm9pZCkK IAogLyoKICAqIEFwcGx5TGF1bmNoZXJTaG1lbUluaXQKLSAqCQlBbGxvY2F0ZSBhbmQgaW5p dGlhbGl6ZSByZXBsaWNhdGlvbiBsYXVuY2hlciBzaGFyZWQgbWVtb3J5CisgKgkJSW5pdGlh bGl6ZSByZXBsaWNhdGlvbiBsYXVuY2hlciBzaGFyZWQgbWVtb3J5CiAgKi8KLXZvaWQKLUFw cGx5TGF1bmNoZXJTaG1lbUluaXQodm9pZCkKK3N0YXRpYyB2b2lkCitBcHBseUxhdW5jaGVy U2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsKKwlpbnQJCQlzbG90Owog Ci0JTG9naWNhbFJlcEN0eCA9IChMb2dpY2FsUmVwQ3R4U3RydWN0ICopCi0JCVNobWVtSW5p dFN0cnVjdCgiTG9naWNhbCBSZXBsaWNhdGlvbiBMYXVuY2hlciBEYXRhIiwKLQkJCQkJCUFw cGx5TGF1bmNoZXJTaG1lbVNpemUoKSwKLQkJCQkJCSZmb3VuZCk7CisJTG9naWNhbFJlcEN0 eC0+bGFzdF9zdGFydF9kc2EgPSBEU0FfSEFORExFX0lOVkFMSUQ7CisJTG9naWNhbFJlcEN0 eC0+bGFzdF9zdGFydF9kc2ggPSBEU0hBU0hfSEFORExFX0lOVkFMSUQ7CiAKLQlpZiAoIWZv dW5kKQorCS8qIEluaXRpYWxpemUgbWVtb3J5IGFuZCBzcGluIGxvY2tzIGZvciBlYWNoIHdv cmtlciBzbG90LiAqLworCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBtYXhfbG9naWNhbF9yZXBs aWNhdGlvbl93b3JrZXJzOyBzbG90KyspCiAJewotCQlpbnQJCQlzbG90OwotCi0JCW1lbXNl dChMb2dpY2FsUmVwQ3R4LCAwLCBBcHBseUxhdW5jaGVyU2htZW1TaXplKCkpOwotCi0JCUxv Z2ljYWxSZXBDdHgtPmxhc3Rfc3RhcnRfZHNhID0gRFNBX0hBTkRMRV9JTlZBTElEOwotCQlM b2dpY2FsUmVwQ3R4LT5sYXN0X3N0YXJ0X2RzaCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsK KwkJTG9naWNhbFJlcFdvcmtlciAqd29ya2VyID0gJkxvZ2ljYWxSZXBDdHgtPndvcmtlcnNb c2xvdF07CiAKLQkJLyogSW5pdGlhbGl6ZSBtZW1vcnkgYW5kIHNwaW4gbG9ja3MgZm9yIGVh Y2ggd29ya2VyIHNsb3QuICovCi0JCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBtYXhfbG9naWNh bF9yZXBsaWNhdGlvbl93b3JrZXJzOyBzbG90KyspCi0JCXsKLQkJCUxvZ2ljYWxSZXBXb3Jr ZXIgKndvcmtlciA9ICZMb2dpY2FsUmVwQ3R4LT53b3JrZXJzW3Nsb3RdOwotCi0JCQltZW1z ZXQod29ya2VyLCAwLCBzaXplb2YoTG9naWNhbFJlcFdvcmtlcikpOwotCQkJU3BpbkxvY2tJ bml0KCZ3b3JrZXItPnJlbG11dGV4KTsKLQkJfQorCQltZW1zZXQod29ya2VyLCAwLCBzaXpl b2YoTG9naWNhbFJlcFdvcmtlcikpOworCQlTcGluTG9ja0luaXQoJndvcmtlci0+cmVsbXV0 ZXgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9sb2dpY2FsY3RsLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xv Z2ljYWxjdGwuYwppbmRleCA0ZTI5Mjk1MTIwMS4uOTg2MTdiNTYxZGYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGN0bC5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGN0bC5jCkBAIC03Miw2ICs3 Miw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9w cm9jYXJyYXkuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NzaWduYWwuaCIKKyNpbmNsdWRl ICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9p bnQuaCIKIAogLyoKQEAgLTk4LDYgKzk5LDEyIEBAIHR5cGVkZWYgc3RydWN0IExvZ2ljYWxE ZWNvZGluZ0N0bERhdGEKIAogc3RhdGljIExvZ2ljYWxEZWNvZGluZ0N0bERhdGEgKkxvZ2lj YWxEZWNvZGluZ0N0bCA9IE5VTEw7CiAKK3N0YXRpYyB2b2lkIExvZ2ljYWxEZWNvZGluZ0N0 bFNobWVtUmVxdWVzdCh2b2lkICphcmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNrcyBMb2dp Y2FsRGVjb2RpbmdDdGxTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IExvZ2lj YWxEZWNvZGluZ0N0bFNobWVtUmVxdWVzdCwKK307CisKIC8qCiAgKiBBIHByb2Nlc3MtbG9j YWwgY2FjaGUgb2YgTG9naWNhbERlY29kaW5nQ3RsLT54bG9nX2xvZ2ljYWxfaW5mby4gVGhp cyBpcwogICogaW5pdGlhbGl6ZWQgYXQgcHJvY2VzcyBzdGFydHVwLCBhbmQgdXBkYXRlZCB3 aGVuIHByb2Nlc3NpbmcgdGhlIHByb2Nlc3MKQEAgLTEyMCwyMyArMTI3LDE2IEBAIHN0YXRp YyB2b2lkIHVwZGF0ZV94bG9nX2xvZ2ljYWxfaW5mbyh2b2lkKTsKIHN0YXRpYyB2b2lkIGFi b3J0X2xvZ2ljYWxfZGVjb2RpbmdfYWN0aXZhdGlvbihpbnQgY29kZSwgRGF0dW0gYXJnKTsK IHN0YXRpYyB2b2lkIHdyaXRlX2xvZ2ljYWxfZGVjb2Rpbmdfc3RhdHVzX3VwZGF0ZV9yZWNv cmQoYm9vbCBzdGF0dXMpOwogCi1TaXplCi1Mb2dpY2FsRGVjb2RpbmdDdGxTaG1lbVNpemUo dm9pZCkKLXsKLQlyZXR1cm4gc2l6ZW9mKExvZ2ljYWxEZWNvZGluZ0N0bERhdGEpOwotfQot Ci12b2lkCi1Mb2dpY2FsRGVjb2RpbmdDdGxTaG1lbUluaXQodm9pZCkKK3N0YXRpYyB2b2lk CitMb2dpY2FsRGVjb2RpbmdDdGxTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogewotCWJvb2wJ CWZvdW5kOwotCi0JTG9naWNhbERlY29kaW5nQ3RsID0gU2htZW1Jbml0U3RydWN0KCJMb2dp Y2FsIGRlY29kaW5nIGNvbnRyb2wiLAotCQkJCQkJCQkJCSBMb2dpY2FsRGVjb2RpbmdDdGxT aG1lbVNpemUoKSwKLQkJCQkJCQkJCQkgJmZvdW5kKTsKKwlzdGF0aWMgU2htZW1TdHJ1Y3RE ZXNjIExvZ2ljYWxEZWNvZGluZ0N0bFNobWVtRGVzYzsKIAotCWlmICghZm91bmQpCi0JCU1l bVNldChMb2dpY2FsRGVjb2RpbmdDdGwsIDAsIExvZ2ljYWxEZWNvZGluZ0N0bFNobWVtU2l6 ZSgpKTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkxvZ2ljYWxEZWNvZGluZ0N0bFNobWVtRGVz YywKKwkJCQkJICAgLm5hbWUgPSAiTG9naWNhbCBkZWNvZGluZyBjb250cm9sIiwKKwkJCQkJ ICAgLnNpemUgPSBzaXplb2YoTG9naWNhbERlY29kaW5nQ3RsRGF0YSksCisJCQkJCSAgIC5w dHIgPSAodm9pZCAqKikgJkxvZ2ljYWxEZWNvZGluZ0N0bCwKKwkJKTsKIH0KIAogLyoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jCmluZGV4IDY2MWQ2OGFk NjUzLi5kYWE5ODQzMzBmMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9vcmlnaW4uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L29yaWdpbi5jCkBAIC04OCw2ICs4OCw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgog I2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCisj aW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgogI2luY2x1ZGUgInV0aWxzL2d1 Yy5oIgpAQCAtMTc2LDYgKzE3NywxNiBAQCBSZXBsT3JpZ2luWGFjdFN0YXRlIHJlcGxvcmln aW5feGFjdF9zdGF0ZSA9IHsKICAqLwogc3RhdGljIFJlcGxpY2F0aW9uU3RhdGUgKnJlcGxp Y2F0aW9uX3N0YXRlczsKIAorc3RhdGljIHZvaWQgUmVwbGljYXRpb25PcmlnaW5TaG1lbVJl cXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIFJlcGxpY2F0aW9uT3JpZ2luU2htZW1J bml0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBSZXBsaWNhdGlvbk9yaWdpblNobWVtQXR0 YWNoKHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIFJlcGxpY2F0aW9uT3Jp Z2luU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBSZXBsaWNhdGlvbk9yaWdp blNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFJlcGxpY2F0aW9uT3JpZ2luU2htZW1Jbml0 LAorCS5hdHRhY2hfZm4gPSBSZXBsaWNhdGlvbk9yaWdpblNobWVtQXR0YWNoLAorfTsKKwog LyoKICAqIEFjdHVhbCBzaGFyZWQgbWVtb3J5IGJsb2NrIChyZXBsaWNhdGlvbl9zdGF0ZXNb XSBpcyBub3cgcGFydCBvZiB0aGlzKS4KICAqLwpAQCAtNTM5LDUwICs1NTAsNTAgQEAgcmVw bG9yaWdpbl9ieV9vaWQoUmVwbE9yaWdpbklkIHJvaWRlbnQsIGJvb2wgbWlzc2luZ19vaywg Y2hhciAqKnJvbmFtZSkKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLVNpemUK LVJlcGxpY2F0aW9uT3JpZ2luU2htZW1TaXplKHZvaWQpCitzdGF0aWMgdm9pZAorUmVwbGlj YXRpb25PcmlnaW5TaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogeworCXN0YXRpYyBTaG1lbVN0 cnVjdERlc2MgUmVwbGljYXRpb25PcmlnaW5TaG1lbURlc2M7CiAJU2l6ZQkJc2l6ZSA9IDA7 CiAKIAlpZiAobWF4X2FjdGl2ZV9yZXBsaWNhdGlvbl9vcmlnaW5zID09IDApCi0JCXJldHVy biBzaXplOworCQlyZXR1cm47CiAKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgb2Zmc2V0b2Yo UmVwbGljYXRpb25TdGF0ZUN0bCwgc3RhdGVzKSk7Ci0KIAlzaXplID0gYWRkX3NpemUoc2l6 ZSwKIAkJCQkJbXVsX3NpemUobWF4X2FjdGl2ZV9yZXBsaWNhdGlvbl9vcmlnaW5zLCBzaXpl b2YoUmVwbGljYXRpb25TdGF0ZSkpKTsKLQlyZXR1cm4gc2l6ZTsKKwlTaG1lbVJlcXVlc3RT dHJ1Y3QoJlJlcGxpY2F0aW9uT3JpZ2luU2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJS ZXBsaWNhdGlvbk9yaWdpblN0YXRlIiwKKwkJCQkJICAgLnNpemUgPSBzaXplLAorCQkJCQkg ICAucHRyID0gKHZvaWQgKiopICZyZXBsaWNhdGlvbl9zdGF0ZXNfY3RsLAorCQkpOwogfQog Ci12b2lkCi1SZXBsaWNhdGlvbk9yaWdpblNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQK K1JlcGxpY2F0aW9uT3JpZ2luU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3Vu ZDsKLQogCWlmIChtYXhfYWN0aXZlX3JlcGxpY2F0aW9uX29yaWdpbnMgPT0gMCkKIAkJcmV0 dXJuOwogCi0JcmVwbGljYXRpb25fc3RhdGVzX2N0bCA9IChSZXBsaWNhdGlvblN0YXRlQ3Rs ICopCi0JCVNobWVtSW5pdFN0cnVjdCgiUmVwbGljYXRpb25PcmlnaW5TdGF0ZSIsCi0JCQkJ CQlSZXBsaWNhdGlvbk9yaWdpblNobWVtU2l6ZSgpLAotCQkJCQkJJmZvdW5kKTsKIAlyZXBs aWNhdGlvbl9zdGF0ZXMgPSByZXBsaWNhdGlvbl9zdGF0ZXNfY3RsLT5zdGF0ZXM7CiAKLQlp ZiAoIWZvdW5kKQotCXsKLQkJaW50CQkJaTsKKwlyZXBsaWNhdGlvbl9zdGF0ZXNfY3RsLT50 cmFuY2hlX2lkID0gTFdUUkFOQ0hFX1JFUExJQ0FUSU9OX09SSUdJTl9TVEFURTsKIAotCQlN ZW1TZXQocmVwbGljYXRpb25fc3RhdGVzX2N0bCwgMCwgUmVwbGljYXRpb25PcmlnaW5TaG1l bVNpemUoKSk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhfYWN0aXZlX3JlcGxpY2F0aW9u X29yaWdpbnM7IGkrKykKKwl7CisJCUxXTG9ja0luaXRpYWxpemUoJnJlcGxpY2F0aW9uX3N0 YXRlc1tpXS5sb2NrLAorCQkJCQkJIHJlcGxpY2F0aW9uX3N0YXRlc19jdGwtPnRyYW5jaGVf aWQpOworCQlDb25kaXRpb25WYXJpYWJsZUluaXQoJnJlcGxpY2F0aW9uX3N0YXRlc1tpXS5v cmlnaW5fY3YpOworCX0KK30KIAotCQlyZXBsaWNhdGlvbl9zdGF0ZXNfY3RsLT50cmFuY2hl X2lkID0gTFdUUkFOQ0hFX1JFUExJQ0FUSU9OX09SSUdJTl9TVEFURTsKK3N0YXRpYyB2b2lk CitSZXBsaWNhdGlvbk9yaWdpblNobWVtQXR0YWNoKHZvaWQgKmFyZykKK3sKKwlpZiAobWF4 X2FjdGl2ZV9yZXBsaWNhdGlvbl9vcmlnaW5zID09IDApCisJCXJldHVybjsKIAotCQlmb3Ig KGkgPSAwOyBpIDwgbWF4X2FjdGl2ZV9yZXBsaWNhdGlvbl9vcmlnaW5zOyBpKyspCi0JCXsK LQkJCUxXTG9ja0luaXRpYWxpemUoJnJlcGxpY2F0aW9uX3N0YXRlc1tpXS5sb2NrLAotCQkJ CQkJCSByZXBsaWNhdGlvbl9zdGF0ZXNfY3RsLT50cmFuY2hlX2lkKTsKLQkJCUNvbmRpdGlv blZhcmlhYmxlSW5pdCgmcmVwbGljYXRpb25fc3RhdGVzW2ldLm9yaWdpbl9jdik7Ci0JCX0K LQl9CisJcmVwbGljYXRpb25fc3RhdGVzID0gcmVwbGljYXRpb25fc3RhdGVzX2N0bC0+c3Rh dGVzOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMuYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMuYwppbmRleCBlNzVkYjY5ZTNmNi4uZWM4YWIx YjNkNjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xv dHN5bmMuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5j LmMKQEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNs dWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgor I2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHBy b3QuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL21l bXV0aWxzLmgiCkBAIC0xMTgsNiArMTE5LDE0IEBAIHR5cGVkZWYgc3RydWN0IFNsb3RTeW5j Q3R4U3RydWN0CiAKIHN0YXRpYyBTbG90U3luY0N0eFN0cnVjdCAqU2xvdFN5bmNDdHggPSBO VUxMOwogCitzdGF0aWMgdm9pZCBTbG90U3luY1NobWVtUmVxdWVzdCh2b2lkICphcmcpOwor c3RhdGljIHZvaWQgU2xvdFN5bmNTaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29uc3QgU2ht ZW1DYWxsYmFja3MgU2xvdFN5bmNTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9 IFNsb3RTeW5jU2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gU2xvdFN5bmNTaG1lbUluaXQs Cit9OworCiAvKiBHVUMgdmFyaWFibGUgKi8KIGJvb2wJCXN5bmNfcmVwbGljYXRpb25fc2xv dHMgPSBmYWxzZTsKIApAQCAtMTgyOCwzMiArMTgzNywyOSBAQCBJc1N5bmNpbmdSZXBsaWNh dGlvblNsb3RzKHZvaWQpCiB9CiAKIC8qCi0gKiBBbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSBy ZXF1aXJlZCBmb3Igc2xvdCBzeW5jaHJvbml6YXRpb24uCisgKiBSZWdpc3RlciBzaGFyZWQg bWVtb3J5IHNwYWNlIG5lZWRlZCBmb3Igc2xvdCBzeW5jaHJvbml6YXRpb24uCiAgKi8KLVNp emUKLVNsb3RTeW5jU2htZW1TaXplKHZvaWQpCitzdGF0aWMgdm9pZAorU2xvdFN5bmNTaG1l bVJlcXVlc3Qodm9pZCAqYXJnKQogewotCXJldHVybiBzaXplb2YoU2xvdFN5bmNDdHhTdHJ1 Y3QpOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgU2xvdFN5bmNTaG1lbURlc2M7CisKKwlT aG1lbVJlcXVlc3RTdHJ1Y3QoJlNsb3RTeW5jU2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9 ICJTbG90IFN5bmMgRGF0YSIsCisJCQkJCSAgIC5zaXplID0gc2l6ZW9mKFNsb3RTeW5jQ3R4 U3RydWN0KSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmU2xvdFN5bmNDdHgsCisJCSk7 CiB9CiAKIC8qCi0gKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgc2hhcmVkIG1lbW9y eSBvZiBzbG90IHN5bmNocm9uaXphdGlvbi4KKyAqIEluaXRpYWxpemUgc2hhcmVkIG1lbW9y eSBmb3Igc2xvdCBzeW5jaHJvbml6YXRpb24uCiAgKi8KLXZvaWQKLVNsb3RTeW5jU2htZW1J bml0KHZvaWQpCitzdGF0aWMgdm9pZAorU2xvdFN5bmNTaG1lbUluaXQodm9pZCAqYXJnKQog ewotCVNpemUJCXNpemUgPSBTbG90U3luY1NobWVtU2l6ZSgpOwotCWJvb2wJCWZvdW5kOwot Ci0JU2xvdFN5bmNDdHggPSAoU2xvdFN5bmNDdHhTdHJ1Y3QgKikKLQkJU2htZW1Jbml0U3Ry dWN0KCJTbG90IFN5bmMgRGF0YSIsIHNpemUsICZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQot CXsKLQkJbWVtc2V0KFNsb3RTeW5jQ3R4LCAwLCBzaXplKTsKLQkJU2xvdFN5bmNDdHgtPnBp ZCA9IEludmFsaWRQaWQ7Ci0JCVNwaW5Mb2NrSW5pdCgmU2xvdFN5bmNDdHgtPm11dGV4KTsK LQl9CisJbWVtc2V0KFNsb3RTeW5jQ3R4LCAwLCBzaXplb2YoU2xvdFN5bmNDdHhTdHJ1Y3Qp KTsKKwlTbG90U3luY0N0eC0+cGlkID0gSW52YWxpZFBpZDsKKwlTcGluTG9ja0luaXQoJlNs b3RTeW5jQ3R4LT5tdXRleCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9zbG90LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKaW5k ZXggYTkwOTJmYzIzODIuLmVjNDRjOTllMDRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9zbG90LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5j CkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRl ICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2lu Y2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX2hvb2tzLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5q ZWN0aW9uX3BvaW50LmgiCkBAIC0xNDUsNiArMTQ2LDE0IEBAIFN0YXRpY0Fzc2VydERlY2wo bGVuZ3Rob2YoU2xvdEludmFsaWRhdGlvbkNhdXNlcykgPT0gKFJTX0lOVkFMX01BWF9DQVVT RVMgKyAxKSwKIC8qIENvbnRyb2wgYXJyYXkgZm9yIHJlcGxpY2F0aW9uIHNsb3QgbWFuYWdl bWVudCAqLwogUmVwbGljYXRpb25TbG90Q3RsRGF0YSAqUmVwbGljYXRpb25TbG90Q3RsID0g TlVMTDsKIAorc3RhdGljIHZvaWQgUmVwbGljYXRpb25TbG90c1NobWVtUmVxdWVzdCh2b2lk ICphcmcpOworc3RhdGljIHZvaWQgUmVwbGljYXRpb25TbG90c1NobWVtSW5pdCh2b2lkICph cmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNrcyBSZXBsaWNhdGlvblNsb3RzU2htZW1DYWxs YmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBSZXBsaWNhdGlvblNsb3RzU2htZW1SZXF1ZXN0 LAorCS5pbml0X2ZuID0gUmVwbGljYXRpb25TbG90c1NobWVtSW5pdCwKK307CisKIC8qIE15 IGJhY2tlbmQncyByZXBsaWNhdGlvbiBzbG90IGluIHRoZSBzaGFyZWQgbWVtb3J5IGFycmF5 ICovCiBSZXBsaWNhdGlvblNsb3QgKk15UmVwbGljYXRpb25TbG90ID0gTlVMTDsKIApAQCAt MTgzLDU2ICsxOTIsNDMgQEAgc3RhdGljIHZvaWQgQ3JlYXRlU2xvdE9uRGlzayhSZXBsaWNh dGlvblNsb3QgKnNsb3QpOwogc3RhdGljIHZvaWQgU2F2ZVNsb3RUb1BhdGgoUmVwbGljYXRp b25TbG90ICpzbG90LCBjb25zdCBjaGFyICpkaXIsIGludCBlbGV2ZWwpOwogCiAvKgotICog UmVwb3J0IHNoYXJlZC1tZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IFJlcGxpY2F0aW9uU2xvdHNT aG1lbUluaXQuCisgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRlZCBmb3Ig cmVwbGljYXRpb24gc2xvdHMuCiAgKi8KLVNpemUKLVJlcGxpY2F0aW9uU2xvdHNTaG1lbVNp emUodm9pZCkKK3N0YXRpYyB2b2lkCitSZXBsaWNhdGlvblNsb3RzU2htZW1SZXF1ZXN0KHZv aWQgKmFyZykKIHsKLQlTaXplCQlzaXplID0gMDsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNj IFJlcGxpY2F0aW9uU2xvdHNTaG1lbURlc2M7CisJU2l6ZQkJc2l6ZTsKIAogCWlmIChtYXhf cmVwbGljYXRpb25fc2xvdHMgPT0gMCkKLQkJcmV0dXJuIHNpemU7CisJCXJldHVybjsKIAog CXNpemUgPSBvZmZzZXRvZihSZXBsaWNhdGlvblNsb3RDdGxEYXRhLCByZXBsaWNhdGlvbl9z bG90cyk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsCiAJCQkJCW11bF9zaXplKG1heF9yZXBs aWNhdGlvbl9zbG90cywgc2l6ZW9mKFJlcGxpY2F0aW9uU2xvdCkpKTsKLQotCXJldHVybiBz aXplOworCVNobWVtUmVxdWVzdFN0cnVjdCgmUmVwbGljYXRpb25TbG90c1NobWVtRGVzYywK KwkJCQkJICAgLm5hbWUgPSAiUmVwbGljYXRpb25TbG90IEN0bCIsCisJCQkJCSAgIC5zaXpl ID0gc2l6ZSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmUmVwbGljYXRpb25TbG90Q3Rs LAorCQkpOwogfQogCiAvKgotICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgc2hhcmVkIG1l bW9yeSBmb3IgcmVwbGljYXRpb24gc2xvdHMuCisgKiBJbml0aWFsaXplIHNoYXJlZCBtZW1v cnkgZm9yIHJlcGxpY2F0aW9uIHNsb3RzLgogICovCi12b2lkCi1SZXBsaWNhdGlvblNsb3Rz U2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorUmVwbGljYXRpb25TbG90c1NobWVtSW5p dCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlpZiAobWF4X3JlcGxpY2F0aW9u X3Nsb3RzID09IDApCi0JCXJldHVybjsKLQotCVJlcGxpY2F0aW9uU2xvdEN0bCA9IChSZXBs aWNhdGlvblNsb3RDdGxEYXRhICopCi0JCVNobWVtSW5pdFN0cnVjdCgiUmVwbGljYXRpb25T bG90IEN0bCIsIFJlcGxpY2F0aW9uU2xvdHNTaG1lbVNpemUoKSwKLQkJCQkJCSZmb3VuZCk7 Ci0KLQlpZiAoIWZvdW5kKQorCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4X3JlcGxpY2F0aW9u X3Nsb3RzOyBpKyspCiAJewotCQlpbnQJCQlpOworCQlSZXBsaWNhdGlvblNsb3QgKnNsb3Qg PSAmUmVwbGljYXRpb25TbG90Q3RsLT5yZXBsaWNhdGlvbl9zbG90c1tpXTsKIAotCQkvKiBG aXJzdCB0aW1lIHRocm91Z2gsIHNvIGluaXRpYWxpemUgKi8KLQkJTWVtU2V0KFJlcGxpY2F0 aW9uU2xvdEN0bCwgMCwgUmVwbGljYXRpb25TbG90c1NobWVtU2l6ZSgpKTsKLQotCQlmb3Ig KGkgPSAwOyBpIDwgbWF4X3JlcGxpY2F0aW9uX3Nsb3RzOyBpKyspCi0JCXsKLQkJCVJlcGxp Y2F0aW9uU2xvdCAqc2xvdCA9ICZSZXBsaWNhdGlvblNsb3RDdGwtPnJlcGxpY2F0aW9uX3Ns b3RzW2ldOwotCi0JCQkvKiBldmVyeXRoaW5nIGVsc2UgaXMgemVyb2VkIGJ5IHRoZSBtZW1z ZXQgYWJvdmUgKi8KLQkJCXNsb3QtPmFjdGl2ZV9wcm9jID0gSU5WQUxJRF9QUk9DX05VTUJF UjsKLQkJCVNwaW5Mb2NrSW5pdCgmc2xvdC0+bXV0ZXgpOwotCQkJTFdMb2NrSW5pdGlhbGl6 ZSgmc2xvdC0+aW9faW5fcHJvZ3Jlc3NfbG9jaywKLQkJCQkJCQkgTFdUUkFOQ0hFX1JFUExJ Q0FUSU9OX1NMT1RfSU8pOwotCQkJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZzbG90LT5hY3Rp dmVfY3YpOwotCQl9CisJCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyB6ZXJvZWQgYnkgdGhlIG1l bXNldCBhYm92ZSAqLworCQlzbG90LT5hY3RpdmVfcHJvYyA9IElOVkFMSURfUFJPQ19OVU1C RVI7CisJCVNwaW5Mb2NrSW5pdCgmc2xvdC0+bXV0ZXgpOworCQlMV0xvY2tJbml0aWFsaXpl KCZzbG90LT5pb19pbl9wcm9ncmVzc19sb2NrLAorCQkJCQkJIExXVFJBTkNIRV9SRVBMSUNB VElPTl9TTE9UX0lPKTsKKwkJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZzbG90LT5hY3RpdmVf Y3YpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fs cmVjZWl2ZXJmdW5jcy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXJm dW5jcy5jCmluZGV4IDQ1YjlkNGYwOWYyLi42ZDUwNmZjM2Y0MyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXJmdW5jcy5jCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyZnVuY3MuYwpAQCAtMjksNDcgKzI5LDQ5IEBA CiAjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJv Yy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1 YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNpbmNsdWRlICJ1 dGlscy93YWl0X2V2ZW50LmgiCiAKIFdhbFJjdkRhdGEgKldhbFJjdiA9IE5VTEw7CiAKK3N0 YXRpYyB2b2lkIFdhbFJjdlNobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQg V2FsUmN2U2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIFdh bFJjdlNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gV2FsUmN2U2htZW1SZXF1 ZXN0LAorCS5pbml0X2ZuID0gV2FsUmN2U2htZW1Jbml0LAorfTsKKwogLyoKICAqIEhvdyBs b25nIHRvIHdhaXQgZm9yIHdhbHJlY2VpdmVyIHRvIHN0YXJ0IHVwIGFmdGVyIHJlcXVlc3Rp bmcKICAqIHBvc3RtYXN0ZXIgdG8gbGF1bmNoIGl0LiBJbiBzZWNvbmRzLgogICovCiAjZGVm aW5lIFdBTFJDVl9TVEFSVFVQX1RJTUVPVVQgMTAKIAotLyogUmVwb3J0IHNoYXJlZCBtZW1v cnkgc3BhY2UgbmVlZGVkIGJ5IFdhbFJjdlNobWVtSW5pdCAqLwotU2l6ZQotV2FsUmN2U2ht ZW1TaXplKHZvaWQpCisvKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRlZCBi eSB3YWxyZWNlaXZlciAqLworc3RhdGljIHZvaWQKK1dhbFJjdlNobWVtUmVxdWVzdCh2b2lk ICphcmcpCiB7Ci0JU2l6ZQkJc2l6ZSA9IDA7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBX YWxSY3ZTaG1lbURlc2M7CiAKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9mKFdhbFJj dkRhdGEpKTsKLQotCXJldHVybiBzaXplOworCVNobWVtUmVxdWVzdFN0cnVjdCgmV2FsUmN2 U2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJXYWwgUmVjZWl2ZXIgQ3RsIiwKKwkJCQkJ ICAgLnNpemUgPSBzaXplb2YoV2FsUmN2RGF0YSksCisJCQkJCSAgIC5wdHIgPSAodm9pZCAq KikgJldhbFJjdiwKKwkJKTsKIH0KIAotLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgd2Fs cmVjZWl2ZXItcmVsYXRlZCBzaGFyZWQgbWVtb3J5ICovCi12b2lkCi1XYWxSY3ZTaG1lbUlu aXQodm9pZCkKKy8qIEluaXRpYWxpemUgd2FscmVjZWl2ZXItcmVsYXRlZCBzaGFyZWQgbWVt b3J5ICovCitzdGF0aWMgdm9pZAorV2FsUmN2U2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQli b29sCQlmb3VuZDsKLQotCVdhbFJjdiA9IChXYWxSY3ZEYXRhICopCi0JCVNobWVtSW5pdFN0 cnVjdCgiV2FsIFJlY2VpdmVyIEN0bCIsIFdhbFJjdlNobWVtU2l6ZSgpLCAmZm91bmQpOwot Ci0JaWYgKCFmb3VuZCkKLQl7Ci0JCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgc28gaW5pdGlh bGl6ZSAqLwotCQlNZW1TZXQoV2FsUmN2LCAwLCBXYWxSY3ZTaG1lbVNpemUoKSk7Ci0JCVdh bFJjdi0+d2FsUmN2U3RhdGUgPSBXQUxSQ1ZfU1RPUFBFRDsKLQkJQ29uZGl0aW9uVmFyaWFi bGVJbml0KCZXYWxSY3YtPndhbFJjdlN0b3BwZWRDVik7Ci0JCVNwaW5Mb2NrSW5pdCgmV2Fs UmN2LT5tdXRleCk7Ci0JCXBnX2F0b21pY19pbml0X3U2NCgmV2FsUmN2LT53cml0dGVuVXB0 bywgMCk7Ci0JCVdhbFJjdi0+cHJvY25vID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKLQl9CisJ TWVtU2V0KFdhbFJjdiwgMCwgc2l6ZW9mKFdhbFJjdkRhdGEpKTsKKwlXYWxSY3YtPndhbFJj dlN0YXRlID0gV0FMUkNWX1NUT1BQRUQ7CisJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZXYWxS Y3YtPndhbFJjdlN0b3BwZWRDVik7CisJU3BpbkxvY2tJbml0KCZXYWxSY3YtPm11dGV4KTsK KwlwZ19hdG9taWNfaW5pdF91NjQoJldhbFJjdi0+d3JpdHRlblVwdG8sIDApOworCVdhbFJj di0+cHJvY25vID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIH0KIAogLyogSXMgd2FscmVjZWl2 ZXIgcnVubmluZyAob3Igc3RhcnRpbmcgdXApPyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93 YWxzZW5kZXIuYwppbmRleCAyYmIzZjM0ZGM2ZC4uYjY3ZGFhYTBhNmMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCkBAIC04Niw2ICs4Niw3IEBACiAjaW5jbHVkZSAi c3RvcmFnZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1z LmgiCiAjaW5jbHVkZSAidGNvcC9kZXN0LmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5o IgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgpAQCAtMTE3LDYgKzExOCwxNCBAQAogLyogQXJy YXkgb2YgV2FsU25kcyBpbiBzaGFyZWQgbWVtb3J5ICovCiBXYWxTbmRDdGxEYXRhICpXYWxT bmRDdGwgPSBOVUxMOwogCitzdGF0aWMgdm9pZCBXYWxTbmRTaG1lbVJlcXVlc3Qodm9pZCAq YXJnKTsKK3N0YXRpYyB2b2lkIFdhbFNuZFNobWVtSW5pdCh2b2lkICphcmcpOworCitjb25z dCBTaG1lbUNhbGxiYWNrcyBXYWxTbmRTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9m biA9IFdhbFNuZFNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFdhbFNuZFNobWVtSW5pdCwK K307CisKIC8qIE15IHNsb3QgaW4gdGhlIHNoYXJlZCBtZW1vcnkgYXJyYXkgKi8KIFdhbFNu ZAkgICAqTXlXYWxTbmQgPSBOVUxMOwogCkBAIC0zNzY1LDQ3ICszNzc0LDM5IEBAIFdhbFNu ZFNpZ25hbHModm9pZCkKIAlwcXNpZ25hbChTSUdDSExELCBTSUdfREZMKTsKIH0KIAotLyog UmVwb3J0IHNoYXJlZC1tZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IFdhbFNuZFNobWVtSW5pdCAq LwotU2l6ZQotV2FsU25kU2htZW1TaXplKHZvaWQpCisvKiBSZWdpc3RlciBzaGFyZWQtbWVt b3J5IHNwYWNlIG5lZWRlZCBieSB3YWxzZW5kZXIgKi8KK3N0YXRpYyB2b2lkCitXYWxTbmRT aG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogewotCVNpemUJCXNpemUgPSAwOworCXN0YXRpYyBT aG1lbVN0cnVjdERlc2MgV2FsU25kU2htZW1EZXNjOworCVNpemUJCXNpemU7CiAKIAlzaXpl ID0gb2Zmc2V0b2YoV2FsU25kQ3RsRGF0YSwgd2Fsc25kcyk7CiAJc2l6ZSA9IGFkZF9zaXpl KHNpemUsIG11bF9zaXplKG1heF93YWxfc2VuZGVycywgc2l6ZW9mKFdhbFNuZCkpKTsKLQot CXJldHVybiBzaXplOworCVNobWVtUmVxdWVzdFN0cnVjdCgmV2FsU25kU2htZW1EZXNjLAor CQkJCQkgICAubmFtZSA9ICJXYWwgU2VuZGVyIEN0bCIsCisJCQkJCSAgIC5zaXplID0gc2l6 ZSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmV2FsU25kQ3RsLAorCQkpOwogfQogCi0v KiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB3YWxzZW5kZXItcmVsYXRlZCBzaGFyZWQgbWVt b3J5ICovCi12b2lkCi1XYWxTbmRTaG1lbUluaXQodm9pZCkKKy8qIEluaXRpYWxpemUgd2Fs c2VuZGVyLXJlbGF0ZWQgc2hhcmVkIG1lbW9yeSAqLworc3RhdGljIHZvaWQKK1dhbFNuZFNo bWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0JaW50CQkJaTsKKwlmb3Ig KGludCBpID0gMDsgaSA8IE5VTV9TWU5DX1JFUF9XQUlUX01PREU7IGkrKykKKwkJZGxpc3Rf aW5pdCgmKFdhbFNuZEN0bC0+U3luY1JlcFF1ZXVlW2ldKSk7CiAKLQlXYWxTbmRDdGwgPSAo V2FsU25kQ3RsRGF0YSAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIldhbCBTZW5kZXIgQ3RsIiwg V2FsU25kU2htZW1TaXplKCksICZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQorCWZvciAoaW50 IGkgPSAwOyBpIDwgbWF4X3dhbF9zZW5kZXJzOyBpKyspCiAJewotCQkvKiBGaXJzdCB0aW1l IHRocm91Z2gsIHNvIGluaXRpYWxpemUgKi8KLQkJTWVtU2V0KFdhbFNuZEN0bCwgMCwgV2Fs U25kU2htZW1TaXplKCkpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fU1lOQ19SRVBfV0FJ VF9NT0RFOyBpKyspCi0JCQlkbGlzdF9pbml0KCYoV2FsU25kQ3RsLT5TeW5jUmVwUXVldWVb aV0pKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbWF4X3dhbF9zZW5kZXJzOyBpKyspCi0JCXsK LQkJCVdhbFNuZAkgICAqd2Fsc25kID0gJldhbFNuZEN0bC0+d2Fsc25kc1tpXTsKLQotCQkJ U3BpbkxvY2tJbml0KCZ3YWxzbmQtPm11dGV4KTsKLQkJfQorCQlXYWxTbmQJICAgKndhbHNu ZCA9ICZXYWxTbmRDdGwtPndhbHNuZHNbaV07CiAKLQkJQ29uZGl0aW9uVmFyaWFibGVJbml0 KCZXYWxTbmRDdGwtPndhbF9mbHVzaF9jdik7Ci0JCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgm V2FsU25kQ3RsLT53YWxfcmVwbGF5X2N2KTsKLQkJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZX YWxTbmRDdGwtPndhbF9jb25maXJtX3Jjdl9jdik7CisJCVNwaW5Mb2NrSW5pdCgmd2Fsc25k LT5tdXRleCk7CiAJfQorCisJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZXYWxTbmRDdGwtPndh bF9mbHVzaF9jdik7CisJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZXYWxTbmRDdGwtPndhbF9y ZXBsYXlfY3YpOworCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmV2FsU25kQ3RsLT53YWxfY29u ZmlybV9yY3ZfY3YpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IGVj YzUzODhhZDQ3Li5hN2ZkZTYwNWYxYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAt MTQsNDEgKzE0LDE2IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCi0jaW5jbHVk ZSAiYWNjZXNzL2Nsb2cuaCIKLSNpbmNsdWRlICJhY2Nlc3MvY29tbWl0X3RzLmgiCi0jaW5j bHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgotI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIK LSNpbmNsdWRlICJhY2Nlc3Mvc3VidHJhbnMuaCIKLSNpbmNsdWRlICJhY2Nlc3Mvc3luY3Nj YW4uaCIKLSNpbmNsdWRlICJhY2Nlc3MvdHdvcGhhc2UuaCIKLSNpbmNsdWRlICJhY2Nlc3Mv eGxvZ3ByZWZldGNoZXIuaCIKLSNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCi0j aW5jbHVkZSAiYWNjZXNzL3hsb2d3YWl0LmgiCi0jaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMu aCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKLSNpbmNs dWRlICJwb3N0bWFzdGVyL2F1dG92YWN1dW0uaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVyL2Jn d29ya2VyX2ludGVybmFscy5oIgotI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3cml0ZXIuaCIK LSNpbmNsdWRlICJwb3N0bWFzdGVyL2RhdGFjaGVja3N1bV9zdGF0ZS5oIgotI2luY2x1ZGUg InBvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5oIgotI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xv Z2ljYWxsYXVuY2hlci5oIgotI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgotI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3QuaCIKLSNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90 c3luYy5oIgotI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgiCi0jaW5jbHVk ZSAicmVwbGljYXRpb24vd2Fsc2VuZGVyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9haW9fc3Vi c3lzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9kc20uaCIKICNpbmNsdWRlICJzdG9yYWdlL2lw Yy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbG9jay5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcGdf c2htZW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL3Btc2lnbmFsLmgiCi0jaW5jbHVkZSAic3Rv cmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRl ICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKLSNpbmNs dWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKLSNpbmNsdWRlICJ1dGlscy93YWl0X2V2 ZW50LmgiCiAKIC8qIEdVQ3MgKi8KIGludAkJCXNoYXJlZF9tZW1vcnlfdHlwZSA9IERFRkFV TFRfU0hBUkVEX01FTU9SWV9UWVBFOwpAQCAtNTcsOCArMzIsNiBAQCBzaG1lbV9zdGFydHVw X2hvb2tfdHlwZSBzaG1lbV9zdGFydHVwX2hvb2sgPSBOVUxMOwogCiBzdGF0aWMgU2l6ZSB0 b3RhbF9hZGRpbl9yZXF1ZXN0ID0gMDsKIAotc3RhdGljIHZvaWQgQ3JlYXRlT3JBdHRhY2hT aG1lbVN0cnVjdHModm9pZCk7Ci0KIC8qCiAgKiBSZXF1ZXN0QWRkaW5TaG1lbVNwYWNlCiAg KgkJUmVxdWVzdCB0aGF0IGV4dHJhIHNobWVtIHNwYWNlIGJlIGFsbG9jYXRlZCBmb3IgdXNl IGJ5CkBAIC05NywzMyArNzAsNiBAQCBDYWxjdWxhdGVTaG1lbVNpemUodm9pZCkKIAlzaXpl ID0gMTAwMDAwOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaG1lbUdldFJlcXVlc3RlZFNp emUoKSk7CiAKLQkvKiBsZWdhY3kgc3Vic3lzdGVtcyAqLwotCXNpemUgPSBhZGRfc2l6ZShz aXplLCBMb2NrTWFuYWdlclNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwg WExvZ1ByZWZldGNoU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBYTE9H U2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBYTG9nUmVjb3ZlcnlTaG1l bVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFR3b1BoYXNlU2htZW1TaXplKCkp OwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCYWNrZ3JvdW5kV29ya2VyU2htZW1TaXplKCkp OwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCYWNrZW5kU3RhdHVzU2htZW1TaXplKCkpOwot CXNpemUgPSBhZGRfc2l6ZShzaXplLCBDaGVja3BvaW50ZXJTaG1lbVNpemUoKSk7Ci0Jc2l6 ZSA9IGFkZF9zaXplKHNpemUsIEF1dG9WYWN1dW1TaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFJlcGxpY2F0aW9uU2xvdHNTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFJlcGxpY2F0aW9uT3JpZ2luU2htZW1TaXplKCkpOwotCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBXYWxTbmRTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIFdhbFJjdlNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgV2FsU3Vt bWFyaXplclNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgUGdBcmNoU2ht ZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBBcHBseUxhdW5jaGVyU2htZW1T aXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCVHJlZVNobWVtU2l6ZSgpKTsKLQlz aXplID0gYWRkX3NpemUoc2l6ZSwgU3luY1NjYW5TaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFN0YXRzU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBXYWl0RXZlbnRDdXN0b21TaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUs IEluamVjdGlvblBvaW50U2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBT bG90U3luY1NobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgV2FpdExTTlNo bWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgTG9naWNhbERlY29kaW5nQ3Rs U2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBEYXRhQ2hlY2tzdW1zU2ht ZW1TaXplKCkpOwotCiAJLyogaW5jbHVkZSBhZGRpdGlvbmFsIHJlcXVlc3RlZCBzaG1lbSBm cm9tIHByZWxvYWQgbGlicmFyaWVzICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHRvdGFs X2FkZGluX3JlcXVlc3QpOwogCkBAIC0xNTcsNyArMTAzLDYgQEAgQXR0YWNoU2hhcmVkTWVt b3J5U3RydWN0cyh2b2lkKQogCiAJLyogRXN0YWJsaXNoIHBvaW50ZXJzIHRvIGFsbCBzaGFy ZWQgbWVtb3J5IGFyZWFzIGluIHRoaXMgYmFja2VuZCAqLwogCVNobWVtQXR0YWNoUmVxdWVz dGVkKCk7Ci0JQ3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVjdHMoKTsKIAogCS8qCiAJICogTm93 IGdpdmUgbG9hZGFibGUgbW9kdWxlcyBhIGNoYW5jZSB0byBzZXQgdXAgdGhlaXIgc2htZW0g YWxsb2NhdGlvbnMKQEAgLTIwNCw5ICsxNDksNiBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRT ZW1hcGhvcmVzKHZvaWQpCiAJLyogSW5pdGlhbGl6ZSBhbGwgc2htZW0gYXJlYXMgKi8KIAlT aG1lbUluaXRSZXF1ZXN0ZWQoKTsKIAotCS8qIEluaXRpYWxpemUgbGVnYWN5IHN1YnN5c3Rl bXMgKi8KLQlDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0cygpOwotCiAJLyogSW5pdGlhbGl6 ZSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgZmFjaWxpdGllcy4gKi8KIAlkc21fcG9zdG1hc3Rl cl9zdGFydHVwKHNoaW0pOwogCkBAIC0yMzcsNzAgKzE3OSw2IEBAIFJlZ2lzdGVyQnVpbHRp blNobWVtQ2FsbGJhY2tzKHZvaWQpCiAjdW5kZWYgUEdfU0hNRU1fU1VCU1lTVEVNCiB9CiAK LS8qCi0gKiBJbml0aWFsaXplIHZhcmlvdXMgc3Vic3lzdGVtcywgc2V0dGluZyB1cCB0aGVp ciBkYXRhIHN0cnVjdHVyZXMgaW4KLSAqIHNoYXJlZCBtZW1vcnkuCi0gKgotICogVGhpcyBp cyBjYWxsZWQgYnkgdGhlIHBvc3RtYXN0ZXIgb3IgYnkgYSBzdGFuZGFsb25lIGJhY2tlbmQu Ci0gKiBJdCBpcyBhbHNvIGNhbGxlZCBieSBhIGJhY2tlbmQgZm9ya2VkIGZyb20gdGhlIHBv c3RtYXN0ZXIgaW4gdGhlCi0gKiBFWEVDX0JBQ0tFTkQgY2FzZS4gIEluIHRoZSBsYXR0ZXIg Y2FzZSwgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudAotICogYWxyZWFkeSBleGlzdHMgYW5k IGhhcyBiZWVuIHBoeXNpY2FsbHkgYXR0YWNoZWQgdG8sIGJ1dCB3ZSBoYXZlIHRvCi0gKiBp bml0aWFsaXplIHBvaW50ZXJzIGluIGxvY2FsIG1lbW9yeSB0aGF0IHJlZmVyZW5jZSB0aGUg c2hhcmVkIHN0cnVjdHVyZXMsCi0gKiBiZWNhdXNlIHdlIGRpZG4ndCBpbmhlcml0IHRoZSBj b3JyZWN0IHBvaW50ZXIgdmFsdWVzIGZyb20gdGhlIHBvc3RtYXN0ZXIKLSAqIGFzIHdlIGRv IGluIHRoZSBmb3JrKCkgc2NlbmFyaW8uICBUaGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhhdCBp cyB0byBydW4KLSAqIHRocm91Z2ggdGhlIHNhbWUgY29kZSBhcyBiZWZvcmUuICAoTm90ZSB0 aGF0IHRoZSBjYWxsZWQgcm91dGluZXMgbW9zdGx5Ci0gKiBjaGVjayBJc1VuZGVyUG9zdG1h c3RlciwgcmF0aGVyIHRoYW4gRVhFQ19CQUNLRU5ELCB0byBkZXRlY3QgdGhpcyBjYXNlLgot ICogVGhpcyBpcyBhIGJpdCBjb2RlLXdhc3RlZnVsIGFuZCBjb3VsZCBiZSBjbGVhbmVkIHVw LikKLSAqLwotc3RhdGljIHZvaWQKLUNyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKHZvaWQp Ci17Ci0JLyoKLQkgKiBTZXQgdXAgeGxvZywgY2xvZywgYW5kIGJ1ZmZlcnMKLQkgKi8KLQlY TE9HU2htZW1Jbml0KCk7Ci0JWExvZ1ByZWZldGNoU2htZW1Jbml0KCk7Ci0JWExvZ1JlY292 ZXJ5U2htZW1Jbml0KCk7Ci0KLQkvKgotCSAqIFNldCB1cCBsb2NrIG1hbmFnZXIKLQkgKi8K LQlMb2NrTWFuYWdlclNobWVtSW5pdCgpOwotCi0JLyoKLQkgKiBTZXQgdXAgcHJvY2VzcyB0 YWJsZQotCSAqLwotCUJhY2tlbmRTdGF0dXNTaG1lbUluaXQoKTsKLQlUd29QaGFzZVNobWVt SW5pdCgpOwotCUJhY2tncm91bmRXb3JrZXJTaG1lbUluaXQoKTsKLQotCS8qCi0JICogU2V0 IHVwIGludGVycHJvY2VzcyBzaWduYWxpbmcgbWVjaGFuaXNtcwotCSAqLwotCUNoZWNrcG9p bnRlclNobWVtSW5pdCgpOwotCUF1dG9WYWN1dW1TaG1lbUluaXQoKTsKLQlSZXBsaWNhdGlv blNsb3RzU2htZW1Jbml0KCk7Ci0JUmVwbGljYXRpb25PcmlnaW5TaG1lbUluaXQoKTsKLQlX YWxTbmRTaG1lbUluaXQoKTsKLQlXYWxSY3ZTaG1lbUluaXQoKTsKLQlXYWxTdW1tYXJpemVy U2htZW1Jbml0KCk7Ci0JUGdBcmNoU2htZW1Jbml0KCk7Ci0JQXBwbHlMYXVuY2hlclNobWVt SW5pdCgpOwotCVNsb3RTeW5jU2htZW1Jbml0KCk7Ci0JRGF0YUNoZWNrc3Vtc1NobWVtSW5p dCgpOwotCi0JLyoKLQkgKiBTZXQgdXAgb3RoZXIgbW9kdWxlcyB0aGF0IG5lZWQgc29tZSBz aGFyZWQgbWVtb3J5IHNwYWNlCi0JICovCi0JQlRyZWVTaG1lbUluaXQoKTsKLQlTeW5jU2Nh blNobWVtSW5pdCgpOwotCVN0YXRzU2htZW1Jbml0KCk7Ci0JV2FpdEV2ZW50Q3VzdG9tU2ht ZW1Jbml0KCk7Ci0JSW5qZWN0aW9uUG9pbnRTaG1lbUluaXQoKTsKLQlXYWl0TFNOU2htZW1J bml0KCk7Ci0JTG9naWNhbERlY29kaW5nQ3RsU2htZW1Jbml0KCk7Ci19Ci0KIC8qCiAgKiBJ bml0aWFsaXplU2htZW1HVUNzCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9sbWdyL2xvY2suYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMKaW5kZXgg OWRhZTQwNzk4MWYuLjNmMTcyNGVjNmJkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvbG9jay5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMK QEAgLTQzLDggKzQzLDEwIEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNp bmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9zdGFuZGJ5LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0 ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9w c19zdGF0dXMuaCIKICNpbmNsdWRlICJ1dGlscy9yZXNvd25lci5oIgpAQCAtMzEyLDYgKzMx NCwxNCBAQCB0eXBlZGVmIHN0cnVjdAogCiBzdGF0aWMgdm9sYXRpbGUgRmFzdFBhdGhTdHJv bmdSZWxhdGlvbkxvY2tEYXRhICpGYXN0UGF0aFN0cm9uZ1JlbGF0aW9uTG9ja3M7CiAKK3N0 YXRpYyB2b2lkIExvY2tNYW5hZ2VyU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMg dm9pZCBMb2NrTWFuYWdlclNobWVtSW5pdCh2b2lkICphcmcpOworCitjb25zdCBTaG1lbUNh bGxiYWNrcyBMb2NrTWFuYWdlclNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0g TG9ja01hbmFnZXJTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBMb2NrTWFuYWdlclNobWVt SW5pdCwKK307CisKIAogLyoKICAqIFBvaW50ZXJzIHRvIGhhc2ggdGFibGVzIGNvbnRhaW5p bmcgbG9jayBzdGF0ZQpAQCAtNDA5LDYgKzQxOSw3IEBAIFBST0NMT0NLX1BSSU5UKGNvbnN0 IGNoYXIgKndoZXJlLCBjb25zdCBQUk9DTE9DSyAqcHJvY2xvY2tQKQogCiAKIHN0YXRpYyB1 aW50MzIgcHJvY2xvY2tfaGFzaChjb25zdCB2b2lkICprZXksIFNpemUga2V5c2l6ZSk7CisK IHN0YXRpYyB2b2lkIFJlbW92ZUxvY2FsTG9jayhMT0NBTExPQ0sgKmxvY2FsbG9jayk7CiBz dGF0aWMgUFJPQ0xPQ0sgKlNldHVwTG9ja0luVGFibGUoTG9ja01ldGhvZCBsb2NrTWV0aG9k VGFibGUsIFBHUFJPQyAqcHJvYywKIAkJCQkJCQkJICBjb25zdCBMT0NLVEFHICpsb2NrdGFn LCB1aW50MzIgaGFzaGNvZGUsIExPQ0tNT0RFIGxvY2ttb2RlKTsKQEAgLTQzMiwyMSArNDQz LDE4IEBAIHN0YXRpYyB2b2lkIEdldFNpbmdsZVByb2NCbG9ja2VyU3RhdHVzRGF0YShQR1BS T0MgKmJsb2NrZWRfcHJvYywKIAogCiAvKgotICogSW5pdGlhbGl6ZSB0aGUgbG9jayBtYW5h Z2VyJ3Mgc2htZW0gZGF0YSBzdHJ1Y3R1cmVzLgorICogUmVnaXN0ZXIgdGhlIGxvY2sgbWFu YWdlcidzIHNobWVtIGRhdGEgc3RydWN0dXJlcy4KICAqCi0gKiBUaGlzIGlzIGNhbGxlZCBm cm9tIENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMoKSwgd2hpY2ggc2VlIGZvciBt b3JlCi0gKiBjb21tZW50cy4gIEluIHRoZSBub3JtYWwgcG9zdG1hc3RlciBjYXNlLCB0aGUg c2hhcmVkIGhhc2ggdGFibGVzIGFyZQotICogY3JlYXRlZCBoZXJlLCBhbmQgYmFja2VuZHMg aW5oZXJpdCBwb2ludGVycyB0byB0aGVtIHZpYSBmb3JrKCkuICBJbiB0aGUKLSAqIEVYRUNf QkFDS0VORCBjYXNlLCBlYWNoIGJhY2tlbmQgcmUtZXhlY3V0ZXMgdGhpcyBjb2RlIHRvIG9i dGFpbiBwb2ludGVycyB0bwotICogdGhlIGFscmVhZHkgZXhpc3Rpbmcgc2hhcmVkIGhhc2gg dGFibGVzLiAgSW4gZWl0aGVyIGNhc2UsIGVhY2ggYmFja2VuZCBtdXN0Ci0gKiBhbHNvIGNh bGwgSW5pdExvY2tNYW5hZ2VyQWNjZXNzKCkgdG8gY3JlYXRlIHRoZSBsb2NhbGxvY2sgaGFz aCB0YWJsZS4KKyAqIEluIGFkZGl0aW9uIHRvIHRoaXMsIGVhY2ggYmFja2VuZCBtdXN0IGFs c28gY2FsbCBJbml0TG9ja01hbmFnZXJBY2Nlc3MoKSB0bworICogY3JlYXRlIHRoZSBsb2Nh bGxvY2sgaGFzaCB0YWJsZS4KICAqLwotdm9pZAotTG9ja01hbmFnZXJTaG1lbUluaXQodm9p ZCkKK3N0YXRpYyB2b2lkCitMb2NrTWFuYWdlclNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7 Ci0JSEFTSENUTAkJaW5mbzsKKwlzdGF0aWMgU2htZW1IYXNoRGVzYyBMb2NrSGFzaERlc2M7 CisJc3RhdGljIFNobWVtSGFzaERlc2MgUHJvY0xvY2tIYXNoRGVzYzsKKwlzdGF0aWMgU2ht ZW1TdHJ1Y3REZXNjIEZhc3RQYXRoU2htZW1EZXNjOwogCWludDY0CQltYXhfdGFibGVfc2l6 ZTsKLQlib29sCQlmb3VuZDsKIAogCS8qCiAJICogQ29tcHV0ZSBzaXplcyBmb3IgbG9jayBo YXNodGFibGVzLiAgTm90ZSB0aGF0IHRoZXNlIGNhbGN1bGF0aW9ucyBtdXN0CkBAIC00NTUs NDUgKzQ2Myw1MSBAQCBMb2NrTWFuYWdlclNobWVtSW5pdCh2b2lkKQogCW1heF90YWJsZV9z aXplID0gTkxPQ0tFTlRTKCk7CiAKIAkvKgotCSAqIEFsbG9jYXRlIGhhc2ggdGFibGUgZm9y IExPQ0sgc3RydWN0cy4gIFRoaXMgc3RvcmVzIHBlci1sb2NrZWQtb2JqZWN0CisJICogSGFz aCB0YWJsZSBmb3IgTE9DSyBzdHJ1Y3RzLiAgVGhpcyBzdG9yZXMgcGVyLWxvY2tlZC1vYmpl Y3QKIAkgKiBpbmZvcm1hdGlvbi4KIAkgKi8KLQlpbmZvLmtleXNpemUgPSBzaXplb2YoTE9D S1RBRyk7Ci0JaW5mby5lbnRyeXNpemUgPSBzaXplb2YoTE9DSyk7Ci0JaW5mby5udW1fcGFy dGl0aW9ucyA9IE5VTV9MT0NLX1BBUlRJVElPTlM7Ci0KLQlMb2NrTWV0aG9kTG9ja0hhc2gg PSBTaG1lbUluaXRIYXNoKCJMT0NLIGhhc2giLAotCQkJCQkJCQkJICAgbWF4X3RhYmxlX3Np emUsCi0JCQkJCQkJCQkgICAmaW5mbywKLQkJCQkJCQkJCSAgIEhBU0hfRUxFTSB8IEhBU0hf QkxPQlMgfAotCQkJCQkJCQkJICAgSEFTSF9QQVJUSVRJT04gfCBIQVNIX0ZJWEVEX1NJWkUp OworCVNobWVtUmVxdWVzdEhhc2goJkxvY2tIYXNoRGVzYywKKwkJCQkJIC5uYW1lID0gIkxP Q0sgaGFzaCIsCisJCQkJCSAubmVsZW1zID0gbWF4X3RhYmxlX3NpemUsCisJCQkJCSAucHRy ID0gJkxvY2tNZXRob2RMb2NrSGFzaCwKKwkJCQkJIC5oYXNoX2luZm8ua2V5c2l6ZSA9IHNp emVvZihMT0NLVEFHKSwKKwkJCQkJIC5oYXNoX2luZm8uZW50cnlzaXplID0gc2l6ZW9mKExP Q0spLAorCQkJCQkgLmhhc2hfaW5mby5udW1fcGFydGl0aW9ucyA9IE5VTV9MT0NLX1BBUlRJ VElPTlMsCisJCQkJCSAuaGFzaF9mbGFncyA9IEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMgfCBI QVNIX1BBUlRJVElPTiwKKwkJKTsKIAogCS8qIEFzc3VtZSBhbiBhdmVyYWdlIG9mIDIgaG9s ZGVycyBwZXIgbG9jayAqLwogCW1heF90YWJsZV9zaXplICo9IDI7CiAKLQkvKgotCSAqIEFs bG9jYXRlIGhhc2ggdGFibGUgZm9yIFBST0NMT0NLIHN0cnVjdHMuICBUaGlzIHN0b3Jlcwot CSAqIHBlci1sb2NrLXBlci1ob2xkZXIgaW5mb3JtYXRpb24uCi0JICovCi0JaW5mby5rZXlz aXplID0gc2l6ZW9mKFBST0NMT0NLVEFHKTsKLQlpbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihQ Uk9DTE9DSyk7Ci0JaW5mby5oYXNoID0gcHJvY2xvY2tfaGFzaDsKLQlpbmZvLm51bV9wYXJ0 aXRpb25zID0gTlVNX0xPQ0tfUEFSVElUSU9OUzsKLQotCUxvY2tNZXRob2RQcm9jTG9ja0hh c2ggPSBTaG1lbUluaXRIYXNoKCJQUk9DTE9DSyBoYXNoIiwKLQkJCQkJCQkJCQkgICBtYXhf dGFibGVfc2l6ZSwKLQkJCQkJCQkJCQkgICAmaW5mbywKLQkJCQkJCQkJCQkgICBIQVNIX0VM RU0gfCBIQVNIX0ZVTkNUSU9OIHwKLQkJCQkJCQkJCQkgICBIQVNIX0ZJWEVEX1NJWkUgfCBI QVNIX1BBUlRJVElPTik7CisJU2htZW1SZXF1ZXN0SGFzaCgmUHJvY0xvY2tIYXNoRGVzYywK KwkJCQkJIC5uYW1lID0gIlBST0NMT0NLIGhhc2giLAorCQkJCQkgLm5lbGVtcyA9IG1heF90 YWJsZV9zaXplLAorCQkJCQkgLnB0ciA9ICZMb2NrTWV0aG9kUHJvY0xvY2tIYXNoLAorCQkJ CQkgLmhhc2hfaW5mby5rZXlzaXplID0gc2l6ZW9mKFBST0NMT0NLVEFHKSwKKwkJCQkJIC5o YXNoX2luZm8uZW50cnlzaXplID0gc2l6ZW9mKFBST0NMT0NLKSwKKwkJCQkJIC5oYXNoX2lu Zm8uaGFzaCA9IHByb2Nsb2NrX2hhc2gsCisJCQkJCSAuaGFzaF9pbmZvLm51bV9wYXJ0aXRp b25zID0gTlVNX0xPQ0tfUEFSVElUSU9OUywKKwkJCQkJIC5oYXNoX2ZsYWdzID0gSEFTSF9F TEVNIHwgSEFTSF9GVU5DVElPTiB8IEhBU0hfUEFSVElUSU9OLAorCQkpOworCisJU2htZW1S ZXF1ZXN0U3RydWN0KCZGYXN0UGF0aFNobWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiRmFz dCBQYXRoIFN0cm9uZyBSZWxhdGlvbiBMb2NrIERhdGEiLAorCQkJCQkgICAuc2l6ZSA9IHNp emVvZihGYXN0UGF0aFN0cm9uZ1JlbGF0aW9uTG9ja0RhdGEpLAorCQkJCQkgICAucHRyID0g KHZvaWQgKiopICh2b2lkICopICZGYXN0UGF0aFN0cm9uZ1JlbGF0aW9uTG9ja3MsCisJCSk7 CiAKIAkvKgotCSAqIEFsbG9jYXRlIGZhc3QtcGF0aCBzdHJ1Y3R1cmVzLgorCSAqIEZJWE1F OiB3ZSB1c2VkIHRvIGRvIHRoaXMgaW4gdGhlIHNpemUgY2FsY3VsYXRpb246CisJICoKKwkg KiAvLyBTaW5jZSBOTE9DS0VOVFMgaXMgb25seSBhbiBlc3RpbWF0ZSwgYWRkIDEwJSBzYWZl dHkgbWFyZ2luLiBzaXplID0KKwkgKiBhZGRfc2l6ZShzaXplLCBzaXplIC8gMTApOwogCSAq LwotCUZhc3RQYXRoU3Ryb25nUmVsYXRpb25Mb2NrcyA9Ci0JCVNobWVtSW5pdFN0cnVjdCgi RmFzdCBQYXRoIFN0cm9uZyBSZWxhdGlvbiBMb2NrIERhdGEiLAotCQkJCQkJc2l6ZW9mKEZh c3RQYXRoU3Ryb25nUmVsYXRpb25Mb2NrRGF0YSksICZmb3VuZCk7Ci0JaWYgKCFmb3VuZCkK LQkJU3BpbkxvY2tJbml0KCZGYXN0UGF0aFN0cm9uZ1JlbGF0aW9uTG9ja3MtPm11dGV4KTsK K30KKworc3RhdGljIHZvaWQKK0xvY2tNYW5hZ2VyU2htZW1Jbml0KHZvaWQgKmFyZykKK3sK KwlTcGluTG9ja0luaXQoJkZhc3RQYXRoU3Ryb25nUmVsYXRpb25Mb2Nrcy0+bXV0ZXgpOwog fQogCiAvKgpAQCAtMzc1OCwyNSArMzc3Miw2IEBAIFBvc3RQcmVwYXJlX0xvY2tzKEZ1bGxU cmFuc2FjdGlvbklkIGZ4aWQpCiB9CiAKIAotLyoKLSAqIEVzdGltYXRlIHNoYXJlZC1tZW1v cnkgc3BhY2UgdXNlZCBmb3IgbG9jayB0YWJsZXMKLSAqLwotU2l6ZQotTG9ja01hbmFnZXJT aG1lbVNpemUodm9pZCkKLXsKLQlTaXplCQlzaXplID0gMDsKLQlsb25nCQltYXhfdGFibGVf c2l6ZTsKLQotCS8qIGxvY2sgaGFzaCB0YWJsZSAqLwotCW1heF90YWJsZV9zaXplID0gTkxP Q0tFTlRTKCk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIGhhc2hfZXN0aW1hdGVfc2l6ZSht YXhfdGFibGVfc2l6ZSwgc2l6ZW9mKExPQ0spKSk7Ci0KLQkvKiBwcm9jbG9jayBoYXNoIHRh YmxlICovCi0JbWF4X3RhYmxlX3NpemUgKj0gMjsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwg aGFzaF9lc3RpbWF0ZV9zaXplKG1heF90YWJsZV9zaXplLCBzaXplb2YoUFJPQ0xPQ0spKSk7 Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KIAogLyoKICAqIEdldExvY2tTdGF0dXNEYXRhIC0gUmV0 dXJuIGEgc3VtbWFyeSBvZiB0aGUgbG9jayBtYW5hZ2VyJ3MgaW50ZXJuYWwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L2JhY2tlbmRfc3RhdHVzLmMgYi9zcmMv YmFja2VuZC91dGlscy9hY3Rpdml0eS9iYWNrZW5kX3N0YXR1cy5jCmluZGV4IGNkMDg3MTI5 NDY5Li45NjM3YzYyMmQ2ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZp dHkvYmFja2VuZF9zdGF0dXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9i YWNrZW5kX3N0YXR1cy5jCkBAIC0xOCw3ICsxOCw5IEBACiAjaW5jbHVkZSAicGdzdGF0Lmgi CiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIJ CS8qIGZvciBNeVByb2MgKi8KKyNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMu aCIKICNpbmNsdWRlICJ1dGlscy9hc2NpaS5oIgogI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgkJ CS8qIGZvciBhcHBsaWNhdGlvbl9uYW1lICovCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMu aCIKQEAgLTczLDEzMyArNzUsMTE0IEBAIHN0YXRpYyB2b2lkIHBnc3RhdF9iZXNodXRkb3du X2hvb2soaW50IGNvZGUsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBwZ3N0YXRfcmVhZF9j dXJyZW50X3N0YXR1cyh2b2lkKTsKIHN0YXRpYyB2b2lkIHBnc3RhdF9zZXR1cF9iYWNrZW5k X3N0YXR1c19jb250ZXh0KHZvaWQpOwogCitzdGF0aWMgdm9pZCBCYWNrZW5kU3RhdHVzU2ht ZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBCYWNrZW5kU3RhdHVzU2htZW1J bml0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBCYWNrZW5kU3RhdHVzU2htZW1BdHRhY2go dm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgQmFja2VuZFN0YXR1c1NobWVt Q2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gQmFja2VuZFN0YXR1c1NobWVtUmVxdWVz dCwKKwkuaW5pdF9mbiA9IEJhY2tlbmRTdGF0dXNTaG1lbUluaXQsCisJLmF0dGFjaF9mbiA9 IEJhY2tlbmRTdGF0dXNTaG1lbUF0dGFjaCwKK307CiAKIC8qCi0gKiBSZXBvcnQgc2hhcmVk LW1lbW9yeSBzcGFjZSBuZWVkZWQgYnkgQmFja2VuZFN0YXR1c1NobWVtSW5pdC4KKyAqIFJl Z2lzdGVyIHNoYXJlZCBtZW1vcnkgbmVlZHMgZm9yIGJhY2tlbmQgc3RhdHVzIHJlcG9ydGlu Zy4KICAqLwotU2l6ZQotQmFja2VuZFN0YXR1c1NobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZv aWQKK0JhY2tlbmRTdGF0dXNTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogewotCVNpemUJCXNp emU7Ci0KLQkvKiBCYWNrZW5kU3RhdHVzQXJyYXk6ICovCi0Jc2l6ZSA9IG11bF9zaXplKHNp emVvZihQZ0JhY2tlbmRTdGF0dXMpLCBOdW1CYWNrZW5kU3RhdFNsb3RzKTsKLQkvKiBCYWNr ZW5kQXBwbmFtZUJ1ZmZlcjogKi8KLQlzaXplID0gYWRkX3NpemUoc2l6ZSwKLQkJCQkJbXVs X3NpemUoTkFNRURBVEFMRU4sIE51bUJhY2tlbmRTdGF0U2xvdHMpKTsKLQkvKiBCYWNrZW5k Q2xpZW50SG9zdG5hbWVCdWZmZXI6ICovCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsCi0JCQkJ CW11bF9zaXplKE5BTUVEQVRBTEVOLCBOdW1CYWNrZW5kU3RhdFNsb3RzKSk7Ci0JLyogQmFj a2VuZEFjdGl2aXR5QnVmZmVyOiAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXplLAotCQkJCQlt dWxfc2l6ZShwZ3N0YXRfdHJhY2tfYWN0aXZpdHlfcXVlcnlfc2l6ZSwgTnVtQmFja2VuZFN0 YXRTbG90cykpOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgQmFja2VuZFN0YXR1c0FycmF5 U2htZW1EZXNjOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgQmFja2VuZEFwcG5hbWVCdWZm ZXJTaG1lbURlc2M7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBCYWNrZW5kQ2xpZW50SG9z dG5hbWVCdWZmZXJTaG1lbURlc2M7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBCYWNrZW5k QWN0aXZpdHlCdWZmZXJTaXplU2htZW1EZXNjOwogI2lmZGVmIFVTRV9TU0wKLQkvKiBCYWNr ZW5kU3NsU3RhdHVzQnVmZmVyOiAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXplLAotCQkJCQlt dWxfc2l6ZShzaXplb2YoUGdCYWNrZW5kU1NMU3RhdHVzKSwgTnVtQmFja2VuZFN0YXRTbG90 cykpOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgQmFja2VuZFNzbFN0YXR1c0J1ZmZlclNo bWVtRGVzYzsKICNlbmRpZgogI2lmZGVmIEVOQUJMRV9HU1MKLQkvKiBCYWNrZW5kR3NzU3Rh dHVzQnVmZmVyOiAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXplLAotCQkJCQltdWxfc2l6ZShz aXplb2YoUGdCYWNrZW5kR1NTU3RhdHVzKSwgTnVtQmFja2VuZFN0YXRTbG90cykpOworCXN0 YXRpYyBTaG1lbVN0cnVjdERlc2MgQmFja2VuZEdzc1N0YXR1c0J1ZmZlclNobWVtRGVzYzsK KyNlbmRpZgorCisJU2htZW1SZXF1ZXN0U3RydWN0KCZCYWNrZW5kU3RhdHVzQXJyYXlTaG1l bURlc2MsCisJCQkJCSAgIC5uYW1lID0gIkJhY2tlbmQgU3RhdHVzIEFycmF5IiwKKwkJCQkJ ICAgLnNpemUgPSBtdWxfc2l6ZShzaXplb2YoUGdCYWNrZW5kU3RhdHVzKSwgTnVtQmFja2Vu ZFN0YXRTbG90cyksCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJkJhY2tlbmRTdGF0dXNB cnJheSwKKwkJKTsKKworCVNobWVtUmVxdWVzdFN0cnVjdCgmQmFja2VuZEFwcG5hbWVCdWZm ZXJTaG1lbURlc2MsCisJCQkJCSAgIC5uYW1lID0gIkJhY2tlbmQgQXBwbGljYXRpb24gTmFt ZSBCdWZmZXIiLAorCQkJCQkgICAuc2l6ZSA9IG11bF9zaXplKE5BTUVEQVRBTEVOLCBOdW1C YWNrZW5kU3RhdFNsb3RzKSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmQmFja2VuZEFw cG5hbWVCdWZmZXIsCisJCSk7CisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkJhY2tlbmRDbGll bnRIb3N0bmFtZUJ1ZmZlclNobWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiQmFja2VuZCBD bGllbnQgSG9zdCBOYW1lIEJ1ZmZlciIsCisJCQkJCSAgIC5zaXplID0gbXVsX3NpemUoTkFN RURBVEFMRU4sIE51bUJhY2tlbmRTdGF0U2xvdHMpLAorCQkJCQkgICAucHRyID0gKHZvaWQg KiopICZCYWNrZW5kQ2xpZW50SG9zdG5hbWVCdWZmZXIsCisJCSk7CisKKwlCYWNrZW5kQWN0 aXZpdHlCdWZmZXJTaXplID0gbXVsX3NpemUocGdzdGF0X3RyYWNrX2FjdGl2aXR5X3F1ZXJ5 X3NpemUsCisJCQkJCQkJCQkJIE51bUJhY2tlbmRTdGF0U2xvdHMpOworCVNobWVtUmVxdWVz dFN0cnVjdCgmQmFja2VuZEFjdGl2aXR5QnVmZmVyU2l6ZVNobWVtRGVzYywKKwkJCQkJICAg Lm5hbWUgPSAiQmFja2VuZCBBY3Rpdml0eSBCdWZmZXIiLAorCQkJCQkgICAuc2l6ZSA9IEJh Y2tlbmRBY3Rpdml0eUJ1ZmZlclNpemUsCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJkJh Y2tlbmRBY3Rpdml0eUJ1ZmZlcgorCQkpOworCisjaWZkZWYgVVNFX1NTTAorCVNobWVtUmVx dWVzdFN0cnVjdCgmQmFja2VuZFNzbFN0YXR1c0J1ZmZlclNobWVtRGVzYywKKwkJCQkJICAg Lm5hbWUgPSAiQmFja2VuZCBTU0wgU3RhdHVzIEJ1ZmZlciIsCisJCQkJCSAgIC5zaXplID0g bXVsX3NpemUoc2l6ZW9mKFBnQmFja2VuZFNTTFN0YXR1cyksIE51bUJhY2tlbmRTdGF0U2xv dHMpLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZCYWNrZW5kU3NsU3RhdHVzQnVmZmVy LAorCQkpOworI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfR1NTCisJU2htZW1SZXF1ZXN0U3Ry dWN0KCZCYWNrZW5kR3NzU3RhdHVzQnVmZmVyU2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9 ICJCYWNrZW5kIEdTUyBTdGF0dXMgQnVmZmVyIiwKKwkJCQkJICAgLnNpemUgPSBtdWxfc2l6 ZShzaXplb2YoUGdCYWNrZW5kR1NTU3RhdHVzKSwgTnVtQmFja2VuZFN0YXRTbG90cyksCisJ CQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJkJhY2tlbmRHc3NTdGF0dXNCdWZmZXIsCisJCSk7 CiAjZW5kaWYKLQlyZXR1cm4gc2l6ZTsKIH0KIAogLyoKICAqIEluaXRpYWxpemUgdGhlIHNo YXJlZCBzdGF0dXMgYXJyYXkgYW5kIHNldmVyYWwgc3RyaW5nIGJ1ZmZlcnMKICAqIGR1cmlu ZyBwb3N0bWFzdGVyIHN0YXJ0dXAuCiAgKi8KLXZvaWQKLUJhY2tlbmRTdGF0dXNTaG1lbUlu aXQodm9pZCkKK3N0YXRpYyB2b2lkCitCYWNrZW5kU3RhdHVzU2htZW1Jbml0KHZvaWQgKmFy ZykKIHsKLQlTaXplCQlzaXplOwotCWJvb2wJCWZvdW5kOwogCWludAkJCWk7CiAJY2hhcgkg ICAqYnVmZmVyOwogCi0JLyogQ3JlYXRlIG9yIGF0dGFjaCB0byB0aGUgc2hhcmVkIGFycmF5 ICovCi0Jc2l6ZSA9IG11bF9zaXplKHNpemVvZihQZ0JhY2tlbmRTdGF0dXMpLCBOdW1CYWNr ZW5kU3RhdFNsb3RzKTsKLQlCYWNrZW5kU3RhdHVzQXJyYXkgPSAoUGdCYWNrZW5kU3RhdHVz ICopCi0JCVNobWVtSW5pdFN0cnVjdCgiQmFja2VuZCBTdGF0dXMgQXJyYXkiLCBzaXplLCAm Zm91bmQpOwotCi0JaWYgKCFmb3VuZCkKKwkvKiBJbml0aWFsaXplIHN0X2FwcG5hbWUgcG9p bnRlcnMuICovCisJYnVmZmVyID0gQmFja2VuZEFwcG5hbWVCdWZmZXI7CisJZm9yIChpID0g MDsgaSA8IE51bUJhY2tlbmRTdGF0U2xvdHM7IGkrKykKIAl7Ci0JCS8qCi0JCSAqIFdlJ3Jl IHRoZSBmaXJzdCAtIGluaXRpYWxpemUuCi0JCSAqLwotCQlNZW1TZXQoQmFja2VuZFN0YXR1 c0FycmF5LCAwLCBzaXplKTsKKwkJQmFja2VuZFN0YXR1c0FycmF5W2ldLnN0X2FwcG5hbWUg PSBidWZmZXI7CisJCWJ1ZmZlciArPSBOQU1FREFUQUxFTjsKIAl9CiAKLQkvKiBDcmVhdGUg b3IgYXR0YWNoIHRvIHRoZSBzaGFyZWQgYXBwbmFtZSBidWZmZXIgKi8KLQlzaXplID0gbXVs X3NpemUoTkFNRURBVEFMRU4sIE51bUJhY2tlbmRTdGF0U2xvdHMpOwotCUJhY2tlbmRBcHBu YW1lQnVmZmVyID0gKGNoYXIgKikKLQkJU2htZW1Jbml0U3RydWN0KCJCYWNrZW5kIEFwcGxp Y2F0aW9uIE5hbWUgQnVmZmVyIiwgc2l6ZSwgJmZvdW5kKTsKLQotCWlmICghZm91bmQpCisJ LyogSW5pdGlhbGl6ZSBzdF9jbGllbnRob3N0bmFtZSBwb2ludGVycy4gKi8KKwlidWZmZXIg PSBCYWNrZW5kQ2xpZW50SG9zdG5hbWVCdWZmZXI7CisJZm9yIChpID0gMDsgaSA8IE51bUJh Y2tlbmRTdGF0U2xvdHM7IGkrKykKIAl7Ci0JCU1lbVNldChCYWNrZW5kQXBwbmFtZUJ1ZmZl ciwgMCwgc2l6ZSk7Ci0KLQkJLyogSW5pdGlhbGl6ZSBzdF9hcHBuYW1lIHBvaW50ZXJzLiAq LwotCQlidWZmZXIgPSBCYWNrZW5kQXBwbmFtZUJ1ZmZlcjsKLQkJZm9yIChpID0gMDsgaSA8 IE51bUJhY2tlbmRTdGF0U2xvdHM7IGkrKykKLQkJewotCQkJQmFja2VuZFN0YXR1c0FycmF5 W2ldLnN0X2FwcG5hbWUgPSBidWZmZXI7Ci0JCQlidWZmZXIgKz0gTkFNRURBVEFMRU47Ci0J CX0KKwkJQmFja2VuZFN0YXR1c0FycmF5W2ldLnN0X2NsaWVudGhvc3RuYW1lID0gYnVmZmVy OworCQlidWZmZXIgKz0gTkFNRURBVEFMRU47CiAJfQogCi0JLyogQ3JlYXRlIG9yIGF0dGFj aCB0byB0aGUgc2hhcmVkIGNsaWVudCBob3N0bmFtZSBidWZmZXIgKi8KLQlzaXplID0gbXVs X3NpemUoTkFNRURBVEFMRU4sIE51bUJhY2tlbmRTdGF0U2xvdHMpOwotCUJhY2tlbmRDbGll bnRIb3N0bmFtZUJ1ZmZlciA9IChjaGFyICopCi0JCVNobWVtSW5pdFN0cnVjdCgiQmFja2Vu ZCBDbGllbnQgSG9zdCBOYW1lIEJ1ZmZlciIsIHNpemUsICZmb3VuZCk7Ci0KLQlpZiAoIWZv dW5kKQorCS8qIEluaXRpYWxpemUgc3RfYWN0aXZpdHkgcG9pbnRlcnMuICovCisJYnVmZmVy ID0gQmFja2VuZEFjdGl2aXR5QnVmZmVyOworCWZvciAoaSA9IDA7IGkgPCBOdW1CYWNrZW5k U3RhdFNsb3RzOyBpKyspCiAJewotCQlNZW1TZXQoQmFja2VuZENsaWVudEhvc3RuYW1lQnVm ZmVyLCAwLCBzaXplKTsKLQotCQkvKiBJbml0aWFsaXplIHN0X2NsaWVudGhvc3RuYW1lIHBv aW50ZXJzLiAqLwotCQlidWZmZXIgPSBCYWNrZW5kQ2xpZW50SG9zdG5hbWVCdWZmZXI7Ci0J CWZvciAoaSA9IDA7IGkgPCBOdW1CYWNrZW5kU3RhdFNsb3RzOyBpKyspCi0JCXsKLQkJCUJh Y2tlbmRTdGF0dXNBcnJheVtpXS5zdF9jbGllbnRob3N0bmFtZSA9IGJ1ZmZlcjsKLQkJCWJ1 ZmZlciArPSBOQU1FREFUQUxFTjsKLQkJfQotCX0KLQotCS8qIENyZWF0ZSBvciBhdHRhY2gg dG8gdGhlIHNoYXJlZCBhY3Rpdml0eSBidWZmZXIgKi8KLQlCYWNrZW5kQWN0aXZpdHlCdWZm ZXJTaXplID0gbXVsX3NpemUocGdzdGF0X3RyYWNrX2FjdGl2aXR5X3F1ZXJ5X3NpemUsCi0J CQkJCQkJCQkJIE51bUJhY2tlbmRTdGF0U2xvdHMpOwotCUJhY2tlbmRBY3Rpdml0eUJ1ZmZl ciA9IChjaGFyICopCi0JCVNobWVtSW5pdFN0cnVjdCgiQmFja2VuZCBBY3Rpdml0eSBCdWZm ZXIiLAotCQkJCQkJQmFja2VuZEFjdGl2aXR5QnVmZmVyU2l6ZSwKLQkJCQkJCSZmb3VuZCk7 Ci0KLQlpZiAoIWZvdW5kKQotCXsKLQkJTWVtU2V0KEJhY2tlbmRBY3Rpdml0eUJ1ZmZlciwg MCwgQmFja2VuZEFjdGl2aXR5QnVmZmVyU2l6ZSk7Ci0KLQkJLyogSW5pdGlhbGl6ZSBzdF9h Y3Rpdml0eSBwb2ludGVycy4gKi8KLQkJYnVmZmVyID0gQmFja2VuZEFjdGl2aXR5QnVmZmVy OwotCQlmb3IgKGkgPSAwOyBpIDwgTnVtQmFja2VuZFN0YXRTbG90czsgaSsrKQotCQl7Ci0J CQlCYWNrZW5kU3RhdHVzQXJyYXlbaV0uc3RfYWN0aXZpdHlfcmF3ID0gYnVmZmVyOwotCQkJ YnVmZmVyICs9IHBnc3RhdF90cmFja19hY3Rpdml0eV9xdWVyeV9zaXplOwotCQl9CisJCUJh Y2tlbmRTdGF0dXNBcnJheVtpXS5zdF9hY3Rpdml0eV9yYXcgPSBidWZmZXI7CisJCWJ1ZmZl ciArPSBwZ3N0YXRfdHJhY2tfYWN0aXZpdHlfcXVlcnlfc2l6ZTsKIAl9CiAKICNpZmRlZiBV U0VfU1NMCi0JLyogQ3JlYXRlIG9yIGF0dGFjaCB0byB0aGUgc2hhcmVkIFNTTCBzdGF0dXMg YnVmZmVyICovCi0Jc2l6ZSA9IG11bF9zaXplKHNpemVvZihQZ0JhY2tlbmRTU0xTdGF0dXMp LCBOdW1CYWNrZW5kU3RhdFNsb3RzKTsKLQlCYWNrZW5kU3NsU3RhdHVzQnVmZmVyID0gKFBn QmFja2VuZFNTTFN0YXR1cyAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIkJhY2tlbmQgU1NMIFN0 YXR1cyBCdWZmZXIiLCBzaXplLCAmZm91bmQpOwotCi0JaWYgKCFmb3VuZCkKIAl7CiAJCVBn QmFja2VuZFNTTFN0YXR1cyAqcHRyOwogCi0JCU1lbVNldChCYWNrZW5kU3NsU3RhdHVzQnVm ZmVyLCAwLCBzaXplKTsKLQogCQkvKiBJbml0aWFsaXplIHN0X3NzbHN0YXR1cyBwb2ludGVy cy4gKi8KIAkJcHRyID0gQmFja2VuZFNzbFN0YXR1c0J1ZmZlcjsKIAkJZm9yIChpID0gMDsg aSA8IE51bUJhY2tlbmRTdGF0U2xvdHM7IGkrKykKQEAgLTIxMSwxNyArMTk0LDkgQEAgQmFj a2VuZFN0YXR1c1NobWVtSW5pdCh2b2lkKQogI2VuZGlmCiAKICNpZmRlZiBFTkFCTEVfR1NT Ci0JLyogQ3JlYXRlIG9yIGF0dGFjaCB0byB0aGUgc2hhcmVkIEdTU0FQSSBzdGF0dXMgYnVm ZmVyICovCi0Jc2l6ZSA9IG11bF9zaXplKHNpemVvZihQZ0JhY2tlbmRHU1NTdGF0dXMpLCBO dW1CYWNrZW5kU3RhdFNsb3RzKTsKLQlCYWNrZW5kR3NzU3RhdHVzQnVmZmVyID0gKFBnQmFj a2VuZEdTU1N0YXR1cyAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIkJhY2tlbmQgR1NTIFN0YXR1 cyBCdWZmZXIiLCBzaXplLCAmZm91bmQpOwotCi0JaWYgKCFmb3VuZCkKIAl7CiAJCVBnQmFj a2VuZEdTU1N0YXR1cyAqcHRyOwogCi0JCU1lbVNldChCYWNrZW5kR3NzU3RhdHVzQnVmZmVy LCAwLCBzaXplKTsKLQogCQkvKiBJbml0aWFsaXplIHN0X2dzc3N0YXR1cyBwb2ludGVycy4g Ki8KIAkJcHRyID0gQmFja2VuZEdzc1N0YXR1c0J1ZmZlcjsKIAkJZm9yIChpID0gMDsgaSA8 IE51bUJhY2tlbmRTdGF0U2xvdHM7IGkrKykKQEAgLTIzMyw2ICsyMDgsMTMgQEAgQmFja2Vu ZFN0YXR1c1NobWVtSW5pdCh2b2lkKQogI2VuZGlmCiB9CiAKK3N0YXRpYyB2b2lkCitCYWNr ZW5kU3RhdHVzU2htZW1BdHRhY2godm9pZCAqYXJnKQoreworCUJhY2tlbmRBY3Rpdml0eUJ1 ZmZlclNpemUgPSBtdWxfc2l6ZShwZ3N0YXRfdHJhY2tfYWN0aXZpdHlfcXVlcnlfc2l6ZSwK KwkJCQkJCQkJCQkgTnVtQmFja2VuZFN0YXRTbG90cyk7Cit9CisKIC8qCiAgKiBJbml0aWFs aXplIHBnc3RhdHMgYmFja2VuZCBhY3Rpdml0eSBzdGF0ZSwgYW5kIHNldCB1cCBvdXIgb24t cHJvYy1leGl0CiAgKiBob29rLiAgQ2FsbGVkIGZyb20gSW5pdFBvc3RncmVzIGFuZCBBdXhp bGlhcnlQcm9jZXNzTWFpbi4gIE15UHJvY051bWJlciBtdXN0CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfc2htZW0uYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FjdGl2aXR5L3Bnc3RhdF9zaG1lbS5jCmluZGV4IDMzZmJkY2E5NjA5Li42MDJlYzQ5 NzhjNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3No bWVtLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3NobWVtLmMK QEAgLTE0LDYgKzE0LDcgQEAKIAogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0 b3JhZ2Uvc2htZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNs dWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3Bnc3RhdF9pbnRlcm5h bC5oIgogCkBAIC01Nyw2ICs1OCwxMyBAQCBzdGF0aWMgdm9pZCBwZ3N0YXRfcmVsZWFzZV9t YXRjaGluZ19lbnRyeV9yZWZzKGJvb2wgZGlzY2FyZF9wZW5kaW5nLCBSZWxlYXNlTWF0Ywog CiBzdGF0aWMgdm9pZCBwZ3N0YXRfc2V0dXBfbWVtY3h0KHZvaWQpOwogCitzdGF0aWMgdm9p ZCBTdGF0c1NobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgU3RhdHNTaG1l bUluaXQodm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgU3RhdHNTaG1lbUNh bGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IFN0YXRzU2htZW1SZXF1ZXN0LAorCS5pbml0 X2ZuID0gU3RhdHNTaG1lbUluaXQsCit9OwogCiAvKiBwYXJhbWV0ZXIgZm9yIHRoZSBzaGFy ZWQgaGFzaCAqLwogc3RhdGljIGNvbnN0IGRzaGFzaF9wYXJhbWV0ZXJzIGRzaF9wYXJhbXMg PSB7CkBAIC0xMjMsNyArMTMxLDcgQEAgcGdzdGF0X2RzYV9pbml0X3NpemUodm9pZCkKIC8q CiAgKiBDb21wdXRlIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkIGZvciBjdW11bGF0aXZl IHN0YXRpc3RpY3MKICAqLwotU2l6ZQorc3RhdGljIFNpemUKIFN0YXRzU2htZW1TaXplKHZv aWQpCiB7CiAJU2l6ZQkJc3o7CkBAIC0xNTAsMTAxICsxNTgsMTAwIEBAIFN0YXRzU2htZW1T aXplKHZvaWQpCiB9CiAKIC8qCi0gKiBJbml0aWFsaXplIGN1bXVsYXRpdmUgc3RhdGlzdGlj cyBzeXN0ZW0gZHVyaW5nIHN0YXJ0dXAKKyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgYXJl YSBmb3IgY3VtdWxhdGl2ZSBzdGF0aXN0aWNzCiAgKi8KLXZvaWQKLVN0YXRzU2htZW1Jbml0 KHZvaWQpCitzdGF0aWMgdm9pZAorU3RhdHNTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogewot CWJvb2wJCWZvdW5kOwotCVNpemUJCXN6OwotCi0Jc3ogPSBTdGF0c1NobWVtU2l6ZSgpOwot CXBnU3RhdExvY2FsLnNobWVtID0gKFBnU3RhdF9TaG1lbUNvbnRyb2wgKikKLQkJU2htZW1J bml0U3RydWN0KCJTaGFyZWQgTWVtb3J5IFN0YXRzIiwgc3osICZmb3VuZCk7CisJc3RhdGlj IFNobWVtU3RydWN0RGVzYyBTdGF0c1NobWVtRGVzYzsKIAotCWlmICghSXNVbmRlclBvc3Rt YXN0ZXIpCi0JewotCQlkc2FfYXJlYSAgICpkc2E7Ci0JCWRzaGFzaF90YWJsZSAqZHNoOwot CQlQZ1N0YXRfU2htZW1Db250cm9sICpjdGwgPSBwZ1N0YXRMb2NhbC5zaG1lbTsKLQkJY2hh cgkgICAqcCA9IChjaGFyICopIGN0bDsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlN0YXRzU2ht ZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJTaGFyZWQgTWVtb3J5IFN0YXRzIiwKKwkJCQkJ ICAgLnNpemUgPSBTdGF0c1NobWVtU2l6ZSgpLAorCQkJCQkgICAucHRyID0gKHZvaWQgKiop ICZwZ1N0YXRMb2NhbC5zaG1lbSwKKwkJKTsKK30KIAotCQlBc3NlcnQoIWZvdW5kKTsKKy8q CisgKiBJbml0aWFsaXplIGN1bXVsYXRpdmUgc3RhdGlzdGljcyBzeXN0ZW0gZHVyaW5nIHN0 YXJ0dXAKKyAqLworc3RhdGljIHZvaWQKK1N0YXRzU2htZW1Jbml0KHZvaWQgKmFyZykKK3sK Kwlkc2FfYXJlYSAgICpkc2E7CisJZHNoYXNoX3RhYmxlICpkc2g7CisJUGdTdGF0X1NobWVt Q29udHJvbCAqY3RsID0gcGdTdGF0TG9jYWwuc2htZW07CisJY2hhcgkgICAqcCA9IChjaGFy ICopIGN0bDsKIAotCQkvKiB0aGUgYWxsb2NhdGlvbiBvZiBwZ1N0YXRMb2NhbC5zaG1lbSBp dHNlbGYgKi8KLQkJcCArPSBNQVhBTElHTihzaXplb2YoUGdTdGF0X1NobWVtQ29udHJvbCkp OworCS8qIHRoZSBhbGxvY2F0aW9uIG9mIHBnU3RhdExvY2FsLnNobWVtIGl0c2VsZiAqLwor CXAgKz0gTUFYQUxJR04oc2l6ZW9mKFBnU3RhdF9TaG1lbUNvbnRyb2wpKTsKIAotCQkvKgot CQkgKiBDcmVhdGUgYSBzbWFsbCBkc2EgYWxsb2NhdGlvbiBpbiBwbGFpbiBzaGFyZWQgbWVt b3J5LiBUaGlzIGlzCi0JCSAqIHJlcXVpcmVkIGJlY2F1c2UgcG9zdG1hc3RlciBjYW5ub3Qg dXNlIGRzbSBzZWdtZW50cy4gSXQgYWxzbwotCQkgKiBwcm92aWRlcyBhIHNtYWxsIGVmZmlj aWVuY3kgd2luLgotCQkgKi8KLQkJY3RsLT5yYXdfZHNhX2FyZWEgPSBwOwotCQlkc2EgPSBk c2FfY3JlYXRlX2luX3BsYWNlKGN0bC0+cmF3X2RzYV9hcmVhLAotCQkJCQkJCQkgIHBnc3Rh dF9kc2FfaW5pdF9zaXplKCksCi0JCQkJCQkJCSAgTFdUUkFOQ0hFX1BHU1RBVFNfRFNBLCBO VUxMKTsKLQkJZHNhX3Bpbihkc2EpOworCS8qCisJICogQ3JlYXRlIGEgc21hbGwgZHNhIGFs bG9jYXRpb24gaW4gcGxhaW4gc2hhcmVkIG1lbW9yeS4gVGhpcyBpcyByZXF1aXJlZAorCSAq IGJlY2F1c2UgcG9zdG1hc3RlciBjYW5ub3QgdXNlIGRzbSBzZWdtZW50cy4gSXQgYWxzbyBw cm92aWRlcyBhIHNtYWxsCisJICogZWZmaWNpZW5jeSB3aW4uCisJICovCisJY3RsLT5yYXdf ZHNhX2FyZWEgPSBwOworCWRzYSA9IGRzYV9jcmVhdGVfaW5fcGxhY2UoY3RsLT5yYXdfZHNh X2FyZWEsCisJCQkJCQkJICBwZ3N0YXRfZHNhX2luaXRfc2l6ZSgpLAorCQkJCQkJCSAgTFdU UkFOQ0hFX1BHU1RBVFNfRFNBLCBOVUxMKTsKKwlkc2FfcGluKGRzYSk7CiAKLQkJLyoKLQkJ ICogVG8gZW5zdXJlIGRzaGFzaCBpcyBjcmVhdGVkIGluICJwbGFpbiIgc2hhcmVkIG1lbW9y eSwgdGVtcG9yYXJpbHkKLQkJICogbGltaXQgc2l6ZSBvZiBkc2EgdG8gdGhlIGluaXRpYWwg c2l6ZSBvZiB0aGUgZHNhLgotCQkgKi8KLQkJZHNhX3NldF9zaXplX2xpbWl0KGRzYSwgcGdz dGF0X2RzYV9pbml0X3NpemUoKSk7CisJLyoKKwkgKiBUbyBlbnN1cmUgZHNoYXNoIGlzIGNy ZWF0ZWQgaW4gInBsYWluIiBzaGFyZWQgbWVtb3J5LCB0ZW1wb3JhcmlseSBsaW1pdAorCSAq IHNpemUgb2YgZHNhIHRvIHRoZSBpbml0aWFsIHNpemUgb2YgdGhlIGRzYS4KKwkgKi8KKwlk c2Ffc2V0X3NpemVfbGltaXQoZHNhLCBwZ3N0YXRfZHNhX2luaXRfc2l6ZSgpKTsKIAotCQkv KgotCQkgKiBXaXRoIHRoZSBsaW1pdCBpbiBwbGFjZSwgY3JlYXRlIHRoZSBkc2hhc2ggdGFi bGUuIFhYWDogSXQnZCBiZSBuaWNlCi0JCSAqIGlmIHRoZXJlIHdlcmUgZHNoYXNoX2NyZWF0 ZV9pbl9wbGFjZSgpLgotCQkgKi8KLQkJZHNoID0gZHNoYXNoX2NyZWF0ZShkc2EsICZkc2hf cGFyYW1zLCBOVUxMKTsKLQkJY3RsLT5oYXNoX2hhbmRsZSA9IGRzaGFzaF9nZXRfaGFzaF90 YWJsZV9oYW5kbGUoZHNoKTsKKwkvKgorCSAqIFdpdGggdGhlIGxpbWl0IGluIHBsYWNlLCBj cmVhdGUgdGhlIGRzaGFzaCB0YWJsZS4gWFhYOiBJdCdkIGJlIG5pY2UgaWYKKwkgKiB0aGVy ZSB3ZXJlIGRzaGFzaF9jcmVhdGVfaW5fcGxhY2UoKS4KKwkgKi8KKwlkc2ggPSBkc2hhc2hf Y3JlYXRlKGRzYSwgJmRzaF9wYXJhbXMsIE5VTEwpOworCWN0bC0+aGFzaF9oYW5kbGUgPSBk c2hhc2hfZ2V0X2hhc2hfdGFibGVfaGFuZGxlKGRzaCk7CiAKLQkJLyogbGlmdCBsaW1pdCBz ZXQgYWJvdmUgKi8KLQkJZHNhX3NldF9zaXplX2xpbWl0KGRzYSwgLTEpOworCS8qIGxpZnQg bGltaXQgc2V0IGFib3ZlICovCisJZHNhX3NldF9zaXplX2xpbWl0KGRzYSwgLTEpOwogCi0J CS8qCi0JCSAqIFBvc3RtYXN0ZXIgd2lsbCBuZXZlciBhY2Nlc3MgdGhlc2UgYWdhaW4sIHRo dXMgZnJlZSB0aGUgbG9jYWwKLQkJICogZHNhL2RzaGFzaCByZWZlcmVuY2VzLgotCQkgKi8K LQkJZHNoYXNoX2RldGFjaChkc2gpOwotCQlkc2FfZGV0YWNoKGRzYSk7CisJLyoKKwkgKiBQ b3N0bWFzdGVyIHdpbGwgbmV2ZXIgYWNjZXNzIHRoZXNlIGFnYWluLCB0aHVzIGZyZWUgdGhl IGxvY2FsCisJICogZHNhL2RzaGFzaCByZWZlcmVuY2VzLgorCSAqLworCWRzaGFzaF9kZXRh Y2goZHNoKTsKKwlkc2FfZGV0YWNoKGRzYSk7CiAKLQkJcGdfYXRvbWljX2luaXRfdTY0KCZj dGwtPmdjX3JlcXVlc3RfY291bnQsIDEpOworCXBnX2F0b21pY19pbml0X3U2NCgmY3RsLT5n Y19yZXF1ZXN0X2NvdW50LCAxKTsKIAotCQkvKiBEbyB0aGUgcGVyLWtpbmQgaW5pdGlhbGl6 YXRpb24gKi8KLQkJZm9yIChQZ1N0YXRfS2luZCBraW5kID0gUEdTVEFUX0tJTkRfTUlOOyBr aW5kIDw9IFBHU1RBVF9LSU5EX01BWDsga2luZCsrKQotCQl7Ci0JCQljb25zdCBQZ1N0YXRf S2luZEluZm8gKmtpbmRfaW5mbyA9IHBnc3RhdF9nZXRfa2luZF9pbmZvKGtpbmQpOwotCQkJ Y2hhcgkgICAqcHRyOworCS8qIERvIHRoZSBwZXIta2luZCBpbml0aWFsaXphdGlvbiAqLwor CWZvciAoUGdTdGF0X0tpbmQga2luZCA9IFBHU1RBVF9LSU5EX01JTjsga2luZCA8PSBQR1NU QVRfS0lORF9NQVg7IGtpbmQrKykKKwl7CisJCWNvbnN0IFBnU3RhdF9LaW5kSW5mbyAqa2lu ZF9pbmZvID0gcGdzdGF0X2dldF9raW5kX2luZm8oa2luZCk7CisJCWNoYXIJICAgKnB0cjsK IAotCQkJaWYgKCFraW5kX2luZm8pCi0JCQkJY29udGludWU7CisJCWlmICgha2luZF9pbmZv KQorCQkJY29udGludWU7CiAKLQkJCS8qIGluaXRpYWxpemUgZW50cnkgY291bnQgdHJhY2tp bmcgKi8KLQkJCWlmIChraW5kX2luZm8tPnRyYWNrX2VudHJ5X2NvdW50KQotCQkJCXBnX2F0 b21pY19pbml0X3U2NCgmY3RsLT5lbnRyeV9jb3VudHNba2luZCAtIDFdLCAwKTsKKwkJLyog aW5pdGlhbGl6ZSBlbnRyeSBjb3VudCB0cmFja2luZyAqLworCQlpZiAoa2luZF9pbmZvLT50 cmFja19lbnRyeV9jb3VudCkKKwkJCXBnX2F0b21pY19pbml0X3U2NCgmY3RsLT5lbnRyeV9j b3VudHNba2luZCAtIDFdLCAwKTsKIAotCQkJLyogaW5pdGlhbGl6ZSBmaXhlZC1udW1iZXJl ZCBzdGF0cyAqLwotCQkJaWYgKGtpbmRfaW5mby0+Zml4ZWRfYW1vdW50KQorCQkvKiBpbml0 aWFsaXplIGZpeGVkLW51bWJlcmVkIHN0YXRzICovCisJCWlmIChraW5kX2luZm8tPmZpeGVk X2Ftb3VudCkKKwkJeworCQkJaWYgKHBnc3RhdF9pc19raW5kX2J1aWx0aW4oa2luZCkpCisJ CQkJcHRyID0gKChjaGFyICopIGN0bCkgKyBraW5kX2luZm8tPnNoYXJlZF9jdGxfb2ZmOwor CQkJZWxzZQogCQkJewotCQkJCWlmIChwZ3N0YXRfaXNfa2luZF9idWlsdGluKGtpbmQpKQot CQkJCQlwdHIgPSAoKGNoYXIgKikgY3RsKSArIGtpbmRfaW5mby0+c2hhcmVkX2N0bF9vZmY7 Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJaW50CQkJaWR4ID0ga2luZCAtIFBHU1RBVF9LSU5E X0NVU1RPTV9NSU47Ci0KLQkJCQkJQXNzZXJ0KGtpbmRfaW5mby0+c2hhcmVkX3NpemUgIT0g MCk7Ci0JCQkJCWN0bC0+Y3VzdG9tX2RhdGFbaWR4XSA9IFNobWVtQWxsb2Moa2luZF9pbmZv LT5zaGFyZWRfc2l6ZSk7Ci0JCQkJCXB0ciA9IGN0bC0+Y3VzdG9tX2RhdGFbaWR4XTsKLQkJ CQl9Ci0KLQkJCQlraW5kX2luZm8tPmluaXRfc2htZW1fY2IocHRyKTsKKwkJCQlpbnQJCQlp ZHggPSBraW5kIC0gUEdTVEFUX0tJTkRfQ1VTVE9NX01JTjsKKworCQkJCUFzc2VydChraW5k X2luZm8tPnNoYXJlZF9zaXplICE9IDApOworCQkJCWN0bC0+Y3VzdG9tX2RhdGFbaWR4XSA9 IFNobWVtQWxsb2Moa2luZF9pbmZvLT5zaGFyZWRfc2l6ZSk7CisJCQkJcHRyID0gY3RsLT5j dXN0b21fZGF0YVtpZHhdOwogCQkJfQorCisJCQlraW5kX2luZm8tPmluaXRfc2htZW1fY2Io cHRyKTsKIAkJfQogCX0KLQllbHNlCi0JewotCQlBc3NlcnQoZm91bmQpOwotCX0KIH0KIAog dm9pZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVu dC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCmluZGV4IDJi NzY5Njc3NzZjLi5lYjI2NDYzNDIxNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvd2FpdF9ldmVudC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5 L3dhaXRfZXZlbnQuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvbG1n ci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9z aG1lbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInN0 b3JhZ2Uvc3Bpbi5oIgogI2luY2x1ZGUgInV0aWxzL3dhaXRfZXZlbnQuaCIKIApAQCAtOTUs NTkgKzk2LDU0IEBAIHN0YXRpYyBXYWl0RXZlbnRDdXN0b21Db3VudGVyRGF0YSAqV2FpdEV2 ZW50Q3VzdG9tQ291bnRlcjsKIHN0YXRpYyB1aW50MzIgV2FpdEV2ZW50Q3VzdG9tTmV3KHVp bnQzMiBjbGFzc0lkLCBjb25zdCBjaGFyICp3YWl0X2V2ZW50X25hbWUpOwogc3RhdGljIGNv bnN0IGNoYXIgKkdldFdhaXRFdmVudEN1c3RvbUlkZW50aWZpZXIodWludDMyIHdhaXRfZXZl bnRfaW5mbyk7CiAKK3N0YXRpYyB2b2lkIFdhaXRFdmVudEN1c3RvbVNobWVtUmVxdWVzdCh2 b2lkICphcmcpOworc3RhdGljIHZvaWQgV2FpdEV2ZW50Q3VzdG9tU2htZW1Jbml0KHZvaWQg KmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIFdhaXRFdmVudEN1c3RvbVNobWVtQ2Fs bGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gV2FpdEV2ZW50Q3VzdG9tU2htZW1SZXF1ZXN0 LAorCS5pbml0X2ZuID0gV2FpdEV2ZW50Q3VzdG9tU2htZW1Jbml0LAorfTsKKwogLyoKLSAq ICBSZXR1cm4gdGhlIHNwYWNlIGZvciBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxlcyBhbmQg ZHluYW1pYyBhbGxvY2F0aW9uIGNvdW50ZXIuCisgKiBSZWdpc3RlciBzaG1lbSBzcGFjZSBm b3IgZHluYW1pYyBzaGFyZWQgaGFzaCBhbmQgZHluYW1pYyBhbGxvY2F0aW9uIGNvdW50ZXIu CiAgKi8KLVNpemUKLVdhaXRFdmVudEN1c3RvbVNobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZv aWQKK1dhaXRFdmVudEN1c3RvbVNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7Ci0JU2l6ZQkJ c3o7Ci0KLQlzeiA9IE1BWEFMSUdOKHNpemVvZihXYWl0RXZlbnRDdXN0b21Db3VudGVyRGF0 YSkpOwotCXN6ID0gYWRkX3NpemUoc3osIGhhc2hfZXN0aW1hdGVfc2l6ZShXQUlUX0VWRU5U X0NVU1RPTV9IQVNIX1NJWkUsCi0JCQkJCQkJCQkJIHNpemVvZihXYWl0RXZlbnRDdXN0b21F bnRyeUJ5SW5mbykpKTsKLQlzeiA9IGFkZF9zaXplKHN6LCBoYXNoX2VzdGltYXRlX3NpemUo V0FJVF9FVkVOVF9DVVNUT01fSEFTSF9TSVpFLAotCQkJCQkJCQkJCSBzaXplb2YoV2FpdEV2 ZW50Q3VzdG9tRW50cnlCeU5hbWUpKSk7Ci0JcmV0dXJuIHN6OworCXN0YXRpYyBTaG1lbVN0 cnVjdERlc2MgV2FpdEV2ZW50Q3VzdG9tQ291bnRlclNobWVtRGVzYzsKKwlzdGF0aWMgU2ht ZW1IYXNoRGVzYyBXYWl0RXZlbnRDdXN0b21IYXNoQnlJbmZvRGVzYzsKKwlzdGF0aWMgU2ht ZW1IYXNoRGVzYyBXYWl0RXZlbnRDdXN0b21IYXNoQnlOYW1lRGVzYzsKKworCVNobWVtUmVx dWVzdFN0cnVjdCgmV2FpdEV2ZW50Q3VzdG9tQ291bnRlclNobWVtRGVzYywKKwkJCQkJICAg Lm5hbWUgPSAiV2FpdEV2ZW50Q3VzdG9tQ291bnRlckRhdGEiLAorCQkJCQkgICAuc2l6ZSA9 IHNpemVvZihXYWl0RXZlbnRDdXN0b21Db3VudGVyRGF0YSksCisJCQkJCSAgIC5wdHIgPSAo dm9pZCAqKikgJldhaXRFdmVudEN1c3RvbUNvdW50ZXIsCisJCSk7CisJU2htZW1SZXF1ZXN0 SGFzaCgmV2FpdEV2ZW50Q3VzdG9tSGFzaEJ5SW5mb0Rlc2MsCisJCQkJCSAubmFtZSA9ICJX YWl0RXZlbnRDdXN0b20gaGFzaCBieSB3YWl0IGV2ZW50IGluZm9ybWF0aW9uIiwKKwkJCQkJ IC5wdHIgPSAmV2FpdEV2ZW50Q3VzdG9tSGFzaEJ5SW5mbywKKwkJCQkJIC5uZWxlbXMgPSBX QUlUX0VWRU5UX0NVU1RPTV9IQVNIX1NJWkUsCisJCQkJCSAuaGFzaF9pbmZvLmtleXNpemUg PSBzaXplb2YodWludDMyKSwKKwkJCQkJIC5oYXNoX2luZm8uZW50cnlzaXplID0gc2l6ZW9m KFdhaXRFdmVudEN1c3RvbUVudHJ5QnlJbmZvKSwKKwkJCQkJIC5oYXNoX2ZsYWdzID0gSEFT SF9FTEVNIHwgSEFTSF9CTE9CUywKKwkJKTsKKwlTaG1lbVJlcXVlc3RIYXNoKCZXYWl0RXZl bnRDdXN0b21IYXNoQnlOYW1lRGVzYywKKwkJCQkJIC5uYW1lID0gIldhaXRFdmVudEN1c3Rv bSBoYXNoIGJ5IG5hbWUiLAorCQkJCQkgLnB0ciA9ICZXYWl0RXZlbnRDdXN0b21IYXNoQnlO YW1lLAorCQkJCQkgLm5lbGVtcyA9IFdBSVRfRVZFTlRfQ1VTVE9NX0hBU0hfU0laRSwKKwkv KiBrZXkgaXMgYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nICovCisJCQkJCSAuaGFzaF9pbmZv LmtleXNpemUgPSBzaXplb2YoY2hhcltOQU1FREFUQUxFTl0pLAorCQkJCQkgLmhhc2hfaW5m by5lbnRyeXNpemUgPSBzaXplb2YoV2FpdEV2ZW50Q3VzdG9tRW50cnlCeU5hbWUpLAorCQkJ CQkgLmhhc2hfZmxhZ3MgPSBIQVNIX0VMRU0gfCBIQVNIX1NUUklOR1MsCisJCSk7CiB9CiAK LS8qCi0gKiBBbGxvY2F0ZSBzaG1lbSBzcGFjZSBmb3IgZHluYW1pYyBzaGFyZWQgaGFzaCBh bmQgZHluYW1pYyBhbGxvY2F0aW9uIGNvdW50ZXIuCi0gKi8KLXZvaWQKLVdhaXRFdmVudEN1 c3RvbVNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK1dhaXRFdmVudEN1c3RvbVNobWVt SW5pdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0JSEFTSENUTAkJaW5mbzsKLQot CVdhaXRFdmVudEN1c3RvbUNvdW50ZXIgPSAoV2FpdEV2ZW50Q3VzdG9tQ291bnRlckRhdGEg KikKLQkJU2htZW1Jbml0U3RydWN0KCJXYWl0RXZlbnRDdXN0b21Db3VudGVyRGF0YSIsCi0J CQkJCQlzaXplb2YoV2FpdEV2ZW50Q3VzdG9tQ291bnRlckRhdGEpLCAmZm91bmQpOwotCi0J aWYgKCFmb3VuZCkKLQl7Ci0JCS8qIGluaXRpYWxpemUgdGhlIGFsbG9jYXRpb24gY291bnRl ciBhbmQgaXRzIHNwaW5sb2NrLiAqLwotCQlXYWl0RXZlbnRDdXN0b21Db3VudGVyLT5uZXh0 SWQgPSBXQUlUX0VWRU5UX0NVU1RPTV9JTklUSUFMX0lEOwotCQlTcGluTG9ja0luaXQoJldh aXRFdmVudEN1c3RvbUNvdW50ZXItPm11dGV4KTsKLQl9Ci0KLQkvKiBpbml0aWFsaXplIG9y IGF0dGFjaCB0aGUgaGFzaCB0YWJsZXMgdG8gc3RvcmUgY3VzdG9tIHdhaXQgZXZlbnRzICov Ci0JaW5mby5rZXlzaXplID0gc2l6ZW9mKHVpbnQzMik7Ci0JaW5mby5lbnRyeXNpemUgPSBz aXplb2YoV2FpdEV2ZW50Q3VzdG9tRW50cnlCeUluZm8pOwotCVdhaXRFdmVudEN1c3RvbUhh c2hCeUluZm8gPQotCQlTaG1lbUluaXRIYXNoKCJXYWl0RXZlbnRDdXN0b20gaGFzaCBieSB3 YWl0IGV2ZW50IGluZm9ybWF0aW9uIiwKLQkJCQkJICBXQUlUX0VWRU5UX0NVU1RPTV9IQVNI X1NJWkUsCi0JCQkJCSAgJmluZm8sCi0JCQkJCSAgSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyk7 Ci0KLQkvKiBrZXkgaXMgYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nICovCi0JaW5mby5rZXlz aXplID0gc2l6ZW9mKGNoYXJbTkFNRURBVEFMRU5dKTsKLQlpbmZvLmVudHJ5c2l6ZSA9IHNp emVvZihXYWl0RXZlbnRDdXN0b21FbnRyeUJ5TmFtZSk7Ci0JV2FpdEV2ZW50Q3VzdG9tSGFz aEJ5TmFtZSA9Ci0JCVNobWVtSW5pdEhhc2goIldhaXRFdmVudEN1c3RvbSBoYXNoIGJ5IG5h bWUiLAotCQkJCQkgIFdBSVRfRVZFTlRfQ1VTVE9NX0hBU0hfU0laRSwKLQkJCQkJICAmaW5m bywKLQkJCQkJICBIQVNIX0VMRU0gfCBIQVNIX1NUUklOR1MpOworCS8qIGluaXRpYWxpemUg dGhlIGFsbG9jYXRpb24gY291bnRlciBhbmQgaXRzIHNwaW5sb2NrLiAqLworCVdhaXRFdmVu dEN1c3RvbUNvdW50ZXItPm5leHRJZCA9IFdBSVRfRVZFTlRfQ1VTVE9NX0lOSVRJQUxfSUQ7 CisJU3BpbkxvY2tJbml0KCZXYWl0RXZlbnRDdXN0b21Db3VudGVyLT5tdXRleCk7CiB9CiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2luamVjdGlvbl9wb2lu dC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9pbmplY3Rpb25fcG9pbnQuYwppbmRleCBj MDZiMGU5YjgwMC4uOTk4MWQ2ZTIxMmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvaW5qZWN0aW9uX3BvaW50LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9p bmplY3Rpb25fcG9pbnQuYwpAQCAtMTcsNiArMTcsNyBAQAogICovCiAjaW5jbHVkZSAicG9z dGdyZXMuaCIKIAorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUg InV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogCiAjaWZkZWYgVVNFX0lOSkVDVElPTl9QT0lO VFMKQEAgLTEwOSw2ICsxMTAsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5qZWN0aW9uUG9pbnRD YWNoZUVudHJ5CiAKIHN0YXRpYyBIVEFCICpJbmplY3Rpb25Qb2ludENhY2hlID0gTlVMTDsK IAorI2lmZGVmIFVTRV9JTkpFQ1RJT05fUE9JTlRTCitzdGF0aWMgdm9pZCBJbmplY3Rpb25Q b2ludFNobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgSW5qZWN0aW9uUG9p bnRTaG1lbUluaXQodm9pZCAqYXJnKTsKKyNlbmRpZgorCiAvKgogICogaW5qZWN0aW9uX3Bv aW50X2NhY2hlX2FkZAogICoKQEAgLTIyNiw0NiArMjMyLDM4IEBAIGluamVjdGlvbl9wb2lu dF9jYWNoZV9nZXQoY29uc3QgY2hhciAqbmFtZSkKIH0KICNlbmRpZgkJCQkJCQkvKiBVU0Vf SU5KRUNUSU9OX1BPSU5UUyAqLwogCi0vKgotICogUmV0dXJuIHRoZSBzcGFjZSBmb3IgZHlu YW1pYyBzaGFyZWQgaGFzaCB0YWJsZS4KLSAqLwotU2l6ZQotSW5qZWN0aW9uUG9pbnRTaG1l bVNpemUodm9pZCkKLXsKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIEluamVjdGlvblBvaW50U2ht ZW1DYWxsYmFja3MgPSB7CiAjaWZkZWYgVVNFX0lOSkVDVElPTl9QT0lOVFMKLQlTaXplCQlz eiA9IDA7Ci0KLQlzeiA9IGFkZF9zaXplKHN6LCBzaXplb2YoSW5qZWN0aW9uUG9pbnRzQ3Rs KSk7Ci0JcmV0dXJuIHN6OwotI2Vsc2UKLQlyZXR1cm4gMDsKKwkucmVxdWVzdF9mbiA9IElu amVjdGlvblBvaW50U2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gSW5qZWN0aW9uUG9pbnRT aG1lbUluaXQsCiAjZW5kaWYKLX0KK307CiAKIC8qCi0gKiBBbGxvY2F0ZSBzaG1lbSBzcGFj ZSBmb3IgZHluYW1pYyBzaGFyZWQgaGFzaC4KKyAqIFJlc2VydmUgc3BhY2UgZm9yIHRoZSBk eW5hbWljIHNoYXJlZCBoYXNoIHRhYmxlCiAgKi8KLXZvaWQKLUluamVjdGlvblBvaW50U2ht ZW1Jbml0KHZvaWQpCi17CiAjaWZkZWYgVVNFX0lOSkVDVElPTl9QT0lOVFMKLQlib29sCQlm b3VuZDsKK3N0YXRpYyB2b2lkCitJbmplY3Rpb25Qb2ludFNobWVtUmVxdWVzdCh2b2lkICph cmcpCit7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBJbmplY3Rpb25Qb2ludFNobWVtRGVz YzsKIAotCUFjdGl2ZUluamVjdGlvblBvaW50cyA9IFNobWVtSW5pdFN0cnVjdCgiSW5qZWN0 aW9uUG9pbnQgaGFzaCIsCi0JCQkJCQkJCQkJCXNpemVvZihJbmplY3Rpb25Qb2ludHNDdGwp LAotCQkJCQkJCQkJCQkmZm91bmQpOwotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCi0Jewot CQlBc3NlcnQoIWZvdW5kKTsKLQkJcGdfYXRvbWljX2luaXRfdTMyKCZBY3RpdmVJbmplY3Rp b25Qb2ludHMtPm1heF9pbnVzZSwgMCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0lO SkVDVElPTl9QT0lOVFM7IGkrKykKLQkJCXBnX2F0b21pY19pbml0X3U2NCgmQWN0aXZlSW5q ZWN0aW9uUG9pbnRzLT5lbnRyaWVzW2ldLmdlbmVyYXRpb24sIDApOwotCX0KLQllbHNlCi0J CUFzc2VydChmb3VuZCk7Ci0jZW5kaWYKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkluamVjdGlv blBvaW50U2htZW1EZXNjLAorCQkJCQkgICAubmFtZSA9ICJJbmplY3Rpb25Qb2ludCBoYXNo IiwKKwkJCQkJICAgLnNpemUgPSBzaXplb2YoSW5qZWN0aW9uUG9pbnRzQ3RsKSwKKwkJCQkJ ICAgLnB0ciA9ICh2b2lkICoqKSAmQWN0aXZlSW5qZWN0aW9uUG9pbnRzLAorCQkpOwogfQog CitzdGF0aWMgdm9pZAorSW5qZWN0aW9uUG9pbnRTaG1lbUluaXQodm9pZCAqYXJnKQorewor CXBnX2F0b21pY19pbml0X3UzMigmQWN0aXZlSW5qZWN0aW9uUG9pbnRzLT5tYXhfaW51c2Us IDApOworCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0lOSkVDVElPTl9QT0lOVFM7IGkrKykK KwkJcGdfYXRvbWljX2luaXRfdTY0KCZBY3RpdmVJbmplY3Rpb25Qb2ludHMtPmVudHJpZXNb aV0uZ2VuZXJhdGlvbiwgMCk7Cit9CisjZW5kaWYKKwogLyoKICAqIEF0dGFjaCBhIG5ldyBp bmplY3Rpb24gcG9pbnQuCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9u YnRyZWUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAppbmRleCBkYTc1MDNjNTdi Ni4uMzA5N2U5YmIxYWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUu aAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTEzMDAsOCArMTMwMCw2 IEBAIGV4dGVybiBCVEN5Y2xlSWQgX2J0X3ZhY3V1bV9jeWNsZWlkKFJlbGF0aW9uIHJlbCk7 CiBleHRlcm4gQlRDeWNsZUlkIF9idF9zdGFydF92YWN1dW0oUmVsYXRpb24gcmVsKTsKIGV4 dGVybiB2b2lkIF9idF9lbmRfdmFjdXVtKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBf YnRfZW5kX3ZhY3V1bV9jYWxsYmFjayhpbnQgY29kZSwgRGF0dW0gYXJnKTsKLWV4dGVybiBT aXplIEJUcmVlU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgQlRyZWVTaG1lbUluaXQo dm9pZCk7CiBleHRlcm4gYnl0ZWEgKmJ0b3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29s IHZhbGlkYXRlKTsKIGV4dGVybiBib29sIGJ0cHJvcGVydHkoT2lkIGluZGV4X29pZCwgaW50 IGF0dG5vLAogCQkJCQkgICBJbmRleEFNUHJvcGVydHkgcHJvcCwgY29uc3QgY2hhciAqcHJv cG5hbWUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3luY3NjYW4uaCBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9zeW5jc2Nhbi5oCmluZGV4IDI0Y2YzMzI5NGU1Li4zMmY4MzMy YWFlZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3N5bmNzY2FuLmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL3N5bmNzY2FuLmgKQEAgLTI0LDcgKzI0LDUgQEAgZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgdHJhY2Vfc3luY3NjYW47CiAKIGV4dGVybiB2b2lkIHNzX3Jl cG9ydF9sb2NhdGlvbihSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGxvY2F0aW9uKTsKIGV4 dGVybiBCbG9ja051bWJlciBzc19nZXRfbG9jYXRpb24oUmVsYXRpb24gcmVsLCBCbG9ja051 bWJlciByZWxuYmxvY2tzKTsKLWV4dGVybiB2b2lkIFN5bmNTY2FuU2htZW1Jbml0KHZvaWQp OwotZXh0ZXJuIFNpemUgU3luY1NjYW5TaG1lbVNpemUodm9pZCk7CiAKICNlbmRpZgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3R3b3BoYXNlLmggYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvdHdvcGhhc2UuaAppbmRleCA3NjFkNTZhNWYzZC4uMWQyZmY0MmM5YjcgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90d29waGFzZS5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy90d29waGFzZS5oCkBAIC0zMyw5ICszMyw2IEBAIHR5cGVkZWYgc3RydWN0IEds b2JhbFRyYW5zYWN0aW9uRGF0YSAqR2xvYmFsVHJhbnNhY3Rpb247CiAvKiBHVUMgdmFyaWFi bGUgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3ByZXBhcmVkX3hhY3RzOwogCi1l eHRlcm4gU2l6ZSBUd29QaGFzZVNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFR3b1Bo YXNlU2htZW1Jbml0KHZvaWQpOwotCiBleHRlcm4gdm9pZCBBdEFib3J0X1R3b3BoYXNlKHZv aWQpOwogZXh0ZXJuIHZvaWQgUG9zdFByZXBhcmVfVHdvcGhhc2Uodm9pZCk7CiAKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv eGxvZy5oCmluZGV4IDRhZjM4ZTc0Y2U0Li40MzdiNGYzMjM0OSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvYWNjZXNzL3hsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5o CkBAIC0yNTksOCArMjU5LDYgQEAgZXh0ZXJuIHZvaWQgSW5pdExvY2FsRGF0YUNoZWNrc3Vt U3RhdGUodm9pZCk7CiBleHRlcm4gdm9pZCBTZXRMb2NhbERhdGFDaGVja3N1bVN0YXRlKHVp bnQzMiBkYXRhX2NoZWNrc3VtX3ZlcnNpb24pOwogZXh0ZXJuIGJvb2wgR2V0RGVmYXVsdENo YXJTaWduZWRuZXNzKHZvaWQpOwogZXh0ZXJuIFhMb2dSZWNQdHIgR2V0RmFrZUxTTkZvclVu bG9nZ2VkUmVsKHZvaWQpOwotZXh0ZXJuIFNpemUgWExPR1NobWVtU2l6ZSh2b2lkKTsKLWV4 dGVybiB2b2lkIFhMT0dTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBCb290U3RyYXBY TE9HKHVpbnQzMiBkYXRhX2NoZWNrc3VtX3ZlcnNpb24pOwogZXh0ZXJuIHZvaWQgSW5pdGlh bGl6ZVdhbENvbnNpc3RlbmN5Q2hlY2tpbmcodm9pZCk7CiBleHRlcm4gdm9pZCBMb2NhbFBy b2Nlc3NDb250cm9sRmlsZShib29sIHJlc2V0KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2FjY2Vzcy94bG9ncHJlZmV0Y2hlci5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dwcmVm ZXRjaGVyLmgKaW5kZXggN2VjNDBjNGI3OGIuLjU2YTgxNjc2ZDkyIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3ByZWZldGNoZXIuaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MveGxvZ3ByZWZldGNoZXIuaApAQCAtMzQsOSArMzQsNiBAQCB0eXBlZGVmIHN0cnVj dCBYTG9nUHJlZmV0Y2hlciBYTG9nUHJlZmV0Y2hlcjsKIAogZXh0ZXJuIHZvaWQgWExvZ1By ZWZldGNoUmVjb25maWd1cmUodm9pZCk7CiAKLWV4dGVybiBzaXplX3QgWExvZ1ByZWZldGNo U2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgWExvZ1ByZWZldGNoU2htZW1Jbml0KHZv aWQpOwotCiBleHRlcm4gdm9pZCBYTG9nUHJlZmV0Y2hSZXNldFN0YXRzKHZvaWQpOwogCiBl eHRlcm4gWExvZ1ByZWZldGNoZXIgKlhMb2dQcmVmZXRjaGVyQWxsb2NhdGUoWExvZ1JlYWRl clN0YXRlICpyZWFkZXIpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dy ZWNvdmVyeS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oCmluZGV4IDI4 NDIxMDZiMjg1Li5iYTc3NTBkY2EwYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L3hsb2dyZWNvdmVyeS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVjb3Zlcnku aApAQCAtMTUzLDkgKzE1Myw2IEBAIGV4dGVybiBQR0RMTElNUE9SVCBib29sIHJlYWNoZWRD b25zaXN0ZW5jeTsKIC8qIEFyZSB3ZSBjdXJyZW50bHkgaW4gc3RhbmRieSBtb2RlPyAqLwog ZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgU3RhbmRieU1vZGU7CiAKLWV4dGVybiBTaXplIFhM b2dSZWNvdmVyeVNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFhMb2dSZWNvdmVyeVNo bWVtSW5pdCh2b2lkKTsKLQogZXh0ZXJuIHZvaWQgSW5pdFdhbFJlY292ZXJ5KENvbnRyb2xG aWxlRGF0YSAqQ29udHJvbEZpbGUsCiAJCQkJCQkJYm9vbCAqd2FzU2h1dGRvd25fcHRyLCBi b29sICpoYXZlQmFja3VwTGFiZWxfcHRyLAogCQkJCQkJCWJvb2wgKmhhdmVUYmxzcGNNYXBf cHRyKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nd2FpdC5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL3hsb2d3YWl0LmgKaW5kZXggZDEyNTMxZDMyYjguLjA3MTU3ZjIy MGVhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3dhaXQuaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3dhaXQuaApAQCAtMTAwLDggKzEwMCw2IEBAIHR5cGVk ZWYgc3RydWN0IFdhaXRMU05TdGF0ZQogCiBleHRlcm4gUEdETExJTVBPUlQgV2FpdExTTlN0 YXRlICp3YWl0TFNOU3RhdGU7CiAKLWV4dGVybiBTaXplIFdhaXRMU05TaG1lbVNpemUodm9p ZCk7Ci1leHRlcm4gdm9pZCBXYWl0TFNOU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIFhMb2dS ZWNQdHIgR2V0Q3VycmVudExTTkZvcldhaXRUeXBlKFdhaXRMU05UeXBlIGxzblR5cGUpOwog ZXh0ZXJuIHZvaWQgV2FpdExTTldha2V1cChXYWl0TFNOVHlwZSBsc25UeXBlLCBYTG9nUmVj UHRyIGN1cnJlbnRMU04pOwogZXh0ZXJuIHZvaWQgV2FpdExTTkNsZWFudXAodm9pZCk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wZ3N0YXQuaCBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5o CmluZGV4IDhlMzU0OWMzNzUyLi4yNzg2YTdjNWZmYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvcGdzdGF0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGdzdGF0LmgKQEAgLTU0MSwxMCArNTQx LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGdTdGF0X0JhY2tlbmRQZW5kaW5nCiAgKiBGdW5jdGlv bnMgaW4gcGdzdGF0LmMKICAqLwogCi0vKiBmdW5jdGlvbnMgY2FsbGVkIGZyb20gcG9zdG1h c3RlciAqLwotZXh0ZXJuIFNpemUgU3RhdHNTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9p ZCBTdGF0c1NobWVtSW5pdCh2b2lkKTsKLQogLyogRnVuY3Rpb25zIGNhbGxlZCBkdXJpbmcg c2VydmVyIHN0YXJ0dXAgLyBzaHV0ZG93biAqLwogZXh0ZXJuIHZvaWQgcGdzdGF0X3Jlc3Rv cmVfc3RhdHModm9pZCk7CiBleHRlcm4gdm9pZCBwZ3N0YXRfZGlzY2FyZF9zdGF0cyh2b2lk KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIGIv c3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgKaW5kZXggYjIxZDExMWQ0ZDUu Ljg5NTRmNmIyOGVlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92 YWN1dW0uaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0uaApAQCAt NjYsOCArNjYsNCBAQCBwZ19ub3JldHVybiBleHRlcm4gdm9pZCBBdXRvVmFjV29ya2VyTWFp bihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydAogZXh0ZXJuIGJvb2wg QXV0b1ZhY3V1bVJlcXVlc3RXb3JrKEF1dG9WYWN1dW1Xb3JrSXRlbVR5cGUgdHlwZSwKIAkJ CQkJCQkJICBPaWQgcmVsYXRpb25JZCwgQmxvY2tOdW1iZXIgYmxrbm8pOwogCi0vKiBzaGFy ZWQgbWVtb3J5IHN0dWZmICovCi1leHRlcm4gU2l6ZSBBdXRvVmFjdXVtU2htZW1TaXplKHZv aWQpOwotZXh0ZXJuIHZvaWQgQXV0b1ZhY3V1bVNobWVtSW5pdCh2b2lkKTsKLQogI2VuZGlm CQkJCQkJCS8qIEFVVE9WQUNVVU1fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9z dG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIv Ymd3b3JrZXJfaW50ZXJuYWxzLmgKaW5kZXggYjc4OWNhZjQwMzQuLmI2MjYxYmMwMWRmIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5o CisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgKQEAg LTQxLDggKzQxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVnaXN0ZXJlZEJnV29ya2VyCiAKIGV4 dGVybiBQR0RMTElNUE9SVCBkbGlzdF9oZWFkIEJhY2tncm91bmRXb3JrZXJMaXN0OwogCi1l eHRlcm4gU2l6ZSBCYWNrZ3JvdW5kV29ya2VyU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZv aWQgQmFja2dyb3VuZFdvcmtlclNobWVtSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIEJhY2tn cm91bmRXb3JrZXJTdGF0ZUNoYW5nZShib29sIGFsbG93X25ld193b3JrZXJzKTsKIGV4dGVy biB2b2lkIEZvcmdldEJhY2tncm91bmRXb3JrZXIoUmVnaXN0ZXJlZEJnV29ya2VyICpydyk7 CiBleHRlcm4gdm9pZCBSZXBvcnRCYWNrZ3JvdW5kV29ya2VyUElEKFJlZ2lzdGVyZWRCZ1dv cmtlciAqcncpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dyaXRl ci5oIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dyaXRlci5oCmluZGV4IDQ3NDcwY2Jh ODkzLi4zNmVlYTBiMWFiMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9i Z3dyaXRlci5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuaApAQCAt MzksOSArMzksNiBAQCBleHRlcm4gYm9vbCBGb3J3YXJkU3luY1JlcXVlc3QoY29uc3QgRmls ZVRhZyAqZnRhZywgU3luY1JlcXVlc3RUeXBlIHR5cGUpOwogCiBleHRlcm4gdm9pZCBBYnNv cmJTeW5jUmVxdWVzdHModm9pZCk7CiAKLWV4dGVybiBTaXplIENoZWNrcG9pbnRlclNobWVt U2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIENoZWNrcG9pbnRlclNobWVtSW5pdCh2b2lkKTsK LQogZXh0ZXJuIGJvb2wgRmlyc3RDYWxsU2luY2VMYXN0Q2hlY2twb2ludCh2b2lkKTsKIAog I2VuZGlmCQkJCQkJCS8qIF9CR1dSSVRFUl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9wb3N0bWFzdGVyL2RhdGFjaGVja3N1bV9zdGF0ZS5oIGIvc3JjL2luY2x1ZGUvcG9zdG1h c3Rlci9kYXRhY2hlY2tzdW1fc3RhdGUuaAppbmRleCAzNDM0OTRlZGNjOC4uMDU2MjU1Mzk2 MDQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvZGF0YWNoZWNrc3VtX3N0 YXRlLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9kYXRhY2hlY2tzdW1fc3RhdGUu aApAQCAtMTcsMTAgKzE3LDYgQEAKIAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5o IgogCi0vKiBTaGFyZWQgbWVtb3J5ICovCi1leHRlcm4gU2l6ZSBEYXRhQ2hlY2tzdW1zU2ht ZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgRGF0YUNoZWNrc3Vtc1NobWVtSW5pdCh2b2lk KTsKLQogLyogUG9zc2libGUgb3BlcmF0aW9ucyB0aGUgRGF0YWNoZWNrc3Vtc3dvcmtlciBj YW4gcGVyZm9ybSAqLwogdHlwZWRlZiBlbnVtIERhdGFDaGVja3N1bXNXb3JrZXJPcGVyYXRp b24KIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvcGdhcmNoLmggYi9z cmMvaW5jbHVkZS9wb3N0bWFzdGVyL3BnYXJjaC5oCmluZGV4IGZhYTc2MDljZDgxLi45Nzcy YmI1NzNhMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9wZ2FyY2guaAor KysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3BnYXJjaC5oCkBAIC0yNiw4ICsyNiw2IEBA CiAjZGVmaW5lIE1BWF9YRk5fQ0hBUlMJNDAKICNkZWZpbmUgVkFMSURfWEZOX0NIQVJTICIw MTIzNDU2Nzg5QUJDREVGLmhpc3RvcnkuYmFja3VwLnBhcnRpYWwiCiAKLWV4dGVybiBTaXpl IFBnQXJjaFNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFBnQXJjaFNobWVtSW5pdCh2 b2lkKTsKIGV4dGVybiBib29sIFBnQXJjaENhblJlc3RhcnQodm9pZCk7CiBwZ19ub3JldHVy biBleHRlcm4gdm9pZCBQZ0FyY2hpdmVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEs IHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKTsKIGV4dGVybiB2b2lkIFBnQXJjaFdha2V1cCh2 b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXpl ci5oIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmgKaW5kZXggYTRj MDU1MDY2YjQuLmI5YTc1NWZhZGJjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFz dGVyL3dhbHN1bW1hcml6ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3dhbHN1 bW1hcml6ZXIuaApAQCAtMTksOCArMTksNiBAQAogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wg c3VtbWFyaXplX3dhbDsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgd2FsX3N1bW1hcnlfa2Vl cF90aW1lOwogCi1leHRlcm4gU2l6ZSBXYWxTdW1tYXJpemVyU2htZW1TaXplKHZvaWQpOwot ZXh0ZXJuIHZvaWQgV2FsU3VtbWFyaXplclNobWVtSW5pdCh2b2lkKTsKIHBnX25vcmV0dXJu IGV4dGVybiB2b2lkIFdhbFN1bW1hcml6ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0 YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pOwogCiBleHRlcm4gdm9pZCBHZXRXYWxTdW1t YXJpemVyU3RhdGUoVGltZUxpbmVJRCAqc3VtbWFyaXplZF90bGksCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsY3RsLmggYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9sb2dpY2FsY3RsLmgKaW5kZXggNDk1NTU0YzUzMmMuLjBiYzEzMDJmMTMwIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsY3RsLmgKKysrIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGN0bC5oCkBAIC0xNCw4ICsxNCw2IEBA CiAjaWZuZGVmIExPR0lDQUxDVExfSAogI2RlZmluZSBMT0dJQ0FMQ1RMX0gKIAotZXh0ZXJu IFNpemUgTG9naWNhbERlY29kaW5nQ3RsU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQg TG9naWNhbERlY29kaW5nQ3RsU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhcnR1 cExvZ2ljYWxEZWNvZGluZ1N0YXR1cyhib29sIGxhc3Rfc3RhdHVzKTsKIGV4dGVybiB2b2lk IEluaXRpYWxpemVQcm9jZXNzWExvZ0xvZ2ljYWxJbmZvKHZvaWQpOwogZXh0ZXJuIGJvb2wg UHJvY2Vzc0JhcnJpZXJVcGRhdGVYTG9nTG9naWNhbEluZm8odm9pZCk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCBiL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oCmluZGV4IDUwNGI3MTA1MzZhLi41 ZjBjMWI5YzY4MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNh bGxhdW5jaGVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxhdW5j aGVyLmgKQEAgLTE5LDkgKzE5LDYgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcGFy YWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uOwogZXh0ZXJuIHZvaWQgQXBw bHlMYXVuY2hlclJlZ2lzdGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgQXBwbHlMYXVuY2hlck1h aW4oRGF0dW0gbWFpbl9hcmcpOwogCi1leHRlcm4gU2l6ZSBBcHBseUxhdW5jaGVyU2htZW1T aXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgQXBwbHlMYXVuY2hlclNobWVtSW5pdCh2b2lkKTsK LQogZXh0ZXJuIHZvaWQgQXBwbHlMYXVuY2hlckZvcmdldFdvcmtlclN0YXJ0VGltZShPaWQg c3ViaWQpOwogCiBleHRlcm4gdm9pZCBBcHBseUxhdW5jaGVyV2FrZXVwQXRDb21taXQodm9p ZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaCBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oCmluZGV4IGViNDZiNDFiNGI3Li5hNjlm YWY2ZWFhZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmgK KysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmgKQEAgLTg0LDggKzg0LDQg QEAgZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3Jk KTsKIGV4dGVybiB2b2lkIHJlcGxvcmlnaW5fZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1Jl YWRlclN0YXRlICpyZWNvcmQpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnJlcGxvcmlnaW5faWRl bnRpZnkodWludDggaW5mbyk7CiAKLS8qIHNoYXJlZCBtZW1vcnkgYWxsb2NhdGlvbiAqLwot ZXh0ZXJuIFNpemUgUmVwbGljYXRpb25PcmlnaW5TaG1lbVNpemUodm9pZCk7Ci1leHRlcm4g dm9pZCBSZXBsaWNhdGlvbk9yaWdpblNobWVtSW5pdCh2b2lkKTsKLQogI2VuZGlmCQkJCQkJ CS8qIFBHX09SSUdJTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9zbG90LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90LmgKaW5kZXggNGI0NzA5 ZjZlMmMuLjFhMzU1N2RlNjA3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9zbG90LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCkBAIC0zMjcs MTAgKzMyNyw2IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3JlcGxpY2F0aW9uX3Ns b3RzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGNoYXIgKnN5bmNocm9uaXplZF9zdGFuZGJ5X3Ns b3RzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBpZGxlX3JlcGxpY2F0aW9uX3Nsb3RfdGlt ZW91dF9zZWNzOwogCi0vKiBzaG1lbSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KLWV4 dGVybiBTaXplIFJlcGxpY2F0aW9uU2xvdHNTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9p ZCBSZXBsaWNhdGlvblNsb3RzU2htZW1Jbml0KHZvaWQpOwotCiAvKiBtYW5hZ2VtZW50IG9m IGluZGl2aWR1YWwgc2xvdHMgKi8KIGV4dGVybiB2b2lkIFJlcGxpY2F0aW9uU2xvdENyZWF0 ZShjb25zdCBjaGFyICpuYW1lLCBib29sIGRiX3NwZWNpZmljLAogCQkJCQkJCQkgIFJlcGxp Y2F0aW9uU2xvdFBlcnNpc3RlbmN5IHBlcnNpc3RlbmN5LApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vc2xvdHN5bmMuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Nsb3RzeW5jLmgKaW5kZXggZTU0NmQwZDA1MGQuLmQyMTIxY2QzZWQ3IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90c3luYy5oCisrKyBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3Nsb3RzeW5jLmgKQEAgLTMxLDggKzMxLDYgQEAgcGdfbm9yZXR1cm4g ZXh0ZXJuIHZvaWQgUmVwbFNsb3RTeW5jV29ya2VyTWFpbihjb25zdCB2b2lkICpzdGFydHVw X2RhdGEsIHNpemVfdAogZXh0ZXJuIHZvaWQgU2h1dERvd25TbG90U3luYyh2b2lkKTsKIGV4 dGVybiBib29sIFNsb3RTeW5jV29ya2VyQ2FuUmVzdGFydCh2b2lkKTsKIGV4dGVybiBib29s IElzU3luY2luZ1JlcGxpY2F0aW9uU2xvdHModm9pZCk7Ci1leHRlcm4gU2l6ZSBTbG90U3lu Y1NobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFNsb3RTeW5jU2htZW1Jbml0KHZvaWQp OwogZXh0ZXJuIHZvaWQgU3luY1JlcGxpY2F0aW9uU2xvdHMoV2FsUmVjZWl2ZXJDb25uICp3 cmNvbm4pOwogCiAjZW5kaWYJCQkJCQkJLyogU0xPVFNZTkNfSCAqLwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKaW5kZXggODVkMjRjODcyOTguLjQ3YzA3NTc0ZDRk IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oCisr KyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKQEAgLTQ5MSw4ICs0 OTEsNiBAQCBwZ19ub3JldHVybiBleHRlcm4gdm9pZCBXYWxSZWNlaXZlck1haW4oY29uc3Qg dm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cAogZXh0ZXJuIHZvaWQgV2FsUmN2 UmVxdWVzdEFwcGx5UmVwbHkodm9pZCk7CiAKIC8qIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9u cyBpbiB3YWxyZWNlaXZlcmZ1bmNzLmMgKi8KLWV4dGVybiBTaXplIFdhbFJjdlNobWVtU2l6 ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFdhbFJjdlNobWVtSW5pdCh2b2lkKTsKIGV4dGVybiB2 b2lkIFNodXRkb3duV2FsUmN2KHZvaWQpOwogZXh0ZXJuIGJvb2wgV2FsUmN2U3RyZWFtaW5n KHZvaWQpOwogZXh0ZXJuIGJvb2wgV2FsUmN2UnVubmluZyh2b2lkKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5oIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vd2Fsc2VuZGVyLmgKaW5kZXggYTRkZjNiOGUwYWUuLjg5NTJjODQ4ZDE5IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxzZW5kZXIuaAorKysgYi9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxzZW5kZXIuaApAQCAtNDEsOCArNDEsNiBAQCBl eHRlcm4gdm9pZCBXYWxTbmRFcnJvckNsZWFudXAodm9pZCk7CiBleHRlcm4gdm9pZCBQaHlz aWNhbFdha2V1cExvZ2ljYWxXYWxTbmQodm9pZCk7CiBleHRlcm4gWExvZ1JlY1B0ciBHZXRT dGFuZGJ5Rmx1c2hSZWNQdHIoVGltZUxpbmVJRCAqdGxpKTsKIGV4dGVybiB2b2lkIFdhbFNu ZFNpZ25hbHModm9pZCk7Ci1leHRlcm4gU2l6ZSBXYWxTbmRTaG1lbVNpemUodm9pZCk7Ci1l eHRlcm4gdm9pZCBXYWxTbmRTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBXYWxTbmRX YWtldXAoYm9vbCBwaHlzaWNhbCwgYm9vbCBsb2dpY2FsKTsKIGV4dGVybiB2b2lkIFdhbFNu ZEluaXRTdG9wcGluZyh2b2lkKTsKIGV4dGVybiB2b2lkIFdhbFNuZFdhaXRTdG9wcGluZyh2 b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9sb2NrLmgKaW5kZXggZmE2OGU2ZWNlY2UuLmVlM2NiMWRjMjAzIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaAorKysgYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL2xvY2suaApAQCAtMzc1LDggKzM3NSw2IEBAIHR5cGVkZWYgZW51bQogLyoK ICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKICAqLwotZXh0ZXJuIHZvaWQgTG9ja01hbmFnZXJT aG1lbUluaXQodm9pZCk7Ci1leHRlcm4gU2l6ZSBMb2NrTWFuYWdlclNobWVtU2l6ZSh2b2lk KTsKIGV4dGVybiB2b2lkIEluaXRMb2NrTWFuYWdlckFjY2Vzcyh2b2lkKTsKIGV4dGVybiBM b2NrTWV0aG9kIEdldExvY2tzTWV0aG9kVGFibGUoY29uc3QgTE9DSyAqbG9jayk7CiBleHRl cm4gTG9ja01ldGhvZCBHZXRMb2NrVGFnc01ldGhvZFRhYmxlKGNvbnN0IExPQ0tUQUcgKmxv Y2t0YWcpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0 LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaAppbmRleCBkOGUxMTc1 NmE2MS4uNWUwOTI1NTJjNzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vi c3lzdGVtbGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5o CkBAIC0zMiw2ICszMiw5IEBAIFBHX1NITUVNX1NVQlNZU1RFTShEU01SZWdpc3RyeVNobWVt Q2FsbGJhY2tzKQogCiAvKiB4bG9nLCBjbG9nLCBhbmQgYnVmZmVycyAqLwogUEdfU0hNRU1f U1VCU1lTVEVNKFZhcnN1cFNobWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKFhM T0dTaG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZU1RFTShYTG9nUHJlZmV0Y2hTaG1l bUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZU1RFTShYTG9nUmVjb3ZlcnlTaG1lbUNhbGxi YWNrcykKIFBHX1NITUVNX1NVQlNZU1RFTShDTE9HU2htZW1DYWxsYmFja3MpCiBQR19TSE1F TV9TVUJTWVNURU0oQ29tbWl0VHNTaG1lbUNhbGxiYWNrcykKIFBHX1NITUVNX1NVQlNZU1RF TShTVUJUUkFOU1NobWVtQ2FsbGJhY2tzKQpAQCAtNDAsMTIgKzQzLDE4IEBAIFBHX1NITUVN X1NVQlNZU1RFTShCdWZmZXJNYW5hZ2VyU2htZW1DYWxsYmFja3MpCiBQR19TSE1FTV9TVUJT WVNURU0oU3RyYXRlZ3lDdGxTaG1lbUNhbGxiYWNrcykKIFBHX1NITUVNX1NVQlNZU1RFTShC dWZUYWJsZVNobWVtQ2FsbGJhY2tzKQogCisvKiBsb2NrIG1hbmFnZXIgKi8KK1BHX1NITUVN X1NVQlNZU1RFTShMb2NrTWFuYWdlclNobWVtQ2FsbGJhY2tzKQorCiAvKiBwcmVkaWNhdGUg bG9jayBtYW5hZ2VyICovCiBQR19TSE1FTV9TVUJTWVNURU0oUHJlZGljYXRlTG9ja1NobWVt Q2FsbGJhY2tzKQogCiAvKiBwcm9jZXNzIHRhYmxlICovCiBQR19TSE1FTV9TVUJTWVNURU0o UHJvY0dsb2JhbFNobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKFByb2NBcnJh eVNobWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKEJhY2tlbmRTdGF0dXNTaG1l bUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZU1RFTShUd29QaGFzZVNobWVtQ2FsbGJhY2tz KQorUEdfU0hNRU1fU1VCU1lTVEVNKEJhY2tncm91bmRXb3JrZXJTaG1lbUNhbGxiYWNrcykK IAogLyogc2hhcmVkLWludmFsIG1lc3NhZ2luZyAqLwogUEdfU0hNRU1fU1VCU1lTVEVNKFNo YXJlZEludmFsU2htZW1DYWxsYmFja3MpCkBAIC01Myw5ICs2MiwyNyBAQCBQR19TSE1FTV9T VUJTWVNURU0oU2hhcmVkSW52YWxTaG1lbUNhbGxiYWNrcykKIC8qIGludGVycHJvY2VzcyBz aWduYWxpbmcgbWVjaGFuaXNtcyAqLwogUEdfU0hNRU1fU1VCU1lTVEVNKFBNU2lnbmFsU2ht ZW1DYWxsYmFja3MpCiBQR19TSE1FTV9TVUJTWVNURU0oUHJvY1NpZ25hbFNobWVtQ2FsbGJh Y2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKENoZWNrcG9pbnRlclNobWVtQ2FsbGJhY2tzKQor UEdfU0hNRU1fU1VCU1lTVEVNKEF1dG9WYWN1dW1TaG1lbUNhbGxiYWNrcykKK1BHX1NITUVN X1NVQlNZU1RFTShSZXBsaWNhdGlvblNsb3RzU2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9T VUJTWVNURU0oUmVwbGljYXRpb25PcmlnaW5TaG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NV QlNZU1RFTShXYWxTbmRTaG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZU1RFTShXYWxS Y3ZTaG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZU1RFTShXYWxTdW1tYXJpemVyU2ht ZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oUGdBcmNoU2htZW1DYWxsYmFja3Mp CitQR19TSE1FTV9TVUJTWVNURU0oQXBwbHlMYXVuY2hlclNobWVtQ2FsbGJhY2tzKQorUEdf U0hNRU1fU1VCU1lTVEVNKFNsb3RTeW5jU2htZW1DYWxsYmFja3MpCiAKIC8qIG90aGVyIG1v ZHVsZXMgdGhhdCBuZWVkIHNvbWUgc2hhcmVkIG1lbW9yeSBzcGFjZSAqLworUEdfU0hNRU1f U1VCU1lTVEVNKEJUcmVlU2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oU3lu Y1NjYW5TaG1lbUNhbGxiYWNrcykKIFBHX1NITUVNX1NVQlNZU1RFTShBc3luY1NobWVtQ2Fs bGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKFN0YXRzU2htZW1DYWxsYmFja3MpCitQR19T SE1FTV9TVUJTWVNURU0oV2FpdEV2ZW50Q3VzdG9tU2htZW1DYWxsYmFja3MpCitQR19TSE1F TV9TVUJTWVNURU0oSW5qZWN0aW9uUG9pbnRTaG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NV QlNZU1RFTShXYWl0TFNOU2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oTG9n aWNhbERlY29kaW5nQ3RsU2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oRGF0 YUNoZWNrc3Vtc1NobWVtQ2FsbGJhY2tzKQogCiAvKiBBSU8gc3Vic3lzdGVtLiBUaGlzIGRl bGVnYXRlcyB0byB0aGUgbWV0aG9kLXNwZWNpZmljIGNhbGxiYWNrcyAqLwogUEdfU0hNRU1f U1VCU1lTVEVNKEFpb1NobWVtQ2FsbGJhY2tzKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvYmFja2VuZF9zdGF0dXMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2JhY2tlbmRfc3Rh dHVzLmgKaW5kZXggZGRkMDYzMDRlOTcuLmEzMzRlMDk2ZTRhIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS91dGlscy9iYWNrZW5kX3N0YXR1cy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L2JhY2tlbmRfc3RhdHVzLmgKQEAgLTI5OCwxNCArMjk4LDYgQEAgZXh0ZXJuIFBHRExMSU1Q T1JUIGludCBwZ3N0YXRfdHJhY2tfYWN0aXZpdHlfcXVlcnlfc2l6ZTsKIGV4dGVybiBQR0RM TElNUE9SVCBQZ0JhY2tlbmRTdGF0dXMgKk15QkVFbnRyeTsKIAogCi0vKiAtLS0tLS0tLS0t Ci0gKiBGdW5jdGlvbnMgY2FsbGVkIGZyb20gcG9zdG1hc3RlcgotICogLS0tLS0tLS0tLQot ICovCi1leHRlcm4gU2l6ZSBCYWNrZW5kU3RhdHVzU2htZW1TaXplKHZvaWQpOwotZXh0ZXJu IHZvaWQgQmFja2VuZFN0YXR1c1NobWVtSW5pdCh2b2lkKTsKLQotCiAvKiAtLS0tLS0tLS0t CiAgKiBGdW5jdGlvbnMgY2FsbGVkIGZyb20gYmFja2VuZHMKICAqIC0tLS0tLS0tLS0KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2luamVjdGlvbl9wb2ludC5oIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvaW5qZWN0aW9uX3BvaW50LmgKaW5kZXggMjdhMjUyNjUyNGYuLmZhYmQx NDU1YzNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9pbmplY3Rpb25fcG9pbnQu aAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9pbmplY3Rpb25fcG9pbnQuaApAQCAtNDYsOSAr NDYsNiBAQCB0eXBlZGVmIHZvaWQgKCpJbmplY3Rpb25Qb2ludENhbGxiYWNrKSAoY29uc3Qg Y2hhciAqbmFtZSwKIAkJCQkJCQkJCQljb25zdCB2b2lkICpwcml2YXRlX2RhdGEsCiAJCQkJ CQkJCQkJdm9pZCAqYXJnKTsKIAotZXh0ZXJuIFNpemUgSW5qZWN0aW9uUG9pbnRTaG1lbVNp emUodm9pZCk7Ci1leHRlcm4gdm9pZCBJbmplY3Rpb25Qb2ludFNobWVtSW5pdCh2b2lkKTsK LQogZXh0ZXJuIHZvaWQgSW5qZWN0aW9uUG9pbnRBdHRhY2goY29uc3QgY2hhciAqbmFtZSwK IAkJCQkJCQkJIGNvbnN0IGNoYXIgKmxpYnJhcnksCiAJCQkJCQkJCSBjb25zdCBjaGFyICpm dW5jdGlvbiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaCBi L3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaAppbmRleCAzNGMyN2NjM2RjMy4uODZl ZTM0ODIyMGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaAor KysgYi9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKQEAgLTQyLDggKzQyLDYgQEAg ZXh0ZXJuIFBHRExMSU1QT1JUIHVpbnQzMiAqbXlfd2FpdF9ldmVudF9pbmZvOwogZXh0ZXJu IHVpbnQzMiBXYWl0RXZlbnRFeHRlbnNpb25OZXcoY29uc3QgY2hhciAqd2FpdF9ldmVudF9u YW1lKTsKIGV4dGVybiB1aW50MzIgV2FpdEV2ZW50SW5qZWN0aW9uUG9pbnROZXcoY29uc3Qg Y2hhciAqd2FpdF9ldmVudF9uYW1lKTsKIAotZXh0ZXJuIHZvaWQgV2FpdEV2ZW50Q3VzdG9t U2htZW1Jbml0KHZvaWQpOwotZXh0ZXJuIFNpemUgV2FpdEV2ZW50Q3VzdG9tU2htZW1TaXpl KHZvaWQpOwogZXh0ZXJuIGNoYXIgKipHZXRXYWl0RXZlbnRDdXN0b21OYW1lcyh1aW50MzIg Y2xhc3NJZCwgaW50ICpud2FpdGV2ZW50cyk7CiAKIC8qIC0tLS0tLS0tLS0KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fcG9pbnRz LmMgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3BvaW50 cy5jCmluZGV4IGQ1OWM1YWQwNTgyLi41OTJlY2ZhZDNkYSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9wb2ludHMuYworKysgYi9z cmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3BvaW50cy5jCkBA IC0xMDcsOSArMTA3LDEzIEBAIGV4dGVybiBQR0RMTEVYUE9SVCB2b2lkIGluamVjdGlvbl93 YWl0KGNvbnN0IGNoYXIgKm5hbWUsCiAvKiB0cmFjayBpZiBpbmplY3Rpb24gcG9pbnRzIGF0 dGFjaGVkIGluIHRoaXMgcHJvY2VzcyBhcmUgbGlua2VkIHRvIGl0ICovCiBzdGF0aWMgYm9v bCBpbmplY3Rpb25fcG9pbnRfbG9jYWwgPSBmYWxzZTsKIAotLyogU2hhcmVkIG1lbW9yeSBp bml0IGNhbGxiYWNrcyAqLwotc3RhdGljIHNobWVtX3JlcXVlc3RfaG9va190eXBlIHByZXZf c2htZW1fcmVxdWVzdF9ob29rID0gTlVMTDsKLXN0YXRpYyBzaG1lbV9zdGFydHVwX2hvb2tf dHlwZSBwcmV2X3NobWVtX3N0YXJ0dXBfaG9vayA9IE5VTEw7CitzdGF0aWMgdm9pZCBpbmpl Y3Rpb25fc2htZW1fcmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgaW5qZWN0aW9u X3NobWVtX2luaXQodm9pZCAqYXJnKTsKKworc3RhdGljIGNvbnN0IFNobWVtQ2FsbGJhY2tz IGluamVjdGlvbl9zaG1lbV9jYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBpbmplY3Rp b25fc2htZW1fcmVxdWVzdCwKKwkuaW5pdF9mbiA9IGluamVjdGlvbl9zaG1lbV9pbml0LAor fTsKIAogLyoKICAqIFJvdXRpbmUgZm9yIHNoYXJlZCBtZW1vcnkgYXJlYSBpbml0aWFsaXph dGlvbiwgdXNlZCBhcyBhIGNhbGxiYWNrCkBAIC0xMjYsNDQgKzEzMCwyNiBAQCBpbmplY3Rp b25fcG9pbnRfaW5pdF9zdGF0ZSh2b2lkICpwdHIsIHZvaWQgKmFyZykKIAlDb25kaXRpb25W YXJpYWJsZUluaXQoJnN0YXRlLT53YWl0X3BvaW50KTsKIH0KIAotLyogU2hhcmVkIG1lbW9y eSBpbml0aWFsaXphdGlvbiB3aGVuIGxvYWRpbmcgbW9kdWxlICovCiBzdGF0aWMgdm9pZAot aW5qZWN0aW9uX3NobWVtX3JlcXVlc3Qodm9pZCkKK2luamVjdGlvbl9zaG1lbV9yZXF1ZXN0 KHZvaWQgKmFyZykKIHsKLQlTaXplCQlzaXplOwotCi0JaWYgKHByZXZfc2htZW1fcmVxdWVz dF9ob29rKQotCQlwcmV2X3NobWVtX3JlcXVlc3RfaG9vaygpOworCXN0YXRpYyBTaG1lbVN0 cnVjdERlc2MgSW5qZWN0aW9uUG9pbnRzU2htZW1EZXNjOwogCi0Jc2l6ZSA9IE1BWEFMSUdO KHNpemVvZihJbmplY3Rpb25Qb2ludFNoYXJlZFN0YXRlKSk7Ci0JUmVxdWVzdEFkZGluU2ht ZW1TcGFjZShzaXplKTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkluamVjdGlvblBvaW50c1No bWVtRGVzYywKKwkJCQkJICAgLm5hbWUgPSAiaW5qZWN0aW9uX3BvaW50cyIsCisJCQkJCSAg IC5zaXplID0gc2l6ZW9mKEluamVjdGlvblBvaW50U2hhcmVkU3RhdGUpLAorCQkJCQkgICAu cHRyID0gKHZvaWQgKiopICZpbmpfc3RhdGUsCisJCSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1p bmplY3Rpb25fc2htZW1fc3RhcnR1cCh2b2lkKQoraW5qZWN0aW9uX3NobWVtX2luaXQodm9p ZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOwotCi0JaWYgKHByZXZfc2htZW1fc3RhcnR1cF9o b29rKQotCQlwcmV2X3NobWVtX3N0YXJ0dXBfaG9vaygpOwotCi0JLyogQ3JlYXRlIG9yIGF0 dGFjaCB0byB0aGUgc2hhcmVkIG1lbW9yeSBzdGF0ZSAqLwotCUxXTG9ja0FjcXVpcmUoQWRk aW5TaG1lbUluaXRMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JaW5qX3N0YXRlID0gU2htZW1J bml0U3RydWN0KCJpbmplY3Rpb25fcG9pbnRzIiwKLQkJCQkJCQkJc2l6ZW9mKEluamVjdGlv blBvaW50U2hhcmVkU3RhdGUpLAotCQkJCQkJCQkmZm91bmQpOwotCi0JaWYgKCFmb3VuZCkK LQl7Ci0JCS8qCi0JCSAqIEZpcnN0IHRpbWUgdGhyb3VnaCwgc28gaW5pdGlhbGl6ZS4gIFRo aXMgaXMgc2hhcmVkIHdpdGggdGhlIGR5bmFtaWMKLQkJICogaW5pdGlhbGl6YXRpb24gdXNp bmcgYSBEU00uCi0JCSAqLwotCQlpbmplY3Rpb25fcG9pbnRfaW5pdF9zdGF0ZShpbmpfc3Rh dGUsIE5VTEwpOwotCX0KLQotCUxXTG9ja1JlbGVhc2UoQWRkaW5TaG1lbUluaXRMb2NrKTsK KwkvKgorCSAqIEZpcnN0IHRpbWUgdGhyb3VnaCwgc28gaW5pdGlhbGl6ZS4gIFRoaXMgaXMg c2hhcmVkIHdpdGggdGhlIGR5bmFtaWMKKwkgKiBpbml0aWFsaXphdGlvbiB1c2luZyBhIERT TS4KKwkgKi8KKwlpbmplY3Rpb25fcG9pbnRfaW5pdF9zdGF0ZShpbmpfc3RhdGUsIE5VTEwp OwogfQogCiAvKgpAQCAtNjAxLDkgKzU4Nyw1IEBAIF9QR19pbml0KHZvaWQpCiAJaWYgKCFw cm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllc19pbl9wcm9ncmVzcykKIAkJcmV0dXJu OwogCi0JLyogU2hhcmVkIG1lbW9yeSBpbml0aWFsaXphdGlvbiAqLwotCXByZXZfc2htZW1f cmVxdWVzdF9ob29rID0gc2htZW1fcmVxdWVzdF9ob29rOwotCXNobWVtX3JlcXVlc3RfaG9v ayA9IGluamVjdGlvbl9zaG1lbV9yZXF1ZXN0OwotCXByZXZfc2htZW1fc3RhcnR1cF9ob29r ID0gc2htZW1fc3RhcnR1cF9ob29rOwotCXNobWVtX3N0YXJ0dXBfaG9vayA9IGluamVjdGlv bl9zaG1lbV9zdGFydHVwOworCVJlZ2lzdGVyU2htZW1DYWxsYmFja3MoJmluamVjdGlvbl9z aG1lbV9jYWxsYmFja3MpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2Fpby90ZXN0X2Fpby5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5j CmluZGV4IDM0NDg3YTA1NDg2Li44ZmE1MWE3ZGQwMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9haW8vdGVzdF9haW8uYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgInN0b3JhZ2Uv YnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jaGVja3N1bS5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvY29uZGl0aW9uX3ZhcmlhYmxlLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIK ICNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5o IgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY251bWJlci5oIgpAQCAtNDQsNiArNDMsNyBAQAog UEdfTU9EVUxFX01BR0lDOwogCiAKKy8qIEluIHNoYXJlZCBtZW1vcnkgKi8KIHR5cGVkZWYg c3RydWN0IEluaklvRXJyb3JTdGF0ZQogewogCUNvbmRpdGlvblZhcmlhYmxlIGN2OwpAQCAt NzQsNzggKzc0LDczIEBAIHR5cGVkZWYgc3RydWN0IEJsb2Nrc1JlYWRTdHJlYW1EYXRhCiBz dGF0aWMgSW5qSW9FcnJvclN0YXRlICppbmpfaW9fZXJyb3Jfc3RhdGU7CiAKIC8qIFNoYXJl ZCBtZW1vcnkgaW5pdCBjYWxsYmFja3MgKi8KLXN0YXRpYyBzaG1lbV9yZXF1ZXN0X2hvb2tf dHlwZSBwcmV2X3NobWVtX3JlcXVlc3RfaG9vayA9IE5VTEw7Ci1zdGF0aWMgc2htZW1fc3Rh cnR1cF9ob29rX3R5cGUgcHJldl9zaG1lbV9zdGFydHVwX2hvb2sgPSBOVUxMOworc3RhdGlj IHZvaWQgdGVzdF9haW9fc2htZW1fcmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQg dGVzdF9haW9fc2htZW1faW5pdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgdGVzdF9haW9f c2htZW1fYXR0YWNoKHZvaWQgKmFyZyk7CisKK3N0YXRpYyBjb25zdCBTaG1lbUNhbGxiYWNr cyBpbmpfaW9fc2htZW1fY2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gdGVzdF9haW9f c2htZW1fcmVxdWVzdCwKKwkuaW5pdF9mbiA9IHRlc3RfYWlvX3NobWVtX2luaXQsCisJLmF0 dGFjaF9mbiA9IHRlc3RfYWlvX3NobWVtX2F0dGFjaCwKK307CiAKIHN0YXRpYyBQZ0Fpb0hh bmRsZSAqbGFzdF9oYW5kbGU7CiAKIAogCiBzdGF0aWMgdm9pZAotdGVzdF9haW9fc2htZW1f cmVxdWVzdCh2b2lkKQordGVzdF9haW9fc2htZW1fcmVxdWVzdCh2b2lkICphcmcpCiB7Ci0J aWYgKHByZXZfc2htZW1fcmVxdWVzdF9ob29rKQotCQlwcmV2X3NobWVtX3JlcXVlc3RfaG9v aygpOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgaW5qX2lvX3NobWVtX2Rlc2M7CiAKLQlS ZXF1ZXN0QWRkaW5TaG1lbVNwYWNlKHNpemVvZihJbmpJb0Vycm9yU3RhdGUpKTsKKwlTaG1l bVJlcXVlc3RTdHJ1Y3QoJmlual9pb19zaG1lbV9kZXNjLAorCQkJCQkgICAubmFtZSA9ICJ0 ZXN0X2FpbyBpbmplY3Rpb24gcG9pbnRzIiwKKwkJCQkJICAgLnNpemUgPSBzaXplb2YoSW5q SW9FcnJvclN0YXRlKSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmaW5qX2lvX2Vycm9y X3N0YXRlLAorCQkpOwogfQogCiBzdGF0aWMgdm9pZAotdGVzdF9haW9fc2htZW1fc3RhcnR1 cCh2b2lkKQordGVzdF9haW9fc2htZW1faW5pdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91 bmQ7Ci0KLQlpZiAocHJldl9zaG1lbV9zdGFydHVwX2hvb2spCi0JCXByZXZfc2htZW1fc3Rh cnR1cF9ob29rKCk7Ci0KLQkvKiBDcmVhdGUgb3IgYXR0YWNoIHRvIHRoZSBzaGFyZWQgbWVt b3J5IHN0YXRlICovCi0JTFdMb2NrQWNxdWlyZShBZGRpblNobWVtSW5pdExvY2ssIExXX0VY Q0xVU0lWRSk7Ci0KLQlpbmpfaW9fZXJyb3Jfc3RhdGUgPSBTaG1lbUluaXRTdHJ1Y3QoImlu amVjdGlvbl9wb2ludHMiLAotCQkJCQkJCQkJCSBzaXplb2YoSW5qSW9FcnJvclN0YXRlKSwK LQkJCQkJCQkJCQkgJmZvdW5kKTsKLQotCWlmICghZm91bmQpCi0JewotCQkvKiBGaXJzdCB0 aW1lIHRocm91Z2gsIGluaXRpYWxpemUgKi8KLQkJaW5qX2lvX2Vycm9yX3N0YXRlLT5lbmFi bGVkX3Nob3J0X3JlYWQgPSBmYWxzZTsKLQkJaW5qX2lvX2Vycm9yX3N0YXRlLT5lbmFibGVk X3Jlb3BlbiA9IGZhbHNlOwotCQlpbmpfaW9fZXJyb3Jfc3RhdGUtPmVuYWJsZWRfY29tcGxl dGlvbl93YWl0ID0gZmFsc2U7CisJLyogRmlyc3QgdGltZSB0aHJvdWdoLCBpbml0aWFsaXpl ICovCisJaW5qX2lvX2Vycm9yX3N0YXRlLT5lbmFibGVkX3Nob3J0X3JlYWQgPSBmYWxzZTsK KwlpbmpfaW9fZXJyb3Jfc3RhdGUtPmVuYWJsZWRfcmVvcGVuID0gZmFsc2U7CisJaW5qX2lv X2Vycm9yX3N0YXRlLT5lbmFibGVkX2NvbXBsZXRpb25fd2FpdCA9IGZhbHNlOwogCi0JCUNv bmRpdGlvblZhcmlhYmxlSW5pdCgmaW5qX2lvX2Vycm9yX3N0YXRlLT5jdik7Ci0JCWlual9p b19lcnJvcl9zdGF0ZS0+Y29tcGxldGlvbl93YWl0X2V2ZW50ID0gV2FpdEV2ZW50SW5qZWN0 aW9uUG9pbnROZXcoImNvbXBsZXRpb25fd2FpdCIpOworCUNvbmRpdGlvblZhcmlhYmxlSW5p dCgmaW5qX2lvX2Vycm9yX3N0YXRlLT5jdik7CisJaW5qX2lvX2Vycm9yX3N0YXRlLT5jb21w bGV0aW9uX3dhaXRfZXZlbnQgPSBXYWl0RXZlbnRJbmplY3Rpb25Qb2ludE5ldygiY29tcGxl dGlvbl93YWl0Iik7CiAKICNpZmRlZiBVU0VfSU5KRUNUSU9OX1BPSU5UUwotCQlJbmplY3Rp b25Qb2ludEF0dGFjaCgiYWlvLXByb2Nlc3MtY29tcGxldGlvbi1iZWZvcmUtc2hhcmVkIiwK LQkJCQkJCQkgInRlc3RfYWlvIiwKLQkJCQkJCQkgImlual9pb19jb21wbGV0aW9uX2hvb2si LAotCQkJCQkJCSBOVUxMLAotCQkJCQkJCSAwKTsKLQkJSW5qZWN0aW9uUG9pbnRMb2FkKCJh aW8tcHJvY2Vzcy1jb21wbGV0aW9uLWJlZm9yZS1zaGFyZWQiKTsKLQotCQlJbmplY3Rpb25Q b2ludEF0dGFjaCgiYWlvLXdvcmtlci1hZnRlci1yZW9wZW4iLAotCQkJCQkJCSAidGVzdF9h aW8iLAotCQkJCQkJCSAiaW5qX2lvX3Jlb3BlbiIsCi0JCQkJCQkJIE5VTEwsCi0JCQkJCQkJ IDApOwotCQlJbmplY3Rpb25Qb2ludExvYWQoImFpby13b3JrZXItYWZ0ZXItcmVvcGVuIik7 CisJSW5qZWN0aW9uUG9pbnRBdHRhY2goImFpby1wcm9jZXNzLWNvbXBsZXRpb24tYmVmb3Jl LXNoYXJlZCIsCisJCQkJCQkgInRlc3RfYWlvIiwKKwkJCQkJCSAiaW5qX2lvX2NvbXBsZXRp b25faG9vayIsCisJCQkJCQkgTlVMTCwKKwkJCQkJCSAwKTsKKwlJbmplY3Rpb25Qb2ludExv YWQoImFpby1wcm9jZXNzLWNvbXBsZXRpb24tYmVmb3JlLXNoYXJlZCIpOworCisJSW5qZWN0 aW9uUG9pbnRBdHRhY2goImFpby13b3JrZXItYWZ0ZXItcmVvcGVuIiwKKwkJCQkJCSAidGVz dF9haW8iLAorCQkJCQkJICJpbmpfaW9fcmVvcGVuIiwKKwkJCQkJCSBOVUxMLAorCQkJCQkJ IDApOworCUluamVjdGlvblBvaW50TG9hZCgiYWlvLXdvcmtlci1hZnRlci1yZW9wZW4iKTsK IAogI2VuZGlmCi0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIFByZS1sb2FkIHRoZSBpbmpl Y3Rpb24gcG9pbnRzIG5vdywgc28gd2UgY2FuIGNhbGwgdGhlbSBpbiBhCi0JCSAqIGNyaXRp Y2FsIHNlY3Rpb24uCi0JCSAqLworfQorCitzdGF0aWMgdm9pZAordGVzdF9haW9fc2htZW1f YXR0YWNoKHZvaWQgKmFyZykKK3sKKwkvKgorCSAqIFByZS1sb2FkIHRoZSBpbmplY3Rpb24g cG9pbnRzIG5vdywgc28gd2UgY2FuIGNhbGwgdGhlbSBpbiBhIGNyaXRpY2FsCisJICogc2Vj dGlvbi4KKwkgKi8KICNpZmRlZiBVU0VfSU5KRUNUSU9OX1BPSU5UUwotCQlJbmplY3Rpb25Q b2ludExvYWQoImFpby1wcm9jZXNzLWNvbXBsZXRpb24tYmVmb3JlLXNoYXJlZCIpOwotCQlJ bmplY3Rpb25Qb2ludExvYWQoImFpby13b3JrZXItYWZ0ZXItcmVvcGVuIik7Ci0JCWVsb2co TE9HLCAiaW5qZWN0aW9uIHBvaW50IGxvYWRlZCIpOworCUluamVjdGlvblBvaW50TG9hZCgi YWlvLXByb2Nlc3MtY29tcGxldGlvbi1iZWZvcmUtc2hhcmVkIik7CisJSW5qZWN0aW9uUG9p bnRMb2FkKCJhaW8td29ya2VyLWFmdGVyLXJlb3BlbiIpOworCWVsb2coTE9HLCAiaW5qZWN0 aW9uIHBvaW50IGxvYWRlZCIpOwogI2VuZGlmCi0JfQotCi0JTFdMb2NrUmVsZWFzZShBZGRp blNobWVtSW5pdExvY2spOwogfQogCiB2b2lkCkBAIC0xNTQsMTAgKzE0OSw3IEBAIF9QR19p bml0KHZvaWQpCiAJaWYgKCFwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllc19pbl9w cm9ncmVzcykKIAkJcmV0dXJuOwogCi0JcHJldl9zaG1lbV9yZXF1ZXN0X2hvb2sgPSBzaG1l bV9yZXF1ZXN0X2hvb2s7Ci0Jc2htZW1fcmVxdWVzdF9ob29rID0gdGVzdF9haW9fc2htZW1f cmVxdWVzdDsKLQlwcmV2X3NobWVtX3N0YXJ0dXBfaG9vayA9IHNobWVtX3N0YXJ0dXBfaG9v azsKLQlzaG1lbV9zdGFydHVwX2hvb2sgPSB0ZXN0X2Fpb19zaG1lbV9zdGFydHVwOworCVJl Z2lzdGVyU2htZW1DYWxsYmFja3MoJmlual9pb19zaG1lbV9jYWxsYmFja3MpOwogfQogCiAK LS0gCjIuNDcuMwoK --------------ilO2of90F4UvkC4IFxh0ppYz--