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 1tkKra-002uRg-Ah for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Feb 2025 10:30:02 +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 1tkKrX-008yZ7-AJ for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Feb 2025 10:29:59 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tkKrW-008yYz-NT for pgsql-hackers@lists.postgresql.org; Tue, 18 Feb 2025 10:29:59 +0000 Received: from mail-yw1-x1134.google.com ([2607:f8b0:4864:20::1134]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tkKrV-001Upt-0F for pgsql-hackers@lists.postgresql.org; Tue, 18 Feb 2025 10:29:57 +0000 Received: by mail-yw1-x1134.google.com with SMTP id 00721157ae682-6fb2a0e4125so40735137b3.1 for ; Tue, 18 Feb 2025 02:29:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739874596; x=1740479396; darn=lists.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=dLwC9oa/cNp9k/HhvAkCubCsrOdi5RD7E74gkmUwhII=; b=GidyrvZcugzt2nbqD3pNoTmN2RWejs4MebqIWc+N/7HZyleZSRAk64KlEKML8F+BEq Q/vTmz9emkWS8KbK47A7sU8lMgmydUvhBcGYRUXAHc0lswiKIofgMnDFQBaARELloMOW UYbmHTrcNp94lpj6phgj5BTuwresKxOeV/ko9fPoAWq5ya9EoEj03gsbaUjfT98UKQGo 8xuhMZxm3u6m0AWsTqVaBrRVURibir1Og4E7Lr2qZAHCz+nWzAHX/LNc00k2h2Lx303+ fBhlOCdI+N+r5HoiZ2Jt8p8TL2DIjQg9XLiBzHk95BZJdKGqLCojlLmZNdIvZRYHkSgM c/DQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739874596; x=1740479396; 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=dLwC9oa/cNp9k/HhvAkCubCsrOdi5RD7E74gkmUwhII=; b=H1rYwCNjopbU1NnjqIWq8ELsF8fin0bJmGWPH10w0d3Z97fJc8eLhcBcUMy+NC/NWL pw+p8SJYnnUAfOmZqMmcw/TwOOvFgM4E3GY00K8Z8poYH069ghboA3+7uBBMiTNb5yy6 zXjLTLnRvD0cK+Lflu46omq0giX5DvT1MPNp/FpCH6+ott3fnZcivZzMUMooKzqWSAYf Nm3nODuxu6HWvKYK+QBGkADBGAeRIldDkmNe/iwJSLbw45RNFvILMKMTenaDv6maYJOl J9L0xaseYkC7TTLnG9aneNgtXaeW8ASanaopEVV1dR4Rfw7WOMzUi4PhT4HulEsEHbFB XlOg== X-Forwarded-Encrypted: i=1; AJvYcCU2fjRZ1OQpTL+hqZmdsKd5WBUC5zJn2pNQMzTm6dpfRBXLrNXv6y/zEWLF5EbzmpG3N5cVGEXkSH+zJpe6@lists.postgresql.org X-Gm-Message-State: AOJu0Yz89l6qADn9Ac6GTHaPI2dEFR2hEm7ZDcn4tLXlGZVCHcTj87nw 4rBop4ltK7ZP2Tn1/rQM/BPq0s7BDeMKZ9oCI7Bzt5Dv2GyW9Z+U2G6bnxasqxUMzYHu1WR9Db2 bO7QLtaBMSocjnFq745+maNJea90= X-Gm-Gg: ASbGncv2Lwl3W0hretvwttD+mWZ+F+sUPZMCoAaRVMdqKOZ2+Dqc2VvksSrOIDeARxn 4I2xrTLttmsrXzdfWLZz2pRg54U6Xm5WupHjKI8rKjXE8DMMGpgmJUKpPO25QuNAqakLut+li69 U= X-Google-Smtp-Source: AGHT+IHdZf5Eo1/1wXE+yQwNx5musx5tLbs8NaD7GrCpIoj4TOG3s17uKAIjbyh9akCUFf3ZIx6HLPvBbT+cNUWhKPA= X-Received: by 2002:a05:690c:6307:b0:6ef:7fc0:a392 with SMTP id 00721157ae682-6fb5825b879mr115744927b3.2.1739874596343; Tue, 18 Feb 2025 02:29:56 -0800 (PST) MIME-Version: 1.0 References: <202502050844.4lrgg3aoudat@alvherre.pgsql> In-Reply-To: From: Shlok Kyal Date: Tue, 18 Feb 2025 15:59:43 +0530 X-Gm-Features: AWEUYZmYaT0vVw2jV43RvpnxbMVoSsUbpm1lZXumgfrzwVUkhxPJ_QHm5ePa6pg Message-ID: Subject: Re: Restrict publishing of partitioned table with a foreign table as partition To: vignesh C Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , Sergey Tatarintsev , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000455d21062e681ff5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000455d21062e681ff5 Content-Type: text/plain; charset="UTF-8" On Mon, 17 Feb 2025 at 20:13, vignesh C wrote: > > On Fri, 14 Feb 2025 at 12:59, Shlok Kyal wrote: > > > > I have used the changes suggested by you. Also I have updated the > > comments and the function name. > > There is another concurrency issue possible: > +/* Check if a partitioned table has a foreign partition */ > +bool > +check_partrel_has_foreign_table(Form_pg_class relform) > +{ > + bool has_foreign_tbl = false; > + > + if (relform->relkind == RELKIND_PARTITIONED_TABLE) > + { > + List *relids = NIL; > + > + relids = find_all_inheritors(relform->oid, NoLock, NULL); > > Create a publication with publish_via_partition_root as true, hold the > execution after check_partrel_has_foreign_table execution finishes. > Then parallely execute the following: > CREATE TABLE t1(id int) PARTITION BY RANGE(id); > CREATE TABLE part1 PARTITION OF t1 FOR VALUES FROM (0) TO (5); > CREATE TABLE part2 PARTITION OF t1 FOR VALUES FROM (5) TO (15) > PARTITION BY RANGE(id); > CREATE FOREIGN TABLE part2_1 PARTITION OF part2 FOR VALUES FROM (10) > TO (15) SERVER fdw > > Now both the partitioned table having foreign table and a publication > will be created. > Hi Vignesh, I have addressed the above issue. If we take a ShareLock on the pg_class, we won't be able to create table concurrently, which may address the issue. Thoughts? I have attached the v8 patch here. Thanks and Regards, Shlok Kyal --000000000000455d21062e681ff5 Content-Type: application/octet-stream; name="v8-0001-Restrict-publishing-of-partitioned-table-with-for.patch" Content-Disposition: attachment; filename="v8-0001-Restrict-publishing-of-partitioned-table-with-for.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7accnd80 RnJvbSA1NmNmMTg4NzBkNDQyY2MzYzIzMTczOTk3ZGJjYThhMDYwYzY1ZjQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTEgRmViIDIwMjUgMTU6MzI6NTUgKzA1MzAKU3ViamVjdDogW1BBVENIIHY4 XSBSZXN0cmljdCBwdWJsaXNoaW5nIG9mIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWlnbgog cGFydGl0aW9uCgpMb2dpY2FsIHJlcGxpY2F0aW9uIG9mIGZvcmVpZ24gdGFibGUgaXMgbm90IHN1 cHBvcnRlZCBhbmQgd2UgdGhyb3cgYW4KZXJyb3IgaW4gdGhpcyBjYXNlLiBCdXQgd2hlbiBjcmVh dGUgYSBwdWJsaWNhdGlvbiBvbiBhIHBhcnRpdGlvbmVkCnRhYmxlIHRoYXQgaGFzIGEgZm9yZWln biBwYXJ0aXRpb24sIHRoZSBpbml0aWFsIHN5bmMgb2Ygc3VjaCB0YWJsZSBpcwpzdWNjZXNzZnVs IGFuZCB3ZSBzaG91bGQgYXZvaWQgc3VjaCBjYXNlcy4KCkN1cnJlbnQgQmVoYXZpb3VyLCB3aGVu IHB1YmxpY2F0aW9uIGlzIGNyZWF0ZWQ6CjEuIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QgPSB0cnVlClJvb3QgdGFibGUgaXMgcHVibGlzaGVkIGFuZCB0aGUgaW5pdGlhbCBkYXRhIG9m IGZvcmVpZ24gcGFydGl0aW9ucwphcmUgcmVwbGljYXRlZC4KCjIuIHdpdGggcHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QgPSBmYWxzZSBhbmQgRk9SIEFMTCBUQUJMRVMKQWxsIGxlYWYgdGFibGVz IGV4Y2VwdCBmb3JlaWduIHBhcnRpdGlvbnMgYXJlIHB1Ymxpc2hlZC4KCjMuIHdpdGggcHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSBhbmQKRk9SIFRBQkxFLyBGT1IgVEFCTEVTIElO IFNDSEVNQQpBbGwgbGVhZiB0YWJsZXMgYXJlIHB1Ymxpc2hlZC4gSW5pdGlhbCBkYXRhIG9mIGZv cmVpZ24gcGFydGl0aW9ucyBhcmUKcmVwbGljYXRlZC4KCldpdGggdGhpcyBwYXRjaCB3ZSBoYXZl IGZvbGxvd2luZyBiZWhhdmlvdXI6CjEuIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qg PSB0cnVlCldlIHRocm93IGFuIGVycm9yIHdoZW4gd2UgdHJ5IHRvIHB1Ymxpc2ggYSBmb3JlaWdu IHBhcnRpdGl0b24uIEVycm9yCmlzIHRocm93biB3aGVuIHdlIHRyeSB0byBjcmVhdGUgYSBwdWJs aWNhdGlvbiBvbiAob3IgYWRkIHRvIGV4aXN0aW5nCnB1YmxpY2F0aW9uKSBhIHBhcnRpdGlvbmVk IHRhYmxlIHdpdGggZm9yZWlnbiBwYXJ0aXRpb24sIHdoZW4gdHJ5IHRvCmNyZWF0ZSBhIGZvcmVp Z24gcGFydGl0aW9uIGFuZCB3aGVuIHdlIHRyeSB0byBhdHRhY2ggZm9yZWlnbiB0YWJsZSAob3IK YSB0YWJsZSB3aXRoIGZvcmVpZ24gcGFydGl0aW9uKSB0byBleGlzdGluZyBwdWJsaXNoZWQgdGFi bGVzLgoKMi4gd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlCldlIHNraXAg cHVibGlzaGluZyBmb3JlaWduIHBhcnRpdGlvbiB3aGljaCBhcmUgcGFydCBvZiB0aGUgcHVibGlj YXRpb24uClRoaXMgaXMgZG9uZSBieSBhdm9pZCBhZGRpbmcgZm9yZWlnbiBwYXJ0aXRpb25zIGlu IHBnX3N1YnNjcmlwdGlvbl9yZWwKY2F0YWxvZyB0YWJsZS4KCldlIGhhdmUgaW50cm9kdWNlZCB0 d28gZnVuY3Rpb25zICdjaGVja19wYXJ0cmVsX2hhc19mb3JlaWduX3RhYmxlJyBhbmQKJ2NoZWNr X2ZvcmVpZ25fdGFibGVzJy4gSW4gJ2NoZWNrX3BhcnRyZWxfaGFzX2ZvcmVpZ25fdGFibGUnIHdl IGdvCnRocm91Z2ggdGhlIGNoaWxkIG5vZGVzIG9mIGEgcGFydGl0aW9uIGFuZCBjaGVjayBpZiBp dCBoYXMgYSBmb3JlaWduCnRhYmxlLiBXaGlsZSBkb2luZyBzbywgd2UgdGFrZSBhIEFjY2Vzc1No YXJlTG9jayBvbiBlYWNoIHBhcnRpdGlvbiB0YWJsZQp0byBhdm9pZCBjcmVhdGlvbiBvZiBmb3Jl aWduIHBhcnRpdGlvbiBjb25jdXJyZW50bHkuCkluICdjaGVja19mb3JlaWduX3RhYmxlcycgaWYg c2NoZW1hIGlkIGlzIHByb3ZpZGVkIHdlIGNoZWNrIGZvciBlYWNoCnBhcnRpdGlvbmVkIHRhYmxl IGluIHRoYXQgc2NoZW1hIGlmIGl0IGhhcyBhIGZvcmVpZ24gcGFydGl0aW9uLCBvciBpZgpzY2hl bWEgaWQgaXMgbm90IHByb3ZpZGVkIHdlIGNoZWNrIGZvciBlYWNoIHBhcnRpdGlvbmVkIHRhYmxl IGluIHRoZQpkYXRhYmFzZSBpZiBpdCBoYXMgYSBmb3JlaWduIHBhcnRpdGlvbi4gV2hpbGUgZG9p bmcgc28gd2UgdGFrZSBhClNoYXJlTG9jayBvbiBwZ19jbGFzcyBzbyBubyBwYXJ0aXRpb24gdGFi bGUgaXMgY3JlYXRlZCBjb25jdXJyZW50bHkgYWZ0ZXIKdGhpcyBjaGVjay4KLS0tCiBzcmMvYmFj a2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICB8IDEzNyArKysrKysrKysrKysrKysr KysrLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9mb3JlaWduY21kcy5jICAgICAgICB8ICA0NyAr KysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgICAgfCAgNDcg KysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgIHwgIDUz ICsrKysrKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgfCAg IDUgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgfCAgODkgKysr KysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbCAgICAgIHwg IDgxICsrKysrKysrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgNDQyIGluc2VydGlvbnMoKyksIDE3 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwppbmRleCBkNmY5 NGRiNWQ5OS4uZDQ1NTc3Njc5ZWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdf cHVibGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMK QEAgLTUzLDcgKzUzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QKICAqIGVycm9yIGlmIG5vdC4KICAqLwog c3RhdGljIHZvaWQKLWNoZWNrX3B1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihSZWxhdGlvbiB0YXJn ZXRyZWwpCitjaGVja19wdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oUmVsYXRpb24gdGFyZ2V0cmVs LCBQdWJsaWNhdGlvbiAqcHViKQogewogCS8qIE11c3QgYmUgYSByZWd1bGFyIG9yIHBhcnRpdGlv bmVkIHRhYmxlICovCiAJaWYgKFJlbGF0aW9uR2V0Rm9ybSh0YXJnZXRyZWwpLT5yZWxraW5kICE9 IFJFTEtJTkRfUkVMQVRJT04gJiYKQEAgLTY0LDYgKzY0LDE5IEBAIGNoZWNrX3B1YmxpY2F0aW9u X2FkZF9yZWxhdGlvbihSZWxhdGlvbiB0YXJnZXRyZWwpCiAJCQkJCQlSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZSh0YXJnZXRyZWwpKSwKIAkJCQkgZXJyZGV0YWlsX3JlbGtpbmRfbm90X3N1cHBvcnRl ZChSZWxhdGlvbkdldEZvcm0odGFyZ2V0cmVsKS0+cmVsa2luZCkpKTsKIAorCS8qCisJICogcHVi bGlzaF92aWFfcm9vdF9wYXJ0aXRpb24gY2Fubm90IGJlIHRydWUgaWYgaXQgaXMgYSBwYXJ0aXRp b25lZCB0YWJsZQorCSAqIGFuZCBoYXMgYW55IGZvcmVpZ24gcGFydGl0aW9uCisJICovCisJaWYg KHB1Yi0+cHVidmlhcm9vdCAmJgorCQljaGVja19wYXJ0cmVsX2hhc19mb3JlaWduX3RhYmxlKFJl bGF0aW9uR2V0Rm9ybSh0YXJnZXRyZWwpKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJjYW5ub3Qg c2V0IHBhcmFtZXRlciBcIiVzXCIgdG8gdHJ1ZSBmb3IgcHVibGljYXRpb24gXCIlc1wiIiwKKwkJ CQkJCSJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIsIHB1Yi0+bmFtZSksCisJCQkJIGVycmRl dGFpbCgicGFydGl0aW9uIHRhYmxlIFwiJXNcIiBpbiBwdWJsaWNhdGlvbiBjb250YWlucyBhIGZv cmVpZ24gcGFydGl0aW9uIiwKKwkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHRhcmdl dHJlbCkpKSk7CisKIAkvKiBDYW4ndCBiZSBzeXN0ZW0gdGFibGUgKi8KIAlpZiAoSXNDYXRhbG9n UmVsYXRpb24odGFyZ2V0cmVsKSkKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTMwNCw3ICszMTcsNyBA QCBjaGVja19hbmRfZmV0Y2hfY29sdW1uX2xpc3QoUHVibGljYXRpb24gKnB1YiwgT2lkIHJlbGlk LCBNZW1vcnlDb250ZXh0IG1jeHQsCiAKIC8qCiAgKiBHZXRzIHRoZSByZWxhdGlvbnMgYmFzZWQg b24gdGhlIHB1YmxpY2F0aW9uIHBhcnRpdGlvbiBvcHRpb24gZm9yIGEgc3BlY2lmaWVkCi0gKiBy ZWxhdGlvbi4KKyAqIHJlbGF0aW9uLiBGb3JlaWduIHRhYmxlcyBhcmUgbm90IGluY2x1ZGVkLgog ICovCiBMaXN0ICoKIEdldFB1YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9ucyhMaXN0ICpyZXN1bHQs IFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCwKQEAgLTMxMywyNSArMzI2LDIxIEBAIEdl dFB1YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9ucyhMaXN0ICpyZXN1bHQsIFB1YmxpY2F0aW9uUGFy dE9wdCBwdWJfcGFydG9wdCwKIAlpZiAoZ2V0X3JlbF9yZWxraW5kKHJlbGlkKSA9PSBSRUxLSU5E X1BBUlRJVElPTkVEX1RBQkxFICYmCiAJCXB1Yl9wYXJ0b3B0ICE9IFBVQkxJQ0FUSU9OX1BBUlRf Uk9PVCkKIAl7Ci0JCUxpc3QJICAgKmFsbF9wYXJ0cyA9IGZpbmRfYWxsX2luaGVyaXRvcnMocmVs aWQsIE5vTG9jaywKLQkJCQkJCQkJCQkJCQlOVUxMKTsKKwkJTGlzdAkgICAqYWxsX3BhcnRzID0g ZmluZF9hbGxfaW5oZXJpdG9ycyhyZWxpZCwgTm9Mb2NrLCBOVUxMKTsKIAotCQlpZiAocHViX3Bh cnRvcHQgPT0gUFVCTElDQVRJT05fUEFSVF9BTEwpCi0JCQlyZXN1bHQgPSBsaXN0X2NvbmNhdChy ZXN1bHQsIGFsbF9wYXJ0cyk7Ci0JCWVsc2UgaWYgKHB1Yl9wYXJ0b3B0ID09IFBVQkxJQ0FUSU9O X1BBUlRfTEVBRikKKwkJZm9yZWFjaF9vaWQocGFydE9pZCwgYWxsX3BhcnRzKQogCQl7Ci0JCQlM aXN0Q2VsbCAgICpsYzsKKwkJCWNoYXIJCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQocGFydE9p ZCk7CiAKLQkJCWZvcmVhY2gobGMsIGFsbF9wYXJ0cykKLQkJCXsKLQkJCQlPaWQJCQlwYXJ0T2lk ID0gbGZpcnN0X29pZChsYyk7CisJCQlpZiAocmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFC TEUpCisJCQkJY29udGludWU7CiAKLQkJCQlpZiAoZ2V0X3JlbF9yZWxraW5kKHBhcnRPaWQpICE9 IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCi0JCQkJCXJlc3VsdCA9IGxhcHBlbmRfb2lkKHJl c3VsdCwgcGFydE9pZCk7Ci0JCQl9CisJCQlpZiAocHViX3BhcnRvcHQgPT0gUFVCTElDQVRJT05f UEFSVF9MRUFGICYmCisJCQkJcmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQor CQkJCWNvbnRpbnVlOworCisJCQlyZXN1bHQgPSBsYXBwZW5kX29pZChyZXN1bHQsIHBhcnRPaWQp OwogCQl9Ci0JCWVsc2UKLQkJCUFzc2VydChmYWxzZSk7CiAJfQogCWVsc2UKIAkJcmVzdWx0ID0g bGFwcGVuZF9vaWQocmVzdWx0LCByZWxpZCk7CkBAIC00NjMsNyArNDcyLDcgQEAgcHVibGljYXRp b25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRpb25SZWxJbmZvICpwcmksCiAJCQkJ CQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwpLCBwdWItPm5hbWUpKSk7CiAJfQog Ci0JY2hlY2tfcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKHRhcmdldHJlbCk7CisJY2hlY2tfcHVi bGljYXRpb25fYWRkX3JlbGF0aW9uKHRhcmdldHJlbCwgcHViKTsKIAogCS8qIFZhbGlkYXRlIGFu ZCB0cmFuc2xhdGUgY29sdW1uIG5hbWVzIGludG8gYSBCaXRtYXBzZXQgb2YgYXR0bnVtcy4gKi8K IAlhdHRudW1zID0gcHViX2NvbGxpc3RfdmFsaWRhdGUocHJpLT5yZWxhdGlvbiwgcHJpLT5jb2x1 bW5zKTsKQEAgLTcwMyw2ICs3MTIsMTMgQEAgcHVibGljYXRpb25fYWRkX3NjaGVtYShPaWQgcHVi aWQsIE9pZCBzY2hlbWFpZCwgYm9vbCBpZl9ub3RfZXhpc3RzKQogCiAJY2hlY2tfcHVibGljYXRp b25fYWRkX3NjaGVtYShzY2hlbWFpZCk7CiAKKwkvKgorCSAqIElmIHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290IGlzIHRydWUsIGNoZWNrIGlmIHNjaGVtYSBoYXMgYW55IGZvcmVpZ24KKwkgKiBw YXJ0aXRpb24KKwkgKi8KKwlpZiAocHViLT5wdWJ2aWFyb290KQorCQljaGVja19mb3JlaWduX3Rh YmxlcyhzY2hlbWFpZCwgcHViLT5uYW1lKTsKKwogCS8qIEZvcm0gYSB0dXBsZSAqLwogCW1lbXNl dCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsKIAltZW1zZXQobnVsbHMsIGZhbHNlLCBzaXpl b2YobnVsbHMpKTsKQEAgLTEzMzIsMyArMTM0OCw5MCBAQCBwZ19nZXRfcHVibGljYXRpb25fdGFi bGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CiB9CisK Ky8qIENoZWNrIGlmIGEgcGFydGl0aW9uZWQgdGFibGUgaGFzIGEgZm9yZWlnbiBwYXJ0aXRpb24g Ki8KK2Jvb2wKK2NoZWNrX3BhcnRyZWxfaGFzX2ZvcmVpZ25fdGFibGUoRm9ybV9wZ19jbGFzcyBy ZWxmb3JtKQoreworCWJvb2wJCWhhc19mb3JlaWduX3RibCA9IGZhbHNlOworCisJaWYgKHJlbGZv cm0tPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwl7CisJCUxpc3QJICAg KnJlbGlkcyA9IGZpbmRfYWxsX2luaGVyaXRvcnMocmVsZm9ybS0+b2lkLCBOb0xvY2ssIE5VTEwp OworCisJCWZvcmVhY2hfb2lkKHJlbGlkLCByZWxpZHMpCisJCXsKKwkJCVJlbGF0aW9uCXJlbCA9 IHRhYmxlX29wZW4ocmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCWlmIChSZWxhdGlvbkdl dEZvcm0ocmVsKS0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCisJCQkJaGFzX2Zv cmVpZ25fdGJsID0gdHJ1ZTsKKworCQkJdGFibGVfY2xvc2UocmVsLCBOb0xvY2spOworCisJCQlp ZiAoaGFzX2ZvcmVpZ25fdGJsKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGhhc19m b3JlaWduX3RibDsKK30KKworLyoKKyAqIElmIHZhbGlkIHNjaGVtYWlkIHByb3ZpZGVkLCBjaGVj ayBpZiB0aGUgc2NoZW1hIGhhcyBhIHBhcnRpdGlvbiB0YWJsZSB3aGljaAorICogaGFzIGEgZm9y ZWlnbiBwYXJ0aXRpb24uIFRoZSBwYXJ0aXRpb24gdGFibGVzIGluIGEgc2NoZW1hIGNhbiBoYXZl IHBhcnRpdGlvbnMKKyAqIGluIG90aGVyIHNjaGVtYS4gV2UgYWxzbyBuZWVkIHRvIGNoZWNrIGlm IHN1Y2ggcGFydGl0aW9ucyBhcmUgZm9yZWlnbgorICogcGFydGl0aW9uLgorICoKKyAqIElmIHZh bGlkIHNjaGVtYWlkIGlzIG5vdCBwcm92aWRlZCwgd2UgZ2V0IGFsbCBwYXJ0aXRpb24gdGFibGVz IGFuZCBjaGVjayBpZgorICogaXQgaGFzIGFueSBmb3JlaWduIHBhcnRpdGlvbi4gV2UgdGFrZSBh IGxvY2sgb24gcGFydGl0aW9uIHRhYmxlcyBzbyBubyBuZXcKKyAqIGZvcmVpZ24gcGFydGl0aW9u cyBhcmUgYWRkZWQgY29uY3VycmVudGx5LgorICoKKyAqIFdlIHRha2UgYSBTaGFyZUxvY2sgb24g cGdfY2xhc3MgdG8gcmVzdHJpY3QgYWRkaXRpb24gb2YgbmV3IHBhcnRpdGlvbmVkIHRhYmxlCisg KiB3aGljaCBtYXkgY29udGFpbiBhIGZvcmVpZ24gcGFydGl0aW9uIHdoaWxlIHB1YmxpY2F0aW9u IGlzIGJlaW5nIGNyZWF0ZWQuCisgKi8KK3ZvaWQKK2NoZWNrX2ZvcmVpZ25fdGFibGVzKE9pZCBz Y2hlbWFpZCwgY2hhciAqcHVibmFtZSkKK3sKKwlSZWxhdGlvbgljbGFzc1JlbDsKKwlTY2FuS2V5 RGF0YSBrZXlbM107CisJaW50CQkJa2V5Y291bnQgPSAwOworCVRhYmxlU2NhbkRlc2Mgc2NhbjsK KwlIZWFwVHVwbGUJdHVwbGU7CisKKwljbGFzc1JlbCA9IHRhYmxlX29wZW4oUmVsYXRpb25SZWxh dGlvbklkLCBTaGFyZUxvY2spOworCisJLyogR2V0IHRoZSByb290IG5vZGVzIG9mIHBhcnRpdGlv bmVkIHRhYmxlICovCisJU2NhbktleUluaXQoJmtleVtrZXljb3VudCsrXSwKKwkJCQlBbnVtX3Bn X2NsYXNzX3JlbGtpbmQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX0NIQVJFUSwKKwkJ CQlDaGFyR2V0RGF0dW0oUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkpOworCisJU2NhbktleUlu aXQoJmtleVtrZXljb3VudCsrXSwKKwkJCQlBbnVtX3BnX2NsYXNzX3JlbGlzcGFydGl0aW9uLAor CQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9CT09MRVEsCisJCQkJQm9vbEdldERhdHVtKGZh bHNlKSk7CisKKwkvKiBJZiBzY2hlbWEgaWQgaXMgcHJvdmlkZWQgY2hlY2sgcGFydGl0aW9uZWQg dGFibGUgaW4gdGhhdCBzY2hlbWEgKi8KKwlpZiAoT2lkSXNWYWxpZChzY2hlbWFpZCkpCisJCVNj YW5LZXlJbml0KCZrZXlba2V5Y291bnQrK10sCisJCQkJCUFudW1fcGdfY2xhc3NfcmVsbmFtZXNw YWNlLAorCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCXNjaGVtYWlk KTsKKworCXNjYW4gPSB0YWJsZV9iZWdpbnNjYW5fY2F0YWxvZyhjbGFzc1JlbCwga2V5Y291bnQs IGtleSk7CisJd2hpbGUgKCh0dXBsZSA9IGhlYXBfZ2V0bmV4dChzY2FuLCBGb3J3YXJkU2NhbkRp cmVjdGlvbikpICE9IE5VTEwpCisJeworCQlGb3JtX3BnX2NsYXNzIHJlbEZvcm0gPSAoRm9ybV9w Z19jbGFzcykgR0VUU1RSVUNUKHR1cGxlKTsKKworCQlpZiAoY2hlY2tfcGFydHJlbF9oYXNfZm9y ZWlnbl90YWJsZShyZWxGb3JtKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJjYW5ub3Qgc2V0 IHBhcmFtZXRlciBcIiVzXCIgdG8gdHJ1ZSBmb3IgcHVibGljYXRpb24gXCIlc1wiIiwKKwkJCQkJ CQkicHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiLCBwdWJuYW1lKSwKKwkJCQkJIGVycmRldGFp bCgicGFydGl0aW9uIHRhYmxlIFwiJXNcIiBpbiBwdWJsaWNhdGlvbiBjb250YWlucyBhIGZvcmVp Z24gcGFydGl0aW9uIiwKKwkJCQkJCQkgICBnZXRfcmVsX25hbWUocmVsRm9ybS0+b2lkKSkpKTsK Kwl9CisKKwl0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKGNsYXNzUmVsLCBOb0xv Y2spOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZm9yZWlnbmNtZHMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2ZvcmVpZ25jbWRzLmMKaW5kZXggYzE0ZTAzOGQ1NGYuLmY0 MWEyNGFlYTM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9mb3JlaWduY21kcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2ZvcmVpZ25jbWRzLmMKQEAgLTIxLDYgKzIxLDcg QEAKICNpbmNsdWRlICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIKICNpbmNsdWRlICJjYXRhbG9nL2lu ZGV4aW5nLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhY2Nlc3MuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BhcnRpdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl9kYXRhX3dy YXBwZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25fc2VydmVyLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19mb3JlaWduX3RhYmxlLmgiCkBAIC0xNDIzLDYgKzE0MjQsNTIgQEAgQ3Jl YXRlRm9yZWlnblRhYmxlKENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQgKnN0bXQsIE9pZCByZWxpZCkK IAogCWZ0cmVsID0gdGFibGVfb3BlbihGb3JlaWduVGFibGVSZWxhdGlvbklkLCBSb3dFeGNsdXNp dmVMb2NrKTsKIAorCS8qCisJICogQ2hlY2sgaWYgaXQgaXMgYSBmb3JlaWduIHBhcnRpdGlvbiBh bmQgdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGlzIG5vdAorCSAqIHB1Ymxpc2hlZCBvciBwdWJsaXNo ZWQgd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBvcHRpb24gYXMgZmFsc2UuCisJICov CisJaWYgKHN0bXQtPmJhc2UucGFydGJvdW5kICE9IE5VTEwpCisJeworCQlSYW5nZVZhciAgICpy b290ID0gY2FzdE5vZGUoUmFuZ2VWYXIsIGxmaXJzdChsaXN0X2hlYWQoc3RtdC0+YmFzZS5pbmhS ZWxhdGlvbnMpKSk7CisJCVJlbGF0aW9uCXJvb3RyZWwgPSB0YWJsZV9vcGVucnYocm9vdCwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCQlpZiAoUmVsYXRpb25HZXRGb3JtKHJvb3RyZWwpLT5yZWxraW5k ID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCXsKKwkJCU9pZAkJCXNjaGVtYWlkID0g UmVsYXRpb25HZXROYW1lc3BhY2Uocm9vdHJlbCk7CisJCQlMaXN0CSAgICpwdWJvaWRzID0gR2V0 UmVsYXRpb25QdWJsaWNhdGlvbnMocm9vdHJlbC0+cmRfaWQpOworCQkJTGlzdAkgICAqYW5jZXN0 b3JzOworCisJCQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLCBHZXRB bGxUYWJsZXNQdWJsaWNhdGlvbnMoKSk7CisJCQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVl X29pZChwdWJvaWRzLCBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1haWQpKTsKKwkJCWFuY2Vz dG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJvb3RyZWwtPnJkX2lkKTsKKworCQkJZm9y ZWFjaF9vaWQoYW5jZXN0b3IsIGFuY2VzdG9ycykKKwkJCXsKKwkJCQlwdWJvaWRzID0gbGlzdF9j b25jYXRfdW5pcXVlX29pZChwdWJvaWRzLAorCQkJCQkJCQkJCQkJIEdldFJlbGF0aW9uUHVibGlj YXRpb25zKGFuY2VzdG9yKSk7CisJCQkJc2NoZW1haWQgPSBnZXRfcmVsX25hbWVzcGFjZShhbmNl c3Rvcik7CisJCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywKKwkJ CQkJCQkJCQkJCSBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1haWQpKTsKKwkJCX0KKwkJCWxp c3RfZnJlZShhbmNlc3RvcnMpOworCisJCQlmb3JlYWNoX29pZChwdWJvaWQsIHB1Ym9pZHMpCisJ CQl7CisJCQkJUHVibGljYXRpb24gKnB1YiA9IEdldFB1YmxpY2F0aW9uKHB1Ym9pZCk7CisKKwkJ CQlpZiAocHViLT5wdWJ2aWFyb290KQorCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAorCQkJCQkJCSBlcnJtc2coImNhbm5vdCBj cmVhdGUgdGFibGUgZm9yZWlnbiBwYXJ0aXRpb24gXCIlc1wiIiwKKwkJCQkJCQkJCWdldF9yZWxf bmFtZShyZWxpZCkpLAorCQkJCQkJCSBlcnJkZXRhaWwoInBhcnRpdGlvbiB0YWJsZSBcIiVzXCIg aXMgcHVibGlzaGVkIHdpdGggb3B0aW9uIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IiwKKwkJ CQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJvb3RyZWwpKSkpOworCQkJfQorCQl9 CisKKwkJdGFibGVfY2xvc2Uocm9vdHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl9CisKIAkvKgog CSAqIEZvciBub3cgdGhlIG93bmVyIGNhbm5vdCBiZSBzcGVjaWZpZWQgb24gY3JlYXRlLiBVc2Ug ZWZmZWN0aXZlIHVzZXIgSUQuCiAJICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21k cy5jCmluZGV4IDE1MGE3NjhkMTZmLi5lMTEyMWE5NGY5MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv cHVibGljYXRpb25jbWRzLmMKQEAgLTg3Niw2ICs4NzYsMTAgQEAgQ3JlYXRlUHVibGljYXRpb24o UGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJLyogQXNz b2NpYXRlIG9iamVjdHMgd2l0aCB0aGUgcHVibGljYXRpb24uICovCiAJaWYgKHN0bXQtPmZvcl9h bGxfdGFibGVzKQogCXsKKwkJLyogQ2hlY2sgaWYgYW55IHBhcnRpdGlvbmVkIHRhYmxlIGhhcyBm b3JlaWduIHBhcnRpdGlvbiAqLworCQlpZiAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpCisJ CQljaGVja19mb3JlaWduX3RhYmxlcyhJbnZhbGlkT2lkLCBzdG10LT5wdWJuYW1lKTsKKwogCQkv KiBJbnZhbGlkYXRlIHJlbGNhY2hlIHNvIHRoYXQgcHVibGljYXRpb24gaW5mbyBpcyByZWJ1aWx0 LiAqLwogCQlDYWNoZUludmFsaWRhdGVSZWxjYWNoZUFsbCgpOwogCX0KQEAgLTEwNDEsNiArMTA0 NSw0OSBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVy UHVibGljYXRpb25TdG10ICpzdG10LAogCQl9CiAJfQogCisJLyoKKwkgKiBJZiBwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCBpcyBzZXQgdG8gdHJ1ZSwgY2hlY2sgaWYgdGhlIHB1YmxpY2F0aW9u CisJICogYWxyZWFkeSBoYXZlIGFueSBmb3JlaWduIHBhcnRpdGlvbgorCSAqLworCWlmIChwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbiAmJiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCkKKwl7CisJCUxpc3QJICAgKnNjaGVtYW9pZHMgPSBOSUw7CisJCUxpc3QJICAgKnJlbGlkcyA9 IE5JTDsKKworCQljaGFyCSAgICpwdWJuYW1lID0gc3RtdC0+cHVibmFtZTsKKworCQlpZiAocHVi Zm9ybS0+cHViYWxsdGFibGVzKQorCQkJY2hlY2tfZm9yZWlnbl90YWJsZXMoSW52YWxpZE9pZCwg cHVibmFtZSk7CisKKwkJc2NoZW1hb2lkcyA9IEdldFB1YmxpY2F0aW9uU2NoZW1hcyhwdWJmb3Jt LT5vaWQpOworCisJCWZvcmVhY2hfb2lkKHNjaGVtYW9pZCwgc2NoZW1hb2lkcykKKwkJCWNoZWNr X2ZvcmVpZ25fdGFibGVzKHNjaGVtYW9pZCwgcHVibmFtZSk7CisKKwkJcmVsaWRzID0gR2V0UHVi bGljYXRpb25SZWxhdGlvbnMocHViZm9ybS0+b2lkLCBQVUJMSUNBVElPTl9QQVJUX1JPT1QpOwor CisJCWZvcmVhY2hfb2lkKHJlbGlkLCByZWxpZHMpCisJCXsKKwkJCUhlYXBUdXBsZQlyZWx0dXA7 CisJCQlGb3JtX3BnX2NsYXNzIHJlbGZvcm07CisKKwkJCXJlbHR1cCA9IFNlYXJjaFN5c0NhY2hl MShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpKTsKKwkJCXJlbGZvcm0gPSAoRm9ybV9w Z19jbGFzcykgR0VUU1RSVUNUKHJlbHR1cCk7CisKKwkJCVJlbGVhc2VTeXNDYWNoZShyZWx0dXAp OworCisJCQlpZiAoY2hlY2tfcGFydHJlbF9oYXNfZm9yZWlnbl90YWJsZShyZWxmb3JtKSkKKwkJ CXsKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJjYW5ub3Qgc2V0IHBhcmFtZXRlciBcIiVz XCIgdG8gdHJ1ZSBmb3IgcHVibGljYXRpb24gXCIlc1wiIiwKKwkJCQkJCQkJInB1Ymxpc2hfdmlh X3BhcnRpdGlvbl9yb290IiwgcHVibmFtZSksCisJCQkJCQkgZXJyZGV0YWlsKCJwYXJ0aXRpb24g dGFibGUgXCIlc1wiIGluIHB1YmxpY2F0aW9uIGNvbnRhaW5zIGEgZm9yZWlnbiBwYXJ0aXRpb24i LAorCQkJCQkJCQkgICBnZXRfcmVsX25hbWUocmVsaWQpKSkpOworCQkJfQorCQl9CisJfQorCiAJ LyogRXZlcnl0aGluZyBvaywgZm9ybSBhIG5ldyB0dXBsZS4gKi8KIAltZW1zZXQodmFsdWVzLCAw LCBzaXplb2YodmFsdWVzKSk7CiAJbWVtc2V0KG51bGxzLCBmYWxzZSwgc2l6ZW9mKG51bGxzKSk7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDcyYTFiNjRjMmEyLi5lOTZlNTg5MDNlYyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTE5NDQwLDYgKzE5NDQwLDU5IEBAIEFURXhl Y0F0dGFjaFBhcnRpdGlvbihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIFBhcnRpdGlvbkNt ZCAqY21kLAogCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAogCQkJCSBl cnJtc2coImNhbm5vdCBhdHRhY2ggdGVtcG9yYXJ5IHJlbGF0aW9uIG9mIGFub3RoZXIgc2Vzc2lv biBhcyBwYXJ0aXRpb24iKSkpOwogCisJLyoKKwkgKiBDaGVjayBpZiBhdHRhY2hyZWwgaXMgYSBm b3JlaWduIHRhYmxlIG9yIGEgcGFydGl0aW9uZWQgdGFibGUgd2l0aAorCSAqIGZvcmVpZ24gcGFy dGl0aW9uIGFuZCByZWwgaXMgbm90IHBhcnQgb2YgcHVibGljYXRpb24gd2l0aCBvcHRpb24KKwkg KiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBhcyB0cnVlLgorCSAqLworCWlmIChhdHRhY2hy ZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUgfHwKKwkJY2hlY2tf cGFydHJlbF9oYXNfZm9yZWlnbl90YWJsZShSZWxhdGlvbkdldEZvcm0oYXR0YWNocmVsKSkpCisJ eworCQlPaWQJCQlzY2hlbWFpZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbCk7CisJCUxpc3QJ ICAgKnB1Ym9pZHMgPSBHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhyZWwtPnJkX2lkKTsKKwkJTGlz dAkgICAqYW5jZXN0b3JzOworCQljaGFyCSAgICpyZWxuYW1lID0gZ2V0X3JlbF9uYW1lKHJlbC0+ cmRfaWQpOworCQljaGFyCSAgICphdHRhY2hyZWxuYW1lID0gZ2V0X3JlbF9uYW1lKGF0dGFjaHJl bC0+cmRfaWQpOworCisJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMs IEdldEFsbFRhYmxlc1B1YmxpY2F0aW9ucygpKTsKKwkJcHVib2lkcyA9IGxpc3RfY29uY2F0X3Vu aXF1ZV9vaWQocHVib2lkcywgR2V0U2NoZW1hUHVibGljYXRpb25zKHNjaGVtYWlkKSk7CisJCWFu Y2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJlbC0+cmRfaWQpOworCisJCWZvcmVh Y2hfb2lkKGFuY2VzdG9yLCBhbmNlc3RvcnMpCisJCXsKKwkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNh dF91bmlxdWVfb2lkKHB1Ym9pZHMsCisJCQkJCQkJCQkJCSBHZXRSZWxhdGlvblB1YmxpY2F0aW9u cyhhbmNlc3RvcikpOworCQkJc2NoZW1haWQgPSBnZXRfcmVsX25hbWVzcGFjZShhbmNlc3Rvcik7 CisJCQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLAorCQkJCQkJCQkJ CQkgR2V0U2NoZW1hUHVibGljYXRpb25zKHNjaGVtYWlkKSk7CisJCX0KKworCQlsaXN0X2ZyZWUo YW5jZXN0b3JzKTsKKworCQlmb3JlYWNoX29pZChwdWJvaWQsIHB1Ym9pZHMpCisJCXsKKwkJCVB1 YmxpY2F0aW9uICpwdWIgPSBHZXRQdWJsaWNhdGlvbihwdWJvaWQpOworCisJCQlpZiAocHViLT5w dWJ2aWFyb290KQorCQkJeworCQkJCWlmIChhdHRhY2hyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBS RUxLSU5EX0ZPUkVJR05fVEFCTEUpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJCQkJIGVycm1zZygiY2Fubm90IGF0 dGFjaCBmb3JlaWduIHRhYmxlIFwiJXNcIiB0byBwYXJ0aXRpb24gdGFibGUgXCIlc1wiIiwKKwkJ CQkJCQkJCWF0dGFjaHJlbG5hbWUsIHJlbG5hbWUpLAorCQkJCQkJCSBlcnJkZXRhaWwoInBhcnRp dGlvbiB0YWJsZSBcIiVzXCIgaXMgcHVibGlzaGVkIHdpdGggb3B0aW9uIHB1Ymxpc2hfdmlhX3Bh cnRpdGlvbl9yb290IiwKKwkJCQkJCQkJCSAgIHJlbG5hbWUpKSk7CisJCQkJZWxzZQorCQkJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUp LAorCQkJCQkJCSBlcnJtc2coImNhbm5vdCBhdHRhY2ggdGFibGUgXCIlc1wiIHdpdGggZm9yZWln biBwYXJ0aXRpb24gdG8gcGFydGl0aW9uIHRhYmxlIFwiJXNcIiIsCisJCQkJCQkJCQlhdHRhY2hy ZWxuYW1lLCByZWxuYW1lKSwKKwkJCQkJCQkgZXJyZGV0YWlsKCJwYXJ0aXRpb24gdGFibGUgXCIl c1wiIGlzIHB1Ymxpc2hlZCB3aXRoIG9wdGlvbiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIs CisJCQkJCQkJCQkgICByZWxuYW1lKSkpOworCQkJfQorCQl9CisJfQorCiAJLyoKIAkgKiBDaGVj ayBpZiBhdHRhY2hyZWwgaGFzIGFueSBpZGVudGl0eSBjb2x1bW5zIG9yIGFueSBjb2x1bW5zIHRo YXQgYXJlbid0CiAJICogaW4gdGhlIHBhcmVudC4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRp b24uaAppbmRleCA0OGM3ZDFhODYxNS4uNTA3MDVkMTJjOTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3B1YmxpY2F0aW9uLmgKQEAgLTE5LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgImNhdGFsb2cvZ2Vu YmtpLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhZGRyZXNzLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19jbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHVibGljYXRpb25fZC5oIgkv KiBJV1lVIHByYWdtYTogZXhwb3J0ICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5MSw0 ICsxOTIsOCBAQCBleHRlcm4gQml0bWFwc2V0ICpwdWJfY29sbGlzdF90b19iaXRtYXBzZXQoQml0 bWFwc2V0ICpjb2x1bW5zLCBEYXR1bSBwdWJjb2xzLAogZXh0ZXJuIEJpdG1hcHNldCAqcHViX2Zv cm1fY29sc19tYXAoUmVsYXRpb24gcmVsYXRpb24sCiAJCQkJCQkJCQlQdWJsaXNoR2VuY29sc1R5 cGUgaW5jbHVkZV9nZW5jb2xzX3R5cGUpOwogCitleHRlcm4gYm9vbCBjaGVja19wYXJ0cmVsX2hh c19mb3JlaWduX3RhYmxlKEZvcm1fcGdfY2xhc3MgcmVsZm9ybSk7CisKK2V4dGVybiB2b2lkIGNo ZWNrX2ZvcmVpZ25fdGFibGVzKE9pZCBzY2hlbWFpZCwgY2hhciAqcHVibmFtZSk7CisKICNlbmRp ZgkJCQkJCQkvKiBQR19QVUJMSUNBVElPTl9IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cHVibGljYXRpb24ub3V0CmluZGV4IDRkZTk2YzA0ZjlkLi42YTBjMjQ1YmQ2MCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKQEAgLTE5MjQsNiArMTkyNCw5NSBA QCBEUk9QIFBVQkxJQ0FUSU9OIHB1YjE7CiBEUk9QIFBVQkxJQ0FUSU9OIHB1YjI7CiBEUk9QIFRB QkxFIGdlbmNvbHM7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUZXN0IHdoZW4g Zm9yZWlnbiB0YWJsZSBpcyBhIHBhcnRpdGlvbiBvZiBhIHBhcnRpdGlvbmVkIHRhYmxlIG9uIHdo aWNoCistLSBwdWJsaWNhdGlvbiBpcyBjcmVhdGVkCitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9 ICdFUlJPUic7CitDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIgdGVzdF9mZHc7CitDUkVBVEUg U0VSVkVSIGZkd19zZXJ2ZXIgRk9SRUlHTiBEQVRBIFdSQVBQRVIgdGVzdF9mZHc7CitDUkVBVEUg U0NIRU1BIHNjaDM7CitDUkVBVEUgVEFCTEUgc2NoMy50bWFpbihpZCBpbnQpIFBBUlRJVElPTiBC WSBSQU5HRShpZCk7CitDUkVBVEUgVEFCTEUgc2NoMy5wYXJ0MSBQQVJUSVRJT04gT0Ygc2NoMy50 bWFpbiBGT1IgVkFMVUVTIEZST00gKDApIFRPICg1KTsKK0NSRUFURSBUQUJMRSBzY2gzLnBhcnQy KGlkIGludCkgUEFSVElUSU9OIEJZIFJBTkdFKGlkKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHNj aDMucGFydDJfMSBQQVJUSVRJT04gT0Ygc2NoMy5wYXJ0MiBGT1IgVkFMVUVTIEZST00gKDUpIFRP ICgxMCkgU0VSVkVSIGZkd19zZXJ2ZXI7CitBTFRFUiBUQUJMRSBzY2gzLnRtYWluIEFUVEFDSCBQ QVJUSVRJT04gc2NoMy5wYXJ0MiBGT1IgVkFMVUVTIEZST00gKDUpIFRPICgxMCk7CistLSBDYW4n dCBjcmVhdGUgcHVibGljYXRpb25zIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0 cnVlLCBpZiB0YWJsZQorLS0gaGFzIGEgZm9yZWlnbiBwYXJ0aXRpb24KK0NSRUFURSBQVUJMSUNB VElPTiBwdWIxIEZPUiBUQUJMRSBzY2gzLnRtYWluIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlv bl9yb290KTsKK0VSUk9SOiAgY2Fubm90IHNldCBwYXJhbWV0ZXIgInB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290IiB0byB0cnVlIGZvciBwdWJsaWNhdGlvbiAicHViMSIKK0RFVEFJTDogIHBhcnRp dGlvbiB0YWJsZSAidG1haW4iIGluIHB1YmxpY2F0aW9uIGNvbnRhaW5zIGEgZm9yZWlnbiBwYXJ0 aXRpb24KK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHNjaDMg V0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworRVJST1I6ICBjYW5ub3Qgc2V0IHBh cmFtZXRlciAicHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiIHRvIHRydWUgZm9yIHB1YmxpY2F0 aW9uICJwdWIxIgorREVUQUlMOiAgcGFydGl0aW9uIHRhYmxlICJ0bWFpbiIgaW4gcHVibGljYXRp b24gY29udGFpbnMgYSBmb3JlaWduIHBhcnRpdGlvbgorQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEg Rk9SIEFMTCBUQUJMRVMgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworRVJST1I6 ICBjYW5ub3Qgc2V0IHBhcmFtZXRlciAicHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiIHRvIHRy dWUgZm9yIHB1YmxpY2F0aW9uICJwdWIxIgorREVUQUlMOiAgcGFydGl0aW9uIHRhYmxlICJ0bWFp biIgaW4gcHVibGljYXRpb24gY29udGFpbnMgYSBmb3JlaWduIHBhcnRpdGlvbgorLS0gVGVzdCB3 aGVuIGEgcGFydGl0aW9uZWQgdGFibGUgd2l0aCBmb3JlaWduIHRhYmxlIGFzIGEgcGFydGl0aW9u IGlzIGF0dGFjaGVkCistLSB0byBwYXJ0aXRpb25lZCB0YWJsZSB3aGljaCBpcyBhbHJlYWR5IHB1 Ymxpc2hlZAorQUxURVIgVEFCTEUgc2NoMy50bWFpbiBERVRBQ0ggUEFSVElUSU9OIHNjaDMucGFy dDI7CitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgVEFCTEUgc2NoMy50bWFpbiBXSVRIIChw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CitBTFRFUiBUQUJMRSBzY2gzLnRtYWluIEFUVEFD SCBQQVJUSVRJT04gc2NoMy5wYXJ0MiBGT1IgVkFMVUVTIEZST00gKDUpIFRPICgxMCk7CitFUlJP UjogIGNhbm5vdCBhdHRhY2ggdGFibGUgInBhcnQyIiB3aXRoIGZvcmVpZ24gcGFydGl0aW9uIHRv IHBhcnRpdGlvbiB0YWJsZSAidG1haW4iCitERVRBSUw6ICBwYXJ0aXRpb24gdGFibGUgInRtYWlu IiBpcyBwdWJsaXNoZWQgd2l0aCBvcHRpb24gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QKKy0t IENhbid0IGNyZWF0ZSBmb3JlaWduIHBhcnRpdGlvbiBvZiBwdWJsaXNoZWQgdGFibGUgd2l0aAor LS0gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlCitDUkVBVEUgRk9SRUlHTiBUQUJM RSBzY2gzLnBhcnQzXzEgUEFSVElUSU9OIE9GIHNjaDMudG1haW4gRk9SIFZBTFVFUyBGUk9NICgx MCkgVE8gKDE1KSBTRVJWRVIgZmR3X3NlcnZlcjsKK0VSUk9SOiAgY2Fubm90IGNyZWF0ZSB0YWJs ZSBmb3JlaWduIHBhcnRpdGlvbiAicGFydDNfMSIKK0RFVEFJTDogIHBhcnRpdGlvbiB0YWJsZSAi dG1haW4iIGlzIHB1Ymxpc2hlZCB3aXRoIG9wdGlvbiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dAorLS0gQ2FuJ3QgYXR0YWNoIGZvcmVpZ24gcGFydGl0aW9uIHRvIHB1Ymxpc2hlZCB0YWJsZSB3 aXRoCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUKK0NSRUFURSBGT1JFSUdO IFRBQkxFIHNjaDMucGFydDNfMihpZCBpbnQpIFNFUlZFUiBmZHdfc2VydmVyOworQUxURVIgVEFC TEUgc2NoMy50bWFpbiBBVFRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDNfMiBGT1IgVkFMVUVTIEZS T00gKDE1KSBUTyAoMjApOworRVJST1I6ICBjYW5ub3QgYXR0YWNoIGZvcmVpZ24gdGFibGUgInBh cnQzXzIiIHRvIHBhcnRpdGlvbiB0YWJsZSAidG1haW4iCitERVRBSUw6ICBwYXJ0aXRpb24gdGFi bGUgInRtYWluIiBpcyBwdWJsaXNoZWQgd2l0aCBvcHRpb24gcHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QKK0NSRUFURSBTQ0hFTUEgc2NoNDsKK0NSRUFURSBUQUJMRSBzY2g0LnRtYWluKGlkIGlu dCkgUEFSVElUSU9OIEJZIFJBTkdFKGlkKTsKKy0tIHB1YmxpY2F0aW9uIGNyZWF0ZWQgd2l0aCBG T1IgVEFCTEVTIElOIFNDSEVNQQorRFJPUCBQVUJMSUNBVElPTiBwdWIxOworQ1JFQVRFIFBVQkxJ Q0FUSU9OIHB1YjEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgc2NoNCBXSVRIIChwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCk7CistLSBDYW4ndCBjcmVhdGUgZm9yZWlnbiBwYXJ0aXRpb24gb2YgcHVi bGlzaGVkIHRhYmxlIHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQor Q1JFQVRFIEZPUkVJR04gVEFCTEUgc2NoMy5wYXJ0M18xIFBBUlRJVElPTiBPRiBzY2g0LnRtYWlu IEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgxNSkgU0VSVkVSIGZkd19zZXJ2ZXI7CitFUlJPUjog IGNhbm5vdCBjcmVhdGUgdGFibGUgZm9yZWlnbiBwYXJ0aXRpb24gInBhcnQzXzEiCitERVRBSUw6 ICBwYXJ0aXRpb24gdGFibGUgInRtYWluIiBpcyBwdWJsaXNoZWQgd2l0aCBvcHRpb24gcHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QKKy0tIENhbid0IGF0dGFjaCBmb3JlaWduIHBhcnRpdGlvbiB0 byBwdWJsaXNoZWQgdGFibGUgd2l0aAorLS0gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0 cnVlCitBTFRFUiBUQUJMRSBzY2g0LnRtYWluIEFUVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0M18y IEZPUiBWQUxVRVMgRlJPTSAoMTUpIFRPICgyMCk7CitFUlJPUjogIGNhbm5vdCBhdHRhY2ggZm9y ZWlnbiB0YWJsZSAicGFydDNfMiIgdG8gcGFydGl0aW9uIHRhYmxlICJ0bWFpbiIKK0RFVEFJTDog IHBhcnRpdGlvbiB0YWJsZSAidG1haW4iIGlzIHB1Ymxpc2hlZCB3aXRoIG9wdGlvbiBwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdAorRFJPUCBQVUJMSUNBVElPTiBwdWIxOworLS0gVGVzdCB3aXRo IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UKKy0tIEZvcmVpZ24gcGFydGl0aW9u cyBhcmUgc2tpcHBlZCBieSBkZWZhdWx0CitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgVEFC TEUgc2NoMy50bWFpbjsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIyIEZPUiBUQUJMRVMgSU4gU0NI RU1BIHNjaDM7CitDUkVBVEUgUFVCTElDQVRJT04gcHViMyBGT1IgQUxMIFRBQkxFUzsKKy0tIENy ZWF0ZSBmb3JlaWduIHBhcnRpdGlvbiBvZiBwdWJsaXNoZWQgdGFibGUgd2l0aAorLS0gcHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZQorQ1JFQVRFIEZPUkVJR04gVEFCTEUgc2NoMy5w YXJ0M18xIFBBUlRJVElPTiBPRiBzY2gzLnRtYWluIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgx NSkgU0VSVkVSIGZkd19zZXJ2ZXI7CistLSBBdHRhY2ggZm9yZWlnbiBwYXJ0aXRpb24gdG8gcHVi bGlzaGVkIHRhYmxlCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlCitBTFRF UiBUQUJMRSBzY2gzLnRtYWluIEFUVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0M18yIEZPUiBWQUxV RVMgRlJPTSAoMTUpIFRPICgyMCk7CistLSBDaGVjayB0aGUgcHVibGlzaGVkIHRhYmxlcworU0VM RUNUIHB1Ym5hbWUsIHRhYmxlbmFtZSBGUk9NIHBnX3B1YmxpY2F0aW9uX3RhYmxlcyBXSEVSRSBz Y2hlbWFuYW1lIGluICgnc2NoMycsICdzY2g0JykgT1JERVIgQlkgcHVibmFtZSwgdGFibGVuYW1l OworIHB1Ym5hbWUgfCB0YWJsZW5hbWUgCistLS0tLS0tLS0rLS0tLS0tLS0tLS0KKyBwdWIxICAg IHwgcGFydDEKKyBwdWIyICAgIHwgcGFydDEKKyBwdWIzICAgIHwgcGFydDEKKygzIHJvd3MpCisK Ky0tIENhbid0IGFsdGVyIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IHRvIHRydWUsIGlmIHB1 YmxpY2F0aW9uIGFscmVhZHkgaGF2ZQorLS0gZm9yZWlnbiBwYXJ0aXRpb24KK0FMVEVSIFBVQkxJ Q0FUSU9OIHB1YjEgU0VUIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CitFUlJPUjogIGNh bm5vdCBzZXQgcGFyYW1ldGVyICJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIgdG8gdHJ1ZSBm b3IgcHVibGljYXRpb24gInB1YjEiCitERVRBSUw6ICBwYXJ0aXRpb24gdGFibGUgInRtYWluIiBp biBwdWJsaWNhdGlvbiBjb250YWlucyBhIGZvcmVpZ24gcGFydGl0aW9uCitEUk9QIFBVQkxJQ0FU SU9OIHB1YjE7CitEUk9QIFBVQkxJQ0FUSU9OIHB1YjI7CitEUk9QIFBVQkxJQ0FUSU9OIHB1YjM7 CitEUk9QIFNDSEVNQSBzY2gzIENBU0NBREU7CitEUk9QIFNDSEVNQSBzY2g0IENBU0NBREU7CitE Uk9QIFNFUlZFUiBmZHdfc2VydmVyOworRFJPUCBGT1JFSUdOIERBVEEgV1JBUFBFUiB0ZXN0X2Zk dzsKIFJFU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTjsKIERST1AgUk9MRSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIsIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBEUk9QIFJPTEUgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyX2R1bW15OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvcHVibGljYXRpb24uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3Fs CmluZGV4IDY4MDAxZGU0MDAwLi40OWM5ZDk4YjY2OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvcHVibGljYXRpb24uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1Ymxp Y2F0aW9uLnNxbApAQCAtMTIyMyw2ICsxMjIzLDg3IEBAIERST1AgUFVCTElDQVRJT04gcHViMjsK IERST1AgVEFCTEUgZ2VuY29sczsKIAogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKKy0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCist LSBUZXN0IHdoZW4gZm9yZWlnbiB0YWJsZSBpcyBhIHBhcnRpdGlvbiBvZiBhIHBhcnRpdGlvbmVk IHRhYmxlIG9uIHdoaWNoCistLSBwdWJsaWNhdGlvbiBpcyBjcmVhdGVkCitTRVQgY2xpZW50X21p bl9tZXNzYWdlcyA9ICdFUlJPUic7CitDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIgdGVzdF9m ZHc7CitDUkVBVEUgU0VSVkVSIGZkd19zZXJ2ZXIgRk9SRUlHTiBEQVRBIFdSQVBQRVIgdGVzdF9m ZHc7CisKK0NSRUFURSBTQ0hFTUEgc2NoMzsKK0NSRUFURSBUQUJMRSBzY2gzLnRtYWluKGlkIGlu dCkgUEFSVElUSU9OIEJZIFJBTkdFKGlkKTsKK0NSRUFURSBUQUJMRSBzY2gzLnBhcnQxIFBBUlRJ VElPTiBPRiBzY2gzLnRtYWluIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDUpOworQ1JFQVRFIFRB QkxFIHNjaDMucGFydDIoaWQgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoaWQpOworQ1JFQVRFIEZP UkVJR04gVEFCTEUgc2NoMy5wYXJ0Ml8xIFBBUlRJVElPTiBPRiBzY2gzLnBhcnQyIEZPUiBWQUxV RVMgRlJPTSAoNSkgVE8gKDEwKSBTRVJWRVIgZmR3X3NlcnZlcjsKK0FMVEVSIFRBQkxFIHNjaDMu dG1haW4gQVRUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQyIEZPUiBWQUxVRVMgRlJPTSAoNSkgVE8g KDEwKTsKKworLS0gQ2FuJ3QgY3JlYXRlIHB1YmxpY2F0aW9ucyB3aXRoIHB1Ymxpc2hfdmlhX3Bh cnRpdGlvbl9yb290ID0gdHJ1ZSwgaWYgdGFibGUKKy0tIGhhcyBhIGZvcmVpZ24gcGFydGl0aW9u CitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgVEFCTEUgc2NoMy50bWFpbiBXSVRIIChwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgVEFC TEVTIElOIFNDSEVNQSBzY2gzIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKK0NS RUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBBTEwgVEFCTEVTIFdJVEggKHB1Ymxpc2hfdmlhX3Bh cnRpdGlvbl9yb290KTsKKworLS0gVGVzdCB3aGVuIGEgcGFydGl0aW9uZWQgdGFibGUgd2l0aCBm b3JlaWduIHRhYmxlIGFzIGEgcGFydGl0aW9uIGlzIGF0dGFjaGVkCistLSB0byBwYXJ0aXRpb25l ZCB0YWJsZSB3aGljaCBpcyBhbHJlYWR5IHB1Ymxpc2hlZAorQUxURVIgVEFCTEUgc2NoMy50bWFp biBERVRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDI7CitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBG T1IgVEFCTEUgc2NoMy50bWFpbiBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CitB TFRFUiBUQUJMRSBzY2gzLnRtYWluIEFUVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0MiBGT1IgVkFM VUVTIEZST00gKDUpIFRPICgxMCk7CisKKy0tIENhbid0IGNyZWF0ZSBmb3JlaWduIHBhcnRpdGlv biBvZiBwdWJsaXNoZWQgdGFibGUgd2l0aAorLS0gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qg PSB0cnVlCitDUkVBVEUgRk9SRUlHTiBUQUJMRSBzY2gzLnBhcnQzXzEgUEFSVElUSU9OIE9GIHNj aDMudG1haW4gRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDE1KSBTRVJWRVIgZmR3X3NlcnZlcjsK KworLS0gQ2FuJ3QgYXR0YWNoIGZvcmVpZ24gcGFydGl0aW9uIHRvIHB1Ymxpc2hlZCB0YWJsZSB3 aXRoCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUKK0NSRUFURSBGT1JFSUdO IFRBQkxFIHNjaDMucGFydDNfMihpZCBpbnQpIFNFUlZFUiBmZHdfc2VydmVyOworQUxURVIgVEFC TEUgc2NoMy50bWFpbiBBVFRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDNfMiBGT1IgVkFMVUVTIEZS T00gKDE1KSBUTyAoMjApOworCitDUkVBVEUgU0NIRU1BIHNjaDQ7CitDUkVBVEUgVEFCTEUgc2No NC50bWFpbihpZCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRShpZCk7CisKKy0tIHB1YmxpY2F0aW9u IGNyZWF0ZWQgd2l0aCBGT1IgVEFCTEVTIElOIFNDSEVNQQorRFJPUCBQVUJMSUNBVElPTiBwdWIx OworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgc2NoNCBXSVRI IChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CisKKy0tIENhbid0IGNyZWF0ZSBmb3JlaWdu IHBhcnRpdGlvbiBvZiBwdWJsaXNoZWQgdGFibGUgd2l0aAorLS0gcHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QgPSB0cnVlCitDUkVBVEUgRk9SRUlHTiBUQUJMRSBzY2gzLnBhcnQzXzEgUEFSVElU SU9OIE9GIHNjaDQudG1haW4gRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDE1KSBTRVJWRVIgZmR3 X3NlcnZlcjsKKworLS0gQ2FuJ3QgYXR0YWNoIGZvcmVpZ24gcGFydGl0aW9uIHRvIHB1Ymxpc2hl ZCB0YWJsZSB3aXRoCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUKK0FMVEVS IFRBQkxFIHNjaDQudG1haW4gQVRUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQzXzIgRk9SIFZBTFVF UyBGUk9NICgxNSkgVE8gKDIwKTsKK0RST1AgUFVCTElDQVRJT04gcHViMTsKKworLS0gVGVzdCB3 aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UKKy0tIEZvcmVpZ24gcGFydGl0 aW9ucyBhcmUgc2tpcHBlZCBieSBkZWZhdWx0CitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1Ig VEFCTEUgc2NoMy50bWFpbjsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIyIEZPUiBUQUJMRVMgSU4g U0NIRU1BIHNjaDM7CitDUkVBVEUgUFVCTElDQVRJT04gcHViMyBGT1IgQUxMIFRBQkxFUzsKKwor LS0gQ3JlYXRlIGZvcmVpZ24gcGFydGl0aW9uIG9mIHB1Ymxpc2hlZCB0YWJsZSB3aXRoCistLSBw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlCitDUkVBVEUgRk9SRUlHTiBUQUJMRSBz Y2gzLnBhcnQzXzEgUEFSVElUSU9OIE9GIHNjaDMudG1haW4gRk9SIFZBTFVFUyBGUk9NICgxMCkg VE8gKDE1KSBTRVJWRVIgZmR3X3NlcnZlcjsKKworLS0gQXR0YWNoIGZvcmVpZ24gcGFydGl0aW9u IHRvIHB1Ymxpc2hlZCB0YWJsZQorLS0gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxz ZQorQUxURVIgVEFCTEUgc2NoMy50bWFpbiBBVFRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDNfMiBG T1IgVkFMVUVTIEZST00gKDE1KSBUTyAoMjApOworCistLSBDaGVjayB0aGUgcHVibGlzaGVkIHRh YmxlcworU0VMRUNUIHB1Ym5hbWUsIHRhYmxlbmFtZSBGUk9NIHBnX3B1YmxpY2F0aW9uX3RhYmxl cyBXSEVSRSBzY2hlbWFuYW1lIGluICgnc2NoMycsICdzY2g0JykgT1JERVIgQlkgcHVibmFtZSwg dGFibGVuYW1lOworCistLSBDYW4ndCBhbHRlciBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCB0 byB0cnVlLCBpZiBwdWJsaWNhdGlvbiBhbHJlYWR5IGhhdmUKKy0tIGZvcmVpZ24gcGFydGl0aW9u CitBTFRFUiBQVUJMSUNBVElPTiBwdWIxIFNFVCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qp OworCitEUk9QIFBVQkxJQ0FUSU9OIHB1YjE7CitEUk9QIFBVQkxJQ0FUSU9OIHB1YjI7CitEUk9Q IFBVQkxJQ0FUSU9OIHB1YjM7CitEUk9QIFNDSEVNQSBzY2gzIENBU0NBREU7CitEUk9QIFNDSEVN QSBzY2g0IENBU0NBREU7CitEUk9QIFNFUlZFUiBmZHdfc2VydmVyOworRFJPUCBGT1JFSUdOIERB VEEgV1JBUFBFUiB0ZXN0X2ZkdzsKKwogUkVTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OOwogRFJP UCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciwgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy MjsKIERST1AgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXJfZHVtbXk7Ci0tIAoyLjM0LjEK Cg== --000000000000455d21062e681ff5--