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.94.2) (envelope-from ) id 1u1fwR-006FNF-UG for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Apr 2025 06:26:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1u1fwQ-00BPU4-3a for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Apr 2025 06:26:42 +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.94.2) (envelope-from <3danissimo@gmail.com>) id 1u1fwP-00BPTh-Lt for pgsql-hackers@lists.postgresql.org; Mon, 07 Apr 2025 06:26:42 +0000 Received: from mail-yw1-x112e.google.com ([2607:f8b0:4864:20::112e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from <3danissimo@gmail.com>) id 1u1fwN-003rgC-1X for pgsql-hackers@postgresql.org; Mon, 07 Apr 2025 06:26:41 +0000 Received: by mail-yw1-x112e.google.com with SMTP id 00721157ae682-6ff37565232so34341197b3.3 for ; Sun, 06 Apr 2025 23:26:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744007197; x=1744611997; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=/9HxzgWbcoNS1c/qltcC3zU1KaUHtCQyoQf1vWF3CBE=; b=dtvd+r6mBM0jVeO+Mx4K2HIpDlQtEJeuPR/6++rvIEhkPeB+ho4kgfX0tNqsCsEqGN Qgrgl6XpOKAuKLofpAYQW3WL1FHrMUlC1Kp3t+wmXEJcH5w3lRg8HQ9RclVAIJwItZNr XhndUKdxdoxANKac+T6rjHo1RgETQK47/qZZil20dUGCukbDvUt/XSpRLtWKmwaHrPwX WcEYPeb3Ab3nxaYN3JunTug1Zfo4YnhNiSsYky3YbbSmbDLLwJA0lwD0+wijaC5wOmm+ OV2NktBGls7Nd1yAKv7u8KUvrG6iObwk/U0XPmD/2z3AaAkHNbGIaKVBp4wenzJswRne j79Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744007197; x=1744611997; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=/9HxzgWbcoNS1c/qltcC3zU1KaUHtCQyoQf1vWF3CBE=; b=s5kRvBVnl5e0DCaVEsMNHUaz5sZbuZKgTYJv0GALB26Z89x4bNLWgoDNmNAeph3fd7 viAQCoigiHtnwIEzj/2f3ZNs9ccs0NGwMri5jh5EjyEYfZcFpLZ2oJ4b4THsSROvyidt 1bT0F9whl5V32Rb0IlmOi9XbVijLIbdfsw+SAbG5Qp/e8HFEDxyKiCYkBhHMp6I6McRZ 2deBwPJdubkH5Aro5ayqHp9GmQ6rwLl7auIYeDKsySyk4xxQbxMxhRNklHRlf/CVqTYp czNof6u+TM8SdhBbG0VgaFccZfrSQDhfV8VDHxKNrk1lDq6/hpTVYw+tMMH5IQOlOwv3 ZlIg== X-Forwarded-Encrypted: i=1; AJvYcCVAsDCpz0zWtFFeBzwjmmXVJyvFQMWyhZ+BeZS3jMkC5mjj6J1GzX5+6H5KX6Rm3HM6vyWKE+uRJdRchjDb@postgresql.org X-Gm-Message-State: AOJu0YwS+uYSxXFS6R3BmYRiubSLRkAqXbnK/RB4hzaxlrfCykncBW1C Z0OTaxZFGCxhen6yyjjmCecttn5iqZqyOue0ube1SKjMPyAv4JkCoUY9ALza/aIns9WkgZmFzh/ 0RqMUNXCY1qnMX8qLJRZkDhRYsQY= X-Gm-Gg: ASbGncuhi3kh1LNeAoscIxiA/zSyK5I+PZro+wn7/ixiiKfaqhf+ZeSey9whouSK9uu dClW9z3o5sCNCy5oHCh7bvaIe6y6M/pgUpGuywRJ8MrxtwNQgXhylfRAR5vsDv5TIPLBG/pMzoV d08xNbJzS67VUjNl7SLm5PJl08 X-Google-Smtp-Source: AGHT+IHc/ozjKBY8XoPHA17irnobIhqKzSOBx94ENj5vX0nnX8qExNvEODdh5v995AmJ3hqwdg4kDUNYDqoLHUHGSEU= X-Received: by 2002:a05:690c:6c84:b0:703:afd6:42e3 with SMTP id 00721157ae682-703e1629974mr203366897b3.37.1744007197522; Sun, 06 Apr 2025 23:26:37 -0700 (PDT) MIME-Version: 1.0 References: <20230603223824.o7iyochli2dwwi7k@alap3.anarazel.de> <6be6f58815dc0844fbe058edf56b4e735a6efc1c.camel@j-davis.com> <2280bf7241119bb88cbe0fe5eb36490cbd04c0c0.camel@j-davis.com> <12f1a2d8dd3b6305c0354f1c701f44b7be5e54eb.camel@j-davis.com> <8633171cb034aafc260fdf37df04b6c779aa1e2f.camel@j-davis.com> <229c4f7219ed164088dadc935df21e1cf125e191.camel@j-davis.com> <23a29125a2d07f96d49f97c31fcdb09a7f0ff6c1.camel@j-davis.com> <9F9326B4-8AD9-4858-B1C1-559FC64E6E93@gmail.com> <5EAAF124-98C1-425A-ACEC-131503F4070F@gmail.com> In-Reply-To: <5EAAF124-98C1-425A-ACEC-131503F4070F@gmail.com> From: Daniil Davydov <3danissimo@gmail.com> Date: Mon, 7 Apr 2025 13:26:25 +0700 X-Gm-Features: ATxdqUEsozE_ucfjta4XgyqDs7O6FXkSz64VGlHecPu1zyKekdKPOT3wLuEfg4k Message-ID: Subject: Re: Introduce new multi insert Table AM and improve performance of various SQL commands with it for Heap AM To: Jingtang Zhang Cc: pgsql-hackers@lists.postgresql.org, PostgreSQL-development , Bharath Rupireddy Content-Type: multipart/mixed; boundary="0000000000007ed94606322a5133" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007ed94606322a5133 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Sun, Apr 6, 2025 at 8:55=E2=80=AFPM Jingtang Zhang wrote: > > It was quite a while since I last looked at the patch. I've tested it aga= in, > and still get regression on patched version where a table has many column= s. > And it is totally CPU-bounded on tts_virtual_copyslot. > > Unpatched version: > 1 col: > Time: 8909.714 ms (00:08.910) > Time: 8803.579 ms (00:08.804) > Time: 8600.415 ms (00:08.600) > 32 cols: > Time: 12911.699 ms (00:12.912) > Time: 13543.491 ms (00:13.543) > Time: 13325.368 ms (00:13.325) > > Patched version: > 1 col: > Time: 3532.841 ms (00:03.533) > Time: 3598.223 ms (00:03.598) > Time: 3515.858 ms (00:03.516) > 32 cols: > Time: 35647.724 ms (00:35.648) > Time: 35596.233 ms (00:35.596) > Time: 35669.106 ms (00:35.669) > Hm, maybe I didn't choose the best way to measure performance. Can you please share how you do it? > I've tested your patch with tuplestore and found the regression does not = exist > anymore, but I haven't look deep inside it. > > Patched version (with tuplestore): > 1 col: > Time: 3500.502 ms (00:03.501) > Time: 3486.886 ms (00:03.487) > Time: 3514.233 ms (00:03.514) > 32 cols: > Time: 10375.391 ms (00:10.375) > Time: 10248.256 ms (00:10.248) > Time: 10248.289 ms (00:10.248) > > It seems to be a good idea if there is no other issue with your patch. As far as I understand, the use of multi inserts for queries like "INSERT INTO ... SELECT FROM" is not discussed here anymore due to the fact that in such cases we will have to take into account the volatile functions and ROW triggers. I've been thinking about this for a while and made a patch as an experiment. The principles that the patch works on are listed below. 1) Since performance decreases for single INSERTs (within a multi inserts mechanism), I designed this feature as an option for the table. Thus, if the user knows that he will perform a lot of inserts on the table, he can specify "WITH (append_optimized=3Dtrue)". 2) The availability of volatile functions is monitored during the construction of a subtree for a ModifyTable node. I'm not that familiar with the query plan construction mechanism, but it seems to me that this way we can track any occurrence of volatile functions. Of course, most volatile functions don't stop us from using multi inserts, but checking each such function would take a very long time, so the very fact of having a volatile function is enough for us to abandon multi-inserts. 3) Default expressions of the target table are also checked for volatile functions. The same rules apply to them as in (2). As an exception, I allowed the use of SERIAL in the column data type, since this is a fairly common use case. 4) If the target table contains any ROW triggers, we don't use multi insert. 5) Patch also contains a regression test. This is a "sandbox" where you can do some experiments with append-optimized tables. I hope that patch (targeted on 'master' branch, 2c7bd2ba507e273f2d7fe1b2f6d30775ed4f3c09) will be useful for this thread. -- Best regards, Daniil Davydov --0000000000007ed94606322a5133 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-Meet-append-optimized-tables.patch" Content-Disposition: attachment; filename="v1-0001-Meet-append-optimized-tables.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m96otmyy0 RnJvbSAyMjQzNzhjMTFkMjcwYWFiZTI4YmRkMzJlZmFjZDM3ZWQxOTg0YmQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5paWwgRGF2aWRvdiA8ZC5kYXZ5ZG92QHBvc3RncmVzcHJv LnJ1PgpEYXRlOiBNb24sIDcgQXByIDIwMjUgMTI6NTU6NTAgKzA3MDAKU3ViamVjdDogW1BBVENI IHYxXSBNZWV0IGFwcGVuZCBvcHRpbWl6ZWQgdGFibGVzCgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9jb21tb24vcmVsb3B0aW9ucy5jICAgICAgICB8ICAxMSArCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW0uYyAgICAgICAgICAgICAgfCAyMDUgKysrKysrKysrKysrKysrKysrCiBzcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAgfCAgIDUgKwogc3JjL2Jh Y2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYyAgICAgICAgIHwgICA1ICsKIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY0V4cHIuYyAgICAgICAgICAgICAgIHwgIDE3ICstCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUHJvY25vZGUuYyAgICAgICAgICAgfCAgIDkgKwogc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgICAgICAgIHwgMTk0ICsrKysrKysrKysrKysrKyst CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgICAgICAgfCAgIDEgKwog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jICAgICAgICAgIHwgIDI4ICsrLQog c3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgIDQxICsrKysK IHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICAgICB8ICA4NCArKysr KysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDYg Kwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICAgICAgICAgIHwgICAyICsK IHNyYy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaCAgICAgICAgICAgICB8ICAgMyArCiBz cmMvaW5jbHVkZS91dGlscy9yZWwuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgMTAgKwogLi4u L3JlZ3Jlc3MvZXhwZWN0ZWQvYXBwZW5kX29wdGltaXplZC5vdXQgICAgIHwgMTYxICsrKysrKysr KysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAg IDIgKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvYXBwZW5kX29wdGltaXplZC5zcWwgICAgIHwgMTA1 ICsrKysrKysrKwogMTkgZmlsZXMgY2hhbmdlZCwgODc5IGluc2VydGlvbnMoKyksIDE1IGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYXBw ZW5kX29wdGltaXplZC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9hcHBlbmRfb3B0aW1pemVkLnNxbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9j b21tb24vcmVsb3B0aW9ucy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25z LmMKaW5kZXggNDZjMWRjZTIyMmQuLjk2NTJjZjQxNzliIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29t bW9uL3JlbG9wdGlvbnMuYwpAQCAtMTY2LDYgKzE2NiwxNSBAQCBzdGF0aWMgcmVsb3B0X2Jvb2wg Ym9vbFJlbE9wdHNbXSA9CiAJCX0sCiAJCXRydWUKIAl9LAorCXsKKwkJeworCQkJImFwcGVuZF9v cHRpbWl6ZWQiLAorCQkJIkVuYWJsZXMgdXNpbmcgYmF0Y2hpbmcgZm9yIGluc2VydGlvbiBhbGdv cml0aG0gd2hlbmV2ZXIgaXQgcG9zc2libGUiLAorCQkJUkVMT1BUX0tJTkRfSEVBUCwKKwkJCUFj Y2Vzc0V4Y2x1c2l2ZUxvY2sKKwkJfSwKKwkJZmFsc2UKKwl9LAogCS8qIGxpc3QgdGVybWluYXRv ciAqLwogCXt7TlVMTH19CiB9OwpAQCAtMTkwNSw2ICsxOTE0LDggQEAgZGVmYXVsdF9yZWxvcHRp b25zKERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUsIHJlbG9wdF9raW5kIGtpbmQpCiAJ CW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgdmFjdXVtX2luZGV4X2NsZWFudXApfSwKIAkJeyJ2YWN1 dW1fdHJ1bmNhdGUiLCBSRUxPUFRfVFlQRV9CT09MLAogCQlvZmZzZXRvZihTdGRSZE9wdGlvbnMs IHZhY3V1bV90cnVuY2F0ZSksIG9mZnNldG9mKFN0ZFJkT3B0aW9ucywgdmFjdXVtX3RydW5jYXRl X3NldCl9LAorCQl7ImFwcGVuZF9vcHRpbWl6ZWQiLCBSRUxPUFRfVFlQRV9CT09MLAorCQlvZmZz ZXRvZihTdGRSZE9wdGlvbnMsIGFwcGVuZF9vcHRpbWl6ZWQpfSwKIAkJeyJ2YWN1dW1fbWF4X2Vh Z2VyX2ZyZWV6ZV9mYWlsdXJlX3JhdGUiLCBSRUxPUFRfVFlQRV9SRUFMLAogCQlvZmZzZXRvZihT dGRSZE9wdGlvbnMsIHZhY3V1bV9tYXhfZWFnZXJfZnJlZXplX2ZhaWx1cmVfcmF0ZSl9CiAJfTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggZWQyZTMwMjE3OTkuLjQxNWVlZjRjMzVkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgInV0 aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVk ZSAidXRpbHMvaW52YWwuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUg InV0aWxzL3NwY2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIApAQCAtMTA2 LDYgKzEwNyw3IEBAIHN0YXRpYyBYTG9nUmVjUHRyIGxvZ19oZWFwX25ld19jaWQoUmVsYXRpb24g cmVsYXRpb24sIEhlYXBUdXBsZSB0dXApOwogc3RhdGljIEhlYXBUdXBsZSBFeHRyYWN0UmVwbGlj YUlkZW50aXR5KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHAsIGJvb2wga2V5X3JlcXVp cmVkLAogCQkJCQkJCQkJCWJvb2wgKmNvcHkpOwogCitzdGF0aWMgdm9pZCBoZWFwX21vZGlmeV9p bnNlcnRfZW5kKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKTsKIAogLyoKICAqIEVhY2ggdHVwbGUg bG9jayBtb2RlIGhhcyBhIGNvcnJlc3BvbmRpbmcgaGVhdnl3ZWlnaHQgbG9jaywgYW5kIG9uZSBv ciB0d28KQEAgLTI2NzQsNiArMjY3NiwyMDkgQEAgaGVhcF9tdWx0aV9pbnNlcnQoUmVsYXRpb24g cmVsYXRpb24sIFR1cGxlVGFibGVTbG90ICoqc2xvdHMsIGludCBudHVwbGVzLAogCXBnc3RhdF9j b3VudF9oZWFwX2luc2VydChyZWxhdGlvbiwgbnR1cGxlcyk7CiB9CiAKKy8qCisgKiBJbml0aWFs aXplIGhlYXAgbW9kaWZ5IHN0YXRlLgorICovCitUYWJsZU1vZGlmeVN0YXRlICoKK2hlYXBfbW9k aWZ5X2JlZ2luKFJlbGF0aW9uIHJlbCwKKwkJCQkgIENvbW1hbmRJZCBjaWQsCisJCQkJICBpbnQg b3B0aW9ucywKKwkJCQkgIFRhYmxlTW9kaWZ5QnVmZmVyRmx1c2hDYiBidWZmZXJfZmx1c2hfY2Is CisJCQkJICB2b2lkICpidWZmZXJfZmx1c2hfY3R4KQoreworCVRhYmxlTW9kaWZ5U3RhdGUgKnN0 YXRlOworCU1lbW9yeUNvbnRleHQgY29udGV4dDsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7 CisKKwlBc3NlcnQoUmVsYXRpb25Jc0FwcGVuZE9wdGltaXplZChyZWwpKTsKKwljb250ZXh0ID0g QWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcFRyYW5zYWN0aW9uQ29udGV4dCwKKwkJCQkJCQkJCSJo ZWFwX21vZGlmeSBtZW1vcnkgY29udGV4dCIsCisJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJ WkVTKTsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dCk7CisJ c3RhdGUgPSBwYWxsb2Moc2l6ZW9mKFRhYmxlTW9kaWZ5U3RhdGUpKTsKKwlzdGF0ZS0+cmVsID0g cmVsOworCXN0YXRlLT5jaWQgPSBjaWQ7CisJc3RhdGUtPm9wdGlvbnMgPSBvcHRpb25zOworCXN0 YXRlLT5tZW1fY3R4ID0gY29udGV4dDsKKwlzdGF0ZS0+YnVmZmVyX2ZsdXNoX2NiID0gYnVmZmVy X2ZsdXNoX2NiOworCXN0YXRlLT5idWZmZXJfZmx1c2hfY3R4ID0gYnVmZmVyX2ZsdXNoX2N0eDsK KwlzdGF0ZS0+ZGF0YSA9IE5VTEw7CQkJLyogVG8gYmUgc2V0IGxhemlseSAqLworCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCXJldHVybiBzdGF0ZTsKK30KKworLyoKKyAq IFN0b3JlIHBhc3NlZC1pbiB0dXBsZSBpbnRvIGluLW1lbW9yeSBidWZmZXJlZCBzbG90cy4gV2hl biBmdWxsLCBpbnNlcnQKKyAqIG11bHRpcGxlIHR1cGxlcyBmcm9tIHRoZSBidWZmZXJzIGludG8g aGVhcC4KKyAqLwordm9pZAoraGVhcF9tb2RpZnlfYnVmZmVyX2luc2VydChUYWJsZU1vZGlmeVN0 YXRlICpzdGF0ZSwKKwkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJSGVhcEluc2Vy dFN0YXRlICppc3RhdGU7CisJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7CisJTWVtb3J5 Q29udGV4dCBvbGRjb250ZXh0OworCisJQXNzZXJ0KFJlbGF0aW9uSXNBcHBlbmRPcHRpbWl6ZWQo c3RhdGUtPnJlbCkpOworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RhdGUt Pm1lbV9jdHgpOworCisJLyogRmlyc3QgdGltZSB0aHJvdWdoLCBpbml0aWFsaXplIGhlYXAgaW5z ZXJ0IHN0YXRlICovCisJaWYgKHN0YXRlLT5kYXRhID09IE5VTEwpCisJeworCQlpc3RhdGUgPSAo SGVhcEluc2VydFN0YXRlICopIHBhbGxvYyhzaXplb2YoSGVhcEluc2VydFN0YXRlKSk7CisJCWlz dGF0ZS0+YmlzdGF0ZSA9IE5VTEw7CisJCWlzdGF0ZS0+bWlzdGF0ZSA9IE5VTEw7CisJCXN0YXRl LT5kYXRhID0gaXN0YXRlOworCQltaXN0YXRlID0KKwkJCShIZWFwTXVsdGlJbnNlcnRTdGF0ZSAq KSBwYWxsb2Moc2l6ZW9mKEhlYXBNdWx0aUluc2VydFN0YXRlKSk7CisJCW1pc3RhdGUtPnNsb3Rz ID0KKwkJCShUdXBsZVRhYmxlU2xvdCAqKikgcGFsbG9jMChzaXplb2Yodm9pZCAqKSAqIEhFQVBf TUFYX0JVRkZFUkVEX1NMT1RTKTsKKwkJbWlzdGF0ZS0+dHN0b3JlID0gdHVwbGVzdG9yZV9iZWdp bl9oZWFwKGZhbHNlLCBmYWxzZSwgd29ya19tZW0pOworCQltaXN0YXRlLT5udXNlZCA9IDA7CisJ CWlzdGF0ZS0+bWlzdGF0ZSA9IG1pc3RhdGU7CisKKwkJLyoKKwkJICogaGVhcF9tdWx0aV9pbnNl cnQoKSBjYW4gbGVhayBtZW1vcnkuIFNvIHN3aXRjaCB0byB0aGlzIG1lbW9yeQorCQkgKiBjb250 ZXh0IGJlZm9yZSBldmVyeSBoZWFwX211bHRpX2luc2VydCgpIGNhbGwgYW5kIHJlc2V0IHdoZW4K KwkJICogZmluaXNoZWQuCisJCSAqLworCQltaXN0YXRlLT5tZW1fY3R4ID0gQWxsb2NTZXRDb250 ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJICJoZWFwX211bHRp X2luc2VydCBtZW1vcnkgY29udGV4dCIsCisJCQkJCQkJCQkJCQkgQUxMT0NTRVRfREVGQVVMVF9T SVpFUyk7CisJCWlzdGF0ZS0+YmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOworCX0KKwor CWlzdGF0ZSA9IChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmRhdGE7CisJQXNzZXJ0KGlzdGF0 ZS0+bWlzdGF0ZSAhPSBOVUxMKTsKKwltaXN0YXRlID0gaXN0YXRlLT5taXN0YXRlOworCisJdHVw bGVzdG9yZV9wdXR0dXBsZXNsb3QobWlzdGF0ZS0+dHN0b3JlLCBzbG90KTsKKwltaXN0YXRlLT5u dXNlZCArPSAxOworCisJaWYgKG1pc3RhdGUtPm51c2VkID49IEhFQVBfTUFYX0JVRkZFUkVEX1NM T1RTKQorCQloZWFwX21vZGlmeV9idWZmZXJfZmx1c2goc3RhdGUpOworCisJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGNvbnRleHQpOworfQorCisvKgorICogSW5zZXJ0IG11bHRpcGxlIHR1cGxl cyBmcm9tIGluLW1lbW9yeSBidWZmZXJlZCBzbG90cyBpbnRvIGhlYXAuCisgKi8KK3ZvaWQKK2hl YXBfbW9kaWZ5X2J1ZmZlcl9mbHVzaChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSkKK3sKKwlIZWFw SW5zZXJ0U3RhdGUgKmlzdGF0ZTsKKwlIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqbWlzdGF0ZTsKKwlN ZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJVHVwbGVEZXNjIHR1cGRlc2M7CisKKwlBc3NlcnQo UmVsYXRpb25Jc0FwcGVuZE9wdGltaXplZChzdGF0ZS0+cmVsKSk7CisKKwkvKiBRdWljayBleGl0 IGlmIHdlIGhhdmVuJ3QgaW5zZXJ0ZWQgYW55dGhpbmcgeWV0ICovCisJaWYgKHN0YXRlLT5kYXRh ID09IE5VTEwpCisJCXJldHVybjsKKworCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHN0YXRl LT5yZWwpOworCWlzdGF0ZSA9IChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmRhdGE7CisJQXNz ZXJ0KGlzdGF0ZS0+bWlzdGF0ZSAhPSBOVUxMKTsKKwltaXN0YXRlID0gaXN0YXRlLT5taXN0YXRl OworCisJLyogUXVpY2sgZXhpdCBpZiB3ZSBoYXZlIGZsdXNoZWQgYWxyZWFkeSAqLworCWlmICht aXN0YXRlLT5udXNlZCA9PSAwKQorCQlyZXR1cm47CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG1p c3RhdGUtPm51c2VkOyBpKyspCisJeworCQlib29sIG9rOworCisJCWlmIChpc3RhdGUtPm1pc3Rh dGUtPnNsb3RzW2ldID09IE5VTEwpCisJCXsKKwkJCWlzdGF0ZS0+bWlzdGF0ZS0+c2xvdHNbaV0g PQorCQkJCU1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdCh0dXBkZXNjLCAmVFRTT3BzTWluaW1hbFR1 cGxlKTsKKwkJfQorCQlvayA9IHR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90KG1pc3RhdGUtPnRzdG9y ZSwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkJCQkgaXN0YXRlLT5taXN0YXRlLT5zbG90c1tpXSk7CisJ CUFzc2VydChvayk7CisJfQorCisJLyoKKwkgKiBoZWFwX211bHRpX2luc2VydCgpIGNhbiBsZWFr IG1lbW9yeSwgc28gc3dpdGNoIHRvIHNob3J0LWxpdmVkIG1lbW9yeQorCSAqIGNvbnRleHQgYmVm b3JlIGNhbGxpbmcgaXQuCisJICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhtaXN0YXRlLT5tZW1fY3R4KTsKKwloZWFwX211bHRpX2luc2VydChzdGF0ZS0+cmVsLAorCQkJ CQkgIG1pc3RhdGUtPnNsb3RzLAorCQkJCQkgIG1pc3RhdGUtPm51c2VkLAorCQkJCQkgIHN0YXRl LT5jaWQsCisJCQkJCSAgc3RhdGUtPm9wdGlvbnMsCisJCQkJCSAgaXN0YXRlLT5iaXN0YXRlKTsK KwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJTWVtb3J5Q29udGV4dFJlc2V0 KG1pc3RhdGUtPm1lbV9jdHgpOworCisJLyoKKwkgKiBJbnZva2UgY2FsbGVyLXN1cHBsaWVkIGJ1 ZmZlciBmbHVzaCBjYWxsYmFjayBhZnRlciBpbnNlcnRpbmcgcm93cyBmcm9tCisJICogdGhlIGJ1 ZmZlcnMgdG8gaGVhcC4KKwkgKi8KKwlpZiAoc3RhdGUtPmJ1ZmZlcl9mbHVzaF9jYiAhPSBOVUxM KQorCXsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBtaXN0YXRlLT5udXNlZDsgaSsrKQorCQl7CisJ CQlzdGF0ZS0+YnVmZmVyX2ZsdXNoX2NiKHN0YXRlLT5idWZmZXJfZmx1c2hfY3R4LAorCQkJCQkJ CQkgICBtaXN0YXRlLT5zbG90c1tpXSk7CisJCX0KKwl9CisKKwl0dXBsZXN0b3JlX2NsZWFyKG1p c3RhdGUtPnRzdG9yZSk7CisJbWlzdGF0ZS0+bnVzZWQgPSAwOworfQorCisvKgorICogSGVhcCBp bnNlcnQgc3BlY2lmaWMgZnVuY3Rpb24gdXNlZCBmb3IgcGVyZm9ybWluZyB3b3JrIGF0IHRoZSBl bmQgbGlrZQorICogZmx1c2hpbmcgcmVtYWluaW5nIGJ1ZmZlcmVkIHR1cGxlcywgY2xlYW5pbmcg dXAgdGhlIGluc2VydCBzdGF0ZSBhbmQgdHVwbGUKKyAqIHRhYmxlIHNsb3RzIHVzZWQgZm9yIGJ1 ZmZlcmVkIHR1cGxlcyBldGMuCisgKi8KK3N0YXRpYyB2b2lkCitoZWFwX21vZGlmeV9pbnNlcnRf ZW5kKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKQoreworCUhlYXBJbnNlcnRTdGF0ZSAqaXN0YXRl OworCisJLyogUXVpY2sgZXhpdCBpZiB3ZSBoYXZlbid0IGluc2VydGVkIGFueXRoaW5nIHlldCAq LworCWlmIChzdGF0ZS0+ZGF0YSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpc3RhdGUgPSAoSGVh cEluc2VydFN0YXRlICopIHN0YXRlLT5kYXRhOworCisJaWYgKGlzdGF0ZS0+bWlzdGF0ZSAhPSBO VUxMKQorCXsKKwkJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGUgPSBpc3RhdGUtPm1pc3Rh dGU7CisKKwkJaGVhcF9tb2RpZnlfYnVmZmVyX2ZsdXNoKHN0YXRlKTsKKworCQlBc3NlcnQobWlz dGF0ZS0+bnVzZWQgPT0gMCk7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBIRUFQX01BWF9CVUZG RVJFRF9TTE9UUyAmJiBtaXN0YXRlLT5zbG90c1tpXSAhPSBOVUxMOyBpKyspCisJCQlFeGVjRHJv cFNpbmdsZVR1cGxlVGFibGVTbG90KG1pc3RhdGUtPnNsb3RzW2ldKTsKKworCQl0dXBsZXN0b3Jl X2VuZChtaXN0YXRlLT50c3RvcmUpOworCQlNZW1vcnlDb250ZXh0RGVsZXRlKG1pc3RhdGUtPm1l bV9jdHgpOworCX0KKworCWlmIChpc3RhdGUtPmJpc3RhdGUgIT0gTlVMTCkKKwkJRnJlZUJ1bGtJ bnNlcnRTdGF0ZShpc3RhdGUtPmJpc3RhdGUpOworfQorCisvKgorICogQ2xlYW4gaGVhcCBtb2Rp Znkgc3RhdGUuCisgKi8KK3ZvaWQKK2hlYXBfbW9kaWZ5X2VuZChUYWJsZU1vZGlmeVN0YXRlICpz dGF0ZSkKK3sKKwloZWFwX21vZGlmeV9pbnNlcnRfZW5kKHN0YXRlKTsKKwlNZW1vcnlDb250ZXh0 RGVsZXRlKHN0YXRlLT5tZW1fY3R4KTsKK30KKwogLyoKICAqCXNpbXBsZV9oZWFwX2luc2VydCAt IGluc2VydCBhIHR1cGxlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMKaW5kZXggYWMwODJmZWZhNzcuLjU2ODgwMTY1ZWQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTI2NDMsNiArMjY0MywxMSBAQCBzdGF0aWMgY29uc3Qg VGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLnR1cGxlX3VwZGF0ZSA9IGhlYXBh bV90dXBsZV91cGRhdGUsCiAJLnR1cGxlX2xvY2sgPSBoZWFwYW1fdHVwbGVfbG9jaywKIAorCS50 dXBsZV9tb2RpZnlfYmVnaW4gPSBoZWFwX21vZGlmeV9iZWdpbiwKKwkudHVwbGVfbW9kaWZ5X2J1 ZmZlcl9pbnNlcnQgPSBoZWFwX21vZGlmeV9idWZmZXJfaW5zZXJ0LAorCS50dXBsZV9tb2RpZnlf YnVmZmVyX2ZsdXNoID0gaGVhcF9tb2RpZnlfYnVmZmVyX2ZsdXNoLAorCS50dXBsZV9tb2RpZnlf ZW5kID0gaGVhcF9tb2RpZnlfZW5kLAorCiAJLnR1cGxlX2ZldGNoX3Jvd192ZXJzaW9uID0gaGVh cGFtX2ZldGNoX3Jvd192ZXJzaW9uLAogCS50dXBsZV9nZXRfbGF0ZXN0X3RpZCA9IGhlYXBfZ2V0 X2xhdGVzdF90aWQsCiAJLnR1cGxlX3RpZF92YWxpZCA9IGhlYXBhbV90dXBsZV90aWRfdmFsaWQs CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwppbmRleCA0NzY2NjNiNjZhYS4uYWUz MGM1YTIxYTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBp LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwpAQCAtOTQsNiAr OTQsMTEgQEAgR2V0VGFibGVBbVJvdXRpbmUoT2lkIGFtaGFuZGxlcikKIAlBc3NlcnQocm91dGlu ZS0+c2Nhbl9zYW1wbGVfbmV4dF9ibG9jayAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+c2Nh bl9zYW1wbGVfbmV4dF90dXBsZSAhPSBOVUxMKTsKIAorCUFzc2VydChyb3V0aW5lLT50dXBsZV9t b2RpZnlfYmVnaW4gIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX21vZGlmeV9idWZm ZXJfaW5zZXJ0ICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT50dXBsZV9tb2RpZnlfYnVmZmVy X2ZsdXNoICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT50dXBsZV9tb2RpZnlfZW5kICE9IE5V TEwpOworCiAJcmV0dXJuIHJvdXRpbmU7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCBl ZjhhYTQ4OWFmOC4uMzFjZTFmYTdhY2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTEzOTks NyArMTM5OSwxMCBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5j ZXN0b3JzLAogCQkJc3dpdGNoICgoKE1vZGlmeVRhYmxlICopIHBsYW4pLT5vcGVyYXRpb24pCiAJ CQl7CiAJCQkJY2FzZSBDTURfSU5TRVJUOgotCQkJCQlwbmFtZSA9IG9wZXJhdGlvbiA9ICJJbnNl cnQiOworCQkJCQlpZiAoKChNb2RpZnlUYWJsZSAqKSBwbGFuKS0+Y2FuVXNlQmF0Y2hpbmcpCisJ CQkJCQlwbmFtZSA9IG9wZXJhdGlvbiA9ICJNdWx0aUluc2VydCI7CisJCQkJCWVsc2UKKwkJCQkJ CXBuYW1lID0gb3BlcmF0aW9uID0gIkluc2VydCI7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgQ01E X1VQREFURToKIAkJCQkJcG5hbWUgPSBvcGVyYXRpb24gPSAiVXBkYXRlIjsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjRXhwci5jCmluZGV4IGYxNTY5ODc5YjUyLi5mMmQzYTIzNmZiYyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjRXhwci5jCkBAIC0xMDMsNyArMTAzLDExIEBAIHN0YXRpYyB2b2lkIEV4ZWNJbml0SnNvbkNv ZXJjaW9uKEV4cHJTdGF0ZSAqc3RhdGUsIEpzb25SZXR1cm5pbmcgKnJldHVybmluZywKIAkJCQkJ CQkJIEVycm9yU2F2ZUNvbnRleHQgKmVzY29udGV4dCwgYm9vbCBvbWl0X3F1b3RlcywKIAkJCQkJ CQkJIGJvb2wgZXhpc3RzX2NvZXJjZSwKIAkJCQkJCQkJIERhdHVtICpyZXN2LCBib29sICpyZXNu dWxsKTsKLQorLyoKKyAqIEV2ZXJ5IHRpbWUgd2hlbiB3ZSBmaW5kIHZvbGF0aWxlIGZ1bmN0aW9u IGR1cmluZyBleHByZXNzdGlvbiBldmFsdWF0aW5nLCB3ZQorICogbXVzdCBzZXQgdGhpcyBmbGFn LCBzbyBoaWdoZXIgbGV2ZWwgY29kZSBjYW4gcHJvY2VzcyBpdCBhcHByb3ByaWF0ZWx5LgorICov CitzdGF0aWMgYm9vbCB2b2xhdGlsZV9mdW5jX2ZsYWcgPSBmYWxzZTsKIAogLyoKICAqIEV4ZWNJ bml0RXhwcjogcHJlcGFyZSBhbiBleHByZXNzaW9uIHRyZWUgZm9yIGV4ZWN1dGlvbgpAQCAtMjY0 LDYgKzI2OCw5IEBAIEV4ZWNJbml0UXVhbChMaXN0ICpxdWFsLCBQbGFuU3RhdGUgKnBhcmVudCkK IAlzY3JhdGNoLnJlc3ZhbHVlID0gJnN0YXRlLT5yZXN2YWx1ZTsKIAlzY3JhdGNoLnJlc251bGwg PSAmc3RhdGUtPnJlc251bGw7CiAKKwkvKiBSZXNldCBmbGFnIGluZGljYXRpbmcgdGhlIHByZXNl bmNlIG9mIHZvbGF0aWxlIGZ1bmN0aW9ucyBpbiBxdWFsICovCisJdm9sYXRpbGVfZnVuY19mbGFn ID0gZmFsc2U7CisKIAlmb3JlYWNoX3B0cihFeHByLCBub2RlLCBxdWFsKQogCXsKIAkJLyogZmly c3QgZXZhbHVhdGUgZXhwcmVzc2lvbiAqLwpAQCAtMjc2LDYgKzI4MywxMCBAQCBFeGVjSW5pdFF1 YWwoTGlzdCAqcXVhbCwgUGxhblN0YXRlICpwYXJlbnQpCiAJCQkJCQkJCSAgIHN0YXRlLT5zdGVw c19sZW4gLSAxKTsKIAl9CiAKKwkvKiBQb3NzaWJseSB1cGRhdGUgaW5mb3JtYXRpb24gYWJvdXQg YmF0Y2gtaW5zZXJ0LWNhcGFiaWxpdHkgKi8KKwlpZiAocGFyZW50ICYmICFwYXJlbnQtPmhhc192 b2xhdGlsZSkKKwkJcGFyZW50LT5oYXNfdm9sYXRpbGUgPSB2b2xhdGlsZV9mdW5jX2ZsYWc7CisK IAkvKiBhZGp1c3QganVtcCB0YXJnZXRzICovCiAJZm9yZWFjaF9pbnQoanVtcCwgYWRqdXN0X2p1 bXBzKQogCXsKQEAgLTExOTMsNiArMTIwNCwxMCBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9k ZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJCXsKIAkJCQlGdW5jRXhwciAgICpmdW5jID0gKEZ1bmNF eHByICopIG5vZGU7CiAKKwkJCQkvKiBIaWdoZXIgbGV2ZWwgY29kZSB3aWxsIGhhbmRsZSBpdCAq LworCQkJCWlmIChmdW5jX3ZvbGF0aWxlKGZ1bmMtPmZ1bmNpZCkpCisJCQkJCXZvbGF0aWxlX2Z1 bmNfZmxhZyA9IHRydWU7CisKIAkJCQlFeGVjSW5pdEZ1bmMoJnNjcmF0Y2gsIG5vZGUsCiAJCQkJ CQkJIGZ1bmMtPmFyZ3MsIGZ1bmMtPmZ1bmNpZCwgZnVuYy0+aW5wdXRjb2xsaWQsCiAJCQkJCQkJ IHN0YXRlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKaW5kZXggZjVmOWNmYmVlYWQu LjIzODNlZjdlYTRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJvY25v ZGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYwpAQCAtNDE2LDYg KzQxNiwxNSBAQCBFeGVjSW5pdE5vZGUoUGxhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBl ZmxhZ3MpCiAJCXJlc3VsdC0+aW5zdHJ1bWVudCA9IEluc3RyQWxsb2MoMSwgZXN0YXRlLT5lc19p bnN0cnVtZW50LAogCQkJCQkJCQkJCXJlc3VsdC0+YXN5bmNfY2FwYWJsZSk7CiAKKwkvKiBDaGVj ayB3aGV0aGVyIHNvbWUgbm9kZXMgYmVsb3cgaGFzIHZvbGF0aWxlIGZ1bmN0aW9ucyAqLworCWlm ICgob3V0ZXJQbGFuU3RhdGUocmVzdWx0KSAhPSBOVUxMICYmCisJCSBvdXRlclBsYW5TdGF0ZShy ZXN1bHQpLT5oYXNfdm9sYXRpbGUpIHx8CisJCShpbm5lclBsYW5TdGF0ZShyZXN1bHQpICE9IE5V TEwgJiYKKwkJIGlubmVyUGxhblN0YXRlKHJlc3VsdCktPmhhc192b2xhdGlsZSkpCisJeworCQly ZXN1bHQtPmhhc192b2xhdGlsZSA9IHRydWU7CisJfQorCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCAzMDllMjdmOGI1Zi4uYmJh ZjkxYmNiYWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJs ZS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCkBAIC01NSw2 ICs1NSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFj Y2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX3Byb2MuaCIKICNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2VyLmgiCiAjaW5jbHVkZSAi ZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgi CkBAIC02Nyw2ICs2OCw4IEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgorI2luY2x1ZGUgInV0 aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAi dXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogCkBAIC0xMzAsNiArMTMz LDE4IEBAIHR5cGVkZWYgc3RydWN0IFVwZGF0ZUNvbnRleHQKIAlMb2NrVHVwbGVNb2RlIGxvY2tt b2RlOwogfSBVcGRhdGVDb250ZXh0OwogCit0eXBlZGVmIHN0cnVjdCBJbnNlcnRNb2RpZnlCdWZm ZXJGbHVzaENvbnRleHQKK3sKKwlSZXN1bHRSZWxJbmZvCQkqcmVzdWx0UmVsSW5mbzsKKwlFU3Rh dGUJCQkJKmVzdGF0ZTsKKwlNb2RpZnlUYWJsZVN0YXRlCSptdHN0YXRlOworfQkJSW5zZXJ0TW9k aWZ5QnVmZmVyRmx1c2hDb250ZXh0OworCitzdGF0aWMgSW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hD b250ZXh0ICppbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0ID0gTlVMTDsKK3N0YXRp YyBUYWJsZU1vZGlmeVN0YXRlICp0YWJsZV9tb2RpZnlfc3RhdGUgPSBOVUxMOworCitzdGF0aWMg dm9pZCBJbnNlcnRNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNrKHZvaWQgKmNvbnRleHQsCisJCQkJ CQkJCQkJCVR1cGxlVGFibGVTbG90ICpzbG90KTsKIAogc3RhdGljIHZvaWQgRXhlY0JhdGNoSW5z ZXJ0KE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCiAJCQkJCQkJUmVzdWx0UmVsSW5mbyAqcmVz dWx0UmVsSW5mbywKQEAgLTE3NCw2ICsxODksOCBAQCBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkV4 ZWNNZXJnZU5vdE1hdGNoZWQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkJ CSAgIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCQkJCQkJCQkJICAgYm9vbCBjYW5T ZXRUYWcpOwogCitzdGF0aWMgYm9vbCBDb250YWluVm9sYXRpbGVGdW5jdGlvbnNDaGVja2VyKE9p ZCBmdW5jX2lkLCB2b2lkICpjb250ZXh0KTsKK3N0YXRpYyBib29sIElzTXVsdGlJbnNlcnRDYXBh YmxlKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUpOwogCiAvKgogICogVmVyaWZ5IHRoYXQgdGhl IHR1cGxlcyB0byBiZSBwcm9kdWNlZCBieSBJTlNFUlQgbWF0Y2ggdGhlCkBAIC04MDYsNiArODIz LDMxIEBAIEV4ZWNHZXRVcGRhdGVOZXdUdXBsZShSZXN1bHRSZWxJbmZvICpyZWxpbmZvLAogCXJl dHVybiBFeGVjUHJvamVjdChuZXdQcm9qKTsKIH0KIAorc3RhdGljIHZvaWQKK0luc2VydE1vZGlm eUJ1ZmZlckZsdXNoQ2FsbGJhY2sodm9pZCAqY29udGV4dCwgVHVwbGVUYWJsZVNsb3QgKnNsb3Qp Cit7CisJSW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0ICpjdHggPSAoSW5zZXJ0TW9kaWZ5 QnVmZmVyRmx1c2hDb250ZXh0ICopIGNvbnRleHQ7CisJUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVs SW5mbyA9IGN0eC0+cmVzdWx0UmVsSW5mbzsKKwlFU3RhdGUJICAgKmVzdGF0ZSA9IGN0eC0+ZXN0 YXRlOworCisJLyogQ2FsbGVyIG11c3QgdGFrZSBjYXJlIG9mIG9wZW5pbmcgYW5kIGNsb3Npbmcg dGhlIGluZGljZXMgKi8KKworCS8qCisJICogSWYgdGhlcmUgYXJlIGFueSBpbmRleGVzLCB1cGRh dGUgdGhlbSBmb3IgYWxsIHRoZSBpbnNlcnRlZCB0dXBsZXMsIGFuZAorCSAqIHJ1biBBRlRFUiBS T1cgSU5TRVJUIHRyaWdnZXJzLgorCSAqLworCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRp Y2VzID4gMCkKKwl7CisJCUxpc3QJICAgKnJlY2hlY2tJbmRleGVzOworCisJCXJlY2hlY2tJbmRl eGVzID0KKwkJCUV4ZWNJbnNlcnRJbmRleFR1cGxlcyhyZXN1bHRSZWxJbmZvLAorCQkJCQkJCQkg IHNsb3QsIGVzdGF0ZSwgZmFsc2UsCisJCQkJCQkJCSAgZmFsc2UsIE5VTEwsIE5JTCwgZmFsc2Up OworCQlsaXN0X2ZyZWUocmVjaGVja0luZGV4ZXMpOworCX0KK30KKwogLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJ CUV4ZWNJbnNlcnQKICAqCkBAIC0xMjA5LDE3ICsxMjUxLDIyIEBAIEV4ZWNJbnNlcnQoTW9kaWZ5 VGFibGVDb250ZXh0ICpjb250ZXh0LAogCQl9CiAJCWVsc2UKIAkJewotCQkJLyogaW5zZXJ0IHRo ZSB0dXBsZSBub3JtYWxseSAqLwotCQkJdGFibGVfdHVwbGVfaW5zZXJ0KHJlc3VsdFJlbGF0aW9u RGVzYywgc2xvdCwKLQkJCQkJCQkgICBlc3RhdGUtPmVzX291dHB1dF9jaWQsCi0JCQkJCQkJICAg MCwgTlVMTCk7Ci0KLQkJCS8qIGluc2VydCBpbmRleCBlbnRyaWVzIGZvciB0dXBsZSAqLwotCQkJ aWYgKHJlc3VsdFJlbEluZm8tPnJpX051bUluZGljZXMgPiAwKQotCQkJCXJlY2hlY2tJbmRleGVz ID0gRXhlY0luc2VydEluZGV4VHVwbGVzKHJlc3VsdFJlbEluZm8sCi0JCQkJCQkJCQkJCQkJICAg c2xvdCwgZXN0YXRlLCBmYWxzZSwKLQkJCQkJCQkJCQkJCQkgICBmYWxzZSwgTlVMTCwgTklMLAot CQkJCQkJCQkJCQkJCSAgIGZhbHNlKTsKKwkJCWlmICh0YWJsZV9tb2RpZnlfc3RhdGUgIT0gTlVM TCkKKwkJCQl0YWJsZV9tb2RpZnlfYnVmZmVyX2luc2VydCh0YWJsZV9tb2RpZnlfc3RhdGUsIHNs b3QpOworCQkJZWxzZQorCQkJeworCQkJCS8qIGluc2VydCB0aGUgdHVwbGUgbm9ybWFsbHkgKi8K KwkJCQl0YWJsZV90dXBsZV9pbnNlcnQocmVzdWx0UmVsYXRpb25EZXNjLCBzbG90LAorCQkJCQkJ CQkgICBlc3RhdGUtPmVzX291dHB1dF9jaWQsCisJCQkJCQkJCSAgIDAsIE5VTEwpOworCisJCQkJ LyogaW5zZXJ0IGluZGV4IGVudHJpZXMgZm9yIHR1cGxlICovCisJCQkJaWYgKHJlc3VsdFJlbElu Zm8tPnJpX051bUluZGljZXMgPiAwKQorCQkJCQlyZWNoZWNrSW5kZXhlcyA9IEV4ZWNJbnNlcnRJ bmRleFR1cGxlcyhyZXN1bHRSZWxJbmZvLAorCQkJCQkJCQkJCQkJCQkgICBzbG90LCBlc3RhdGUs IGZhbHNlLAorCQkJCQkJCQkJCQkJCQkgICBmYWxzZSwgTlVMTCwgTklMLAorCQkJCQkJCQkJCQkJ CQkgICBmYWxzZSk7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTQ1ODYsNiArNDYzMywxMyBAQCBFeGVj SW5pdE1vZGlmeVRhYmxlKE1vZGlmeVRhYmxlICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVm bGFncykKIAltdHN0YXRlLT5tdF9tZXJnZUFjdGlvbkxpc3RzID0gbWVyZ2VBY3Rpb25MaXN0czsK IAltdHN0YXRlLT5tdF9tZXJnZUpvaW5Db25kaXRpb25zID0gbWVyZ2VKb2luQ29uZGl0aW9uczsK IAorCS8qCisJICogUHJldmlvdXMgTW9kaWZ5VGFibGUgbm9kZSBleGVjdXRpb24gKGlmIGFueSkg c2hvdWxkIGhhdmUgcmVsZWFzZWQKKwkgKiB0aGVzZSByZXNvdXJjZXMuCisJICovCisJQXNzZXJ0 KGluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQgPT0gTlVMTCAmJgorCQkgICB0YWJs ZV9tb2RpZnlfc3RhdGUgPT0gTlVMTCk7CisKIAkvKi0tLS0tLS0tLS0KIAkgKiBSZXNvbHZlIHRo ZSB0YXJnZXQgcmVsYXRpb24uIFRoaXMgaXMgdGhlIHNhbWUgYXM6CiAJICoKQEAgLTQ5OTksNiAr NTA1Myw4IEBAIEV4ZWNJbml0TW9kaWZ5VGFibGUoTW9kaWZ5VGFibGUgKm5vZGUsIEVTdGF0ZSAq ZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqCiAJICogV2Ugb25seSBkbyB0aGlzIGZvciBJTlNFUlQs IHNvIHRoYXQgZm9yIFVQREFURS9ERUxFVEUgdGhlIGJhdGNoIHNpemUKIAkgKiByZW1haW5zIHNl dCB0byAwLgorCSAqCisJICogQWxzbyBkZXRlcm1pbmUgd2hldGhlciB3ZSBjYW4gdXNlIGJhdGNo aW5nIGZvciB0aGlzIElOU0VSVCBjb21tYW5kLgogCSAqLwogCWlmIChvcGVyYXRpb24gPT0gQ01E X0lOU0VSVCkKIAl7CkBAIC01MDE2LDYgKzUwNzIsMjcgQEAgRXhlY0luaXRNb2RpZnlUYWJsZShN b2RpZnlUYWJsZSAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCX0KIAkJZWxz ZQogCQkJcmVzdWx0UmVsSW5mby0+cmlfQmF0Y2hTaXplID0gMTsKKworCQlpZiAoSXNNdWx0aUlu c2VydENhcGFibGUobXRzdGF0ZSkpCisJCXsKKwkJCWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNo X2NvbnRleHQgPQorCQkJCShJbnNlcnRNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQgKikgcGFsbG9j MChzaXplb2YoSW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0KSk7CisJCQlpbnNlcnRfbW9k aWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0LT5yZXN1bHRSZWxJbmZvID0gcmVzdWx0UmVsSW5mbzsK KwkJCWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQtPmVzdGF0ZSA9IGVzdGF0ZTsK KwkJCWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQtPm10c3RhdGUgPSBtdHN0YXRl OworCisJCQlBc3NlcnQoZXN0YXRlLT5lc19vdXRwdXRfY2lkICE9IEludmFsaWRDb21tYW5kSWQp OworCisJCQl0YWJsZV9tb2RpZnlfc3RhdGUgPQorCQkJCXRhYmxlX21vZGlmeV9iZWdpbihyZXN1 bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfb3V0cHV0 X2NpZCwKKwkJCQkJCQkJICAgMCwKKwkJCQkJCQkJICAgSW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hD YWxsYmFjaywKKwkJCQkJCQkJICAgaW5zZXJ0X21vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCk7 CisKKwkJLyogRm9yIG1vcmUgYWNjdXJhdGUgRVhQTEFJTiBvdXRwdXQgKi8KKwkJbm9kZS0+Y2Fu VXNlQmF0Y2hpbmcgPSB0cnVlOworCQl9CiAJfQogCiAJLyoKQEAgLTUwMzQsNiArNTExMSw5MCBA QCBFeGVjSW5pdE1vZGlmeVRhYmxlKE1vZGlmeVRhYmxlICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwg aW50IGVmbGFncykKIAlyZXR1cm4gbXRzdGF0ZTsKIH0KIAorLyoKKyAqIFJldHVybnMgdHJ1ZSBp ZiBiYXRjaCBpbnNlcnQgY2FuIGJlIHBlcmZvcm1lZCBpbiB0YWJsZSB3aGl0aGluIGN1cnJlbnQg cXVlcnkuCisgKiBXZSBpbXBvc2UgdGhlIGZvbGxvd2luZyBydWxlczoKKyAqIDEpIEJhdGNoaW5n IGlzIHN1cHBvcnRlZCBvbmx5IGZvciBvcmRpbmFyeSB0YWJsZXMgd2l0aG91dCBST1cgdHJpZ2dl cnMKKyAqIAkgIGFuZCB3aXRoIGFwcGVuZF9vcHRpbWl6ZWQgb3B0aW9uIHNldC4KKyAqIDIpIEJh dGNoaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHF1ZXJpZXMsIGNvbnRhaW5pbmcgUkVUVVJOSU5H IGNsYXVzZS4KKyAqIDMpIEJhdGNoaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHF1ZXJpZXMsIGNv bnRhaW5pbmcgYW55IHZvbGF0aWxlCisgKgkgIGZ1bmN0aW9ucyBpbiBwbGFuIHRyZWUuCisgKiA0 KSBCYXRjaGluZyBpcyBzdXBwb3J0ZWQgb25seSBmb3IgdGFibGVzLCB0aGF0IGhhc24ndCB2b2xh dGlsZSBkZWZhdWx0CisgKgkgIGV4cHJlc3Npb25zLgorICovCitzdGF0aWMgYm9vbAorSXNNdWx0 aUluc2VydENhcGFibGUoTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSkKK3sKKwlSZXN1bHRSZWxJ bmZvICpyZWxpbmZvID0gbXRzdGF0ZS0+cmVzdWx0UmVsSW5mbzsKKwlUdXBsZURlc2MgdGRlc2Mg PSBSZWxhdGlvbkdldERlc2NyKHJlbGluZm8tPnJpX1JlbGF0aW9uRGVzYyk7CisJYm9vbCBoYXNf cm93X3RyaWdnZXJzOworCisJQXNzZXJ0KG10c3RhdGUtPm9wZXJhdGlvbiA9PSBDTURfSU5TRVJU KTsKKworCWhhc19yb3dfdHJpZ2dlcnMgPQorCQkocmVsaW5mby0+cmlfVHJpZ0Rlc2MgIT0gTlVM TCAmJgorCQkocmVsaW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X2FmdGVyX3JvdyB8fAor CQkgcmVsaW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X2JlZm9yZV9yb3cgfHwKKwkJIHJl bGluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9pbnN0ZWFkX3JvdykpOworCisJLyogQ2hl Y2sgKDEpIC0gKDMpIGNvbmRpdGlvbnMuICovCisJaWYgKCFSZWxhdGlvbklzQXBwZW5kT3B0aW1p emVkKHJlbGluZm8tPnJpX1JlbGF0aW9uRGVzYykgfHwKKwkJcmVsaW5mby0+cmlfcHJvamVjdFJl dHVybmluZyB8fAorCQloYXNfcm93X3RyaWdnZXJzKQorCXsKKwkJcmV0dXJuIGZhbHNlOworCX0K KworCS8qIENoZWNrIGxhc3QgY29uZGl0aW9uLiAqLworCisJLyoKKwkgKiBCeSBkZWZhdWx0LCB0 aGlzIHZhcmlhYmxlIGlzIGNhbGN1bGF0ZWQgaW4gdGhlIGVuZCBvZiBFeGVjSW5pdE5vZGUKKwkg KiBwcm9jZXNzaW5nLCBidXQgd2UgbmVlZCBpdCBub3cuCisJICovCisJaWYgKChvdXRlclBsYW5T dGF0ZShtdHN0YXRlKSAhPSBOVUxMICYmCisJCSBvdXRlclBsYW5TdGF0ZShtdHN0YXRlKS0+aGFz X3ZvbGF0aWxlKSB8fAorCQkoaW5uZXJQbGFuU3RhdGUobXRzdGF0ZSkgIT0gTlVMTCAmJgorCQkg aW5uZXJQbGFuU3RhdGUobXRzdGF0ZSktPmhhc192b2xhdGlsZSkpCisJeworCQltdHN0YXRlLT5w cy5oYXNfdm9sYXRpbGUgPSB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZm9yIChBdHRy TnVtYmVyIGkgPSAwOyBpIDwgdGRlc2MtPm5hdHRzOyBpKyspCisJeworCQlOb2RlICpkZWZleHBy OworCQlpZiAoIVR1cGxlRGVzY0F0dHIodGRlc2MsIGkpLT5hdHRoYXNkZWYpCisJCQljb250aW51 ZTsKKworCQlkZWZleHByID0gVHVwbGVEZXNjR2V0RGVmYXVsdCh0ZGVzYywgaSArIDEpOworCQlp ZiAoY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnNfZXh0ZW5kZWQoZGVmZXhwciwKKwkJCQkJCQkJ CQkJCUNvbnRhaW5Wb2xhdGlsZUZ1bmN0aW9uc0NoZWNrZXIpKQorCQl7CisJCQlyZXR1cm4gZmFs c2U7CisJCX0KKwl9CisKKwkvKiBBbGwgY29uZGl0aW9ucyBhcmUgbWV0IC0gd2UgY2FuIHBlcmZv cm0gYmF0Y2ggaW5zZXJ0IG9uIHRhYmxlLiAqLworCXJldHVybiB0cnVlOworfQorCisvKgorICog U3VwcG9ydGl2ZSBmdW5jdGlvbiBmb3IgSXNNdWx0aUluc2VydENhcGFibGUuCisgKgorICogVG8g ZGVjaWRlIHdoZXRoZXIgd2UgY2FuIHVzZSBiYXRjaGluZywgd2Ugc2hvdWxkIGl0ZXJhdGUgYWNy b3NzIGFsbCBkZWZhdWx0CisgKiBleHByZXNzaW9ucyBpbiB0YXJnZXQgdGFibGUgYW5kIGNoZWNr IGlmIHRoZXkgY29udGFpbiBhbnkgdm9sYXRpbGUgZnVuY3Rpb25zLgorICoKKyAqIEJ1dCBub3Qg YWxsIGZ1bmN0aW9ucyBhcmUgY29uc2lkZXJlZCBkYW5nZXJvdXMgaW4gdGVybXMgb2YgYmF0Y2hp bmcuIFdlIGNhbgorICogYWxsb3cgc29tZSB2b2xhdGlsZSBmdW5jdGlvbnMgdG8gYXBwZWFyIGlu IGRlZmF1bHQgZXhwcmVzc2lvbnMuIEZvciBub3csIHdlCisgKiBvbmx5IGFsbG93IHRvIHVzZSBu ZXh0dmFsIChpbiBvcmRlciBub3QgdG8gZGlzbWlzcyBiYXRjaGluZyBpZiB0YXJnZXQgdGFibGUK KyAqIGhhcyBTRVJJQUwgZmlsZWQpLgorICovCitzdGF0aWMgYm9vbCBDb250YWluVm9sYXRpbGVG dW5jdGlvbnNDaGVja2VyKE9pZCBmdW5jX2lkLCB2b2lkICpjb250ZXh0KQoreworCXJldHVybiAo ZnVuY192b2xhdGlsZShmdW5jX2lkKSA9PSBQUk9WT0xBVElMRV9WT0xBVElMRSAmJgorCQkJZnVu Y19pZCAhPSBGX05FWFRWQUwpOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY0VuZE1vZGlmeVRh YmxlCiAgKgpAQCAtNTA0Nyw2ICs1MjA4LDE3IEBAIEV4ZWNFbmRNb2RpZnlUYWJsZShNb2RpZnlU YWJsZVN0YXRlICpub2RlKQogewogCWludAkJCWk7CiAKKwlpZiAodGFibGVfbW9kaWZ5X3N0YXRl ICE9IE5VTEwpCisJeworCQlBc3NlcnQobm9kZS0+b3BlcmF0aW9uID09IENNRF9JTlNFUlQpOwor CisJCXRhYmxlX21vZGlmeV9lbmQodGFibGVfbW9kaWZ5X3N0YXRlKTsKKwkJdGFibGVfbW9kaWZ5 X3N0YXRlID0gTlVMTDsKKworCQlwZnJlZShpbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250 ZXh0KTsKKwkJaW5zZXJ0X21vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCA9IE5VTEw7CisJfQor CiAJLyoKIAkgKiBBbGxvdyBhbnkgRkRXcyB0byBzaHV0IGRvd24KIAkgKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwppbmRleCBhOGYyMmE4YzE1NC4uN2JmMTNkZTFlOTMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTcxMzMsNiArNzEz Myw3IEBAIG1ha2VfbW9kaWZ5dGFibGUoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnN1YnBsYW4s CiAKIAlub2RlLT5vcGVyYXRpb24gPSBvcGVyYXRpb247CiAJbm9kZS0+Y2FuU2V0VGFnID0gY2Fu U2V0VGFnOworCW5vZGUtPmNhblVzZUJhdGNoaW5nID0gZmFsc2U7CiAJbm9kZS0+bm9taW5hbFJl bGF0aW9uID0gbm9taW5hbFJlbGF0aW9uOwogCW5vZGUtPnJvb3RSZWxhdGlvbiA9IHJvb3RSZWxh dGlvbjsKIAlub2RlLT5wYXJ0Q29sc1VwZGF0ZWQgPSBwYXJ0Q29sc1VwZGF0ZWQ7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKaW5kZXggMjZhM2UwNTAwODYuLjkxZWU4NWU5MTU3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCkBAIC0xNTcsNiArMTU3LDE0IEBAIHN0 YXRpYyBOb2RlICpzdWJzdGl0dXRlX2FjdHVhbF9zcmZfcGFyYW1ldGVyc19tdXRhdG9yKE5vZGUg Km5vZGUsCiAJCQkJCQkJCQkJCQkJICBzdWJzdGl0dXRlX2FjdHVhbF9zcmZfcGFyYW1ldGVyc19j b250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyBib29sIHB1bGxfcGFyYW1pZHNfd2Fsa2VyKE5vZGUg Km5vZGUsIEJpdG1hcHNldCAqKmNvbnRleHQpOwogCisvKgorICogQWxsb3cgdXNlciB0byBzdXBw bHkgc3BlY2lmaWMgY2hlY2tlciBmb3IgImNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zIiBjYWxs LgorICogSW4gZ2VuZXJhbCBpdCBpcyBub3QgdXNlZCwgYnV0IGZvciBleGFtcGxlIGFwcGVuZC1v cHRpbWl6ZWQgdGFibGVzIG5lZWRzIHRvCisgKiBpZ25vcmUgc29tZSB0eXBlcyBvZiB2b2xhdGls ZSBmdW5jdGlvbnMgZHVyaW5nIGRlZmF1bHQgZXhwcmVzc2lvbnMgY2hlY2suCisgKi8KKworc3Rh dGljIGJvb2wgY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnNfY2hlY2tlcihPaWQgZnVuY19pZCwg dm9pZCAqY29udGV4dCk7CitzdGF0aWMgY2hlY2tfZnVuY3Rpb25fY2FsbGJhY2sgY2hlY2tlciA9 IGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zX2NoZWNrZXI7CiAKIC8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgogICoJCUFnZ3JlZ2F0ZS1mdW5jdGlvbiBjbGF1c2UgbWFuaXB1bGF0aW9uCkBAIC01NDEs NiArNTQ5LDIzIEBAIGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKE5vZGUgKmNsYXVzZSkKIAly ZXR1cm4gY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnNfd2Fsa2VyKGNsYXVzZSwgTlVMTCk7CiB9 CiAKKy8qCisgKiBTYW1lIGFzIGFib3ZlLCBidXQgYWxsb3dzIHRvIHNwZWNpZnkgdXNlci1kZWZp bmVkIGNoZWNrX2Z1bmN0aW9uX2NhbGxiYWNrLgorICovCitib29sCitjb250YWluX3ZvbGF0aWxl X2Z1bmN0aW9uc19leHRlbmRlZChOb2RlICpjbGF1c2UsCisJCQkJCQkJCQljaGVja19mdW5jdGlv bl9jYWxsYmFjayB1ZF9jaGVja2VyKQoreworCWJvb2wgcmVzOworCWNoZWNrX2Z1bmN0aW9uX2Nh bGxiYWNrIHByZXZfY2hlY2tlciA9IGNoZWNrZXI7CisKKwljaGVja2VyID0gdWRfY2hlY2tlcjsK KwlyZXMgPSBjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9uc193YWxrZXIoY2xhdXNlLCBOVUxMKTsK KwljaGVja2VyID0gcHJldl9jaGVja2VyOworCisJcmV0dXJuIHJlczsKK30KKwogc3RhdGljIGJv b2wKIGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zX2NoZWNrZXIoT2lkIGZ1bmNfaWQsIHZvaWQg KmNvbnRleHQpCiB7CkBAIC01NTMsOCArNTc4LDcgQEAgY29udGFpbl92b2xhdGlsZV9mdW5jdGlv bnNfd2Fsa2VyKE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpCiAJaWYgKG5vZGUgPT0gTlVMTCkK IAkJcmV0dXJuIGZhbHNlOwogCS8qIENoZWNrIGZvciB2b2xhdGlsZSBmdW5jdGlvbnMgaW4gbm9k ZSBpdHNlbGYgKi8KLQlpZiAoY2hlY2tfZnVuY3Rpb25zX2luX25vZGUobm9kZSwgY29udGFpbl92 b2xhdGlsZV9mdW5jdGlvbnNfY2hlY2tlciwKLQkJCQkJCQkJY29udGV4dCkpCisJaWYgKGNoZWNr X2Z1bmN0aW9uc19pbl9ub2RlKG5vZGUsIGNoZWNrZXIsIGNvbnRleHQpKQogCQlyZXR1cm4gdHJ1 ZTsKIAogCWlmIChJc0Eobm9kZSwgTmV4dFZhbHVlRXhwcikpCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXgg ZTQ4ZmU0MzRjZDMuLjk2YjllOTI1ZTY2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv aGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0zMCw2ICszMCw3 IEBACiAjaW5jbHVkZSAic3RvcmFnZS9zaG1fdG9jLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2Fj aGUuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwc2hvdC5oIgorI2luY2x1ZGUgInV0aWxzL3R1cGxl c3RvcmUuaCIKIAogCiAvKiAib3B0aW9ucyIgZmxhZyBiaXRzIGZvciBoZWFwX2luc2VydCAqLwpA QCAtMjcwLDYgKzI3MSwzNSBAQCB0eXBlZGVmIGVudW0KIAlQUlVORV9WQUNVVU1fQ0xFQU5VUCwJ CS8qIFZBQ1VVTSAybmQgaGVhcCBwYXNzICovCiB9IFBydW5lUmVhc29uOwogCisvKgorICogTWF4 aW11bSBudW1iZXIgb2Ygc2xvdHMgdGhhdCBtdWx0aS1pbnNlcnQgYnVmZmVycyBjYW4gaG9sZC4K KyAqCisgKiBDYXV0aW9uOiBEb24ndCBtYWtlIHRoaXMgdG9vIGJpZywgYXMgd2UgY291bGQgZW5k IHVwIHdpdGggdGhpcyBtYW55IHR1cGxlcworICogc3RvcmVkIGluIG11bHRpIGluc2VydCBidWZm ZXIuCisgKi8KKyNkZWZpbmUgSEVBUF9NQVhfQlVGRkVSRURfU0xPVFMJCTEwMDAKKwordHlwZWRl ZiBzdHJ1Y3QgSGVhcE11bHRpSW5zZXJ0U3RhdGUKK3sKKwkvKiBBcnJheSBvZiBidWZmZXJlZCBz bG90cyAqLworCVR1cGxlVGFibGVTbG90ICoqc2xvdHM7CisKKwkvKiBIb2xkcyB0aGUgdHVwbGUg c2V0ICovCisJVHVwbGVzdG9yZXN0YXRlICp0c3RvcmU7CisKKwkvKiBOdW1iZXIgb2YgYnVmZmVy ZWQgdHVwbGVzIGN1cnJlbnRseSBoZWxkICovCisJaW50CQkJCW51c2VkOworCisJLyogTWVtb3J5 IGNvbnRleHQgZm9yIGRlYWxpbmcgd2l0aCBtdWx0aSBpbnNlcnRzICovCisJTWVtb3J5Q29udGV4 dCBtZW1fY3R4OworfSBIZWFwTXVsdGlJbnNlcnRTdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgSGVh cEluc2VydFN0YXRlCit7CisJc3RydWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEgKmJpc3RhdGU7CisJ SGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7Cit9IEhlYXBJbnNlcnRTdGF0ZTsKKwogLyog LS0tLS0tLS0tLS0tLS0tLQogICoJCWZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGhlYXAgYWNjZXNz IG1ldGhvZAogICoKQEAgLTMyMCw2ICszNTAsMTcgQEAgZXh0ZXJuIHZvaWQgaGVhcF9pbnNlcnQo UmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXAsIENvbW1hbmRJZCBjaWQsCiBleHRlcm4g dm9pZCBoZWFwX211bHRpX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgc3RydWN0IFR1cGxlVGFi bGVTbG90ICoqc2xvdHMsCiAJCQkJCQkJICBpbnQgbnR1cGxlcywgQ29tbWFuZElkIGNpZCwgaW50 IG9wdGlvbnMsCiAJCQkJCQkJICBCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSk7CisKK2V4dGVybiBU YWJsZU1vZGlmeVN0YXRlICpoZWFwX21vZGlmeV9iZWdpbihSZWxhdGlvbiByZWwsCisJCQkJCQkJ CQkJICAgQ29tbWFuZElkIGNpZCwKKwkJCQkJCQkJCQkgICBpbnQgb3B0aW9ucywKKwkJCQkJCQkJ CQkgICBUYWJsZU1vZGlmeUJ1ZmZlckZsdXNoQ2IgYnVmZmVyX2ZsdXNoX2NiLAorCQkJCQkJCQkJ CSAgIHZvaWQgKmJ1ZmZlcl9mbHVzaF9jdHgpOworZXh0ZXJuIHZvaWQgaGVhcF9tb2RpZnlfYnVm ZmVyX2luc2VydChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJCSAgVHVwbGVUYWJs ZVNsb3QgKnNsb3QpOworZXh0ZXJuIHZvaWQgaGVhcF9tb2RpZnlfYnVmZmVyX2ZsdXNoKFRhYmxl TW9kaWZ5U3RhdGUgKnN0YXRlKTsKK2V4dGVybiB2b2lkIGhlYXBfbW9kaWZ5X2VuZChUYWJsZU1v ZGlmeVN0YXRlICpzdGF0ZSk7CisKIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9kZWxldGUoUmVsYXRp b24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIHRpZCwKIAkJCQkJCQkgQ29tbWFuZElkIGNpZCwgU25h cHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAogCQkJCQkJCSBzdHJ1Y3QgVE1fRmFpbHVyZURh dGEgKnRtZmQsIGJvb2wgY2hhbmdpbmdQYXJ0KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IDg3MTNl MTJjYmZiLi4zOTQyNDYzYjcxNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCkBAIC0yNDgsMTIgKzI0OCw0 NCBAQCB0eXBlZGVmIHN0cnVjdCBUTV9JbmRleERlbGV0ZU9wCiAJVE1fSW5kZXhTdGF0dXMgKnN0 YXR1czsKIH0gVE1fSW5kZXhEZWxldGVPcDsKIAorc3RydWN0IFRhYmxlTW9kaWZ5U3RhdGU7CisK Ky8qIENhbGxiYWNrIGludm9rZWQgdXBvbiBmbHVzaGluZyBlYWNoIGJ1ZmZlcmVkIHR1cGxlICov Cit0eXBlZGVmIHZvaWQgKCpUYWJsZU1vZGlmeUJ1ZmZlckZsdXNoQ2IpICh2b2lkICpjb250ZXh0 LAorCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworCisvKiBIb2xkcyB0YWJsZSBt b2RpZnkgc3RhdGUgKi8KK3R5cGVkZWYgc3RydWN0IFRhYmxlTW9kaWZ5U3RhdGUKK3sKKwkvKiBU aGVzZSBmaWVsZHMgYXJlIHVzZWQgZm9yIGluc2VydHMgZm9yIG5vdyAqLworCisJUmVsYXRpb24J cmVsOwkJCS8qIFJlbGF0aW9uIHRvIGluc2VydCB0byAqLworCUNvbW1hbmRJZAljaWQ7CQkJLyog Q29tbWFuZCBJRCBmb3IgaW5zZXJ0ICovCisJaW50CQkJb3B0aW9uczsJCS8qIFRBQkxFX0lOU0VS VCBvcHRpb25zICovCisKKwkvKiBNZW1vcnkgY29udGV4dCBmb3IgZGVhbGluZyB3aXRoIG1vZGlm eSBzdGF0ZSB2YXJpYWJsZXMgKi8KKwlNZW1vcnlDb250ZXh0IG1lbV9jdHg7CisKKwkvKiBGbHVz aCBjYWxsYmFjayBhbmQgaXRzIGNvbnRleHQgdXNlZCBmb3IgbXVsdGkgaW5zZXJ0cyAqLworCVRh YmxlTW9kaWZ5QnVmZmVyRmx1c2hDYiBidWZmZXJfZmx1c2hfY2I7CisJdm9pZAkgICAqYnVmZmVy X2ZsdXNoX2N0eDsKKworCS8qIFRhYmxlIEFNIHNwZWNpZmljIGRhdGEgKi8KKwl2b2lkCSAgICpk YXRhOworfSBUYWJsZU1vZGlmeVN0YXRlOworCiAvKiAib3B0aW9ucyIgZmxhZyBiaXRzIGZvciB0 YWJsZV90dXBsZV9pbnNlcnQgKi8KIC8qIFRBQkxFX0lOU0VSVF9TS0lQX1dBTCB3YXMgMHgwMDAx OyBSZWxhdGlvbk5lZWRzV0FMKCkgbm93IGdvdmVybnMgKi8KICNkZWZpbmUgVEFCTEVfSU5TRVJU X1NLSVBfRlNNCQkweDAwMDIKICNkZWZpbmUgVEFCTEVfSU5TRVJUX0ZST1pFTgkJCTB4MDAwNAog I2RlZmluZSBUQUJMRV9JTlNFUlRfTk9fTE9HSUNBTAkJMHgwMDA4CiAKKy8qCisgKiBVc2UgQkFT X0JVTEtXUklURSBidWZmZXIgYWNjZXNzIHN0cmF0ZWd5LiAweDAwMTAgaXMgZm9yCisgKiBIRUFQ X0lOU0VSVF9TUEVDVUxBVElWRS4KKyAqLworI2RlZmluZSBUQUJMRV9JTlNFUlRfQkFTX0JVTEtX UklURQkweDAwMjAKKwogLyogZmxhZyBiaXRzIGZvciB0YWJsZV90dXBsZV9sb2NrICovCiAvKiBG b2xsb3cgdHVwbGVzIHdob3NlIHVwZGF0ZSBpcyBpbiBwcm9ncmVzcyBpZiBsb2NrIG1vZGVzIGRv bid0IGNvbmZsaWN0ICAqLwogI2RlZmluZSBUVVBMRV9MT0NLX0ZMQUdfTE9DS19VUERBVEVfSU5f UFJPR1JFU1MJKDEgPDwgMCkKQEAgLTU3MSw2ICs2MDMsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFi bGVBbVJvdXRpbmUKIAl2b2lkCQkoKmZpbmlzaF9idWxrX2luc2VydCkgKFJlbGF0aW9uIHJlbCwg aW50IG9wdGlvbnMpOwogCiAKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBUYWJsZSBNb2RpZnkg cmVsYXRlZCBmdW5jdGlvbnMuCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCisJVGFibGVNb2Rp ZnlTdGF0ZSAqKCp0dXBsZV9tb2RpZnlfYmVnaW4pIChSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJ CSBDb21tYW5kSWQgY2lkLAorCQkJCQkJCQkJCQkgaW50IG9wdGlvbnMsCisJCQkJCQkJCQkJCSBU YWJsZU1vZGlmeUJ1ZmZlckZsdXNoQ2IgYnVmZmVyX2ZsdXNoX2NiLAorCQkJCQkJCQkJCQkgdm9p ZCAqYnVmZmVyX2ZsdXNoX2N0eCk7CisJdm9pZAkJKCp0dXBsZV9tb2RpZnlfYnVmZmVyX2luc2Vy dCkgKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlLAorCQkJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xv dCAqc2xvdCk7CisJdm9pZAkJKCp0dXBsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKSAoVGFibGVNb2Rp ZnlTdGF0ZSAqc3RhdGUpOworCXZvaWQJCSgqdHVwbGVfbW9kaWZ5X2VuZCkgKFRhYmxlTW9kaWZ5 U3RhdGUgKnN0YXRlKTsKKworCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogRERMIHJlbGF0ZWQg ZnVuY3Rpb25hbGl0eS4KIAkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1NjAsNiArMTYwNyw0MyBA QCB0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQoUmVsYXRpb24gcmVsLCBpbnQgb3B0aW9ucykKIH0K IAogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRhYmxlIE1vZGlmeSByZWxhdGVkIGZ1bmN0aW9u cy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgaW5saW5lIFRhYmxlTW9kaWZ5U3Rh dGUgKgordGFibGVfbW9kaWZ5X2JlZ2luKFJlbGF0aW9uIHJlbCwKKwkJCQkgICBDb21tYW5kSWQg Y2lkLAorCQkJCSAgIGludCBvcHRpb25zLAorCQkJCSAgIFRhYmxlTW9kaWZ5QnVmZmVyRmx1c2hD YiBidWZmZXJfZmx1c2hfY2IsCisJCQkJICAgdm9pZCAqYnVmZmVyX2ZsdXNoX2N0eCkKK3sKKwly ZXR1cm4gcmVsLT5yZF90YWJsZWFtLT50dXBsZV9tb2RpZnlfYmVnaW4ocmVsLAorCQkJCQkJCQkJ CQkgICBjaWQsCisJCQkJCQkJCQkJCSAgIG9wdGlvbnMsCisJCQkJCQkJCQkJCSAgIGJ1ZmZlcl9m bHVzaF9jYiwKKwkJCQkJCQkJCQkJICAgYnVmZmVyX2ZsdXNoX2N0eCk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZAordGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoVGFibGVNb2RpZnlTdGF0ZSAq c3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0t PnR1cGxlX21vZGlmeV9idWZmZXJfaW5zZXJ0KHN0YXRlLCBzbG90KTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkCit0YWJsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKFRhYmxlTW9kaWZ5U3RhdGUgKnN0 YXRlKQoreworCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX21vZGlmeV9idWZmZXJfZmx1 c2goc3RhdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX21vZGlmeV9lbmQoVGFi bGVNb2RpZnlTdGF0ZSAqc3RhdGUpCit7CisJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVf bW9kaWZ5X2VuZChzdGF0ZSk7Cit9CisKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBEREwgcmVs YXRlZCBmdW5jdGlvbmFsaXR5LgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o CmluZGV4IDViNmNhZGI1YTZjLi5jYmQ3OTgxODdlYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAg LTEyMDAsNiArMTIwMCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBQbGFuU3RhdGUKIAogCWJvb2wJCWFz eW5jX2NhcGFibGU7CS8qIHRydWUgaWYgbm9kZSBpcyBhc3luYy1jYXBhYmxlICovCiAKKwkvKgor CSAqIFF1YWwgb2YgY3VycmVudCBub2RlIG9yIGFueSBxdWFsIG9mIG5vZGVzIGxvd2VyIGRvd24g dGhlIHBsYW4gdHJlZSBoYXMKKwkgKiBhdCBsZWFzdCBvbmUgdm9sYXRpbGUgZnVuY3Rpb24uCisJ ICovCisJYm9vbAkJaGFzX3ZvbGF0aWxlOworCiAJLyoKIAkgKiBTY2Fuc2xvdCdzIGRlc2NyaXB0 b3IgaWYga25vd24uIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLCBidXQgb3RoZXJ3aXNlCiAJICog aXQncyBoYXJkIGZvciBleHByZXNzaW9uIGNvbXBpbGF0aW9uIHRvIG9wdGltaXplIGJhc2VkIG9u IHRoZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCA2NThkNzYyMjVlNC4uM2EzODA0MGQ5OTEgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0yOTIsNiArMjkyLDggQEAgdHlwZWRlZiBzdHJ1Y3QgTW9k aWZ5VGFibGUKIAlDbWRUeXBlCQlvcGVyYXRpb247CiAJLyogZG8gd2Ugc2V0IHRoZSBjb21tYW5k IHRhZy9lc19wcm9jZXNzZWQ/ICovCiAJYm9vbAkJY2FuU2V0VGFnOworCS8qIGRvIHdlIHVzZSBi YXRjaGluZyBkdXJpbmcgSU5TRVJUPyAqLworCWJvb2wJCWNhblVzZUJhdGNoaW5nOwogCS8qIFBh cmVudCBSVCBpbmRleCBmb3IgdXNlIG9mIEVYUExBSU4gKi8KIAlJbmRleAkJbm9taW5hbFJlbGF0 aW9uOwogCS8qIFJvb3QgUlQgaW5kZXgsIGlmIHBhcnRpdGlvbmVkL2luaGVyaXRlZCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL29wdGltaXplci5oIGIvc3JjL2luY2x1ZGUv b3B0aW1pemVyL29wdGltaXplci5oCmluZGV4IDU0NjgyOGI1NGJkLi45YmRhMzRkMjFiYyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL29wdGltaXplci5oCisrKyBiL3NyYy9pbmNs dWRlL29wdGltaXplci9vcHRpbWl6ZXIuaApAQCAtMjIsNiArMjIsNyBAQAogI2lmbmRlZiBPUFRJ TUlaRVJfSAogI2RlZmluZSBPUFRJTUlaRVJfSAogCisjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNz LmgiCiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgogCiAvKgpAQCAtMTQyLDYgKzE0Myw4 IEBAIGV4dGVybiBFeHByICpjYW5vbmljYWxpemVfcXVhbChFeHByICpxdWFsLCBib29sIGlzX2No ZWNrKTsKIGV4dGVybiBib29sIGNvbnRhaW5fbXV0YWJsZV9mdW5jdGlvbnMoTm9kZSAqY2xhdXNl KTsKIGV4dGVybiBib29sIGNvbnRhaW5fbXV0YWJsZV9mdW5jdGlvbnNfYWZ0ZXJfcGxhbm5pbmco RXhwciAqZXhwcik7CiBleHRlcm4gYm9vbCBjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucyhOb2Rl ICpjbGF1c2UpOworZXh0ZXJuIGJvb2wgY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnNfZXh0ZW5k ZWQoTm9kZSAqY2xhdXNlLAorCQkJCQkJCQkJCQkJY2hlY2tfZnVuY3Rpb25fY2FsbGJhY2sgdWRf Y2hlY2tlcik7CiBleHRlcm4gYm9vbCBjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9uc19hZnRlcl9w bGFubmluZyhFeHByICpleHByKTsKIGV4dGVybiBib29sIGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rp b25zX25vdF9uZXh0dmFsKE5vZGUgKmNsYXVzZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL3JlbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKaW5kZXggYjU1MjM1OTkxNWYu LmU1NDg5NTRkODFkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAorKysgYi9z cmMvaW5jbHVkZS91dGlscy9yZWwuaApAQCAtMzQ4LDYgKzM0OCw3IEBAIHR5cGVkZWYgc3RydWN0 IFN0ZFJkT3B0aW9ucwogCVN0ZFJkT3B0SW5kZXhDbGVhbnVwIHZhY3V1bV9pbmRleF9jbGVhbnVw OwkvKiBjb250cm9scyBpbmRleCB2YWN1dW1pbmcgKi8KIAlib29sCQl2YWN1dW1fdHJ1bmNhdGU7 CS8qIGVuYWJsZXMgdmFjdXVtIHRvIHRydW5jYXRlIGEgcmVsYXRpb24gKi8KIAlib29sCQl2YWN1 dW1fdHJ1bmNhdGVfc2V0OwkvKiB3aGV0aGVyIHZhY3V1bV90cnVuY2F0ZSBpcyBzZXQgKi8KKwli b29sCQlhcHBlbmRfb3B0aW1pemVkOyAvKiB1c2Ugb3B0aW1pemVkIGluc2VydGlvbiBhbGdvcml0 aG0gKi8KIAogCS8qCiAJICogRnJhY3Rpb24gb2YgcGFnZXMgaW4gYSByZWxhdGlvbiB0aGF0IHZh Y3V1bSBjYW4gZWFnZXJseSBzY2FuIGFuZCBmYWlsCkBAIC0zNjcsNiArMzY4LDE1IEBAIHR5cGVk ZWYgc3RydWN0IFN0ZFJkT3B0aW9ucwogCSgocmVsYXRpb24pLT5yZF9vcHRpb25zID8gXAogCSAo KFN0ZFJkT3B0aW9ucyAqKSAocmVsYXRpb24pLT5yZF9vcHRpb25zKS0+dG9hc3RfdHVwbGVfdGFy Z2V0IDogKGRlZmF1bHR0YXJnKSkKIAorLyoKKyAqIFJlbGF0aW9uSXNBcHBlbmRPcHRpbWl6ZWQK KyAqCQlDaGVjayB3aGV0aGVyIHJlbGF0aW9uIGNhbiB1c2UgYmF0Y2hpbmcgZm9yIGluc2VydGlv bgorICovCisgI2RlZmluZSBSZWxhdGlvbklzQXBwZW5kT3B0aW1pemVkKHJlbGF0aW9uKSBcCisJ KEFzc2VydE1hY3JvKFJlbGF0aW9uSXNWYWxpZChyZWxhdGlvbikpLCBcCisJIChyZWxhdGlvbikt PnJkX29wdGlvbnMgPyBcCisJICgoU3RkUmRPcHRpb25zICopIChyZWxhdGlvbiktPnJkX29wdGlv bnMpLT5hcHBlbmRfb3B0aW1pemVkIDogZmFsc2UpCisKIC8qCiAgKiBSZWxhdGlvbkdldEZpbGxG YWN0b3IKICAqCQlSZXR1cm5zIHRoZSByZWxhdGlvbidzIGZpbGxmYWN0b3IuICBOb3RlIG11bHRp cGxlIGV2YWwgb2YgYXJndW1lbnQhCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2FwcGVuZF9vcHRpbWl6ZWQub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hcHBl bmRfb3B0aW1pemVkLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u NTdiNDVhMjBlNjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2FwcGVuZF9vcHRpbWl6ZWQub3V0CkBAIC0wLDAgKzEsMTYxIEBACistLSBOb3QgYWxsIElOU0VS VCBxdWVyaWVzIGFyZSBzdWl0YWJsZSBmb3IgdXNpbmcgYmF0Y2hpbmcuIEFsbCBjb25kaXRpb25z IGFyZQorLS0gbGlzdGVkIGluIG5vZGVNb2RpZnlUYWJsZS5jCistLSBJbiB0aGlzIHRlc3Qgd2Ug d2FudCB0byBjaGVjayB3aGV0aGVyIGFwcGVuZF9vcHRpbWl6ZWQgdGFibGUgY29ycmVjbHkKKy0t IGRldGVybWluZXMgd2hlbiB0byB1c2UgYmF0Y2hpbmcuCitDUkVBVEUgVEFCTEUgb3B0aW1pemVk X3RibCAoCisJaW50X2RhdGEgSU5UIERFRkFVTFQgcmFuZG9tKCkKKykgV0lUSCAoYXBwZW5kX29w dGltaXplZD10cnVlKTsKK0NSRUFURSBUQUJMRSByb3dzX3NvdXJjZSAoaW50X2RhdGEgSU5UKTsK K0lOU0VSVCBJTlRPIHJvd3Nfc291cmNlIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApOwor LS0gTXVzdCBub3QgdXNlIGJhdGNoaW5nIGhlcmUsIGJlY2F1c2Ugb3B0aW1pemVkX3RibCBoYXMg dm9sYXRpbGUgZnVuY3Rpb24KKy0tIHdoaXRoaW4gZGVmYXVsdCBleHByZXNzaW9uLgorRVhQTEFJ TiBJTlNFUlQgSU5UTyBvcHRpbWl6ZWRfdGJsCisJCVNFTEVDVCBpbnRfZGF0YSBGUk9NIHJvd3Nf c291cmNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbnNlcnQgb24gb3B0aW1pemVk X3RibCAgKGNvc3Q9MC4wMC4uMzUuNTAgcm93cz0wIHdpZHRoPTApCisgICAtPiAgU2VxIFNjYW4g b24gcm93c19zb3VyY2UgIChjb3N0PTAuMDAuLjM1LjUwIHJvd3M9MjU1MCB3aWR0aD00KQorKDIg cm93cykKKworLS0gTm93IGRlZmF1bHQgZXhwcmVzc2lvbiBub3QgcHJldmVudCB1cyBmcm9tIHVz aW5nIGJhdGNoaW5nLgorQUxURVIgVEFCTEUgb3B0aW1pemVkX3RibCBBTFRFUiBDT0xVTU4gaW50 X2RhdGEgU0VUIERFRkFVTFQgMDsKK0VYUExBSU4gSU5TRVJUIElOVE8gb3B0aW1pemVkX3RibAor CQlTRUxFQ1QgaW50X2RhdGEgRlJPTSByb3dzX3NvdXJjZTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgTXVsdGlJbnNlcnQgb24gb3B0aW1pemVkX3RibCAgKGNvc3Q9MC4wMC4uMzUuNTAg cm93cz0wIHdpZHRoPTApCisgICAtPiAgU2VxIFNjYW4gb24gcm93c19zb3VyY2UgIChjb3N0PTAu MDAuLjM1LjUwIHJvd3M9MjU1MCB3aWR0aD00KQorKDIgcm93cykKKworLS0gTXVzdCBub3QgdXNl IGJhdGNoaW5nIGhlcmUsIGJlY2F1c2UgV0hFUkUgY2xhdXNlIGNvbnRhaW5zIHZvbGF0aWxlIGZ1 bmN0aW9uLgorRVhQTEFJTiBJTlNFUlQgSU5UTyBvcHRpbWl6ZWRfdGJsCisJCVNFTEVDVCBpbnRf ZGF0YSBGUk9NIHJvd3Nfc291cmNlCisJCSBXSEVSRSBpbnRfZGF0YSA+IHJhbmRvbSgpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5zZXJ0IG9uIG9wdGltaXplZF90YmwgIChjb3N0PTAu MDAuLjU0LjYzIHJvd3M9MCB3aWR0aD0wKQorICAgLT4gIFNlcSBTY2FuIG9uIHJvd3Nfc291cmNl ICAoY29zdD0wLjAwLi41NC42MyByb3dzPTg1MCB3aWR0aD00KQorICAgICAgICAgRmlsdGVyOiAo KGludF9kYXRhKTo6ZG91YmxlIHByZWNpc2lvbiA+IHJhbmRvbSgpKQorKDMgcm93cykKKworLS0g Tm93IFdIRVJFIGNsYXVzZSBub3QgcHJldmVudCB1cyBmcm9tIHVzaW5nIGJhdGNoaW5nLgorRVhQ TEFJTiBJTlNFUlQgSU5UTyBvcHRpbWl6ZWRfdGJsCisJCVNFTEVDVCBpbnRfZGF0YSBGUk9NIHJv d3Nfc291cmNlCisJCSBXSEVSRSBpbnRfZGF0YSA+IDI7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBNdWx0aUluc2VydCBvbiBvcHRpbWl6ZWRfdGJsICAoY29zdD0wLjAwLi40MS44OCByb3dz PTAgd2lkdGg9MCkKKyAgIC0+ICBTZXEgU2NhbiBvbiByb3dzX3NvdXJjZSAgKGNvc3Q9MC4wMC4u NDEuODggcm93cz04NTAgd2lkdGg9NCkKKyAgICAgICAgIEZpbHRlcjogKGludF9kYXRhID4gMikK KygzIHJvd3MpCisKKy0tIENyZWF0ZSBST1cgdHJpZ2dlciBvbiBvcHRpbWl6ZWRfdGJsLgorQ1JF QVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gbXlfdHJpZ2dlcl9mdW5jdGlvbigpCitSRVRVUk5TIFRS SUdHRVIgQVMgJCQKK0JFR0lOCisgICAgTkVXLmludF9kYXRhIDo9IE5FVy5pbnRfZGF0YSAqIDEw OworICAgIFJFVFVSTiBORVc7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsOworQ1JFQVRFIFRS SUdHRVIgbXlfcm93X3RyaWdnZXIKK0JFRk9SRSBJTlNFUlQgT04gb3B0aW1pemVkX3RibAorRk9S IEVBQ0ggUk9XCitFWEVDVVRFIEZVTkNUSU9OIG15X3RyaWdnZXJfZnVuY3Rpb24oKTsKKy0tIE11 c3Qgbm90IHVzZSBiYXRjaGluZyBoZXJlLCBiZWNhdXNlIG9wdGltaXplZF90YmwgaGFzIFJPVyB0 cmlnZ2VyLgorRVhQTEFJTiBJTlNFUlQgSU5UTyBvcHRpbWl6ZWRfdGJsCisJCVNFTEVDVCBpbnRf ZGF0YSBGUk9NIHJvd3Nfc291cmNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbnNl cnQgb24gb3B0aW1pemVkX3RibCAgKGNvc3Q9MC4wMC4uMzUuNTAgcm93cz0wIHdpZHRoPTApCisg ICAtPiAgU2VxIFNjYW4gb24gcm93c19zb3VyY2UgIChjb3N0PTAuMDAuLjM1LjUwIHJvd3M9MjU1 MCB3aWR0aD00KQorKDIgcm93cykKKworRFJPUCBUUklHR0VSIG15X3Jvd190cmlnZ2VyIE9OIG9w dGltaXplZF90Ymw7CitEUk9QIEZVTkNUSU9OIG15X3RyaWdnZXJfZnVuY3Rpb24oKTsKKy0tIE11 c3Qgbm90IHVzZSBiYXRjaGluZyBoZXJlLCBiZWNhdXNlIFJFVFVSTklORyBjbGF1c2UgaXMgc3Bl Y2lmaWVkLgorRVhQTEFJTiBJTlNFUlQgSU5UTyBvcHRpbWl6ZWRfdGJsIFZBTFVFUyAoMTAwKSBS RVRVUk5JTkcgaW50X2RhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbnNlcnQgb24gb3B0aW1pemVkX3RibCAgKGNv c3Q9MC4wMC4uMC4wMSByb3dzPTEgd2lkdGg9NCkKKyAgIC0+ICBSZXN1bHQgIChjb3N0PTAuMDAu LjAuMDEgcm93cz0xIHdpZHRoPTQpCisoMiByb3dzKQorCistLSBOb3cgUkVUVVJOSU5HIG5vdCBw cmV2ZW50IHVzIGZyb20gdXNpbmcgYmF0Y2hpbmcuCitFWFBMQUlOIElOU0VSVCBJTlRPIG9wdGlt aXplZF90YmwgVkFMVUVTICgxMDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE11bHRpSW5zZXJ0IG9u IG9wdGltaXplZF90YmwgIChjb3N0PTAuMDAuLjAuMDEgcm93cz0wIHdpZHRoPTApCisgICAtPiAg UmVzdWx0ICAoY29zdD0wLjAwLi4wLjAxIHJvd3M9MSB3aWR0aD00KQorKDIgcm93cykKKworVFJV TkNBVEUgb3B0aW1pemVkX3RibDsKK0NSRUFURSBJTkRFWCBpZHhfdGVzdF9pbnRfZGF0YSBPTiBv cHRpbWl6ZWRfdGJsIChpbnRfZGF0YSk7CistLSBGaWxsIHNvdXJjZSB0YWJsZSB3aXRoIG1vcmUg ZGF0YSwgc28gdGhlcmUgd2lsbCBiZSBzZXZlcmFsIGJ1ZmZlcnMgZmx1c2hzCistLSBkdXJpbmcg SU5TRVJUIG9wcmF0aW9uLgorSU5TRVJUIElOVE8gcm93c19zb3VyY2UgU0VMRUNUIGdlbmVyYXRl X3NlcmllcygxMSwgMTAwMDApOworLS0gSXQgaXMgT0sgdG8gdXNlIGJhdGNoaW5nLgorRVhQTEFJ TiBJTlNFUlQgSU5UTyBvcHRpbWl6ZWRfdGJsCisJCVNFTEVDVCBpbnRfZGF0YSBGUk9NIHJvd3Nf c291cmNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTXVsdGlJbnNlcnQgb24g b3B0aW1pemVkX3RibCAgKGNvc3Q9MC4wMC4uMTU5Ljc1IHJvd3M9MCB3aWR0aD0wKQorICAgLT4g IFNlcSBTY2FuIG9uIHJvd3Nfc291cmNlICAoY29zdD0wLjAwLi4xNTkuNzUgcm93cz0xMTQ3NSB3 aWR0aD00KQorKDIgcm93cykKKworSU5TRVJUIElOVE8gb3B0aW1pemVkX3RibAorU0VMRUNUIGlu dF9kYXRhIEZST00gcm93c19zb3VyY2U7CistLSBDaGVjayB3aGV0aGVyIGJvdGggaW5kZXggYW5k IHRhYmxlIGNvbnRhaW5zIGFsbCBpbnNlcnRlZCByb3dzLgorU0VMRUNUIENPVU5UKCopIEZST00g b3B0aW1pemVkX3RibDsKKyBjb3VudCAKKy0tLS0tLS0KKyAxMDAwMAorKDEgcm93KQorCitBTkFM WVpFIG9wdGltaXplZF90Ymw7CitTRUxFQ1QgYy5yZWxuYW1lLCBjLnJlbHR1cGxlcworRlJPTSBw Z19jbGFzcyBjCitKT0lOIHBnX2luZGV4IGkgT04gYy5vaWQgPSBpLmluZGV4cmVsaWQKK1dIRVJF IGkuaW5kcmVsaWQgPSAnb3B0aW1pemVkX3RibCc6OnJlZ2NsYXNzOworICAgICAgcmVsbmFtZSAg ICAgIHwgcmVsdHVwbGVzIAorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLQorIGlkeF90 ZXN0X2ludF9kYXRhIHwgICAgIDEwMDAwCisoMSByb3cpCisKKy0tIFdlIGFsbG93IHRvIHVzZSBT RVJJQUwgZmllbGQgaW4gYXBwZW5kX29wdGltaXplZCB0YWJsZS4gQ2hlY2sgd2hldGhlciBzdWNo CistLSBmaWVsZHMgYmVoYXZlIGNvcnJlY3RseS4KK0NSRUFURSBUQUJMRSB0ZXN0X3NlcmlhbCgK KwlpZCBTRVJJQUwsCisJaW50X2RhdGEgSU5UCispIFdJVEggKGFwcGVuZF9vcHRpbWl6ZWQ9dHJ1 ZSk7CitDUkVBVEUgVEFCTEUgc21hbGxfc291cmNlKGludF9kYXRhIElOVCk7CitJTlNFUlQgSU5U TyBzbWFsbF9zb3VyY2UgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMCk7CitFWFBMQUlOIElO U0VSVCBJTlRPIHRlc3Rfc2VyaWFsKGludF9kYXRhKQorCQlTRUxFQ1QgaW50X2RhdGEgRlJPTSBz bWFsbF9zb3VyY2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTXVsdGlJbnNlcnQg b24gdGVzdF9zZXJpYWwgIChjb3N0PTAuMDAuLjQ4LjI1IHJvd3M9MCB3aWR0aD0wKQorICAgLT4g IFNlcSBTY2FuIG9uIHNtYWxsX3NvdXJjZSAgKGNvc3Q9MC4wMC4uNDguMjUgcm93cz0yNTUwIHdp ZHRoPTgpCisoMiByb3dzKQorCitJTlNFUlQgSU5UTyB0ZXN0X3NlcmlhbChpbnRfZGF0YSkKK1NF TEVDVCBpbnRfZGF0YSBGUk9NIHNtYWxsX3NvdXJjZTsKK1NFTEVDVCAqIEZST00gdGVzdF9zZXJp YWw7CisgaWQgfCBpbnRfZGF0YSAKKy0tLS0rLS0tLS0tLS0tLQorICAxIHwgICAgICAgIDEKKyAg MiB8ICAgICAgICAyCisgIDMgfCAgICAgICAgMworICA0IHwgICAgICAgIDQKKyAgNSB8ICAgICAg ICA1CisgIDYgfCAgICAgICAgNgorICA3IHwgICAgICAgIDcKKyAgOCB8ICAgICAgICA4CisgIDkg fCAgICAgICAgOQorIDEwIHwgICAgICAgMTAKKygxMCByb3dzKQorCistLSBDbGVhbnVwCitEUk9Q IFRBQkxFIG9wdGltaXplZF90Ymw7CitEUk9QIFRBQkxFIHJvd3Nfc291cmNlOworRFJPUCBUQUJM RSB0ZXN0X3NlcmlhbDsKK0RST1AgVEFCTEUgc21hbGxfc291cmNlOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxs ZWxfc2NoZWR1bGUKaW5kZXggMGEzNWYyZjhmNmEuLjBjZGE3MWEzNThkIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv cGFyYWxsZWxfc2NoZWR1bGUKQEAgLTEzNiwzICsxMzYsNSBAQCB0ZXN0OiBmYXN0X2RlZmF1bHQK ICMgcnVuIHRhYmxlc3BhY2UgdGVzdCBhdCB0aGUgZW5kIGJlY2F1c2UgaXQgZHJvcHMgdGhlIHRh Ymxlc3BhY2UgY3JlYXRlZCBkdXJpbmcKICMgc2V0dXAgdGhhdCBvdGhlciB0ZXN0cyBtYXkgdXNl LgogdGVzdDogdGFibGVzcGFjZQorCit0ZXN0OiBhcHBlbmRfb3B0aW1pemVkCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hcHBlbmRfb3B0aW1pemVkLnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2FwcGVuZF9vcHRpbWl6ZWQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5jZTNmZmFiMmQ1MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2FwcGVuZF9vcHRpbWl6ZWQuc3FsCkBAIC0wLDAgKzEsMTA1IEBACistLSBOb3Qg YWxsIElOU0VSVCBxdWVyaWVzIGFyZSBzdWl0YWJsZSBmb3IgdXNpbmcgYmF0Y2hpbmcuIEFsbCBj b25kaXRpb25zIGFyZQorLS0gbGlzdGVkIGluIG5vZGVNb2RpZnlUYWJsZS5jCistLSBJbiB0aGlz IHRlc3Qgd2Ugd2FudCB0byBjaGVjayB3aGV0aGVyIGFwcGVuZF9vcHRpbWl6ZWQgdGFibGUgY29y cmVjbHkKKy0tIGRldGVybWluZXMgd2hlbiB0byB1c2UgYmF0Y2hpbmcuCisKK0NSRUFURSBUQUJM RSBvcHRpbWl6ZWRfdGJsICgKKwlpbnRfZGF0YSBJTlQgREVGQVVMVCByYW5kb20oKQorKSBXSVRI IChhcHBlbmRfb3B0aW1pemVkPXRydWUpOworCitDUkVBVEUgVEFCTEUgcm93c19zb3VyY2UgKGlu dF9kYXRhIElOVCk7CitJTlNFUlQgSU5UTyByb3dzX3NvdXJjZSBTRUxFQ1QgZ2VuZXJhdGVfc2Vy aWVzKDEsIDEwKTsKKworLS0gTXVzdCBub3QgdXNlIGJhdGNoaW5nIGhlcmUsIGJlY2F1c2Ugb3B0 aW1pemVkX3RibCBoYXMgdm9sYXRpbGUgZnVuY3Rpb24KKy0tIHdoaXRoaW4gZGVmYXVsdCBleHBy ZXNzaW9uLgorRVhQTEFJTiBJTlNFUlQgSU5UTyBvcHRpbWl6ZWRfdGJsCisJCVNFTEVDVCBpbnRf ZGF0YSBGUk9NIHJvd3Nfc291cmNlOworCistLSBOb3cgZGVmYXVsdCBleHByZXNzaW9uIG5vdCBw cmV2ZW50IHVzIGZyb20gdXNpbmcgYmF0Y2hpbmcuCitBTFRFUiBUQUJMRSBvcHRpbWl6ZWRfdGJs IEFMVEVSIENPTFVNTiBpbnRfZGF0YSBTRVQgREVGQVVMVCAwOworRVhQTEFJTiBJTlNFUlQgSU5U TyBvcHRpbWl6ZWRfdGJsCisJCVNFTEVDVCBpbnRfZGF0YSBGUk9NIHJvd3Nfc291cmNlOworCist LSBNdXN0IG5vdCB1c2UgYmF0Y2hpbmcgaGVyZSwgYmVjYXVzZSBXSEVSRSBjbGF1c2UgY29udGFp bnMgdm9sYXRpbGUgZnVuY3Rpb24uCitFWFBMQUlOIElOU0VSVCBJTlRPIG9wdGltaXplZF90YmwK KwkJU0VMRUNUIGludF9kYXRhIEZST00gcm93c19zb3VyY2UKKwkJIFdIRVJFIGludF9kYXRhID4g cmFuZG9tKCk7CisKKy0tIE5vdyBXSEVSRSBjbGF1c2Ugbm90IHByZXZlbnQgdXMgZnJvbSB1c2lu ZyBiYXRjaGluZy4KK0VYUExBSU4gSU5TRVJUIElOVE8gb3B0aW1pemVkX3RibAorCQlTRUxFQ1Qg aW50X2RhdGEgRlJPTSByb3dzX3NvdXJjZQorCQkgV0hFUkUgaW50X2RhdGEgPiAyOworCistLSBD cmVhdGUgUk9XIHRyaWdnZXIgb24gb3B0aW1pemVkX3RibC4KK0NSRUFURSBPUiBSRVBMQUNFIEZV TkNUSU9OIG15X3RyaWdnZXJfZnVuY3Rpb24oKQorUkVUVVJOUyBUUklHR0VSIEFTICQkCitCRUdJ TgorICAgIE5FVy5pbnRfZGF0YSA6PSBORVcuaW50X2RhdGEgKiAxMDsKKyAgICBSRVRVUk4gTkVX OworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbDsKKworQ1JFQVRFIFRSSUdHRVIgbXlfcm93X3Ry aWdnZXIKK0JFRk9SRSBJTlNFUlQgT04gb3B0aW1pemVkX3RibAorRk9SIEVBQ0ggUk9XCitFWEVD VVRFIEZVTkNUSU9OIG15X3RyaWdnZXJfZnVuY3Rpb24oKTsKKworLS0gTXVzdCBub3QgdXNlIGJh dGNoaW5nIGhlcmUsIGJlY2F1c2Ugb3B0aW1pemVkX3RibCBoYXMgUk9XIHRyaWdnZXIuCitFWFBM QUlOIElOU0VSVCBJTlRPIG9wdGltaXplZF90YmwKKwkJU0VMRUNUIGludF9kYXRhIEZST00gcm93 c19zb3VyY2U7CisKK0RST1AgVFJJR0dFUiBteV9yb3dfdHJpZ2dlciBPTiBvcHRpbWl6ZWRfdGJs OworRFJPUCBGVU5DVElPTiBteV90cmlnZ2VyX2Z1bmN0aW9uKCk7CisKKy0tIE11c3Qgbm90IHVz ZSBiYXRjaGluZyBoZXJlLCBiZWNhdXNlIFJFVFVSTklORyBjbGF1c2UgaXMgc3BlY2lmaWVkLgor RVhQTEFJTiBJTlNFUlQgSU5UTyBvcHRpbWl6ZWRfdGJsIFZBTFVFUyAoMTAwKSBSRVRVUk5JTkcg aW50X2RhdGE7CisKKy0tIE5vdyBSRVRVUk5JTkcgbm90IHByZXZlbnQgdXMgZnJvbSB1c2luZyBi YXRjaGluZy4KK0VYUExBSU4gSU5TRVJUIElOVE8gb3B0aW1pemVkX3RibCBWQUxVRVMgKDEwMCk7 CisKK1RSVU5DQVRFIG9wdGltaXplZF90Ymw7CitDUkVBVEUgSU5ERVggaWR4X3Rlc3RfaW50X2Rh dGEgT04gb3B0aW1pemVkX3RibCAoaW50X2RhdGEpOworCistLSBGaWxsIHNvdXJjZSB0YWJsZSB3 aXRoIG1vcmUgZGF0YSwgc28gdGhlcmUgd2lsbCBiZSBzZXZlcmFsIGJ1ZmZlcnMgZmx1c2hzCist LSBkdXJpbmcgSU5TRVJUIG9wcmF0aW9uLgorSU5TRVJUIElOVE8gcm93c19zb3VyY2UgU0VMRUNU IGdlbmVyYXRlX3NlcmllcygxMSwgMTAwMDApOworCistLSBJdCBpcyBPSyB0byB1c2UgYmF0Y2hp bmcuCitFWFBMQUlOIElOU0VSVCBJTlRPIG9wdGltaXplZF90YmwKKwkJU0VMRUNUIGludF9kYXRh IEZST00gcm93c19zb3VyY2U7CisKK0lOU0VSVCBJTlRPIG9wdGltaXplZF90YmwKK1NFTEVDVCBp bnRfZGF0YSBGUk9NIHJvd3Nfc291cmNlOworCistLSBDaGVjayB3aGV0aGVyIGJvdGggaW5kZXgg YW5kIHRhYmxlIGNvbnRhaW5zIGFsbCBpbnNlcnRlZCByb3dzLgorU0VMRUNUIENPVU5UKCopIEZS T00gb3B0aW1pemVkX3RibDsKK0FOQUxZWkUgb3B0aW1pemVkX3RibDsKKworU0VMRUNUIGMucmVs bmFtZSwgYy5yZWx0dXBsZXMKK0ZST00gcGdfY2xhc3MgYworSk9JTiBwZ19pbmRleCBpIE9OIGMu b2lkID0gaS5pbmRleHJlbGlkCitXSEVSRSBpLmluZHJlbGlkID0gJ29wdGltaXplZF90YmwnOjpy ZWdjbGFzczsKKworLS0gV2UgYWxsb3cgdG8gdXNlIFNFUklBTCBmaWVsZCBpbiBhcHBlbmRfb3B0 aW1pemVkIHRhYmxlLiBDaGVjayB3aGV0aGVyIHN1Y2gKKy0tIGZpZWxkcyBiZWhhdmUgY29ycmVj dGx5LgorQ1JFQVRFIFRBQkxFIHRlc3Rfc2VyaWFsKAorCWlkIFNFUklBTCwKKwlpbnRfZGF0YSBJ TlQKKykgV0lUSCAoYXBwZW5kX29wdGltaXplZD10cnVlKTsKKworQ1JFQVRFIFRBQkxFIHNtYWxs X3NvdXJjZShpbnRfZGF0YSBJTlQpOworSU5TRVJUIElOVE8gc21hbGxfc291cmNlIFNFTEVDVCBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTApOworCitFWFBMQUlOIElOU0VSVCBJTlRPIHRlc3Rfc2VyaWFs KGludF9kYXRhKQorCQlTRUxFQ1QgaW50X2RhdGEgRlJPTSBzbWFsbF9zb3VyY2U7CisKK0lOU0VS VCBJTlRPIHRlc3Rfc2VyaWFsKGludF9kYXRhKQorU0VMRUNUIGludF9kYXRhIEZST00gc21hbGxf c291cmNlOworCitTRUxFQ1QgKiBGUk9NIHRlc3Rfc2VyaWFsOworCistLSBDbGVhbnVwCitEUk9Q IFRBQkxFIG9wdGltaXplZF90Ymw7CitEUk9QIFRBQkxFIHJvd3Nfc291cmNlOworRFJPUCBUQUJM RSB0ZXN0X3NlcmlhbDsKK0RST1AgVEFCTEUgc21hbGxfc291cmNlOwotLSAKMi40My4wCgo= --0000000000007ed94606322a5133--