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 1wDR3j-002xxj-0u for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Apr 2026 18:03:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wDR3f-006aRH-2m for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Apr 2026 18:03:19 +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 1wDR3f-006aR9-1T for pgsql-hackers@lists.postgresql.org; Thu, 16 Apr 2026 18:03:19 +0000 Received: from mail-vk1-xa35.google.com ([2607:f8b0:4864:20::a35]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wDR3c-00000001RgI-3Zoe for pgsql-hackers@postgresql.org; Thu, 16 Apr 2026 18:03:19 +0000 Received: by mail-vk1-xa35.google.com with SMTP id 71dfb90a1353d-56d93355337so5573640e0c.0 for ; Thu, 16 Apr 2026 11:03:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776362595; x=1776967395; darn=postgresql.org; h=in-reply-to:references:to:from:subject:message-id:date:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=7usBfhAV+VhgILF5karG3gENGezVLGFs0ySDZvXG6TQ=; b=sdcanUaMNuqGazxGyTxEElXbtR0k6VPGOdKE9IBnW2CKmsVe9W1RwkOxvcmHJKRrzz iNQ6X7KMH4kj5n/eZqNlXZ46khFyvTzQ8NylvmP87pDlrPvmM+jH2iR6y1mH9k1PIhm0 pr2Iow+QwWrsD2QqBq9UDFH7zayWKaId+vBlcdXziJNHt8ILbcOqbvjiFyxMe+ONbH/+ 3lQcswtr1WUVVenLLoY3YAINd7Cot+964iem1Sympk62Cc0p6uKca8XxonCBQxfCORM5 aOGg0mPaJ2DERlvfAD7UV7x21i6A6uQarP9tByfoLsgg4m6XolY4ZxbDPwvvuQfAiKIA PoXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776362595; x=1776967395; h=in-reply-to:references:to:from:subject:message-id:date:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=7usBfhAV+VhgILF5karG3gENGezVLGFs0ySDZvXG6TQ=; b=ANPdeOVDowNLSfMgmh7VWF5VLcgwaJ3pr5v0TrhUZhGuHAtyxFREqcQgi3SXx87XFs 8+Y0So/ie1ARkUT0XrFc7G1seUwjqGw5Bh+IvWlll+PtIvaIEz3WBCPHvPie/Xvj2Kwz uHxMmDcvSNb5jzWYvqI1Ah84gNRtGvwEKPQLfU0xWldKg8DC1TIWE8S3nYWET8fdYFVR NjOz3Z3hSwZxlveDH/HSHjxjQBdr22TQ+0WNz2AAODxvgt4Y0AzsCWBf0YAxZkrTRhpe IaVeKZKqSXFMmobsEOacb+zBtqqgistqGL/V3g05FJS8piGNNk7X69lVZY0eXvWGpP2J Sn2A== X-Forwarded-Encrypted: i=1; AFNElJ9dSx2arXhuFsN4XlFn7+NRr+U4RHX4EVG9bCmTYjIC1XaJMVPQ2d/ldaH9y6v8y6/YjjPTHdXRme/IJpz2@postgresql.org X-Gm-Message-State: AOJu0Yw5jjxaZpxuQFYUw74pOVz5hzAI4NFkGZrq0pJN2PLUyM0FixoB BlvFCJeYuf6R6y56OrfBX1diOx0vAnxeVa09E+1lVahk0sT7Ez3xEBzpJqOXrA== X-Gm-Gg: AeBDietA2vvA2s77CW5gNBWnoXxHfZCfg+DY196cJ3QVXbx15s1OBF3ZwgwNURi/HTt nIKFrpAlfBgrZ0oEnz5mjCCcPmo1+6BN+tCc6ruZS1R/px5kTzg1QQKvgGet5ZA1ukutjDDOMNE edT3cSRjdJHO2CfEM+Bve4Br9fMmiJnwHvM+m17t+fbnkr+UqkpAbNtHlUjdXUxRQCXiV36j+W8 JzFB4W4TjDtL9O1u4rhTi1ZsIK8GHblEr5S8Aq1feR3LcnVnOJ4VbFiU6i2YEky2nd89SvuoOxe uPc2o43T3gFZKQG/jJhKFd+k4jJ4baJvocUPoXgzP/+iXVBICmic2jznzM/I1EhuxQJZTsTub2b CSWLFErQ4EnB/G1+qv3CfAE9PdtezfBZQBpgT1Lb3msTlvbbl7adrWgacvXW5aGomN+IdFEfVSC yVh485VzAA6yFbWEqT4vdCWXsQQ75DNj7Zi6GVW1T4+mPrV8E0uUoFBA4U X-Received: by 2002:a05:6123:5c2:20b0:56f:1f3a:a7c8 with SMTP id 71dfb90a1353d-56fa37dd701mr209874e0c.0.1776362594981; Thu, 16 Apr 2026 11:03:14 -0700 (PDT) Received: from localhost ([2804:14d:328a:a59c:fceb:f096:129e:b270]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-56fa21246e3sm400573e0c.5.2026.04.16.11.03.12 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 16 Apr 2026 11:03:14 -0700 (PDT) Content-Type: multipart/mixed; boundary=b62bf606a0838675d66282bdc4268bba2edcc0ec5b0e236a487678b48b2c Mime-Version: 1.0 Date: Thu, 16 Apr 2026 15:03:11 -0300 Message-Id: Subject: Re: MERGE PARTITIONS and DEPENDS ON EXTENSION. From: "Matheus Alcantara" To: "Dmitry Koval" , "pgsql-hackers" X-Mailer: aerc 0.21.0 References: <31d04a1b-c0cb-4e6f-a344-0db048a3b673@gmail.com> <414c3430-77a9-438e-9dc0-c66033f6be63@postgrespro.ru> In-Reply-To: <414c3430-77a9-438e-9dc0-c66033f6be63@postgrespro.ru> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --b62bf606a0838675d66282bdc4268bba2edcc0ec5b0e236a487678b48b2c Content-Type: multipart/alternative; boundary=db2455d0cafce09eefa7e49d07ce9f6f3289ff547eb16cf507d3aa52d072 --db2455d0cafce09eefa7e49d07ce9f6f3289ff547eb16cf507d3aa52d072 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Tue Apr 14, 2026 at 6:05 AM -03, Dmitry Koval wrote: > Hi Matheus! > > Thank you for patch. > I agree that dependency should be automatically added for SPLIT=20 > PARTITION. But I'm not sure about MERGE PARTITION ... > Might be it would be more correct to automatically add a dependency only= =20 > if all merged partitions have it? Hi, Thank you for taking a look on this! I agree with your suggestion. The attached patch implements the intersection behavior for MERGE PARTITIONS: extension dependencies are only preserved on the merged partition's index if all source partition indexes have that dependency. For example: MERGE(idx1(ext_a, ext_b), idx2(ext_a)) -> idx3(ext_a) -- only ext_a is com= mon MERGE(idx1(ext_a), idx2()) -> idx3() -- no common deps For SPLIT PARTITION, the behavior remains the same since there's only one source partition, all its extension dependencies are copied to the new partition indexes. While working on this patch, I noticed what might be a separate bug (or perhaps intentional behavior that I don't understand): extension dependencies on parent partitioned indexes don't seem to prevent DROP EXTENSION, but dependencies on child partition indexes do. See this example: CREATE EXTENSION IF NOT EXISTS btree_gist; CREATE TABLE t (i int) PARTITION BY RANGE (i); CREATE TABLE t_1 PARTITION OF t FOR VALUES FROM (1) TO (2); CREATE INDEX t_idx ON t USING gist (i); -- Add dependency on the PARENT partitioned index ALTER INDEX t_idx DEPENDS ON EXTENSION btree_gist; -- This succeeds (I expected it to fail): DROP EXTENSION btree_gist; But if I add the dependency on the child partition index instead: ALTER INDEX t_1_i_idx DEPENDS ON EXTENSION btree_gist; DROP EXTENSION btree_gist; ERROR: cannot drop extension btree_gist because other objects depend on it DETAIL: index t_idx depends on operator class gist_int4_ops for access met= hod gist Is this expected behavior, or a separate bug? I would have expected the dependency on the parent index to also prevent the DROP. -- Matheus Alcantara EDB: https://www.enterprisedb.com --db2455d0cafce09eefa7e49d07ce9f6f3289ff547eb16cf507d3aa52d072-- --b62bf606a0838675d66282bdc4268bba2edcc0ec5b0e236a487678b48b2c Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v3-0001-Preserve-extension-dependencies-on-indexes-during.patch Content-Type: text/plain; charset=utf-8; name=v3-0001-Preserve-extension-dependencies-on-indexes-during.patch RnJvbSBkODk5OTJjYTEyODU4MDk1M2M4ODkzZDkzZmY1NzNiYjYwYjMyM2EwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFdlZCwgMTEgTWFyIDIwMjYgMTE6Mzk6NTYgLTAzMDAKU3ViamVjdDogW1BBVENIIHYzXSBQ cmVzZXJ2ZSBleHRlbnNpb24gZGVwZW5kZW5jaWVzIG9uIGluZGV4ZXMgZHVyaW5nCiBwYXJ0aXRp b24gbWVyZ2Uvc3BsaXQKCldoZW4gdXNpbmcgQUxURVIgVEFCTEUgLi4uIE1FUkdFIFBBUlRJVElP TlMgb3IgQUxURVIgVEFCTEUgLi4uIFNQTElUClBBUlRJVElPTiwgZXh0ZW5zaW9uIGRlcGVuZGVu Y2llcyBvbiBwYXJ0aXRpb24gaW5kZXhlcyAoY3JlYXRlZCB2aWEKQUxURVIgSU5ERVggLi4uIERF UEVORFMgT04gRVhURU5TSU9OKSB3ZXJlIGJlaW5nIGxvc3QuIFRoaXMgaGFwcGVuZWQKYmVjYXVz ZSB0aGUgbmV3IHBhcnRpdGlvbiBpbmRleGVzIGFyZSBjcmVhdGVkIGZyZXNoIGZyb20gdGhlIHBh cmVudApwYXJ0aXRpb25lZCB0YWJsZSdzIGluZGV4ZXMsIHdoaWxlIHRoZSBvbGQgcGFydGl0aW9u IGluZGV4ZXMgKHdpdGgKdGhlaXIgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcykgYXJlIGRyb3BwZWQu CgpGaXggdGhpcyBieSBjb2xsZWN0aW5nIGV4dGVuc2lvbiBkZXBlbmRlbmNpZXMgZnJvbSBzb3Vy Y2UgcGFydGl0aW9uCmluZGV4ZXMgYmVmb3JlIGRldGFjaGluZyB0aGVtLCB0aGVuIGFwcGx5aW5n IHRob3NlIGRlcGVuZGVuY2llcyB0bwp0aGUgY29ycmVzcG9uZGluZyBuZXcgcGFydGl0aW9uIGlu ZGV4ZXMgYWZ0ZXIgdGhleSdyZSBjcmVhdGVkLiBUaGUKbWFwcGluZyBiZXR3ZWVuIG9sZCBhbmQg bmV3IGluZGV4ZXMgaXMgZG9uZSB2aWEgdGhlaXIgY29tbW9uIHBhcmVudApwYXJ0aXRpb25lZCBp bmRleC4KCkZvciBNRVJHRSBvcGVyYXRpb25zLCBvbmx5IGV4dGVuc2lvbiBkZXBlbmRlbmNpZXMg dGhhdCBleGlzdCBvbiBBTEwKc291cmNlIHBhcnRpdGlvbiBpbmRleGVzIGFyZSBwcmVzZXJ2ZWQg b24gdGhlIG1lcmdlZCBwYXJ0aXRpb24ncyBpbmRleC4KRm9yIGV4YW1wbGU6CiAgTUVSR0UoaWR4 MShleHRfYSwgZXh0X2IpLCBpZHgyKGV4dF9hKSkgLT4gaWR4MyhleHRfYSkKICBNRVJHRShpZHgx KGV4dF9hKSwgaWR4MigpKSAtPiBpZHgzKCkgIC0tIG5vIGNvbW1vbiBkZXBzCgpGb3IgU1BMSVQg b3BlcmF0aW9ucywgdGhlIG5ldyBwYXJ0aXRpb24gaW5kZXhlcyBzaW1wbHkgaW5oZXJpdCBhbGwK ZXh0ZW5zaW9uIGRlcGVuZGVuY2llcyBmcm9tIHRoZSBzb3VyY2UgcGFydGl0aW9uJ3MgaW5kZXgu CgpBbHNvIGFkZHMgbGlzdF9pbnRlcnNlY3Rpb25fb2lkKCkgdG8gc3VwcG9ydCB0aGUgaW50ZXJz ZWN0aW9uIGxvZ2ljLgoKQXV0aG9yOiBNYXRoZXVzIEFsY2FudGFyYSA8bWF0aGV1c3NzaWx2OTdA Z21haWwuY29tPgpSZXBvcnRlZC1ieTogS2lyaWxsIFJlc2hrZQpSZXZpZXdlZC1ieTogRG1pdHJ5 IEtvdmFsIDxkLmtvdmFsQHBvc3RncmVzcHJvLnJ1PgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5w b3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBTGRTU1BqWHR6R003VWs0ZldSd1JNWGNDY3pnZTV1 TmlyUFFjWUNIS1BBV1BrcDlpUSU0MG1haWwuZ21haWwuY29tCi0tLQogZG9jL3NyYy9zZ21sL3Jl Zi9hbHRlcl90YWJsZS5zZ21sICAgICAgICAgICAgIHwgIDIwICsrCiBzcmMvYmFja2VuZC9jb21t YW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgfCAyNTEgKysrKysrKysrKysrKysrKysrCiBz cmMvYmFja2VuZC9ub2Rlcy9saXN0LmMgICAgICAgICAgICAgICAgICAgICAgfCAgMjYgKysKIHNy Yy9pbmNsdWRlL25vZGVzL3BnX2xpc3QuaCAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9tZXJnZS5vdXQgfCAxMDUgKysrKysrKysK IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3NwbGl0Lm91dCB8ICA0MSArKysK IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9tZXJnZS5zcWwgICAgICB8ICA5MiArKysr KysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fc3BsaXQuc3FsICAgICAgfCAgMzkg KysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDEg KwogOSBmaWxlcyBjaGFuZ2VkLCA1NzYgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9yZWYvYWx0ZXJfdGFibGUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfdGFi bGUuc2dtbAppbmRleCA0NTMzOTVjNWM3My4uNWRkZTNjZTU3ZjEgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9yZWYvYWx0ZXJfdGFibGUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVy X3RhYmxlLnNnbWwKQEAgLTEyNTUsNiArMTI1NSwxOCBAQCBXSVRIICggTU9EVUxVUyA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtZXJpY19saXRlcmFsPC9yZXBsYWNlYWJsZT4sIFJF TQogICAgICAgKHNlZSA8eHJlZiBsaW5rZW5kPSJkZGwtZGVwZW5kIi8+KS4KICAgICAgPC9wYXJh PgogCisgICAgIDxwYXJhPgorICAgICAgRXh0ZW5zaW9uIGRlcGVuZGVuY2llcyBvbiBwYXJ0aXRp b24gaW5kZXhlcyAoY3JlYXRlZCB2aWEKKyAgICAgIDxsaW5rIGxpbmtlbmQ9InNxbC1hbHRlcmlu ZGV4Ij48Y29tbWFuZD5BTFRFUiBJTkRFWCAuLi4gREVQRU5EUyBPTgorICAgICAgRVhURU5TSU9O PC9jb21tYW5kPjwvbGluaz4pIGFyZSBwcmVzZXJ2ZWQgZHVyaW5nIG1lcmdlIG9wZXJhdGlvbnMu CisgICAgICBXaGVuIG1lcmdpbmcgcGFydGl0aW9ucywgb25seSBleHRlbnNpb24gZGVwZW5kZW5j aWVzIHRoYXQgZXhpc3Qgb24KKyAgICAgIDxlbXBoYXNpcz5hbGw8L2VtcGhhc2lzPiBzb3VyY2Ug cGFydGl0aW9uIGluZGV4ZXMgYXJlIHByZXNlcnZlZCBvbgorICAgICAgdGhlIG1lcmdlZCBwYXJ0 aXRpb24ncyBjb3JyZXNwb25kaW5nIGluZGV4LiAgRm9yIGV4YW1wbGUsIGlmIHR3bworICAgICAg cGFydGl0aW9ucyBhcmUgbWVyZ2VkIGFuZCBvbmx5IG9uZSBwYXJ0aXRpb24ncyBpbmRleCBkZXBl bmRzIG9uIGFuCisgICAgICBleHRlbnNpb24sIHRoYXQgZGVwZW5kZW5jeSB3aWxsIG5vdCBiZSBj YXJyaWVkIG92ZXIgdG8gdGhlIG1lcmdlZAorICAgICAgcGFydGl0aW9uJ3MgaW5kZXguCisgICAg IDwvcGFyYT4KKwogICAgICA8bm90ZT4KICAgICAgIDxwYXJhPgogICAgICAgIE1lcmdpbmcgcGFy dGl0aW9ucyBhY3F1aXJlcyBhbiA8bGl0ZXJhbD5BQ0NFU1MgRVhDTFVTSVZFPC9saXRlcmFsPiBs b2NrIG9uCkBAIC0xMzQyLDYgKzEzNTQsMTQgQEAgV0lUSCAoIE1PRFVMVVMgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwvcmVwbGFjZWFibGU+LCBSRU0KICAg ICAgIHdvdWxkIGZhaWwgKHNlZSA8eHJlZiBsaW5rZW5kPSJkZGwtZGVwZW5kIi8+KS4KICAgICAg PC9wYXJhPgogCisgICAgIDxwYXJhPgorICAgICAgRXh0ZW5zaW9uIGRlcGVuZGVuY2llcyBvbiBw YXJ0aXRpb24gaW5kZXhlcyAoY3JlYXRlZCB2aWEKKyAgICAgIDxsaW5rIGxpbmtlbmQ9InNxbC1h bHRlcmluZGV4Ij48Y29tbWFuZD5BTFRFUiBJTkRFWCAuLi4gREVQRU5EUyBPTgorICAgICAgRVhU RU5TSU9OPC9jb21tYW5kPjwvbGluaz4pIGFyZSBwcmVzZXJ2ZWQgZHVyaW5nIHNwbGl0IG9wZXJh dGlvbnMuCisgICAgICBUaGUgbmV3IHBhcnRpdGlvbnMnIGluZGV4ZXMgd2lsbCBpbmhlcml0IHRo ZSBleHRlbnNpb24gZGVwZW5kZW5jaWVzCisgICAgICBmcm9tIHRoZSBzb3VyY2UgcGFydGl0aW9u J3MgaW5kZXhlcy4KKyAgICAgPC9wYXJhPgorCiAgICAgIDxub3RlPgogICAgICAgPHBhcmE+CiAg ICAgICAgU3BsaXQgcGFydGl0aW9uIGFjcXVpcmVzIGFuIDxsaXRlcmFsPkFDQ0VTUyBFWENMVVNJ VkU8L2xpdGVyYWw+IGxvY2sgb24KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Rh YmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggZWVjMDli YTFkZWQuLjE0YWRiMDg5ZGY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtNDAsNiAr NDAsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19jb25zdHJhaW50LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kZXBlbmQuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX2V4dGVuc2lvbl9kLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19m b3JlaWduX3RhYmxlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhlcml0cy5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfbGFyZ2VvYmplY3QuaCIKQEAgLTM2NSw2ICszNjYsMTkgQEAgdHlwZWRl ZiBlbnVtIGFkZEZrQ29uc3RyYWludFNpZGVzCiAJYWRkRmtCb3RoU2lkZXMsCiB9IGFkZEZrQ29u c3RyYWludFNpZGVzOwogCisvKgorICogSG9sZCBleHRlbnNpb24gZGVwZW5kZW5jaWVzIGZvciBh IHBhcnRpdGlvbmVkIGluZGV4LiBVc2VkIGJ5CisgKiBjb2xsZWN0UGFydGl0aW9uSW5kZXhFeHRE ZXBzIGFuZCBhcHBseVBhcnRpdGlvbkluZGV4RXh0RGVwcy4KKyAqCisgKiBFeHRlbnNpb24gZGVw ZW5kZW5jaWVzIGFyZSBjcmVhdGVkIG9uIHRoZSBuZXcgcGFydGl0aW9uIGJhc2VkCisgKiBvbiB0 aGUgaW5kZXhlcyB0aGF0IHNoYXJlIHRoZSBzYW1lIHBhcmVudCBpbmRleCBvaWQuCisgKi8KK3R5 cGVkZWYgc3RydWN0IFBhcnRpdGlvbkluZGV4RXh0RGVwRW50cnkKK3sKKwlPaWQJCQlwYXJlbnRJ bmRleE9pZDsgLyogT0lEIG9mIHRoZSBwYXJlbnQgcGFydGl0aW9uZWQgaW5kZXggKi8KKwlMaXN0 CSAgICpleHRlbnNpb25PaWRzOwkvKiBMaXN0IG9mIGV4dGVuc2lvbiBPSURzIHRoaXMgaW5kZXgg ZGVwZW5kcyAqLworfSBQYXJ0aXRpb25JbmRleEV4dERlcEVudHJ5OworCiAvKgogICogUGFydGl0 aW9uIHRhYmxlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgZHJvcHBlZCB3aGVuIHRoZSBwYXJlbnQgcGFy dGl0aW9uZWQKICAqIHRhYmxlIGdldHMgZHJvcHBlZC4gSGVuY2UgZm9yIHBhcnRpdGlvbmluZyB3 ZSB1c2UgQVVUTyBkZXBlbmRlbmN5LgpAQCAtNzYwLDYgKzc3NCw5IEBAIHN0YXRpYyB2b2lkIEFU RXhlY01lcmdlUGFydGl0aW9ucyhMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIs IFJlbGF0aW9uCiBzdGF0aWMgdm9pZCBBVEV4ZWNTcGxpdFBhcnRpdGlvbihMaXN0ICoqd3F1ZXVl LCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiAJCQkJCQkJCSBSZWxhdGlvbiByZWwsIFBhcnRpdGlv bkNtZCAqY21kLAogCQkJCQkJCQkgQWx0ZXJUYWJsZVV0aWxpdHlDb250ZXh0ICpjb250ZXh0KTsK K3N0YXRpYyBMaXN0ICpjb2xsZWN0UGFydGl0aW9uSW5kZXhFeHREZXBzKExpc3QgKnBhcnRpdGlv bk9pZHMpOworc3RhdGljIHZvaWQgYXBwbHlQYXJ0aXRpb25JbmRleEV4dERlcHMoT2lkIG5ld1Bh cnRPaWQsIExpc3QgKmV4dERlcFN0YXRlKTsKK3N0YXRpYyB2b2lkIGZyZWVQYXJ0aXRpb25JbmRl eEV4dERlcHMoTGlzdCAqZXh0RGVwU3RhdGUpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRGVmaW5lUmVs YXRpb24KQEAgLTIzMDAwLDYgKzIzMDE3LDIwMSBAQCBkZXRhY2hQYXJ0aXRpb25UYWJsZShSZWxh dGlvbiBwYXJlbnRfcmVsLCBSZWxhdGlvbiBjaGlsZF9yZWwsIE9pZCBkZWZhdWx0UGFydE9pZAog CVBvcEFjdGl2ZVNuYXBzaG90KCk7CiB9CiAKKy8qCisgKiBjb2xsZWN0UGFydGl0aW9uSW5kZXhF eHREZXBzOiBjb2xsZWN0IGV4dGVuc2lvbiBkZXBlbmRlbmNpZXMgZnJvbSBpbmRleGVzCisgKiBv biB0aGUgZ2l2ZW4gcGFydGl0aW9ucy4KKyAqCisgKiBGb3IgZWFjaCBwYXJ0aXRpb24gaW5kZXgg dGhhdCBoYXMgYSBwYXJlbnQgcGFydGl0aW9uZWQgaW5kZXgsIHdlIGNvbGxlY3QKKyAqIGV4dGVu c2lvbiBkZXBlbmRlbmNpZXMuIERlcGVuZGVuY2llcyBhcmUgc3RvcmVkIGdyb3VwZWQgYnkgcGFy ZW50IGluZGV4IE9JRC4KKyAqCisgKiBXaGVuIG11bHRpcGxlIHBhcnRpdGlvbnMgaGF2ZSBpbmRl eGVzIHdpdGggdGhlIHNhbWUgcGFyZW50LCBvbmx5IHRoZQorICogaW50ZXJzZWN0aW9uIG9mIHRo ZWlyIGV4dGVuc2lvbiBkZXBlbmRlbmNpZXMgaXMga2VwdC4gVGhpcyBlbnN1cmVzIHRoYXQKKyAq IGFmdGVyIG1lcmdlLCB0aGUgbmV3IHBhcnRpdGlvbidzIGluZGV4IG9ubHkgaGFzIGRlcGVuZGVu Y2llcyB0aGF0IEFMTAorICogc291cmNlIHBhcnRpdGlvbiBpbmRleGVzIGhhZC4gRm9yIGV4YW1w bGU6CisgKgorICogICBNRVJHRShJTkRFWDEoRVhUX0EsIEVYVF9CKSwgSU5ERVgyKEVYVF9BKSkg LT4gSU5ERVgzKEVYVF9BKQorICogICBNRVJHRShJTkRFWDEoRVhUX0EpLCBJTkRFWDIoKSkgLT4g SU5ERVgzKCkgIC0tIG5vIGNvbW1vbiBkZXBzCisgKgorICogSW5kZXhlcyB0aGF0IGRvbid0IGhh dmUgYSBwYXJlbnQgcGFydGl0aW9uZWQgaW5kZXggKGkuZS4sIGluZGV4ZXMgY3JlYXRlZAorICog ZGlyZWN0bHkgb24gYSBwYXJ0aXRpb24gd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgcGFyZW50IGlu ZGV4KSBhcmUgc2tpcHBlZC4KKyAqCisgKiBSZXR1cm5zIGEgbGlzdCBvZiBQYXJ0aXRpb25JbmRl eEV4dERlcEVudHJ5IHN0cnVjdHMuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2NvbGxlY3RQYXJ0aXRp b25JbmRleEV4dERlcHMoTGlzdCAqcGFydGl0aW9uT2lkcykKK3sKKwlMaXN0CSAgICpyZXN1bHQg PSBOSUw7CisKKwlmb3JlYWNoX29pZChwYXJ0T2lkLCBwYXJ0aXRpb25PaWRzKQorCXsKKwkJUmVs YXRpb24JcGFydFJlbDsKKwkJTGlzdAkgICAqaW5kZXhMaXN0OworCisJCS8qCisJCSAqIFVzZSBO b0xvY2sgc2luY2UgdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sg b24KKwkJICogdGhlc2UgcGFydGl0aW9ucy4KKwkJICovCisJCXBhcnRSZWwgPSB0YWJsZV9vcGVu KHBhcnRPaWQsIE5vTG9jayk7CisJCWluZGV4TGlzdCA9IFJlbGF0aW9uR2V0SW5kZXhMaXN0KHBh cnRSZWwpOworCisJCWZvcmVhY2hfb2lkKGluZGV4T2lkLCBpbmRleExpc3QpCisJCXsKKwkJCU9p ZAkJCXBhcmVudEluZGV4T2lkOworCQkJTGlzdAkgICAqZXh0RGVwczsKKwkJCVBhcnRpdGlvbklu ZGV4RXh0RGVwRW50cnkgKmVudHJ5ID0gTlVMTDsKKworCQkJLyogR2V0IHRoZSBwYXJlbnQgaW5k ZXggaWYgdGhpcyBpcyBhIHBhcnRpdGlvbiBpbmRleCAqLworCQkJaWYgKCFnZXRfcmVsX3JlbGlz cGFydGl0aW9uKGluZGV4T2lkKSkKKwkJCQljb250aW51ZTsKKworCQkJcGFyZW50SW5kZXhPaWQg PSBnZXRfcGFydGl0aW9uX3BhcmVudChpbmRleE9pZCwgdHJ1ZSk7CisJCQlpZiAoIU9pZElzVmFs aWQocGFyZW50SW5kZXhPaWQpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBHZXQgZXh0ZW5zaW9u IGRlcGVuZGVuY2llcyBmb3IgdGhpcyBpbmRleC4gKi8KKwkJCWV4dERlcHMgPSBnZXRBdXRvRXh0 ZW5zaW9uc09mT2JqZWN0KFJlbGF0aW9uUmVsYXRpb25JZCwgaW5kZXhPaWQpOworCisJCQkvKiBM b29rIGZvciBleGlzdGluZyBwYXJ0aXRpb24gZW50cnkgZm9yIHRoaXMgcGFyZW50IGluZGV4ICov CisJCQlmb3JlYWNoX3B0cihQYXJ0aXRpb25JbmRleEV4dERlcEVudHJ5LCBlLCByZXN1bHQpCisJ CQl7CisJCQkJaWYgKGUtPnBhcmVudEluZGV4T2lkID09IHBhcmVudEluZGV4T2lkKQorCQkJCXsK KwkJCQkJZW50cnkgPSBlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChleHRE ZXBzID09IE5JTCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFRoaXMgaW5kZXggaGFzIG5vIGV4dGVu c2lvbiBkZXBlbmRlbmNpZXMuIFNpbmNlIHdlIG9ubHkKKwkJCQkgKiBwcmVzZXJ2ZSBkZXBlbmRl bmNpZXMgdGhhdCBleGlzdCBvbiBBTEwgc291cmNlIHBhcnRpdGlvbgorCQkJCSAqIGluZGV4ZXMs IGZpbmRpbmcgb25lIGluZGV4IHdpdGhvdXQgZGVwcyBtZWFucyB0aGUgcmVzdWx0CisJCQkJICog Zm9yIHRoaXMgcGFyZW50IGluZGV4IG11c3QgYmUgZW1wdHkuCisJCQkJICovCisJCQkJaWYgKGVu dHJ5ICE9IE5VTEwpCisJCQkJeworCQkJCQlsaXN0X2ZyZWUoZW50cnktPmV4dGVuc2lvbk9pZHMp OworCQkJCQllbnRyeS0+ZXh0ZW5zaW9uT2lkcyA9IE5JTDsKKwkJCQl9CisJCQkJLyogTm8gbmVl ZCB0byBjcmVhdGUgYW4gZW50cnkgZm9yIG5vIGRlcHMgaWYgbm9uZSBleGlzdHMgKi8KKwkJCX0K KwkJCWVsc2UgaWYgKGVudHJ5ICE9IE5VTEwpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSBhbHJl YWR5IGhhdmUgYW4gZW50cnkgZm9yIHRoaXMgcGFyZW50IGluZGV4IGZyb20gYQorCQkJCSAqIHBy ZXZpb3VzIHBhcnRpdGlvbi4gQ29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uIHRvIGtlZXAgb25seQor CQkJCSAqIGRlcHMgdGhhdCBleGlzdCBvbiBib3RoLgorCQkJCSAqLworCQkJCUxpc3QJICAgKm9s ZCA9IGVudHJ5LT5leHRlbnNpb25PaWRzOworCisJCQkJZW50cnktPmV4dGVuc2lvbk9pZHMgPSBs aXN0X2ludGVyc2VjdGlvbl9vaWQob2xkLCBleHREZXBzKTsKKwkJCQlsaXN0X2ZyZWUob2xkKTsK KwkJCQlsaXN0X2ZyZWUoZXh0RGVwcyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJ CQkgKiBGaXJzdCBwYXJ0aXRpb24gaW5kZXggd2UndmUgc2VlbiBmb3IgdGhpcyBwYXJlbnQuIENy ZWF0ZSBhCisJCQkJICogbmV3IGVudHJ5IHdpdGggYWxsIGl0cyBkZXBlbmRlbmNpZXMgLSBzdWJz ZXF1ZW50IHBhcnRpdGlvbnMKKwkJCQkgKiB3aWxsIG5hcnJvdyB0aGlzIGRvd24gdmlhIGludGVy c2VjdGlvbi4KKwkJCQkgKi8KKwkJCQllbnRyeSA9IHBhbGxvYyhzaXplb2YoUGFydGl0aW9uSW5k ZXhFeHREZXBFbnRyeSkpOworCQkJCWVudHJ5LT5wYXJlbnRJbmRleE9pZCA9IHBhcmVudEluZGV4 T2lkOworCQkJCWVudHJ5LT5leHRlbnNpb25PaWRzID0gZXh0RGVwczsKKwkJCQlyZXN1bHQgPSBs YXBwZW5kKHJlc3VsdCwgZW50cnkpOworCQkJfQorCQl9CisKKwkJbGlzdF9mcmVlKGluZGV4TGlz dCk7CisJCXRhYmxlX2Nsb3NlKHBhcnRSZWwsIE5vTG9jayk7CisJfQorCisJcmV0dXJuIHJlc3Vs dDsKK30KKworLyoKKyAqIGFwcGx5UGFydGl0aW9uSW5kZXhFeHREZXBzOiBhcHBseSBjb2xsZWN0 ZWQgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcyB0bworICogaW5kZXhlcyBvbiBhIG5ldyBwYXJ0aXRp b24uCisgKgorICogRm9yIGVhY2ggaW5kZXggb24gdGhlIG5ldyBwYXJ0aXRpb24sIGxvb2sgdXAg aXRzIHBhcmVudCBpbmRleCBpbiB0aGUKKyAqIGV4dERlcFN0YXRlIGxpc3QuIElmIGZvdW5kLCBy ZWNvcmQgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcyBvbiB0aGUgbmV3IGluZGV4LgorICovCitzdGF0 aWMgdm9pZAorYXBwbHlQYXJ0aXRpb25JbmRleEV4dERlcHMoT2lkIG5ld1BhcnRPaWQsIExpc3Qg KmV4dERlcFN0YXRlKQoreworCVJlbGF0aW9uCXBhcnRSZWw7CisJTGlzdAkgICAqaW5kZXhMaXN0 OworCisJaWYgKGV4dERlcFN0YXRlID09IE5JTCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBVc2Ug Tm9Mb2NrIHNpbmNlIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyBBY2Nlc3NFeGNsdXNpdmVMb2Nr IG9uIHRoZQorCSAqIG5ldyBwYXJ0aXRpb24uCisJICovCisJcGFydFJlbCA9IHRhYmxlX29wZW4o bmV3UGFydE9pZCwgTm9Mb2NrKTsKKwlpbmRleExpc3QgPSBSZWxhdGlvbkdldEluZGV4TGlzdChw YXJ0UmVsKTsKKworCWZvcmVhY2hfb2lkKGluZGV4T2lkLCBpbmRleExpc3QpCisJeworCQlPaWQJ CQlwYXJlbnRJZHhPaWQ7CisJCUxpc3RDZWxsICAgKmxjOworCisJCS8qIFNraXAgaWYgdGhpcyBp cyBub3QgYSBwYXJ0aXRpb24gaW5kZXggKi8KKwkJaWYgKCFnZXRfcmVsX3JlbGlzcGFydGl0aW9u KGluZGV4T2lkKSkKKwkJCWNvbnRpbnVlOworCisJCXBhcmVudElkeE9pZCA9IGdldF9wYXJ0aXRp b25fcGFyZW50KGluZGV4T2lkLCB0cnVlKTsKKwkJaWYgKCFPaWRJc1ZhbGlkKHBhcmVudElkeE9p ZCkpCisJCQljb250aW51ZTsKKworCQkvKiBMb29rIGZvciBleHRlbnNpb24gZGVwZW5kZW5jaWVz IHRvIGFwcGx5ICovCisJCWZvcmVhY2gobGMsIGV4dERlcFN0YXRlKQorCQl7CisJCQlQYXJ0aXRp b25JbmRleEV4dERlcEVudHJ5ICplbnRyeSA9IGxmaXJzdChsYyk7CisKKwkJCWlmIChlbnRyeS0+ cGFyZW50SW5kZXhPaWQgPT0gcGFyZW50SWR4T2lkKQorCQkJeworCQkJCU9iamVjdEFkZHJlc3Mg aW5kZXhBZGRyOworCisJCQkJT2JqZWN0QWRkcmVzc1NldChpbmRleEFkZHIsIFJlbGF0aW9uUmVs YXRpb25JZCwgaW5kZXhPaWQpOworCisJCQkJZm9yZWFjaF9vaWQoZXh0T2lkLCBlbnRyeS0+ZXh0 ZW5zaW9uT2lkcykKKwkJCQl7CisJCQkJCU9iamVjdEFkZHJlc3MgZXh0QWRkcjsKKworCQkJCQlP YmplY3RBZGRyZXNzU2V0KGV4dEFkZHIsIEV4dGVuc2lvblJlbGF0aW9uSWQsIGV4dE9pZCk7CisJ CQkJCXJlY29yZERlcGVuZGVuY3lPbigmaW5kZXhBZGRyLCAmZXh0QWRkciwKKwkJCQkJCQkJCSAg IERFUEVOREVOQ1lfQVVUT19FWFRFTlNJT04pOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJ fQorCX0KKworCWxpc3RfZnJlZShpbmRleExpc3QpOworCXRhYmxlX2Nsb3NlKHBhcnRSZWwsIE5v TG9jayk7Cit9CisKKy8qCisgKiBmcmVlUGFydGl0aW9uSW5kZXhFeHREZXBzOiBmcmVlIG1lbW9y eSBhbGxvY2F0ZWQgYnkgY29sbGVjdFBhcnRpdGlvbkluZGV4RXh0RGVwcy4KKyAqLworc3RhdGlj IHZvaWQKK2ZyZWVQYXJ0aXRpb25JbmRleEV4dERlcHMoTGlzdCAqZXh0RGVwU3RhdGUpCit7CisJ TGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCBleHREZXBTdGF0ZSkKKwl7CisJCVBhcnRp dGlvbkluZGV4RXh0RGVwRW50cnkgKmVudHJ5ID0gbGZpcnN0KGxjKTsKKworCQlsaXN0X2ZyZWUo ZW50cnktPmV4dGVuc2lvbk9pZHMpOworCQlwZnJlZShlbnRyeSk7CisJfQorCWxpc3RfZnJlZShl eHREZXBTdGF0ZSk7Cit9CisKIC8qCiAgKiBBTFRFUiBUQUJMRSA8bmFtZT4gTUVSR0UgUEFSVElU SU9OUyA8cGFydGl0aW9uLWxpc3Q+IElOVE8gPHBhcnRpdGlvbi1uYW1lPgogICovCkBAIC0yMzAw OSw2ICsyMzIyMSw3IEBAIEFURXhlY01lcmdlUGFydGl0aW9ucyhMaXN0ICoqd3F1ZXVlLCBBbHRl cmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIHsKIAlSZWxhdGlvbgluZXdQYXJ0UmVs OwogCUxpc3QJICAgKm1lcmdpbmdQYXJ0aXRpb25zID0gTklMOworCUxpc3QJICAgKmV4dERlcFN0 YXRlID0gTklMOwogCU9pZAkJCWRlZmF1bHRQYXJ0T2lkOwogCU9pZAkJCWV4aXN0aW5nUmVsaWQ7 CiAJT2lkCQkJb3duZXJJZCA9IEludmFsaWRPaWQ7CkBAIC0yMzA5OCw2ICsyMzMxMSwxMyBAQCBB VEV4ZWNNZXJnZVBhcnRpdGlvbnMoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFi LCBSZWxhdGlvbiByZWwsCiAJZGVmYXVsdFBhcnRPaWQgPQogCQlnZXRfZGVmYXVsdF9vaWRfZnJv bV9wYXJ0ZGVzYyhSZWxhdGlvbkdldFBhcnRpdGlvbkRlc2MocmVsLCB0cnVlKSk7CiAKKwkvKgor CSAqIENvbGxlY3QgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcyBmcm9tIGluZGV4ZXMgb24gdGhlIG1l cmdpbmcgcGFydGl0aW9ucy4KKwkgKiBXZSBtdXN0IGRvIHRoaXMgYmVmb3JlIGRldGFjaGluZyB0 aGVtLCBzbyB3ZSBjYW4gcmVzdG9yZSB0aGUKKwkgKiBkZXBlbmRlbmNpZXMgb24gdGhlIG5ldyBw YXJ0aXRpb24ncyBpbmRleGVzIGxhdGVyLgorCSAqLworCWV4dERlcFN0YXRlID0gY29sbGVjdFBh cnRpdGlvbkluZGV4RXh0RGVwcyhtZXJnaW5nUGFydGl0aW9ucyk7CisKIAkvKiBEZXRhY2ggYWxs IG1lcmdpbmcgcGFydGl0aW9ucy4gKi8KIAlmb3JlYWNoX29pZChtZXJnaW5nUGFydGl0aW9uT2lk LCBtZXJnaW5nUGFydGl0aW9ucykKIAl7CkBAIC0yMzE3NSw2ICsyMzM5NSwxNSBAQCBBVEV4ZWNN ZXJnZVBhcnRpdGlvbnMoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxh dGlvbiByZWwsCiAJICovCiAJYXR0YWNoUGFydGl0aW9uVGFibGUoTlVMTCwgcmVsLCBuZXdQYXJ0 UmVsLCBjbWQtPmJvdW5kKTsKIAorCS8qCisJICogQXBwbHkgZXh0ZW5zaW9uIGRlcGVuZGVuY2ll cyB0byB0aGUgbmV3IHBhcnRpdGlvbidzIGluZGV4ZXMuIFRoaXMKKwkgKiBwcmVzZXJ2ZXMgYW55 ICJERVBFTkRTIE9OIEVYVEVOU0lPTiIgc2V0dGluZ3MgZnJvbSB0aGUgbWVyZ2VkCisJICogcGFy dGl0aW9ucy4KKwkgKi8KKwlhcHBseVBhcnRpdGlvbkluZGV4RXh0RGVwcyhSZWxhdGlvbkdldFJl bGlkKG5ld1BhcnRSZWwpLCBleHREZXBTdGF0ZSk7CisKKwlmcmVlUGFydGl0aW9uSW5kZXhFeHRE ZXBzKGV4dERlcFN0YXRlKTsKKwogCS8qIEtlZXAgdGhlIGxvY2sgdW50aWwgY29tbWl0LiAqLwog CXRhYmxlX2Nsb3NlKG5ld1BhcnRSZWwsIE5vTG9jayk7CiAKQEAgLTIzNDY5LDExICsyMzY5OCwx MyBAQCBBVEV4ZWNTcGxpdFBhcnRpdGlvbihMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZv ICp0YWIsIFJlbGF0aW9uIHJlbCwKIAlib29sCQlpc1NhbWVOYW1lID0gZmFsc2U7CiAJY2hhcgkJ dG1wUmVsTmFtZVtOQU1FREFUQUxFTl07CiAJTGlzdAkgICAqbmV3UGFydFJlbHMgPSBOSUw7CisJ TGlzdAkgICAqZXh0RGVwU3RhdGUgPSBOSUw7CiAJT2JqZWN0QWRkcmVzcyBvYmplY3Q7CiAJT2lk CQkJZGVmYXVsdFBhcnRPaWQ7CiAJT2lkCQkJc2F2ZV91c2VyaWQ7CiAJaW50CQkJc2F2ZV9zZWNf Y29udGV4dDsKIAlpbnQJCQlzYXZlX25lc3RsZXZlbDsKKwlMaXN0CSAgICpzcGxpdFBhcnRMaXN0 OwogCiAJZGVmYXVsdFBhcnRPaWQgPSBnZXRfZGVmYXVsdF9vaWRfZnJvbV9wYXJ0ZGVzYyhSZWxh dGlvbkdldFBhcnRpdGlvbkRlc2MocmVsLCB0cnVlKSk7CiAKQEAgLTIzNTA2LDYgKzIzNzM3LDE2 IEBAIEFURXhlY1NwbGl0UGFydGl0aW9uKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8g KnRhYiwgUmVsYXRpb24gcmVsLAogCQkJCQllcnJtc2coInJlbGF0aW9uIFwiJXNcIiBhbHJlYWR5 IGV4aXN0cyIsIHNwcy0+bmFtZS0+cmVsbmFtZSkpOwogCX0KIAorCS8qCisJICogQ29sbGVjdCBl eHRlbnNpb24gZGVwZW5kZW5jaWVzIGZyb20gaW5kZXhlcyBvbiB0aGUgc3BsaXQgcGFydGl0aW9u LiBXZQorCSAqIG11c3QgZG8gdGhpcyBiZWZvcmUgZGV0YWNoaW5nIGl0LCBzbyB3ZSBjYW4gcmVz dG9yZSB0aGUgZGVwZW5kZW5jaWVzIG9uCisJICogdGhlIG5ldyBwYXJ0aXRpb25zJyBpbmRleGVz IGxhdGVyLgorCSAqLworCXNwbGl0UGFydExpc3QgPSBsaXN0X21ha2UxX29pZChzcGxpdFJlbE9p ZCk7CisKKwlleHREZXBTdGF0ZSA9IGNvbGxlY3RQYXJ0aXRpb25JbmRleEV4dERlcHMoc3BsaXRQ YXJ0TGlzdCk7CisJbGlzdF9mcmVlKHNwbGl0UGFydExpc3QpOworCiAJLyogRGV0YWNoIHRoZSBz cGxpdCBwYXJ0aXRpb24uICovCiAJZGV0YWNoUGFydGl0aW9uVGFibGUocmVsLCBzcGxpdFJlbCwg ZGVmYXVsdFBhcnRPaWQpOwogCkBAIC0yMzU4NSwxMCArMjM4MjYsMjAgQEAgQVRFeGVjU3BsaXRQ YXJ0aXRpb24oTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiBy ZWwsCiAJCSAqIG5lZWRlZC4KIAkJICovCiAJCWF0dGFjaFBhcnRpdGlvblRhYmxlKE5VTEwsIHJl bCwgbmV3UGFydFJlbCwgc3BzLT5ib3VuZCk7CisKKwkJLyoKKwkJICogQXBwbHkgZXh0ZW5zaW9u IGRlcGVuZGVuY2llcyB0byB0aGUgbmV3IHBhcnRpdGlvbidzIGluZGV4ZXMuIFRoaXMKKwkJICog cHJlc2VydmVzIGFueSAiREVQRU5EUyBPTiBFWFRFTlNJT04iIHNldHRpbmdzIGZyb20gdGhlIHNw bGl0CisJCSAqIHBhcnRpdGlvbi4KKwkJICovCisJCWFwcGx5UGFydGl0aW9uSW5kZXhFeHREZXBz KFJlbGF0aW9uR2V0UmVsaWQobmV3UGFydFJlbCksIGV4dERlcFN0YXRlKTsKKwogCQkvKiBLZWVw IHRoZSBsb2NrIHVudGlsIGNvbW1pdC4gKi8KIAkJdGFibGVfY2xvc2UobmV3UGFydFJlbCwgTm9M b2NrKTsKIAl9CiAKKwlmcmVlUGFydGl0aW9uSW5kZXhFeHREZXBzKGV4dERlcFN0YXRlKTsKKwog CS8qIERyb3AgdGhlIHNwbGl0IHBhcnRpdGlvbi4gKi8KIAlvYmplY3QuY2xhc3NJZCA9IFJlbGF0 aW9uUmVsYXRpb25JZDsKIAlvYmplY3Qub2JqZWN0SWQgPSBzcGxpdFJlbE9pZDsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL25vZGVzL2xpc3QuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2xpc3QuYwpp bmRleCA5OGZjMmI0NGI1MC4uMGFmNjMzZGUxMzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25v ZGVzL2xpc3QuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9saXN0LmMKQEAgLTEyMTksNiArMTIx OSwzMiBAQCBsaXN0X2ludGVyc2VjdGlvbl9pbnQoY29uc3QgTGlzdCAqbGlzdDEsIGNvbnN0IExp c3QgKmxpc3QyKQogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBBcyBsaXN0X2ludGVyc2Vj dGlvbiBidXQgb3BlcmF0ZXMgb24gbGlzdHMgb2Ygb2lkcy4KKyAqLworTGlzdCAqCitsaXN0X2lu dGVyc2VjdGlvbl9vaWQoY29uc3QgTGlzdCAqbGlzdDEsIGNvbnN0IExpc3QgKmxpc3QyKQorewor CUxpc3QJICAgKnJlc3VsdDsKKwljb25zdCBMaXN0Q2VsbCAqY2VsbDsKKworCWlmIChsaXN0MSA9 PSBOSUwgfHwgbGlzdDIgPT0gTklMKQorCQlyZXR1cm4gTklMOworCisJQXNzZXJ0KElzT2lkTGlz dChsaXN0MSkpOworCUFzc2VydChJc09pZExpc3QobGlzdDIpKTsKKworCXJlc3VsdCA9IE5JTDsK Kwlmb3JlYWNoKGNlbGwsIGxpc3QxKQorCXsKKwkJaWYgKGxpc3RfbWVtYmVyX29pZChsaXN0Miwg bGZpcnN0X29pZChjZWxsKSkpCisJCQlyZXN1bHQgPSBsYXBwZW5kX29pZChyZXN1bHQsIGxmaXJz dF9vaWQoY2VsbCkpOworCX0KKworCWNoZWNrX2xpc3RfaW52YXJpYW50cyhyZXN1bHQpOworCXJl dHVybiByZXN1bHQ7Cit9CisKIC8qCiAgKiBSZXR1cm4gYSBsaXN0IHRoYXQgY29udGFpbnMgYWxs IHRoZSBjZWxscyBpbiBsaXN0MSB0aGF0IGFyZSBub3QgaW4KICAqIGxpc3QyLiBUaGUgcmV0dXJu ZWQgbGlzdCBpcyBmcmVzaGx5IGFsbG9jYXRlZCB2aWEgcGFsbG9jKCksIGJ1dCB0aGUKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BnX2xpc3QuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3Bn X2xpc3QuaAppbmRleCBlOTNiY2JmMjY5OC4uZTBmMjlhYTExMzkgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL3BnX2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wZ19saXN0LmgK QEAgLTY4MSw2ICs2ODEsNyBAQCBleHRlcm4gTGlzdCAqbGlzdF91bmlvbl9vaWQoY29uc3QgTGlz dCAqbGlzdDEsIGNvbnN0IExpc3QgKmxpc3QyKTsKIAogZXh0ZXJuIExpc3QgKmxpc3RfaW50ZXJz ZWN0aW9uKGNvbnN0IExpc3QgKmxpc3QxLCBjb25zdCBMaXN0ICpsaXN0Mik7CiBleHRlcm4gTGlz dCAqbGlzdF9pbnRlcnNlY3Rpb25faW50KGNvbnN0IExpc3QgKmxpc3QxLCBjb25zdCBMaXN0ICps aXN0Mik7CitleHRlcm4gTGlzdCAqbGlzdF9pbnRlcnNlY3Rpb25fb2lkKGNvbnN0IExpc3QgKmxp c3QxLCBjb25zdCBMaXN0ICpsaXN0Mik7CiAKIC8qIGN1cnJlbnRseSwgdGhlcmUncyBubyBuZWVk IGZvciBsaXN0X2ludGVyc2VjdGlvbl9wdHIgZXRjICovCiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX21lcmdlLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcGFydGl0aW9uX21lcmdlLm91dAppbmRleCA4ODMxMTBlMjVkOS4uYjI5ZjVmMmM3 NjQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX21lcmdl Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9tZXJnZS5vdXQK QEAgLTEwOTEsNiArMTA5MSwxMTEgQEAgU0VMRUNUIGNvdW50KCopIEZST00gdCBXSEVSRSBpID0g MTUgQU5EIGcgSU4gKFNFTEVDVCBnICsgMTAgRlJPTSB0IFdIRVJFIGkgPSA1KTsKICgxIHJvdykK IAogRFJPUCBUQUJMRSB0OworLS0KKy0tIFRlc3QgdGhhdCBleHRlbnNpb24gZGVwZW5kZW5jaWVz IG9uIHBhcnRpdGlvbiBpbmRleGVzIGFyZSBwcmVzZXJ2ZWQKKy0tIGFmdGVyIE1FUkdFIFBBUlRJ VElPTlMuCistLQorQ1JFQVRFIEVYVEVOU0lPTiBJRiBOT1QgRVhJU1RTIGJ0cmVlX2dpc3Q7CitD UkVBVEUgRVhURU5TSU9OIElGIE5PVCBFWElTVFMgYnRyZWVfZ2luOworQ1JFQVRFIFRBQkxFIHRf bWVyZ2VfZXh0ZGVwIChpIGludCwgeCBpbnQsIHkgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGkp OworQ1JFQVRFIFRBQkxFIHRfbWVyZ2VfZXh0ZGVwXzEgUEFSVElUSU9OIE9GIHRfbWVyZ2VfZXh0 ZGVwIEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDIpOworQ1JFQVRFIFRBQkxFIHRfbWVyZ2VfZXh0 ZGVwXzIgUEFSVElUSU9OIE9GIHRfbWVyZ2VfZXh0ZGVwIEZPUiBWQUxVRVMgRlJPTSAoMikgVE8g KDMpOworQ1JFQVRFIFRBQkxFIHRfbWVyZ2VfZXh0ZGVwXzMgUEFSVElUSU9OIE9GIHRfbWVyZ2Vf ZXh0ZGVwIEZPUiBWQUxVRVMgRlJPTSAoMykgVE8gKDQpOyAtLSBEb24ndCBoYXZlIGEgZGVwZW5k ZW5jeQorQ1JFQVRFIFRBQkxFIHRfbWVyZ2VfZXh0ZGVwXzQgUEFSVElUSU9OIE9GIHRfbWVyZ2Vf ZXh0ZGVwIEZPUiBWQUxVRVMgRlJPTSAoNCkgVE8gKDUpOworQ1JFQVRFIFRBQkxFIHRfbWVyZ2Vf ZXh0ZGVwXzUgUEFSVElUSU9OIE9GIHRfbWVyZ2VfZXh0ZGVwIEZPUiBWQUxVRVMgRlJPTSAoNSkg VE8gKDYpOworQ1JFQVRFIElOREVYIHRfbWVyZ2VfZXh0ZGVwX2lkeCBPTiB0X21lcmdlX2V4dGRl cCBVU0lORyBnaXN0IChpKTsKK0NSRUFURSBJTkRFWCB0X21lcmdlX2V4dGRlcF94IE9OIHRfbWVy Z2VfZXh0ZGVwIFVTSU5HIGdpc3QgKHgpOworLS0gQWRkIGV4dGVuc2lvbiBkZXBlbmRlbmN5IGZv ciBzb21lIHBhcnRpdGlvbiBpbmRleGVzCitBTFRFUiBJTkRFWCB0X21lcmdlX2V4dGRlcF8xX2lf aWR4IERFUEVORFMgT04gRVhURU5TSU9OIGJ0cmVlX2dpc3Q7CitBTFRFUiBJTkRFWCB0X21lcmdl X2V4dGRlcF8xX3hfaWR4IERFUEVORFMgT04gRVhURU5TSU9OIGJ0cmVlX2dpbjsKK0FMVEVSIElO REVYIHRfbWVyZ2VfZXh0ZGVwXzJfaV9pZHggREVQRU5EUyBPTiBFWFRFTlNJT04gYnRyZWVfZ2lz dDsKK0FMVEVSIElOREVYIHRfbWVyZ2VfZXh0ZGVwXzJfeF9pZHggREVQRU5EUyBPTiBFWFRFTlNJ T04gYnRyZWVfZ2luOworLS0gQWRkIGEgZGlmZmVyZW50IGV4dGVuc2lvbiBkZXBlbmRlbmN5IHRv IGVuc3VyZSB0aGF0IG9ubHkgaW5kZXhlcyB3aXRoIHRoZQorLS0gc2FtZSBkZXBlbmRlbmNpZXMg aGFzIHRoZSBkZXBlbmRlbmNpZXMgcHJlc2VydmVkLgorQUxURVIgSU5ERVggdF9tZXJnZV9leHRk ZXBfNF9pX2lkeCBERVBFTkRTIE9OIEVYVEVOU0lPTiBidHJlZV9naW47CitBTFRFUiBJTkRFWCB0 X21lcmdlX2V4dGRlcF80X3hfaWR4IERFUEVORFMgT04gRVhURU5TSU9OIGJ0cmVlX2dpbjsKKy0t IFNob3VsZCBmYWlsOiBkZXBlbmRlbmNpZXMgZXhpc3QKK0RST1AgRVhURU5TSU9OIGJ0cmVlX2dp c3Q7CitFUlJPUjogIGNhbm5vdCBkcm9wIGV4dGVuc2lvbiBidHJlZV9naXN0IGJlY2F1c2Ugb3Ro ZXIgb2JqZWN0cyBkZXBlbmQgb24gaXQKK0RFVEFJTDogIGluZGV4IHRfbWVyZ2VfZXh0ZGVwX2lk eCBkZXBlbmRzIG9uIG9wZXJhdG9yIGNsYXNzIGdpc3RfaW50NF9vcHMgZm9yIGFjY2VzcyBtZXRo b2QgZ2lzdAoraW5kZXggdF9tZXJnZV9leHRkZXBfeCBkZXBlbmRzIG9uIG9wZXJhdG9yIGNsYXNz IGdpc3RfaW50NF9vcHMgZm9yIGFjY2VzcyBtZXRob2QgZ2lzdAorSElOVDogIFVzZSBEUk9QIC4u LiBDQVNDQURFIHRvIGRyb3AgdGhlIGRlcGVuZGVudCBvYmplY3RzIHRvby4KKy0tIE1lcmdlIHBh cnRpdGlvbnMKK0FMVEVSIFRBQkxFIHRfbWVyZ2VfZXh0ZGVwIE1FUkdFIFBBUlRJVElPTlMgKHRf bWVyZ2VfZXh0ZGVwXzEsIHRfbWVyZ2VfZXh0ZGVwXzIpIElOVE8gdF9tZXJnZV9leHRkZXBfbWVy Z2VkOworLS0gU2hvdWxkIHN0aWxsIGZhaWw6IGRlcGVuZGVuY2llcyBzaG91bGQgYmUgcHJlc2Vy dmVkIG9uIHRoZSBuZXcgcGFydGl0aW9uJ3MgaW5kZXgKK0RST1AgRVhURU5TSU9OIGJ0cmVlX2dp c3Q7CitFUlJPUjogIGNhbm5vdCBkcm9wIGV4dGVuc2lvbiBidHJlZV9naXN0IGJlY2F1c2Ugb3Ro ZXIgb2JqZWN0cyBkZXBlbmQgb24gaXQKK0RFVEFJTDogIGluZGV4IHRfbWVyZ2VfZXh0ZGVwX2lk eCBkZXBlbmRzIG9uIG9wZXJhdG9yIGNsYXNzIGdpc3RfaW50NF9vcHMgZm9yIGFjY2VzcyBtZXRo b2QgZ2lzdAoraW5kZXggdF9tZXJnZV9leHRkZXBfeCBkZXBlbmRzIG9uIG9wZXJhdG9yIGNsYXNz IGdpc3RfaW50NF9vcHMgZm9yIGFjY2VzcyBtZXRob2QgZ2lzdAorSElOVDogIFVzZSBEUk9QIC4u LiBDQVNDQURFIHRvIGRyb3AgdGhlIGRlcGVuZGVudCBvYmplY3RzIHRvby4KKy0tIFZlcmlmeSB0 aGF0IGRlcGVuZGVuY2llcyBmb3IgYWxsIGluZGV4ZXMgZXhpc3RzIGluIHBnX2RlcGVuZAorU0VM RUNUIHJlbG5hbWUsIGV4dG5hbWUKK0ZST00gcGdfZGVwZW5kIGQKK0pPSU4gcGdfY2xhc3MgYyBP TiBkLm9iamlkID0gYy5vaWQKK0pPSU4gcGdfZXh0ZW5zaW9uIGUgT04gZC5yZWZvYmppZCA9IGUu b2lkCitXSEVSRSBjLnJlbG5hbWUgSU4gKCd0X21lcmdlX2V4dGRlcF9tZXJnZWRfaV9pZHgnLCAn dF9tZXJnZV9leHRkZXBfbWVyZ2VkX3hfaWR4JykKKyAgQU5EIGUuZXh0bmFtZSBJTiAoJ2J0cmVl X2dpc3QnLCAnYnRyZWVfZ2luJykKKyAgQU5EIGQuZGVwdHlwZSA9ICd4JworT1JERVIgQlkgcmVs bmFtZSwgZXh0bmFtZTsKKyAgICAgICAgICAgcmVsbmFtZSAgICAgICAgICAgfCAgZXh0bmFtZSAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgdF9tZXJnZV9l eHRkZXBfbWVyZ2VkX2lfaWR4IHwgYnRyZWVfZ2lzdAorIHRfbWVyZ2VfZXh0ZGVwX21lcmdlZF94 X2lkeCB8IGJ0cmVlX2dpbgorKDIgcm93cykKKworLS0gTWVyZ2UgYSBwYXJ0aXRpb24gd2l0aCBh IGRlcGVuZGVuY3kgd2l0aCBhIHBhcnRpdGlvbiB0aGF0IGRvbid0IGhhdmUgYQorLS0gZGVwZW5k ZW5jeS4gVGhlIG5ldyBtZXJnZWQgcGFydGl0aW9uIHNob3VsZCBub3QgaGF2ZSBhIGRlcGVuZGVu Y3kuCitBTFRFUiBUQUJMRSB0X21lcmdlX2V4dGRlcCBNRVJHRSBQQVJUSVRJT05TICh0X21lcmdl X2V4dGRlcF9tZXJnZWQsIHRfbWVyZ2VfZXh0ZGVwXzMpIElOVE8gdF9tZXJnZV9leHRkZXBfbWVy Z2VkMjsKK1NFTEVDVCBleHRuYW1lCitGUk9NIHBnX2RlcGVuZCBkCitKT0lOIHBnX2NsYXNzIGMg T04gZC5vYmppZCA9IGMub2lkCitKT0lOIHBnX2V4dGVuc2lvbiBlIE9OIGQucmVmb2JqaWQgPSBl Lm9pZAorV0hFUkUgYy5yZWxuYW1lIElOICgndF9tZXJnZV9leHRkZXBfbWVyZ2VkMl9pX2lkeCcs ICd0X21lcmdlX2V4dGRlcF9tZXJnZWQyX3hfaWR4JykKKyAgQU5EIGUuZXh0bmFtZSBJTiAoJ2J0 cmVlX2dpbicsICdidHJlZV9naXN0JykKKyAgQU5EIGQuZGVwdHlwZSA9ICd4JzsKKyBleHRuYW1l IAorLS0tLS0tLS0tCisoMCByb3dzKQorCistLSBNZXJnZSBwYXJ0aXRpb25zIHdpdGggZGlmZmVy ZW50IGRlcGVuZGVuY2llcyBhbmQgY2hlY2sgdGhhdCB0aGUgbmV3IG1lcmdlZAorLS0gcGFydGl0 aW9uIG9ubHkgaGF2ZSB0aGUgZGVwZW5kZW5jaWVzIHRoYXQgaW50ZXJzZWN0LgorQUxURVIgSU5E RVggdF9tZXJnZV9leHRkZXBfbWVyZ2VkMl9pX2lkeCBERVBFTkRTIE9OIEVYVEVOU0lPTiBidHJl ZV9naXN0OworQUxURVIgSU5ERVggdF9tZXJnZV9leHRkZXBfbWVyZ2VkMl94X2lkeCBERVBFTkRT IE9OIEVYVEVOU0lPTiBidHJlZV9naW47CitBTFRFUiBUQUJMRSB0X21lcmdlX2V4dGRlcCBNRVJH RSBQQVJUSVRJT05TICh0X21lcmdlX2V4dGRlcF9tZXJnZWQyLCB0X21lcmdlX2V4dGRlcF80KSBJ TlRPIHRfbWVyZ2VfZXh0ZGVwX21lcmdlZDM7CitTRUxFQ1QgcmVsbmFtZSwgZXh0bmFtZQorRlJP TSBwZ19kZXBlbmQgZAorSk9JTiBwZ19jbGFzcyBjIE9OIGQub2JqaWQgPSBjLm9pZAorSk9JTiBw Z19leHRlbnNpb24gZSBPTiBkLnJlZm9iamlkID0gZS5vaWQKK1dIRVJFIGMucmVsbmFtZSBJTiAo J3RfbWVyZ2VfZXh0ZGVwX21lcmdlZDNfaV9pZHgnLCAndF9tZXJnZV9leHRkZXBfbWVyZ2VkM194 X2lkeCcpCisgIEFORCBlLmV4dG5hbWUgSU4gKCdidHJlZV9naW4nLCAnYnRyZWVfZ2lzdCcpCisg IEFORCBkLmRlcHR5cGUgPSAneCcKK09SREVSIEJZIHJlbG5hbWUsIGV4dG5hbWU7CisgICAgICAg ICAgIHJlbG5hbWUgICAgICAgICAgICB8ICBleHRuYW1lICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLQorIHRfbWVyZ2VfZXh0ZGVwX21lcmdlZDNfeF9pZHggfCBi dHJlZV9naW4KKygxIHJvdykKKworLS0gQ3JlYXRlIGFuIGluZGV4IGRpcmVjdGx5IG9uIGEgcGFy dGl0aW9uICh3aXRob3V0IGEgcGFyZW50IHBhcnRpdGlvbmVkIGluZGV4KS4KKy0tIFN1Y2ggaW5k ZXhlcyBhcmUgbm90IHJlY3JlYXRlZCBvbiBtZXJnZSBiZWNhdXNlIHRoZXkgaGF2ZSBubyBwYXJl bnQgdG8gbWFwIHRvLgorLS0gVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgcGFydGl0aW9uLW9ubHkg aW5kZXhlcyBkb24ndCBjYXVzZSBpc3N1ZXMgZHVyaW5nIG1lcmdlLgorQ1JFQVRFIElOREVYIHRf bWVyZ2VfZXh0ZGVwXzVfeV9pZHggT04gdF9tZXJnZV9leHRkZXBfNSBVU0lORyBnaXN0KHkpOwor QUxURVIgVEFCTEUgdF9tZXJnZV9leHRkZXAgTUVSR0UgUEFSVElUSU9OUyAodF9tZXJnZV9leHRk ZXBfbWVyZ2VkMywgdF9tZXJnZV9leHRkZXBfNSkgSU5UTyB0X21lcmdlX2V4dGRlcF9tZXJnZWQ0 OworLS0gVGhlIHBhcnRpdGlvbi1vbmx5IGluZGV4IGlzIGRyb3BwZWQgd2l0aCBpdHMgcGFydGl0 aW9uOyBubyBjb3JyZXNwb25kaW5nCistLSBpbmRleCBleGlzdHMgb24gdGhlIG1lcmdlZCBwYXJ0 aXRpb24gc2luY2UgdGhlcmUncyBubyBwYXJlbnQgaW5kZXguCitTRUxFQ1QgcmVsbmFtZQorRlJP TSBwZ19jbGFzcworV0hFUkUgcmVsbmFtZSBMSUtFICd0X21lcmdlX2V4dGRlcF9tZXJnZWQ0JWlk eCcKK09SREVSIEJZIHJlbG5hbWU7CisgICAgICAgICAgIHJlbG5hbWUgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHRfbWVyZ2VfZXh0ZGVwX21lcmdlZDRfaV9p ZHgKKyB0X21lcmdlX2V4dGRlcF9tZXJnZWQ0X3hfaWR4CisoMiByb3dzKQorCistLSBDbGVhbiB1 cAorRFJPUCBUQUJMRSB0X21lcmdlX2V4dGRlcDsKK0RST1AgRVhURU5TSU9OIGJ0cmVlX2dpc3Q7 CitEUk9QIEVYVEVOU0lPTiBidHJlZV9naW47CiBSRVNFVCBzZWFyY2hfcGF0aDsKIC0tCiBEUk9Q IFNDSEVNQSBwYXJ0aXRpb25zX21lcmdlX3NjaGVtYTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3NwbGl0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcGFydGl0aW9uX3NwbGl0Lm91dAppbmRleCA0M2NhMjk5NjQ4ZS4uNTc0MTE5YzExYTcg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3NwbGl0Lm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9zcGxpdC5vdXQKQEAg LTE1ODksNiArMTU4OSw0NyBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSB0IFdIRVJFIGkgPSAwIEFO RCB0YWJfaWQgSU4gKFNFTEVDVCB0YWJfaWQgRlJPTSB0IFdIRVJFIGkgPQogKDEgcm93KQogCiBE Uk9QIFRBQkxFIHQ7CistLQorLS0gVGVzdCB0aGF0IGV4dGVuc2lvbiBkZXBlbmRlbmNpZXMgb24g cGFydGl0aW9uIGluZGV4ZXMgYXJlIHByZXNlcnZlZAorLS0gYWZ0ZXIgU1BMSVQgUEFSVElUSU9O LgorLS0KK0NSRUFURSBFWFRFTlNJT04gY2l0ZXh0OworQ1JFQVRFIFRBQkxFIHRfZXh0ZGVwIChp IGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChpKTsKK0NSRUFURSBUQUJMRSB0X2V4dGRlcF8xXzMg UEFSVElUSU9OIE9GIHRfZXh0ZGVwIEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDMpOworQ1JFQVRF IElOREVYIHRfZXh0ZGVwX2lkeCBPTiB0X2V4dGRlcCAoaSk7CistLSBBZGQgZXh0ZW5zaW9uIGRl cGVuZGVuY3kgb24gcGFydGl0aW9uIGluZGV4CitBTFRFUiBJTkRFWCB0X2V4dGRlcF8xXzNfaV9p ZHggREVQRU5EUyBPTiBFWFRFTlNJT04gY2l0ZXh0OworLS0gU2hvdWxkIGZhaWw6IGRlcGVuZGVu Y3kgZXhpc3RzCitEUk9QIEVYVEVOU0lPTiBjaXRleHQ7CitFUlJPUjogIGNhbm5vdCBkcm9wIGlu ZGV4IHRfZXh0ZGVwXzFfM19pX2lkeCBiZWNhdXNlIGluZGV4IHRfZXh0ZGVwX2lkeCByZXF1aXJl cyBpdAorSElOVDogIFlvdSBjYW4gZHJvcCBpbmRleCB0X2V4dGRlcF9pZHggaW5zdGVhZC4KKy0t IFNwbGl0IHBhcnRpdGlvbgorQUxURVIgVEFCTEUgdF9leHRkZXAgU1BMSVQgUEFSVElUSU9OIHRf ZXh0ZGVwXzFfMyBJTlRPCisgIChQQVJUSVRJT04gdF9leHRkZXBfMSBGT1IgVkFMVUVTIEZST00g KDEpIFRPICgyKSwKKyAgIFBBUlRJVElPTiB0X2V4dGRlcF8yIEZPUiBWQUxVRVMgRlJPTSAoMikg VE8gKDMpKTsKKy0tIFNob3VsZCBzdGlsbCBmYWlsOiBkZXBlbmRlbmNpZXMgc2hvdWxkIGJlIHBy ZXNlcnZlZCBvbiBhbGwgbmV3IHBhcnRpdGlvbnMnIGluZGV4ZXMKK0RST1AgRVhURU5TSU9OIGNp dGV4dDsKK0VSUk9SOiAgY2Fubm90IGRyb3AgaW5kZXggdF9leHRkZXBfMl9pX2lkeCBiZWNhdXNl IGluZGV4IHRfZXh0ZGVwX2lkeCByZXF1aXJlcyBpdAorSElOVDogIFlvdSBjYW4gZHJvcCBpbmRl eCB0X2V4dGRlcF9pZHggaW5zdGVhZC4KKy0tIFZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGV4aXN0 IGluIHBnX2RlcGVuZCBmb3IgYm90aCBuZXcgcGFydGl0aW9ucworU0VMRUNUIGMucmVsbmFtZSwg Q09VTlQoKikgPiAwIEFTIGhhc19leHRfZGVwCitGUk9NIHBnX2RlcGVuZCBkCitKT0lOIHBnX2Ns YXNzIGMgT04gZC5vYmppZCA9IGMub2lkCitKT0lOIHBnX2V4dGVuc2lvbiBlIE9OIGQucmVmb2Jq aWQgPSBlLm9pZAorV0hFUkUgYy5yZWxuYW1lIElOICgndF9leHRkZXBfMV9pX2lkeCcsICd0X2V4 dGRlcF8yX2lfaWR4JykKKyAgQU5EIGUuZXh0bmFtZSA9ICdjaXRleHQnCisgIEFORCBkLmRlcHR5 cGUgPSAneCcKK0dST1VQIEJZIGMucmVsbmFtZQorT1JERVIgQlkgYy5yZWxuYW1lOworICAgICBy ZWxuYW1lICAgICAgfCBoYXNfZXh0X2RlcCAKKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tCisgdF9leHRkZXBfMV9pX2lkeCB8IHQKKyB0X2V4dGRlcF8yX2lfaWR4IHwgdAorKDIgcm93 cykKKworLS0gQ2xlYW4gdXAKK0RST1AgVEFCTEUgdF9leHRkZXA7CitEUk9QIEVYVEVOU0lPTiBj aXRleHQ7CiBSRVNFVCBzZWFyY2hfcGF0aDsKIC0tCiBEUk9QIFNDSEVNQSBwYXJ0aXRpb25fc3Bs aXRfc2NoZW1hOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX21l cmdlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9tZXJnZS5zcWwKaW5kZXgg YTIxMWZlZTJhZDEuLmUwMTM3ODQ1MmJmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9wYXJ0aXRpb25fbWVyZ2Uuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlv bl9tZXJnZS5zcWwKQEAgLTc4NCw2ICs3ODQsOTggQEAgU0VMRUNUIGNvdW50KCopIEZST00gdCBX SEVSRSBpID0gMTUgQU5EIGcgSU4gKFNFTEVDVCBnICsgMTAgRlJPTSB0IFdIRVJFIGkgPSA1KTsK IERST1AgVEFCTEUgdDsKIAogCistLQorLS0gVGVzdCB0aGF0IGV4dGVuc2lvbiBkZXBlbmRlbmNp ZXMgb24gcGFydGl0aW9uIGluZGV4ZXMgYXJlIHByZXNlcnZlZAorLS0gYWZ0ZXIgTUVSR0UgUEFS VElUSU9OUy4KKy0tCitDUkVBVEUgRVhURU5TSU9OIElGIE5PVCBFWElTVFMgYnRyZWVfZ2lzdDsK K0NSRUFURSBFWFRFTlNJT04gSUYgTk9UIEVYSVNUUyBidHJlZV9naW47CisKK0NSRUFURSBUQUJM RSB0X21lcmdlX2V4dGRlcCAoaSBpbnQsIHggaW50LCB5IGludCkgUEFSVElUSU9OIEJZIFJBTkdF IChpKTsKK0NSRUFURSBUQUJMRSB0X21lcmdlX2V4dGRlcF8xIFBBUlRJVElPTiBPRiB0X21lcmdl X2V4dGRlcCBGT1IgVkFMVUVTIEZST00gKDEpIFRPICgyKTsKK0NSRUFURSBUQUJMRSB0X21lcmdl X2V4dGRlcF8yIFBBUlRJVElPTiBPRiB0X21lcmdlX2V4dGRlcCBGT1IgVkFMVUVTIEZST00gKDIp IFRPICgzKTsKK0NSRUFURSBUQUJMRSB0X21lcmdlX2V4dGRlcF8zIFBBUlRJVElPTiBPRiB0X21l cmdlX2V4dGRlcCBGT1IgVkFMVUVTIEZST00gKDMpIFRPICg0KTsgLS0gRG9uJ3QgaGF2ZSBhIGRl cGVuZGVuY3kKK0NSRUFURSBUQUJMRSB0X21lcmdlX2V4dGRlcF80IFBBUlRJVElPTiBPRiB0X21l cmdlX2V4dGRlcCBGT1IgVkFMVUVTIEZST00gKDQpIFRPICg1KTsKK0NSRUFURSBUQUJMRSB0X21l cmdlX2V4dGRlcF81IFBBUlRJVElPTiBPRiB0X21lcmdlX2V4dGRlcCBGT1IgVkFMVUVTIEZST00g KDUpIFRPICg2KTsKK0NSRUFURSBJTkRFWCB0X21lcmdlX2V4dGRlcF9pZHggT04gdF9tZXJnZV9l eHRkZXAgVVNJTkcgZ2lzdCAoaSk7CitDUkVBVEUgSU5ERVggdF9tZXJnZV9leHRkZXBfeCBPTiB0 X21lcmdlX2V4dGRlcCBVU0lORyBnaXN0ICh4KTsKKworLS0gQWRkIGV4dGVuc2lvbiBkZXBlbmRl bmN5IGZvciBzb21lIHBhcnRpdGlvbiBpbmRleGVzCitBTFRFUiBJTkRFWCB0X21lcmdlX2V4dGRl cF8xX2lfaWR4IERFUEVORFMgT04gRVhURU5TSU9OIGJ0cmVlX2dpc3Q7CitBTFRFUiBJTkRFWCB0 X21lcmdlX2V4dGRlcF8xX3hfaWR4IERFUEVORFMgT04gRVhURU5TSU9OIGJ0cmVlX2dpbjsKK0FM VEVSIElOREVYIHRfbWVyZ2VfZXh0ZGVwXzJfaV9pZHggREVQRU5EUyBPTiBFWFRFTlNJT04gYnRy ZWVfZ2lzdDsKK0FMVEVSIElOREVYIHRfbWVyZ2VfZXh0ZGVwXzJfeF9pZHggREVQRU5EUyBPTiBF WFRFTlNJT04gYnRyZWVfZ2luOworCistLSBBZGQgYSBkaWZmZXJlbnQgZXh0ZW5zaW9uIGRlcGVu ZGVuY3kgdG8gZW5zdXJlIHRoYXQgb25seSBpbmRleGVzIHdpdGggdGhlCistLSBzYW1lIGRlcGVu ZGVuY2llcyBoYXMgdGhlIGRlcGVuZGVuY2llcyBwcmVzZXJ2ZWQuCitBTFRFUiBJTkRFWCB0X21l cmdlX2V4dGRlcF80X2lfaWR4IERFUEVORFMgT04gRVhURU5TSU9OIGJ0cmVlX2dpbjsKK0FMVEVS IElOREVYIHRfbWVyZ2VfZXh0ZGVwXzRfeF9pZHggREVQRU5EUyBPTiBFWFRFTlNJT04gYnRyZWVf Z2luOworCistLSBTaG91bGQgZmFpbDogZGVwZW5kZW5jaWVzIGV4aXN0CitEUk9QIEVYVEVOU0lP TiBidHJlZV9naXN0OworCistLSBNZXJnZSBwYXJ0aXRpb25zCitBTFRFUiBUQUJMRSB0X21lcmdl X2V4dGRlcCBNRVJHRSBQQVJUSVRJT05TICh0X21lcmdlX2V4dGRlcF8xLCB0X21lcmdlX2V4dGRl cF8yKSBJTlRPIHRfbWVyZ2VfZXh0ZGVwX21lcmdlZDsKKworLS0gU2hvdWxkIHN0aWxsIGZhaWw6 IGRlcGVuZGVuY2llcyBzaG91bGQgYmUgcHJlc2VydmVkIG9uIHRoZSBuZXcgcGFydGl0aW9uJ3Mg aW5kZXgKK0RST1AgRVhURU5TSU9OIGJ0cmVlX2dpc3Q7CisKKy0tIFZlcmlmeSB0aGF0IGRlcGVu ZGVuY2llcyBmb3IgYWxsIGluZGV4ZXMgZXhpc3RzIGluIHBnX2RlcGVuZAorU0VMRUNUIHJlbG5h bWUsIGV4dG5hbWUKK0ZST00gcGdfZGVwZW5kIGQKK0pPSU4gcGdfY2xhc3MgYyBPTiBkLm9iamlk ID0gYy5vaWQKK0pPSU4gcGdfZXh0ZW5zaW9uIGUgT04gZC5yZWZvYmppZCA9IGUub2lkCitXSEVS RSBjLnJlbG5hbWUgSU4gKCd0X21lcmdlX2V4dGRlcF9tZXJnZWRfaV9pZHgnLCAndF9tZXJnZV9l eHRkZXBfbWVyZ2VkX3hfaWR4JykKKyAgQU5EIGUuZXh0bmFtZSBJTiAoJ2J0cmVlX2dpc3QnLCAn YnRyZWVfZ2luJykKKyAgQU5EIGQuZGVwdHlwZSA9ICd4JworT1JERVIgQlkgcmVsbmFtZSwgZXh0 bmFtZTsKKworLS0gTWVyZ2UgYSBwYXJ0aXRpb24gd2l0aCBhIGRlcGVuZGVuY3kgd2l0aCBhIHBh cnRpdGlvbiB0aGF0IGRvbid0IGhhdmUgYQorLS0gZGVwZW5kZW5jeS4gVGhlIG5ldyBtZXJnZWQg cGFydGl0aW9uIHNob3VsZCBub3QgaGF2ZSBhIGRlcGVuZGVuY3kuCitBTFRFUiBUQUJMRSB0X21l cmdlX2V4dGRlcCBNRVJHRSBQQVJUSVRJT05TICh0X21lcmdlX2V4dGRlcF9tZXJnZWQsIHRfbWVy Z2VfZXh0ZGVwXzMpIElOVE8gdF9tZXJnZV9leHRkZXBfbWVyZ2VkMjsKKworU0VMRUNUIGV4dG5h bWUKK0ZST00gcGdfZGVwZW5kIGQKK0pPSU4gcGdfY2xhc3MgYyBPTiBkLm9iamlkID0gYy5vaWQK K0pPSU4gcGdfZXh0ZW5zaW9uIGUgT04gZC5yZWZvYmppZCA9IGUub2lkCitXSEVSRSBjLnJlbG5h bWUgSU4gKCd0X21lcmdlX2V4dGRlcF9tZXJnZWQyX2lfaWR4JywgJ3RfbWVyZ2VfZXh0ZGVwX21l cmdlZDJfeF9pZHgnKQorICBBTkQgZS5leHRuYW1lIElOICgnYnRyZWVfZ2luJywgJ2J0cmVlX2dp c3QnKQorICBBTkQgZC5kZXB0eXBlID0gJ3gnOworCistLSBNZXJnZSBwYXJ0aXRpb25zIHdpdGgg ZGlmZmVyZW50IGRlcGVuZGVuY2llcyBhbmQgY2hlY2sgdGhhdCB0aGUgbmV3IG1lcmdlZAorLS0g cGFydGl0aW9uIG9ubHkgaGF2ZSB0aGUgZGVwZW5kZW5jaWVzIHRoYXQgaW50ZXJzZWN0LgorQUxU RVIgSU5ERVggdF9tZXJnZV9leHRkZXBfbWVyZ2VkMl9pX2lkeCBERVBFTkRTIE9OIEVYVEVOU0lP TiBidHJlZV9naXN0OworQUxURVIgSU5ERVggdF9tZXJnZV9leHRkZXBfbWVyZ2VkMl94X2lkeCBE RVBFTkRTIE9OIEVYVEVOU0lPTiBidHJlZV9naW47CitBTFRFUiBUQUJMRSB0X21lcmdlX2V4dGRl cCBNRVJHRSBQQVJUSVRJT05TICh0X21lcmdlX2V4dGRlcF9tZXJnZWQyLCB0X21lcmdlX2V4dGRl cF80KSBJTlRPIHRfbWVyZ2VfZXh0ZGVwX21lcmdlZDM7CisKK1NFTEVDVCByZWxuYW1lLCBleHRu YW1lCitGUk9NIHBnX2RlcGVuZCBkCitKT0lOIHBnX2NsYXNzIGMgT04gZC5vYmppZCA9IGMub2lk CitKT0lOIHBnX2V4dGVuc2lvbiBlIE9OIGQucmVmb2JqaWQgPSBlLm9pZAorV0hFUkUgYy5yZWxu YW1lIElOICgndF9tZXJnZV9leHRkZXBfbWVyZ2VkM19pX2lkeCcsICd0X21lcmdlX2V4dGRlcF9t ZXJnZWQzX3hfaWR4JykKKyAgQU5EIGUuZXh0bmFtZSBJTiAoJ2J0cmVlX2dpbicsICdidHJlZV9n aXN0JykKKyAgQU5EIGQuZGVwdHlwZSA9ICd4JworT1JERVIgQlkgcmVsbmFtZSwgZXh0bmFtZTsK KworLS0gQ3JlYXRlIGFuIGluZGV4IGRpcmVjdGx5IG9uIGEgcGFydGl0aW9uICh3aXRob3V0IGEg cGFyZW50IHBhcnRpdGlvbmVkIGluZGV4KS4KKy0tIFN1Y2ggaW5kZXhlcyBhcmUgbm90IHJlY3Jl YXRlZCBvbiBtZXJnZSBiZWNhdXNlIHRoZXkgaGF2ZSBubyBwYXJlbnQgdG8gbWFwIHRvLgorLS0g VGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgcGFydGl0aW9uLW9ubHkgaW5kZXhlcyBkb24ndCBjYXVz ZSBpc3N1ZXMgZHVyaW5nIG1lcmdlLgorQ1JFQVRFIElOREVYIHRfbWVyZ2VfZXh0ZGVwXzVfeV9p ZHggT04gdF9tZXJnZV9leHRkZXBfNSBVU0lORyBnaXN0KHkpOworQUxURVIgVEFCTEUgdF9tZXJn ZV9leHRkZXAgTUVSR0UgUEFSVElUSU9OUyAodF9tZXJnZV9leHRkZXBfbWVyZ2VkMywgdF9tZXJn ZV9leHRkZXBfNSkgSU5UTyB0X21lcmdlX2V4dGRlcF9tZXJnZWQ0OworCistLSBUaGUgcGFydGl0 aW9uLW9ubHkgaW5kZXggaXMgZHJvcHBlZCB3aXRoIGl0cyBwYXJ0aXRpb247IG5vIGNvcnJlc3Bv bmRpbmcKKy0tIGluZGV4IGV4aXN0cyBvbiB0aGUgbWVyZ2VkIHBhcnRpdGlvbiBzaW5jZSB0aGVy ZSdzIG5vIHBhcmVudCBpbmRleC4KK1NFTEVDVCByZWxuYW1lCitGUk9NIHBnX2NsYXNzCitXSEVS RSByZWxuYW1lIExJS0UgJ3RfbWVyZ2VfZXh0ZGVwX21lcmdlZDQlaWR4JworT1JERVIgQlkgcmVs bmFtZTsKKworLS0gQ2xlYW4gdXAKK0RST1AgVEFCTEUgdF9tZXJnZV9leHRkZXA7CitEUk9QIEVY VEVOU0lPTiBidHJlZV9naXN0OworRFJPUCBFWFRFTlNJT04gYnRyZWVfZ2luOworCisKIFJFU0VU IHNlYXJjaF9wYXRoOwogCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFy dGl0aW9uX3NwbGl0LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9zcGxpdC5z cWwKaW5kZXggNDRmY2YyMDhhYzYuLjIyNTYzZDM4MDRjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9wYXJ0aXRpb25fc3BsaXQuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3BhcnRpdGlvbl9zcGxpdC5zcWwKQEAgLTExMjcsNiArMTEyNyw0NSBAQCBTRUxFQ1QgY291bnQo KikgRlJPTSB0IFdIRVJFIGkgPSAwIEFORCB0YWJfaWQgSU4gKFNFTEVDVCB0YWJfaWQgRlJPTSB0 IFdIRVJFIGkgPQogRFJPUCBUQUJMRSB0OwogCiAKKy0tCistLSBUZXN0IHRoYXQgZXh0ZW5zaW9u IGRlcGVuZGVuY2llcyBvbiBwYXJ0aXRpb24gaW5kZXhlcyBhcmUgcHJlc2VydmVkCistLSBhZnRl ciBTUExJVCBQQVJUSVRJT04uCistLQorQ1JFQVRFIEVYVEVOU0lPTiBjaXRleHQ7CisKK0NSRUFU RSBUQUJMRSB0X2V4dGRlcCAoaSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaSk7CitDUkVBVEUg VEFCTEUgdF9leHRkZXBfMV8zIFBBUlRJVElPTiBPRiB0X2V4dGRlcCBGT1IgVkFMVUVTIEZST00g KDEpIFRPICgzKTsKK0NSRUFURSBJTkRFWCB0X2V4dGRlcF9pZHggT04gdF9leHRkZXAgKGkpOwor CistLSBBZGQgZXh0ZW5zaW9uIGRlcGVuZGVuY3kgb24gcGFydGl0aW9uIGluZGV4CitBTFRFUiBJ TkRFWCB0X2V4dGRlcF8xXzNfaV9pZHggREVQRU5EUyBPTiBFWFRFTlNJT04gY2l0ZXh0OworCist LSBTaG91bGQgZmFpbDogZGVwZW5kZW5jeSBleGlzdHMKK0RST1AgRVhURU5TSU9OIGNpdGV4dDsK KworLS0gU3BsaXQgcGFydGl0aW9uCitBTFRFUiBUQUJMRSB0X2V4dGRlcCBTUExJVCBQQVJUSVRJ T04gdF9leHRkZXBfMV8zIElOVE8KKyAgKFBBUlRJVElPTiB0X2V4dGRlcF8xIEZPUiBWQUxVRVMg RlJPTSAoMSkgVE8gKDIpLAorICAgUEFSVElUSU9OIHRfZXh0ZGVwXzIgRk9SIFZBTFVFUyBGUk9N ICgyKSBUTyAoMykpOworCistLSBTaG91bGQgc3RpbGwgZmFpbDogZGVwZW5kZW5jaWVzIHNob3Vs ZCBiZSBwcmVzZXJ2ZWQgb24gYWxsIG5ldyBwYXJ0aXRpb25zJyBpbmRleGVzCitEUk9QIEVYVEVO U0lPTiBjaXRleHQ7CisKKy0tIFZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGV4aXN0IGluIHBnX2Rl cGVuZCBmb3IgYm90aCBuZXcgcGFydGl0aW9ucworU0VMRUNUIGMucmVsbmFtZSwgQ09VTlQoKikg PiAwIEFTIGhhc19leHRfZGVwCitGUk9NIHBnX2RlcGVuZCBkCitKT0lOIHBnX2NsYXNzIGMgT04g ZC5vYmppZCA9IGMub2lkCitKT0lOIHBnX2V4dGVuc2lvbiBlIE9OIGQucmVmb2JqaWQgPSBlLm9p ZAorV0hFUkUgYy5yZWxuYW1lIElOICgndF9leHRkZXBfMV9pX2lkeCcsICd0X2V4dGRlcF8yX2lf aWR4JykKKyAgQU5EIGUuZXh0bmFtZSA9ICdjaXRleHQnCisgIEFORCBkLmRlcHR5cGUgPSAneCcK K0dST1VQIEJZIGMucmVsbmFtZQorT1JERVIgQlkgYy5yZWxuYW1lOworCistLSBDbGVhbiB1cAor RFJPUCBUQUJMRSB0X2V4dGRlcDsKK0RST1AgRVhURU5TSU9OIGNpdGV4dDsKKwogUkVTRVQgc2Vh cmNoX3BhdGg7CiAKIC0tCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDQ5ZGZiNjYyYWJj Li45ZjFkZDU1MjEzZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTIyMDAsNiArMjIw MCw3IEBAIFBhcnRpdGlvbkRpcmVjdG9yeUVudHJ5CiBQYXJ0aXRpb25EaXNwYXRjaAogUGFydGl0 aW9uRWxlbQogUGFydGl0aW9uSGFzaEJvdW5kCitQYXJ0aXRpb25JbmRleEV4dERlcEVudHJ5CiBQ YXJ0aXRpb25LZXkKIFBhcnRpdGlvbkxpc3RWYWx1ZQogUGFydGl0aW9uTWFwCi0tIAoyLjUzLjAK Cg== --b62bf606a0838675d66282bdc4268bba2edcc0ec5b0e236a487678b48b2c--