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 1uXYaW-00BR3V-SD for pgsql-hackers@arkaria.postgresql.org; Fri, 04 Jul 2025 05:03:53 +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 1uXYaT-00GKzO-Od for pgsql-hackers@arkaria.postgresql.org; Fri, 04 Jul 2025 05:03:50 +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 ) id 1uXYaT-00GKxs-Al for pgsql-hackers@lists.postgresql.org; Fri, 04 Jul 2025 05:03:50 +0000 Received: from mail-oo1-xc31.google.com ([2607:f8b0:4864:20::c31]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uXYaR-005dKE-2N for pgsql-hackers@lists.postgresql.org; Fri, 04 Jul 2025 05:03:49 +0000 Received: by mail-oo1-xc31.google.com with SMTP id 006d021491bc7-60d6303a11eso375505eaf.0 for ; Thu, 03 Jul 2025 22:03:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751605426; x=1752210226; 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=0fk8Dl6OmiSt0kY4ks8xvwq3QolOCORDW+X2cvN2cfM=; b=Bg5D3zj/VGm8xSVMDh0z+rMkP3KWjOIf9himzo5cq1/5E1BkI56Qb9r70KC9g+m+Zv 1rj2DtxtS+vBeW2Et79joy9gImzxhTfKa0oN6DGIsYESA7UwvJg/nMlt3lk5YtYiCWph zfJQkh1n8P9PlyrWoZjS0snDKTh7/nKJ/Yrf8h5F/6xyKcY5rZ97eV93unUSHCSdwssz IQHeo2Opt1A9B+9El4LeKGKbpsp8p3yd3gYyB9oavWzdpN9Xo8RP/trQTaERqrE8TXWa jGIsO2xV3UalBSUXqAbNz50Y+xc8emtnuvcXF+V2RyRcZJf7sGwvP9Dtno/lf4CJWDEc VnjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751605426; x=1752210226; 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=0fk8Dl6OmiSt0kY4ks8xvwq3QolOCORDW+X2cvN2cfM=; b=T5C3QSrA3ttqZJyAuD7iXeS1KgXRnQZtZBecIrRTVMQNevLo74sqSAV4tlc3Mh3FMP wX7WrMKVz7KIze34b4fwfbv/FJkYsvqgHt74hgiS4HxOI0nJ1zN71dirU0kWKy8Ubv9t w0rebCiScQNxm0LEpI5/B+AccJCLeSVxvhcgF5aJcTNYROsHcP2yiiArEu/2WL3QSIsb gILLQzS7ltZpsJOmy6Omopp0CfYJB0TB7ZP9ZXgKhzeeCYLmqpxLxprK9ljLPdnH4WxJ LVg9PrVx3iyHAfiyf5HnKmKRF1PmsoL7yOofeACCehuqcH6nLT51csvVDdVppPO3qFwV BB9Q== X-Forwarded-Encrypted: i=1; AJvYcCWtuzDJHJF7co/ZonlQQz2M8UCG6Ios8JD1/MjkFiEq0JBlPtAPe+RyePmcAyLtGR85AdufbWjXKMqYl0rd@lists.postgresql.org X-Gm-Message-State: AOJu0Yxm6pomRtqhJeJclHgVtV0gcbJV3t4Fxc/Dnvi7DeGzxJ0e930V prBiYmyEIFzTXy3uFdS2kXbAXMTd1akhE94eLLPVOrGc/qJb3MILGA6SPR+gLebMJN/CyE5RYlF awqz+DxZbATGIjbKrotHKZdjnSZQE8I0= X-Gm-Gg: ASbGncvay5Fn2aeCvpd0GyYCguGHXpG8qeLheHfcsdZNKxtKyH/rWcnd9hiEE3+cP0q ACgEjRdo4vmzDcyfW4Lk450GxvrOPtLz6vUgA301hBvG0YoBrcjP4fN9woyoamYhN4kgIhNxCC4 ExAFJeb7M2eLh42we42Oe9trtVxQdJgAS0GCuzyULBfOl3gg== X-Google-Smtp-Source: AGHT+IEl+iFSCkucC98uVR7vUugocgrd62fqWTisK8ZpoLc0CIRi+xrLYetzl+d2thlZPy4ew7ODnjjXF+Ic1UCuV+E= X-Received: by 2002:a05:6808:6f8f:b0:406:6f21:8161 with SMTP id 5614622812f47-40d04a0916fmr981945b6e.9.1751605425838; Thu, 03 Jul 2025 22:03:45 -0700 (PDT) MIME-Version: 1.0 References: <202505101759.6qlloepaeddl@alvherre.pgsql> In-Reply-To: From: Shlok Kyal Date: Fri, 4 Jul 2025 10:33:34 +0530 X-Gm-Features: Ac12FXxGeul8_pNfn2Oyq_QcH5c1K699mwKsmqohzot10ejGN40wfj6U19YEX40 Message-ID: Subject: Re: Restrict publishing of partitioned table with a foreign table as partition To: Ajin Cherian Cc: Amit Kapila , =?UTF-8?Q?=C3=81lvaro_Herrera?= , vignesh C , Sergey Tatarintsev , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000031b85b0639136b0a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000031b85b0639136b0a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, 1 Jul 2025 at 08:20, Ajin Cherian wrote: > > On Mon, Jun 9, 2025 at 3:58=E2=80=AFPM Shlok Kyal wrote: > > > > On Wed, 4 Jun 2025 at 16:12, Ajin Cherian wrote: > > > > > > On Tue, May 20, 2025 at 2:33=E2=80=AFAM Shlok Kyal wrote: > > > > > > > > This approach seems better to me. I have created a patch with the > > > > above approach. > > > > > > > > Thanks and Regards, > > > > Shlok Kyal > > > > > > Some quick comments on the patch: > > > 1. In doc/src/sgml/ref/create_subscription.sgml: > > > + has partitioned table with foreign table as partition. If this s= cenario is > > > + detected we ERROR is logged to the user. > > > + > > > + > > > > > > Should be: "If this scenario is detected an ERROR is logged to the > > > user." (remove "we"). > > > > > > In src/backend/commands/subscriptioncmds.c: > > > 2. The comment header: > > > + * This function is in charge of detecting if publisher with > > > + * publish_via_partition_root=3Dtrue publishes a partitioned table t= hat has a > > > + * foreign table as a partition. > > > > > > Add "and throw an error if found" at the end of that sentence to > > > correctly describe what the function does. > > > > > > 3. > > > + appendStringInfoString(&cmd, > > > + "SELECT DISTINCT P.pubname AS pubname " > > > + "from pg_catalog.pg_publication p, LATERA= L " > > > + "pg_get_publication_tables(p.pubname) gpt= , LATERAL " > > > + "pg_partition_tree(gpt.relid) gt JOIN > > > pg_catalog.pg_foreign_table ft ON " > > > + "ft.ftrelid =3D gt.relid WHERE p.pubviaro= ot > > > =3D true AND p.pubname IN ("); > > > > > > use FROM rather than from to maintain SQL style consistency. > > > > > > 4. > > > + errdetail_plural("The subscription being created on = a > > > publication (%s) with publish_via_root_partition =3D true and contain= s > > > partitioned tables with foreign table as partition ", > > > + "The subscription being created on > > > publications (%s) with publish_via_root_partition =3D true and contai= ns > > > partitioned tables with foreign table as partition ", > > > + list_length(publist), pubnames->dat= a), > > > > > > I think you meant "publish_via_partition_root" here and not > > > "publish_via_root_partition ". > > > > > > > I have addressed all the comments and attached the updated patch. > > > Hi Shlok, > > Some more comments: > 1. > + Replication is not supported for foreign tables. When used as part= itions > + of partitioned tables, publishing of the partitioned table is only = allowed > + if the publish_via_partition_root is set to > + false. > > In patch: "When used as partitions of partitioned tables, publishing > of the partitioned table is only allowed if the > publish_via_partition_root is set to > false. > > Change to: When foreign tables are used as partitions of partitioned > tables, publishing of the partitioned table is only allowed if the > publish_via_partition_root is set to > false. > Fixed > 2. > + > + When using a subscription parameter copy_data =3D true, correspondin= g > + publications are checked if it has publish_via_partition_root =3D tr= ue and > + has partitioned table with foreign table as partition. If this scena= rio is > + detected an ERROR is logged to the user. > + > > In patch: "When using a subscription parameter copy_data =3D true, ..." > Change to: "When using the subscription parameter copy_data =3D true, ...= " > > In patch: "and has partitioned table with foreign table as partition." > Change to: "and has a partitioned table with a foreign table as its parti= tion" > Fixed > 3. > + * check_publications_foreign_parts > + * Check if the publications, on which subscriber is subscribing, publis= hes any > + * partitioned table that has an foreign table as its partition and has > + * publish_via_partition_root set as true. The check is performed only i= f > + * copy_data is set as true for the subscription. > > In patch: "publishes any partitioned table that has an foreign table > as its partition" > Change to: "publishes any partitioned table that has a foreign table > as its partition" > Fixed > 4. > + * DML data changes are not published for data in foreign tables, > + * and yet the tablesync worker is not smart enough to omit data from > + * foreign tables when they are partitions of partitioned tables. > > change to:"Although DML changes to foreign tables are excluded from > publication, the tablesync worker will still attempt to copy data from > foreign table partitions during initial table synchronization." > Fixed > 5. > + * When publish_via_partition_root is false, each partition published fo= r > + * replication is listed individually in pg_subscription_rel, and we > + * don't add partitions that are foreign tables, so this check is not > + * needed. > > In patch: "so this check is not needed" > Change to: "so this function is not called for such tables" > Fixed > 6. > + errdetail_plural("The subscription being created on a > publication (%s) with publish_via_partition_root =3D true and contains > partitioned tables with foreign table as partition ", > + "The subscription being created on > publications (%s) with publish_via_partition_root =3D true and contains > partitioned tables with foreign table as partition ", > + list_length(publist), pubnames->data), > > Change to: "The subscription is for a publication (%s) with > publish_via_partition_root =3D true but one of the partitioned tables > has a foreign table as a partition" > "The subscription is for publications (%s) with > publish_via_partition_root =3D true but one of the partitioned tables > has a foreign table as a partition" > "one of the partitioned tables" this would be misleading as publication can have multiple partitioned table which have foreign table as its partition. I have reworded it like: "The subscription is for a publication (%s) with publish_via_partition_root =3D true, but one or more partitioned tables have foreign tables as partitions.", "The subscription is for publications (%s) with publish_via_partition_root =3D true but one or more partitioned tables have foreign tables as partitions." > 7. > + /* capture all publications that include this relation directly = */ > + puboids =3D list_concat(puboids, GetRelationPublications(rel->rd= _id)); > + schemaid =3D RelationGetNamespace(rel); > + puboids =3D list_concat(puboids, GetSchemaPublications(schemaid)= ); > + > + /* and do the same for its ancestors, if any */ > + ancestors =3D get_partition_ancestors(rel->rd_id); > + foreach_oid(ancestor, ancestors) > + { > + puboids =3D list_concat(puboids, GetRelationPublications(anc= estor)); > + schemaid =3D get_rel_namespace(ancestor); > + puboids =3D list_concat(puboids, GetSchemaPublications(schem= aid)); > + } > + > + /* Now check the publish_via_partition_root bit for each of thos= e */ > + list_sort(puboids, list_oid_cmp); > + list_deduplicate_oid(puboids); > + foreach_oid(puboid, puboids) > > Why do we need to do all this logic for non partition foreign tables? > Just directly throw an error for those tables and do this extra logic > only for partitioned tables. > We need to throw an error if foreign table is being attached to a partitioned table which is already published (or its parent is already published) with publish_via_partition_root is true. So, this logic is required to check if the table to which it is being attached is published with publish_via_partition_root or not. > > 8. > + pg_fatal("Your installation contains publications, which has > foreign table which are partitions of published table.\n" > + "A list of potentially-affected publications is in > the file:\n" > > Change to: "Your installation contains publications, where one of the > partitioned tables has a foreign table as a partition.\n" > There can be mutiple partitioned table published. Reworded the error as: "Your installation contains publications where one or more partitioned tables have foreign tables as partitions.\n" Thanks for reviewing the patch. I have addressed the comments and attached the latest patch. Thanks and Regards, Shlok Kyal --00000000000031b85b0639136b0a Content-Type: application/octet-stream; name="v17-0001-Restrict-publishing-of-partitioned-table-with-fo.patch" Content-Disposition: attachment; filename="v17-0001-Restrict-publishing-of-partitioned-table-with-fo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mcoclw2b0 RnJvbSA5MzM5Y2UzYjBlYzUxMWYzMGUyMTYxM2RlMTIwNzZiMzVjZmIxOTZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMTkgTWF5IDIwMjUgMTk6NDc6MDQgKzA1MzAKU3ViamVjdDogW1BBVENIIHYx N10gUmVzdHJpY3QgcHVibGlzaGluZyBvZiBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZvcmVpZ24K IHRhYmxlIGFzIGl0cyBwYXJ0aXRpb24KCkxvZ2ljYWwgcmVwbGljYXRpb24gb2YgZm9yZWlnbiB0 YWJsZSBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3ZSB0aHJvdyBhbgplcnJvciBpbiB0aGlzIGNhc2Uu IEJ1dCB3aGVuIHdlIGNyZWF0ZSBhIHB1YmxpY2F0aW9uIG9uIGEgcGFydGl0aW9uZWQKdGFibGUg dGhhdCBoYXMgYSBmb3JlaWduIHRhYmxlIGFzIGl0cyBwYXJ0aXRpb24sIHRoZSBpbml0aWFsIHN5 bmMgb2YKc3VjaCB0YWJsZSBpcyBzdWNjZXNzZnVsIGFuZCB3ZSBzaG91bGQgYXZvaWQgc3VjaCBj YXNlcy4KCkN1cnJlbnQgQmVoYXZpb3VyIGluIEhFQUQsIHdoZW4gcHVibGljYXRpb24gaXMgY3Jl YXRlZDoKMS4gd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUKVGhlIHJvb3Qg dGFibGUgaXMgcHVibGlzaGVkLCBhbmQgaW5pdGlhbCBkYXRhIGZyb20gcGFydGl0aW9ucyB0aGF0 IGFyZQpmb3JlaWduIHRhYmxlcyBpcyByZXBsaWNhdGVkLgoKMi4gd2l0aCBwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCA9IGZhbHNlIGFuZCBGT1IgQUxMIFRBQkxFUwpBbGwgbGVhZiB0YWJsZXMg ZXhjZXB0IHBhcnRpdGlvbnMgdGhhdCBhcmUgZm9yZWlnbiB0YWJsZXMgYXJlIHB1Ymxpc2hlZC4K CjMuIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSBhbmQKRk9SIFRBQkxF LyBGT1IgVEFCTEVTIElOIFNDSEVNQQpBbGwgbGVhZiB0YWJsZXMgYXJlIHB1Ymxpc2hlZCwgaW5j bHVkaW5nIGluaXRpYWwgZGF0YSBmcm9tIHBhcnRpdGlvbnMKdGhhdCBhcmUgZm9yZWlnbiB0YWJs ZXMuCgpXaXRoIHRoaXMgcGF0Y2ggd2UgaGF2ZSBmb2xsb3dpbmcgYmVoYXZpb3VyOgoxLiB3aXRo IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQpBbiBlcnJvciBpcyB0aHJvd24gd2hl biB3ZSB0cnkgdG8gY3JlYXRlIHN1YnNjcmlwdGlvbiAod2l0aCBjb3B5X2RhdGEgPSB0cnVlKQpv biBwdWJsaWNhdGlvbiB3aXRoIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWlnbiBwYXJ0aXRp b24uCldoZW4gY29weV9kYXRhID0gZmFsc2UsIHdlIGRvbm90IG5lZWQgdGhpcyBjaGVjayBhcyBp bml0aWFsIHN5bmMgaXMgbm90CnBlcmZvcm1lZC4KQWxzbyB3ZSByZXN0cmljdCBjcmVhdGluZy9h dHRhY2hpbmcgYSBmb3JlaWduIHRhYmxlIGFzIHBhcnRpdGlvbiBvZiBhCnBhcnRpdGlvbmVkIHRh YmxlIHdoaWNoIGlzIHBhcnQgb2YgYW55IHB1YmxpY2F0aW9uLgoKMi4gd2l0aCBwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlCldlIHNraXAgcHVibGlzaGluZyBwYXJ0aXRpb25zIHRo YXQgYXJlIGZvcmVpZ24gdGFibGVzLiBUaGlzIGlzIGRvbmUgYnkKYXZvaWQgYWRkaW5nIHN1Y2gg cGFydGl0aW9ucyBpbiBwZ19zdWJzY3JpcHRpb25fcmVsIGNhdGFsb2cgdGFibGUuCgpXZSBoYXZl IGludHJvZHVjZWQgdHdvIGZ1bmN0aW9ucyAnUmVsYXRpb25IYXNGb3JlaWduUGFydGl0aW9uJyBh bmQKJ2NoZWNrX3B1YmxpY2F0aW9uc19mb3JlaWduX3BhcnRzJy4gSW4gJ1JlbGF0aW9uSGFzRm9y ZWlnblBhcnRpdGlvbicgd2UgZ28KdGhyb3VnaCB0aGUgY2hpbGQgbm9kZXMgb2YgYSBwYXJ0aXRp b24gYW5kIGNoZWNrIGlmIGl0IGhhcyBhIGZvcmVpZ24KdGFibGUuIEluICdjaGVja19wdWJsaWNh dGlvbnNfZm9yZWlnbl9wYXJ0cycgd2UgY2hlY2sgaWYgYSBzdWJzY3JpcHRpb24Kd2l0aCBjb3B5 X2RhdGEgPSB0cnVlIGlzIHN1YnNjcmliaW5nIHRvIGEgcHVibGljYXRpb24gd2hpY2ggaGFzIHBh cnRpdGlvbmVkCnRhYmxlIHdpdGggZm9yZWlnbiB0YWJsZSBhcyBpdHMgcGFydGl0aW9uLgotLS0K IGRvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgICAgIHwgIDEwICstCiBkb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbCB8ICAgNyArKwogc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgfCAgMjYgKystLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jICAgfCAxMDAgKysrKysrKysrKysrKysrKwogc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgfCAxMTAgKysrKysrKysrKysr KysrKysKIHNyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5jICAgICAgIHwgIDMyICsr KysrCiBzcmMvYmluL3BnX3VwZ3JhZGUvY2hlY2suYyAgICAgICAgICAgICAgICB8ICA4OSArKysr KysrKysrKysrKwogc3JjL2luY2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRkZXNjLmggICAgICAgfCAg IDEgKwogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEgKwog c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDEzX3BhcnRpdGlvbi5wbCAgfCAxMzkgKysrKysrKysr KysrKysrKysrKysrKwogMTAgZmlsZXMgY2hhbmdlZCwgNDk5IGluc2VydGlvbnMoKyksIDE2IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9u LnNnbWwgYi9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCmluZGV4IGMzMmU2 YmMwMDBkLi4yNzVkZDI5NmYxOCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVw bGljYXRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21s CkBAIC0yMDc5LDEwICsyMDc5LDE4IEBAIENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRh IGZvciByZXBsaWNhdGlvbiBvcmlnaW4gInBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAKICAgIDxs aXN0aXRlbT4KICAgICA8cGFyYT4KLSAgICAgUmVwbGljYXRpb24gaXMgb25seSBzdXBwb3J0ZWQg YnkgdGFibGVzLCBpbmNsdWRpbmcgcGFydGl0aW9uZWQgdGFibGVzLgorICAgICBSZXBsaWNhdGlv biBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGFibGVzLCBpbmNsdWRpbmcgcGFydGl0aW9uZWQgdGFi bGVzLgogICAgICBBdHRlbXB0cyB0byByZXBsaWNhdGUgb3RoZXIgdHlwZXMgb2YgcmVsYXRpb25z LCBzdWNoIGFzIHZpZXdzLCBtYXRlcmlhbGl6ZWQKICAgICAgdmlld3MsIG9yIGZvcmVpZ24gdGFi bGVzLCB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvci4KICAgICA8L3BhcmE+CisgICAgPHBhcmE+Cisg ICAgIFJlcGxpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGZvcmVpZ24gdGFibGVzLiBXaGVu IGZvcmVpZ24gdGFibGVzIGFyZQorICAgICB1c2VkIGFzIHBhcnRpdGlvbnMgb2YgcGFydGl0aW9u ZWQgdGFibGVzLCBwdWJsaXNoaW5nIG9mIHRoZSBwYXJ0aXRpb25lZAorICAgICB0YWJsZSBpcyBv bmx5IGFsbG93ZWQgaWYgdGhlIDxsaXRlcmFsPnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290PC9s aXRlcmFsPgorICAgICBpcyBzZXQgdG8gPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LiBJbiB0aGlz IG1vZGUsIGNoYW5nZXMgdG8gYSBwYXJ0aXRpb24KKyAgICAgdGhhdCBpcyBhIGZvcmVpZ24gdGFi bGUgYXJlIGlnbm9yZWQgZm9yIHRoZSBwdXJwb3NlcyBvZiByZXBsaWNhdGlvbiwgYW5kCisgICAg IGRhdGEgY29udGFpbmVkIGluIHRoZW0gaXMgbm90IGluY2x1ZGVkIGR1cmluZyBpbml0aWFsIHN5 bmNocm9uaXphdGlvbi4KKyAgICA8L3BhcmE+CiAgICA8L2xpc3RpdGVtPgogCiAgICA8bGlzdGl0 ZW0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sCmluZGV4IDU3ZGVj MjhhNWRmLi45MDE5ZmUxZTM4NCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVf c3Vic2NyaXB0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0 aW9uLnNnbWwKQEAgLTU0NSw2ICs1NDUsMTMgQEAgV0hFUkUgQy5yZWxuYW1lc3BhY2UgPSBOLm9p ZCBBTkQKICAgICAgIFBULnB1Ym5hbWUgSU4gKCZsdDtwdWItbmFtZXMmZ3Q7KTsKIDwvcHJvZ3Jh bWxpc3Rpbmc+PC9wYXJhPgogCisgICA8cGFyYT4KKyAgICBXaGVuIHVzaW5nIHRoZSBzdWJzY3Jp cHRpb24gcGFyYW1ldGVyIGNvcHlfZGF0YSA9IHRydWUsIGNvcnJlc3BvbmRpbmcKKyAgICBwdWJs aWNhdGlvbnMgYXJlIGNoZWNrZWQgaWYgaXQgaGFzIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 ID0gdHJ1ZSBhbmQKKyAgICBoYXMgYSBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGEgZm9yZWlnbiB0 YWJsZSBhcyBpdHMgcGFydGl0aW9uLiBJZiB0aGlzCisgICAgc2NlbmFyaW8gaXMgZGV0ZWN0ZWQg YW4gRVJST1IgaXMgbG9nZ2VkIHRvIHRoZSB1c2VyLgorICAgPC9wYXJhPgorCiAgPC9yZWZzZWN0 MT4KIAogIDxyZWZzZWN0MT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVi bGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwppbmRleCBk NmY5NGRiNWQ5OS4uNTYyNTVkY2Q1Y2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cv cGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmMKQEAgLTMwNCw3ICszMDQsNyBAQCBjaGVja19hbmRfZmV0Y2hfY29sdW1uX2xpc3QoUHVibGlj YXRpb24gKnB1YiwgT2lkIHJlbGlkLCBNZW1vcnlDb250ZXh0IG1jeHQsCiAKIC8qCiAgKiBHZXRz IHRoZSByZWxhdGlvbnMgYmFzZWQgb24gdGhlIHB1YmxpY2F0aW9uIHBhcnRpdGlvbiBvcHRpb24g Zm9yIGEgc3BlY2lmaWVkCi0gKiByZWxhdGlvbi4KKyAqIHJlbGF0aW9uLiBGb3JlaWduIHRhYmxl cyBhcmUgbm90IGluY2x1ZGVkLgogICovCiBMaXN0ICoKIEdldFB1YlBhcnRpdGlvbk9wdGlvblJl bGF0aW9ucyhMaXN0ICpyZXN1bHQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCwKQEAg LTMxMywyNSArMzEzLDIxIEBAIEdldFB1YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9ucyhMaXN0ICpy ZXN1bHQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCwKIAlpZiAoZ2V0X3JlbF9yZWxr aW5kKHJlbGlkKSA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFICYmCiAJCXB1Yl9wYXJ0b3B0 ICE9IFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCkKIAl7Ci0JCUxpc3QJICAgKmFsbF9wYXJ0cyA9IGZp bmRfYWxsX2luaGVyaXRvcnMocmVsaWQsIE5vTG9jaywKLQkJCQkJCQkJCQkJCQlOVUxMKTsKKwkJ TGlzdAkgICAqYWxsX3BhcnRzID0gZmluZF9hbGxfaW5oZXJpdG9ycyhyZWxpZCwgTm9Mb2NrLCBO VUxMKTsKIAotCQlpZiAocHViX3BhcnRvcHQgPT0gUFVCTElDQVRJT05fUEFSVF9BTEwpCi0JCQly ZXN1bHQgPSBsaXN0X2NvbmNhdChyZXN1bHQsIGFsbF9wYXJ0cyk7Ci0JCWVsc2UgaWYgKHB1Yl9w YXJ0b3B0ID09IFBVQkxJQ0FUSU9OX1BBUlRfTEVBRikKKwkJZm9yZWFjaF9vaWQocGFydE9pZCwg YWxsX3BhcnRzKQogCQl7Ci0JCQlMaXN0Q2VsbCAgICpsYzsKKwkJCWNoYXIJCXJlbGtpbmQgPSBn ZXRfcmVsX3JlbGtpbmQocGFydE9pZCk7CiAKLQkJCWZvcmVhY2gobGMsIGFsbF9wYXJ0cykKLQkJ CXsKLQkJCQlPaWQJCQlwYXJ0T2lkID0gbGZpcnN0X29pZChsYyk7CisJCQlpZiAocmVsa2luZCA9 PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCisJCQkJY29udGludWU7CiAKLQkJCQlpZiAoZ2V0X3Jl bF9yZWxraW5kKHBhcnRPaWQpICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCi0JCQkJCXJl c3VsdCA9IGxhcHBlbmRfb2lkKHJlc3VsdCwgcGFydE9pZCk7Ci0JCQl9CisJCQlpZiAocHViX3Bh cnRvcHQgPT0gUFVCTElDQVRJT05fUEFSVF9MRUFGICYmCisJCQkJcmVsa2luZCA9PSBSRUxLSU5E X1BBUlRJVElPTkVEX1RBQkxFKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXN1bHQgPSBsYXBwZW5k X29pZChyZXN1bHQsIHBhcnRPaWQpOwogCQl9Ci0JCWVsc2UKLQkJCUFzc2VydChmYWxzZSk7CiAJ fQogCWVsc2UKIAkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVzdWx0LCByZWxpZCk7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKaW5kZXggNGZmMjQ2Y2Q5NDMuLjgzOTc4Yjc3 ZDBjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC0xMTIsNiAr MTEyLDkgQEAgc3RhdGljIExpc3QgKm1lcmdlX3B1YmxpY2F0aW9ucyhMaXN0ICpvbGRwdWJsaXN0 LCBMaXN0ICpuZXdwdWJsaXN0LCBib29sIGFkZHB1YiwKIHN0YXRpYyB2b2lkIFJlcG9ydFNsb3RD b25uZWN0aW9uRXJyb3IoTGlzdCAqcnN0YXRlcywgT2lkIHN1YmlkLCBjaGFyICpzbG90bmFtZSwg Y2hhciAqZXJyKTsKIHN0YXRpYyB2b2lkIENoZWNrQWx0ZXJTdWJPcHRpb24oU3Vic2NyaXB0aW9u ICpzdWIsIGNvbnN0IGNoYXIgKm9wdGlvbiwKIAkJCQkJCQkJYm9vbCBzbG90X25lZWRzX3VwZGF0 ZSwgYm9vbCBpc1RvcExldmVsKTsKK3N0YXRpYyB2b2lkIGNoZWNrX3B1YmxpY2F0aW9uc19mb3Jl aWduX3BhcnRzKFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uLAorCQkJCQkJCQkJCQkgTGlzdCAqcHVi bGljYXRpb25zLCBib29sIGNvcHlkYXRhLAorCQkJCQkJCQkJCQkgY2hhciAqc3VibmFtZSk7CiAK IAogLyoKQEAgLTcyMyw2ICs3MjYsOCBAQCBDcmVhdGVTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAq cHN0YXRlLCBDcmVhdGVTdWJzY3JpcHRpb25TdG10ICpzdG10LAogCQkJY2hlY2tfcHVibGljYXRp b25zKHdyY29ubiwgcHVibGljYXRpb25zKTsKIAkJCWNoZWNrX3B1YmxpY2F0aW9uc19vcmlnaW4o d3Jjb25uLCBwdWJsaWNhdGlvbnMsIG9wdHMuY29weV9kYXRhLAogCQkJCQkJCQkJICBvcHRzLm9y aWdpbiwgTlVMTCwgMCwgc3RtdC0+c3VibmFtZSk7CisJCQljaGVja19wdWJsaWNhdGlvbnNfZm9y ZWlnbl9wYXJ0cyh3cmNvbm4sIHB1YmxpY2F0aW9ucywKKwkJCQkJCQkJCQkJIG9wdHMuY29weV9k YXRhLCBzdG10LT5zdWJuYW1lKTsKIAogCQkJLyoKIAkJCSAqIFNldCBzeW5jIHN0YXRlIGJhc2Vk IG9uIGlmIHdlIHdlcmUgYXNrZWQgdG8gZG8gZGF0YSBjb3B5IG9yCkBAIC04ODMsNiArODg4LDgg QEAgQWx0ZXJTdWJzY3JpcHRpb25fcmVmcmVzaChTdWJzY3JpcHRpb24gKnN1YiwgYm9vbCBjb3B5 X2RhdGEsCiAJCWNoZWNrX3B1YmxpY2F0aW9uc19vcmlnaW4od3Jjb25uLCBzdWItPnB1YmxpY2F0 aW9ucywgY29weV9kYXRhLAogCQkJCQkJCQkgIHN1Yi0+b3JpZ2luLCBzdWJyZWxfbG9jYWxfb2lk cywKIAkJCQkJCQkJICBzdWJyZWxfY291bnQsIHN1Yi0+bmFtZSk7CisJCWNoZWNrX3B1YmxpY2F0 aW9uc19mb3JlaWduX3BhcnRzKHdyY29ubiwgc3ViLT5wdWJsaWNhdGlvbnMsIGNvcHlfZGF0YSwK KwkJCQkJCQkJCQkgc3ViLT5uYW1lKTsKIAogCQkvKgogCQkgKiBSZWxzIHRoYXQgd2Ugd2FudCB0 byByZW1vdmUgZnJvbSBzdWJzY3JpcHRpb24gYW5kIGRyb3AgYW55IHNsb3RzCkBAIC0yNTA3LDMg KzI1MTQsOTYgQEAgZGVmR2V0U3RyZWFtaW5nTW9kZShEZWZFbGVtICpkZWYpCiAJCQkJCWRlZi0+ ZGVmbmFtZSkpKTsKIAlyZXR1cm4gTE9HSUNBTFJFUF9TVFJFQU1fT0ZGOwkvKiBrZWVwIGNvbXBp bGVyIHF1aWV0ICovCiB9CisKKy8qCisgKiBjaGVja19wdWJsaWNhdGlvbnNfZm9yZWlnbl9wYXJ0 cworICogQ2hlY2sgaWYgdGhlIHB1YmxpY2F0aW9ucywgb24gd2hpY2ggc3Vic2NyaWJlciBpcyBz dWJzY3JpYmluZywgcHVibGlzaGVzIGFueQorICogcGFydGl0aW9uZWQgdGFibGUgdGhhdCBoYXMg YSBmb3JlaWduIHRhYmxlIGFzIGl0cyBwYXJ0aXRpb24gYW5kIGhhcworICogcHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3Qgc2V0IGFzIHRydWUuIFRoZSBjaGVjayBpcyBwZXJmb3JtZWQgb25seSBp ZgorICogY29weV9kYXRhIGlzIHNldCBhcyB0cnVlIGZvciB0aGUgc3Vic2NyaXB0aW9uLgorICoK KyAqIEFsdGhvdWdoIERNTCBjaGFuZ2VzIHRvIGZvcmVpZ24gdGFibGVzIGFyZSBleGNsdWRlZCBm cm9tIHB1YmxpY2F0aW9uLCB0aGUKKyAqIHRhYmxlc3luYyB3b3JrZXIgd2lsbCBzdGlsbCBhdHRl bXB0IHRvIGNvcHkgZGF0YSBmcm9tIGZvcmVpZ24gdGFibGUKKyAqIHBhcnRpdGlvbnMgZHVyaW5n IGluaXRpYWwgdGFibGUgc3luY2hyb25pemF0aW9uLiAgVG8gYXZvaWQgdGhlCisgKiBpbmNvbnNp c3RlbmNpZXMgdGhhdCB3b3VsZCByZXN1bHQsIHdlIGRpc2FsbG93IGZvcmVpZ24gdGFibGVzIGZy b20gYmVpbmcKKyAqIHB1Ymxpc2hlZCBnZW5lcmFsbHkuICBIb3dldmVyLCBpdCdzIHBvc3NpYmxl IGZvciBwYXJ0aXRpb25lZCB0YWJsZXMgdG8gaGF2ZQorICogZm9yZWlnbiB0YWJsZXMgYXMgcGFy dGl0aW9ucywgYW5kIHdlIHdvdWxkIGxpa2UgdG8gYWxsb3cgcHVibGlzaGluZyB0aG9zZQorICog cGFydGl0aW9uZWQgdGFibGVzIHNvIHRoYXQgdGhlIG90aGVyIHBhcnRpdGlvbnMgYXJlIHJlcGxp Y2F0ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbiBjaGFyZ2Ugb2YgZGV0ZWN0aW5nIGlm IHB1Ymxpc2hlciB3aXRoCisgKiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdD10cnVlIHB1Ymxp c2hlcyBhIHBhcnRpdGlvbmVkIHRhYmxlIHRoYXQgaGFzIGEKKyAqIGZvcmVpZ24gdGFibGUgYXMg YSBwYXJ0aXRpb24gYW5kIHRocm93IGFuIGVycm9yIGlmIGZvdW5kLgorICoKKyAqIFdoZW4gcHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgaXMgZmFsc2UsIGVhY2ggcGFydGl0aW9uIHB1Ymxpc2hl ZCBmb3IKKyAqIHJlcGxpY2F0aW9uIGlzIGxpc3RlZCBpbmRpdmlkdWFsbHkgaW4gcGdfc3Vic2Ny aXB0aW9uX3JlbCwgYW5kIHdlCisgKiBkb24ndCBhZGQgcGFydGl0aW9ucyB0aGF0IGFyZSBmb3Jl aWduIHRhYmxlcywgc28gdGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkCisgKiBmb3Igc3VjaCB0 YWJsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19wdWJsaWNhdGlvbnNfZm9yZWlnbl9wYXJ0 cyhXYWxSZWNlaXZlckNvbm4gKndyY29ubiwgTGlzdCAqcHVibGljYXRpb25zLAorCQkJCQkJCQkg Ym9vbCBjb3B5ZGF0YSwgY2hhciAqc3VibmFtZSkKK3sKKwlXYWxSY3ZFeGVjUmVzdWx0ICpyZXM7 CisJU3RyaW5nSW5mb0RhdGEgY21kOworCVR1cGxlVGFibGVTbG90ICpzbG90OworCU9pZAkJCXRh YmxlUm93WzFdID0ge1RFWFRPSUR9OworCUxpc3QJICAgKnB1Ymxpc3QgPSBOSUw7CisJaW50CQkJ aTsKKworCWlmICghY29weWRhdGEpCisJCXJldHVybjsKKworCWluaXRTdHJpbmdJbmZvKCZjbWQp OworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwKKwkJCQkJCSAgICJTRUxFQ1QgRElTVElO Q1QgUC5wdWJuYW1lIEFTIHB1Ym5hbWUgIgorCQkJCQkJICAgIkZST00gcGdfY2F0YWxvZy5wZ19w dWJsaWNhdGlvbiBwLCBMQVRFUkFMICIKKwkJCQkJCSAgICJwZ19nZXRfcHVibGljYXRpb25fdGFi bGVzKHAucHVibmFtZSkgZ3B0LCBMQVRFUkFMICIKKwkJCQkJCSAgICJwZ19wYXJ0aXRpb25fdHJl ZShncHQucmVsaWQpIGd0IEpPSU4gcGdfY2F0YWxvZy5wZ19mb3JlaWduX3RhYmxlIGZ0IE9OICIK KwkJCQkJCSAgICJmdC5mdHJlbGlkID0gZ3QucmVsaWQgV0hFUkUgcC5wdWJ2aWFyb290ID0gdHJ1 ZSBBTkQgIHAucHVibmFtZSBJTiAoIik7CisKKwlHZXRQdWJsaWNhdGlvbnNTdHIocHVibGljYXRp b25zLCAmY21kLCB0cnVlKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIpXG4iKTsK KworCXJlcyA9IHdhbHJjdl9leGVjKHdyY29ubiwgY21kLmRhdGEsIDEsIHRhYmxlUm93KTsKKwlw ZnJlZShjbWQuZGF0YSk7CisKKwlpZiAocmVzLT5zdGF0dXMgIT0gV0FMUkNWX09LX1RVUExFUykK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVS RSksCisJCQkJIGVycm1zZygiY291bGQgbm90IHJlY2VpdmUgbGlzdCBvZiByZXBsaWNhdGVkIHRh YmxlcyBmcm9tIHRoZSBwdWJsaXNoZXI6ICVzIiwKKwkJCQkJCXJlcy0+ZXJyKSkpOworCisJLyog UHJvY2VzcyB0YWJsZXMuICovCisJc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChyZXMt PnR1cGxlZGVzYywgJlRUU09wc01pbmltYWxUdXBsZSk7CisJd2hpbGUgKHR1cGxlc3RvcmVfZ2V0 dHVwbGVzbG90KHJlcy0+dHVwbGVzdG9yZSwgdHJ1ZSwgZmFsc2UsIHNsb3QpKQorCXsKKwkJY2hh cgkgICAqcHVibmFtZTsKKwkJYm9vbAkJaXNudWxsOworCisJCXB1Ym5hbWUgPSBUZXh0RGF0dW1H ZXRDU3RyaW5nKHNsb3RfZ2V0YXR0cihzbG90LCAxLCAmaXNudWxsKSk7CisJCUFzc2VydCghaXNu dWxsKTsKKworCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwkJcHVibGlzdCA9IGxpc3RfYXBwZW5k X3VuaXF1ZShwdWJsaXN0LCBtYWtlU3RyaW5nKHB1Ym5hbWUpKTsKKwl9CisKKwlpZiAocHVibGlz dCkKKwl7CisJCVN0cmluZ0luZm8JcHVibmFtZXMgPSBtYWtlU3RyaW5nSW5mbygpOworCisJCS8q IFByZXBhcmUgdGhlIGxpc3Qgb2YgcHVibGljYXRpb24ocykgZm9yIHdhcm5pbmcgbWVzc2FnZS4g Ki8KKwkJR2V0UHVibGljYXRpb25zU3RyKHB1Ymxpc3QsIHB1Ym5hbWVzLCBmYWxzZSk7CisJCWVy ZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlT SVRFX1NUQVRFKSwKKwkJCQllcnJtc2coInN1YnNjcmlwdGlvbiBcIiVzXCIgd2l0aCBjb3B5X2Rh dGEgPSB0cnVlIGNhbm5vdCBzdWJzY3JpYmUgdG8gYSBwdWJsaWNhdGlvbiB3aXRoIHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSBhbmQgcHVibGlzaGVzIHBhcnRpdGlvbmVkIHRhYmxl IHdpdGggZm9yZWlnbiB0YWJsZSBhcyBwYXJ0aXRpb24iLAorCQkJCQkgICBzdWJuYW1lKSwKKwkJ CQllcnJkZXRhaWxfcGx1cmFsKCJUaGUgc3Vic2NyaXB0aW9uIGlzIGZvciBhIHB1YmxpY2F0aW9u ICglcykgd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUsIGJ1dCBvbmUgb3Ig bW9yZSBwYXJ0aXRpb25lZCB0YWJsZXMgaGF2ZSBmb3JlaWduIHRhYmxlcyBhcyBwYXJ0aXRpb25z LiIsCisJCQkJCQkJCSAiVGhlIHN1YnNjcmlwdGlvbiBpcyBmb3IgcHVibGljYXRpb25zICglcykg d2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUgYnV0IG9uZSBvciBtb3JlIHBh cnRpdGlvbmVkIHRhYmxlcyBoYXZlIGZvcmVpZ24gdGFibGVzIGFzIHBhcnRpdGlvbnMuIiwKKwkJ CQkJCQkJIGxpc3RfbGVuZ3RoKHB1Ymxpc3QpLCBwdWJuYW1lcy0+ZGF0YSksCisJCQkJZXJyaGlu dCgiRHJvcCB0aGUgZm9yZWlnbiB0YWJsZSBmcm9tIHRoZSBwdWJsaWNhdGlvbiBvciBzZXQgcHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSBvbiBwdWJsaWNhdGlvbiBvciBzZXQgY29w eV9kYXRhID0gZmFsc2UuIikpOworCX0KKworCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qo c2xvdCk7CisKKwl3YWxyY3ZfY2xlYXJfcmVzdWx0KHJlcyk7Cit9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jCmluZGV4IGI4ODM3ZjI2Y2I0Li41ODU5MjI0OTAwZiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFi bGVjbWRzLmMKQEAgLTExMzMsNiArMTEzMyw1MiBAQCBEZWZpbmVSZWxhdGlvbihDcmVhdGVTdG10 ICpzdG10LCBjaGFyIHJlbGtpbmQsIE9pZCBvd25lcklkLAogCQkJCQkgZXJybXNnKCJcIiVzXCIg aXMgbm90IHBhcnRpdGlvbmVkIiwKIAkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShwYXJl bnQpKSkpOwogCisJCS8qCisJCSAqIElmIHdlJ3JlIGNyZWF0aW5nIGEgcGFydGl0aW9uIHRoYXQn cyBhIGZvcmVpZ24gdGFibGUsIHZlcmlmeSB0aGF0CisJCSAqIHRoZSBwYXJlbnQgdGFibGUgaXMg bm90IGluIGEgcHVibGljYXRpb24gd2l0aAorCQkgKiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCBlbmFibGVkLgorCQkgKi8KKwkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRf Rk9SRUlHTl9UQUJMRSkKKwkJeworCQkJT2lkCQkJc2NoZW1haWQ7CisJCQlMaXN0CSAgICpwdWJv aWRzOworCQkJTGlzdAkgICAqYW5jZXN0b3JzOworCisJCQkvKiBTdGFydCB3aXRoIHB1YmxpY2F0 aW9ucyBvZiBhbGwgdGFibGVzICovCisJCQlwdWJvaWRzID0gR2V0QWxsVGFibGVzUHVibGljYXRp b25zKCk7CisKKwkJCS8qIGNhcHR1cmUgYWxsIHB1YmxpY2F0aW9ucyB0aGF0IGluY2x1ZGUgdGhp cyByZWxhdGlvbiBkaXJlY3RseSAqLworCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0KHB1Ym9pZHMs IEdldFJlbGF0aW9uUHVibGljYXRpb25zKHBhcmVudC0+cmRfaWQpKTsKKwkJCXNjaGVtYWlkID0g UmVsYXRpb25HZXROYW1lc3BhY2UocGFyZW50KTsKKwkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdChw dWJvaWRzLCBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1haWQpKTsKKworCQkJLyogYW5kIGRv IHRoZSBzYW1lIGZvciBpdHMgYW5jZXN0b3JzLCBpZiBhbnkgKi8KKwkJCWFuY2VzdG9ycyA9IGdl dF9wYXJ0aXRpb25fYW5jZXN0b3JzKHBhcmVudC0+cmRfaWQpOworCQkJZm9yZWFjaF9vaWQoYW5j ZXN0b3IsIGFuY2VzdG9ycykKKwkJCXsKKwkJCQlwdWJvaWRzID0gbGlzdF9jb25jYXQocHVib2lk cywgR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoYW5jZXN0b3IpKTsKKwkJCQlzY2hlbWFpZCA9IGdl dF9yZWxfbmFtZXNwYWNlKGFuY2VzdG9yKTsKKwkJCQlwdWJvaWRzID0gbGlzdF9jb25jYXQocHVi b2lkcywgR2V0U2NoZW1hUHVibGljYXRpb25zKHNjaGVtYWlkKSk7CisJCQl9CisKKwkJCS8qIENo ZWNrIHRoZSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBiaXQgZm9yIGVhY2ggb2YgdGhvc2Ug Ki8KKwkJCWxpc3Rfc29ydChwdWJvaWRzLCBsaXN0X29pZF9jbXApOworCQkJbGlzdF9kZWR1cGxp Y2F0ZV9vaWQocHVib2lkcyk7CisJCQlmb3JlYWNoX29pZChwdWJvaWQsIHB1Ym9pZHMpCisJCQl7 CisJCQkJUHVibGljYXRpb24gKnB1YiA9IEdldFB1YmxpY2F0aW9uKHB1Ym9pZCk7CisKKwkJCQlp ZiAocHViLT5wdWJ2aWFyb290KQorCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCWVycmNvZGUo RVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJCQkJZXJybXNnKCJjYW5ub3QgY3JlYXRl IGZvcmVpZ24gdGFibGUgXCIlc1wiIGFzIGEgcGFydGl0aW9uIG9mIFwiJXNcIiIsCisJCQkJCQkJ CSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHBhcmVudCkpLAorCQkJCQkJCWVycmRldGFpbCgiUGFydGl0aW9uZWQgdGFibGUgXCIlc1wiIGlz IHB1Ymxpc2hlZCB3aXRoIG9wdGlvbiBcIiVzXCIgaW4gcHVibGljYXRpb24gXCIlc1wiLiIsCisJ CQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHBhcmVudCksCisJCQkJCQkJCQkgICJw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIsIHB1Yi0+bmFtZSkpOworCQkJfQorCQl9CisKIAkJ LyoKIAkJICogVGhlIHBhcnRpdGlvbiBjb25zdHJhaW50IG9mIHRoZSBkZWZhdWx0IHBhcnRpdGlv biBkZXBlbmRzIG9uIHRoZQogCQkgKiBwYXJ0aXRpb24gYm91bmRzIG9mIGV2ZXJ5IG90aGVyIHBh cnRpdGlvbi4gSXQgaXMgcG9zc2libGUgdGhhdApAQCAtMjAzMjIsNiArMjAzNjgsNzAgQEAgQVRF eGVjQXR0YWNoUGFydGl0aW9uKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgUGFydGl0aW9u Q21kICpjbWQsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCiAJCQkJ IGVycm1zZygiY2Fubm90IGF0dGFjaCB0ZW1wb3JhcnkgcmVsYXRpb24gb2YgYW5vdGhlciBzZXNz aW9uIGFzIHBhcnRpdGlvbiIpKSk7CiAKKwkvKgorCSAqIElmIHRoZSByZWxhdGlvbiB0byBhdHRh Y2ggaXMgYSBmb3JlaWduIHRhYmxlLCBvciBhIHBhcnRpdGlvbmVkIHRhYmxlCisJICogdGhhdCBj b250YWlucyBhIGZvcmVpZ24gdGFibGUgYXMgcGFydGl0aW9uLCB0aGVuIHZlcmlmeSB0aGF0IHRo ZSBwYXJlbnQKKwkgKiB0YWJsZSBpcyBub3QgaW4gYSBwdWJsaWNhdGlvbiB3aXRoIHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290IGVuYWJsZWQuCisJICovCisJaWYgKGF0dGFjaHJlbC0+cmRfcmVs LT5yZWxraW5kID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSB8fAorCQkoYXR0YWNocmVsLT5yZF9y ZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSAmJgorCQkgUmVsYXRpb25I YXNGb3JlaWduUGFydGl0aW9uKGF0dGFjaHJlbCkpKQorCXsKKwkJT2lkCQkJc2NoZW1haWQ7CisJ CUxpc3QJICAgKnB1Ym9pZHM7CisJCUxpc3QJICAgKmFuY2VzdG9yczsKKworCQkvKiBTdGFydCB3 aXRoIHB1YmxpY2F0aW9ucyBvZiBhbGwgdGFibGVzICovCisJCXB1Ym9pZHMgPSBHZXRBbGxUYWJs ZXNQdWJsaWNhdGlvbnMoKTsKKworCQkvKiBjYXB0dXJlIGFsbCBwdWJsaWNhdGlvbnMgdGhhdCBp bmNsdWRlIHRoaXMgcmVsYXRpb24gZGlyZWN0bHkgKi8KKwkJcHVib2lkcyA9IGxpc3RfY29uY2F0 KHB1Ym9pZHMsIEdldFJlbGF0aW9uUHVibGljYXRpb25zKHJlbC0+cmRfaWQpKTsKKwkJc2NoZW1h aWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpOworCQlwdWJvaWRzID0gbGlzdF9jb25jYXQo cHVib2lkcywgR2V0U2NoZW1hUHVibGljYXRpb25zKHNjaGVtYWlkKSk7CisKKwkJLyogYW5kIGRv IHRoZSBzYW1lIGZvciBpdHMgYW5jZXN0b3JzLCBpZiBhbnkgKi8KKwkJYW5jZXN0b3JzID0gZ2V0 X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsLT5yZF9pZCk7CisJCWZvcmVhY2hfb2lkKGFuY2VzdG9y LCBhbmNlc3RvcnMpCisJCXsKKwkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdChwdWJvaWRzLCBHZXRS ZWxhdGlvblB1YmxpY2F0aW9ucyhhbmNlc3RvcikpOworCQkJc2NoZW1haWQgPSBnZXRfcmVsX25h bWVzcGFjZShhbmNlc3Rvcik7CisJCQlwdWJvaWRzID0gbGlzdF9jb25jYXQocHVib2lkcywgR2V0 U2NoZW1hUHVibGljYXRpb25zKHNjaGVtYWlkKSk7CisJCX0KKworCQkvKiBOb3cgY2hlY2sgdGhl IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGJpdCBmb3IgZWFjaCBvZiB0aG9zZSAqLworCQls aXN0X3NvcnQocHVib2lkcywgbGlzdF9vaWRfY21wKTsKKwkJbGlzdF9kZWR1cGxpY2F0ZV9vaWQo cHVib2lkcyk7CisJCWZvcmVhY2hfb2lkKHB1Ym9pZCwgcHVib2lkcykKKwkJeworCQkJUHVibGlj YXRpb24gKnB1YjsKKworCQkJcHViID0gR2V0UHVibGljYXRpb24ocHVib2lkKTsKKwkJCWlmIChw dWItPnB1YnZpYXJvb3QpCisJCQl7CisJCQkJaWYgKGF0dGFjaHJlbC0+cmRfcmVsLT5yZWxraW5k ID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKKwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQko ZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKKwkJCQkJCQkgZXJybXNnKCJjYW5u b3QgYXR0YWNoIGZvcmVpZ24gdGFibGUgXCIlc1wiIHRvIHBhcnRpdGlvbiB0YWJsZSBcIiVzXCIi LAorCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoYXR0YWNocmVsKSwKKwkJCQkJCQkJ CVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpLAorCQkJCQkJCSBlcnJkZXRhaWwoIlBhcnRp dGlvbmVkIHRhYmxlIFwiJXNcIiBpcyBwdWJsaXNoZWQgd2l0aCBvcHRpb24gXCIlc1wiIGluIHB1 YmxpY2F0aW9uIFwiJXNcIi4iLAorCQkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo cmVsKSwKKwkJCQkJCQkJCSAgICJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIsCisJCQkJCQkJ CQkgICBwdWItPm5hbWUpKSk7CisJCQkJZWxzZQorCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJ CShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAorCQkJCQkJCSBlcnJtc2coImNh bm5vdCBhdHRhY2ggdGFibGUgXCIlc1wiIHdpdGggYSBwYXJ0aXRpb24gdGhhdCdzIGEgZm9yZWln biB0YWJsZSB0byBwYXJ0aXRpb24gdGFibGUgXCIlc1wiIiwKKwkJCQkJCQkJCVJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKGF0dGFjaHJlbCksCisJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWwpKSwKKwkJCQkJCQkgZXJyZGV0YWlsKCJQYXJ0aXRpb25lZCB0YWJsZSBcIiVzXCIgaXMg cHVibGlzaGVkIHdpdGggb3B0aW9uIFwiJXNcIiBpbiBwdWJsaWNhdGlvbiBcIiVzXCIuIiwKKwkJ CQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQkgICAicHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiLAorCQkJCQkJCQkJICAgcHViLT5uYW1lKSkpOworCQkJ fQorCQl9CisJfQorCiAJLyoKIAkgKiBDaGVjayBpZiBhdHRhY2hyZWwgaGFzIGFueSBpZGVudGl0 eSBjb2x1bW5zIG9yIGFueSBjb2x1bW5zIHRoYXQgYXJlbid0CiAJICogaW4gdGhlIHBhcmVudC4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5jIGIvc3JjL2Jh Y2tlbmQvcGFydGl0aW9uaW5nL3BhcnRkZXNjLmMKaW5kZXggMzI4YjRkNDUwZTQuLjU2ZDE3NjYy NWU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydGRlc2MuYworKysg Yi9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydGRlc2MuYwpAQCAtNTA2LDMgKzUwNiwzNSBA QCBnZXRfZGVmYXVsdF9vaWRfZnJvbV9wYXJ0ZGVzYyhQYXJ0aXRpb25EZXNjIHBhcnRkZXNjKQog CiAJcmV0dXJuIEludmFsaWRPaWQ7CiB9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2 ZW4gcGFydGl0aW9uZWQgdGFibGUgdWx0aW1hdGVseSBjb250YWlucyBhCisgKiBwYXJ0aXRpb24g dGhhdCBpcyBhIGZvcmVpZ24gdGFibGUsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbAorUmVs YXRpb25IYXNGb3JlaWduUGFydGl0aW9uKFJlbGF0aW9uIHJlbCkKK3sKKwlQYXJ0aXRpb25EZXNj IHBkID0gUmVsYXRpb25HZXRQYXJ0aXRpb25EZXNjKHJlbCwgdHJ1ZSk7CisKKwlmb3IgKGludCBp ID0gMDsgaSA8IHBkLT5ucGFydHM7IGkrKykKKwl7CisJCWlmIChwZC0+aXNfbGVhZltpXSkKKwkJ eworCQkJaWYgKGdldF9yZWxfcmVsa2luZChwZC0+b2lkc1tpXSkgPT0gUkVMS0lORF9GT1JFSUdO X1RBQkxFKQorCQkJCXJldHVybiB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJUmVsYXRpb24J cGFydDsKKwkJCWJvb2wJCXJldDsKKworCQkJcGFydCA9IHRhYmxlX29wZW4ocGQtPm9pZHNbaV0s IE5vTG9jayk7CisJCQlyZXQgPSBSZWxhdGlvbkhhc0ZvcmVpZ25QYXJ0aXRpb24ocGFydCk7CisJ CQl0YWJsZV9jbG9zZShwYXJ0LCBOb0xvY2spOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gdHJ1 ZTsKKwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf dXBncmFkZS9jaGVjay5jIGIvc3JjL2Jpbi9wZ191cGdyYWRlL2NoZWNrLmMKaW5kZXggZmIwNjNh MmRlNDIuLmQyZTU4YzQ0NjNhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvY2hlY2su YworKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvY2hlY2suYwpAQCAtMzEsNiArMzEsNyBAQCBzdGF0 aWMgdm9pZCBjaGVja19uZXdfY2x1c3Rlcl9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3RzKHZvaWQp Owogc3RhdGljIHZvaWQgY2hlY2tfbmV3X2NsdXN0ZXJfc3Vic2NyaXB0aW9uX2NvbmZpZ3VyYXRp b24odm9pZCk7CiBzdGF0aWMgdm9pZCBjaGVja19vbGRfY2x1c3Rlcl9mb3JfdmFsaWRfc2xvdHMo dm9pZCk7CiBzdGF0aWMgdm9pZCBjaGVja19vbGRfY2x1c3Rlcl9zdWJzY3JpcHRpb25fc3RhdGUo dm9pZCk7CitzdGF0aWMgdm9pZCBjaGVja19mb3JfdmFsaWRfcHVibGljYXRpb24oQ2x1c3Rlcklu Zm8gKmNsdXN0ZXIpOwogCiAvKgogICogRGF0YVR5cGVzVXNhZ2VDaGVja3MgLSBkZWZpbml0aW9u cyBvZiBkYXRhIHR5cGUgY2hlY2tzIGZvciB0aGUgb2xkIGNsdXN0ZXIKQEAgLTYzNCw2ICs2MzUs OCBAQCBjaGVja19hbmRfZHVtcF9vbGRfY2x1c3Rlcih2b2lkKQogCQljaGVja19vbGRfY2x1c3Rl cl9zdWJzY3JpcHRpb25fc3RhdGUoKTsKIAl9CiAKKwljaGVja19mb3JfdmFsaWRfcHVibGljYXRp b24oJm9sZF9jbHVzdGVyKTsKKwogCWNoZWNrX2Zvcl9kYXRhX3R5cGVzX3VzYWdlKCZvbGRfY2x1 c3Rlcik7CiAKIAkvKgpAQCAtMjI3MywzICsyMjc2LDg5IEBAIGNoZWNrX29sZF9jbHVzdGVyX3N1 YnNjcmlwdGlvbl9zdGF0ZSh2b2lkKQogCWVsc2UKIAkJY2hlY2tfb2soKTsKIH0KKworLyoKKyAq IENhbGxiYWNrIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIHJlc3VsdHMgb2YgcXVlcnkgZm9yCisg KiBjaGVja19mb3JfdmFsaWRfcHVibGljYXRpb24oKSdzIFVwZ3JhZGVUYXNrLiAgSWYgdGhlIHF1 ZXJ5IHJldHVybmVkCisgKiBhbnkgcm93cyAoaS5lLiwgdGhlIGNoZWNrIGZhaWxlZCksIHdyaXRl IHRoZSBkZXRhaWxzIHRvIHRoZSByZXBvcnQgZmlsZS4KKyAqLworc3RhdGljIHZvaWQKK3Byb2Nl c3NfcHViX2NoZWNrKERiSW5mbyAqZGJpbmZvLCBQR3Jlc3VsdCAqcmVzLCB2b2lkICphcmcpCit7 CisJVXBncmFkZVRhc2tSZXBvcnQgKnJlcG9ydCA9IChVcGdyYWRlVGFza1JlcG9ydCAqKSBhcmc7 CisJaW50CQkJbnR1cHMgPSBQUW50dXBsZXMocmVzKTsKKwlpbnQJCQlpX3B1Ym9pZCA9IFBRZm51 bWJlcihyZXMsICJvaWQiKTsKKwlpbnQJCQlpX3B1YnZpYXJvb3QgPSBQUWZudW1iZXIocmVzLCAi cHVidmlhcm9vdCIpOworCWludAkJCWlfcHViYWxsdGFibGVzID0gUFFmbnVtYmVyKHJlcywgInB1 YmFsbHRhYmxlcyIpOworCWludAkJCWlfZnRyZWxpZCA9IFBRZm51bWJlcihyZXMsICJmdHJlbGlk Iik7CisKKwlpZiAobnR1cHMgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKHJlcG9ydC0+ZmlsZSA9 PSBOVUxMICYmCisJCShyZXBvcnQtPmZpbGUgPSBmb3Blbl9wcml2KHJlcG9ydC0+cGF0aCwgInci KSkgPT0gTlVMTCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIs IHJlcG9ydC0+cGF0aCk7CisKKwlmcHJpbnRmKHJlcG9ydC0+ZmlsZSwgIkluIGRhdGFiYXNlOiAl c1xuIiwgZGJpbmZvLT5kYl9uYW1lKTsKKworCWZvciAoaW50IHJvd25vID0gMDsgcm93bm8gPCBu dHVwczsgcm93bm8rKykKKwkJZnByaW50ZihyZXBvcnQtPmZpbGUsICJUaGUgcHVibGljYXRpb24g d2l0aCBvaWQ6ICVzLCBoYXMgZm9yZWlnbiB0YWJsZSB3aXRoIG9pZDogJXMgYXMgcGFydGl0aW9u IG9mIGEgcHVibGlzaGVkIHRhYmxlLiAiCisJCQkJIlB1YmxpY2F0aW9uIGlzIHB1Ymxpc2hlZCB3 aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gJXMgYW5kIGl0IGlzIHB1Ymxpc2hlZCAl cy5cbiIsCisJCQkJUFFnZXR2YWx1ZShyZXMsIHJvd25vLCBpX3B1Ym9pZCksCisJCQkJUFFnZXR2 YWx1ZShyZXMsIHJvd25vLCBpX2Z0cmVsaWQpLAorCQkJCXN0cmNtcChQUWdldHZhbHVlKHJlcywg cm93bm8sIGlfcHVidmlhcm9vdCksICJmIikgPyAidHJ1ZSIgOiAiZmFsc2UiLAorCQkJCXN0cmNt cChQUWdldHZhbHVlKHJlcywgcm93bm8sIGlfcHViYWxsdGFibGVzKSwgImYiKSA/ICJGT1IgQUxM IFRBQkxFUyIgOiAiRk9SIFRBQkxFL0ZPUiBUQUJMRVMgSU4gU0NIRU1BIik7Cit9CisKKy8qCisg KiBjaGVja19mb3JfdmFsaWRfcHVibGljYXRpb24KKyAqCisgKiBWZXJpZnkgaWYgdGhlIHB1Ymxp Y2F0aW9uIGhhcyBhbnkgcHVibGlzaGVkIGZvcmVpZ24gdGFibGUgd2hpY2ggYXJlCisgKiBwYXJ0 aXRpb25zIG9mIGEgdGFibGUuCisgKgorICogRm9yIFBHIDE4IGFuZCBiZWxvdyBmb3JlaWduIHRh YmxlcyBjYW4gYmUgaW5kaXJlY3RseSBwdWJsaXNoZWQgd2hlbiBpdCBpcworICogcGFydGl0aW9u IG9mIGEgcGFydGl0aW9uZWQgdGFibGUuIEF2b2lkIHVwZ3JhZGluZyB0aGUgY2x1c3RlciBpZiBp dCBoYXMgYQorICogcHVibGljYXRpb24gd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9 IHRydWUgYW5kIGhhcyBmb3JlaWduIHRhYmxlCisgKiB3aGljaCBpcyBwYXJ0aXRpb24gb2YgYSBw dWJsaXNoZWQgdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19mb3JfdmFsaWRfcHVibGlj YXRpb24oQ2x1c3RlckluZm8gKmNsdXN0ZXIpCit7CisJVXBncmFkZVRhc2tSZXBvcnQgcmVwb3J0 OworCVVwZ3JhZGVUYXNrICp0YXNrOworCWNvbnN0IGNoYXIgKnF1ZXJ5OworCisJaWYgKEdFVF9N QUpPUl9WRVJTSU9OKGNsdXN0ZXItPm1ham9yX3ZlcnNpb24pID49IDE5MDApCisJCXJldHVybjsK KworCXByZXBfc3RhdHVzKCJDaGVja2luZyBmb3IgaW52YWxpZCBwdWJsaWNhdGlvbnMiKTsKKwor CXJlcG9ydC5maWxlID0gTlVMTDsKKwlzbnByaW50ZihyZXBvcnQucGF0aCwgc2l6ZW9mKHJlcG9y dC5wYXRoKSwgIiVzLyVzIiwKKwkJCSBsb2dfb3B0cy5iYXNlZGlyLAorCQkJICJwdWJzX2ludmFs aWQudHh0Iik7CisKKwlxdWVyeSA9ICJTRUxFQ1QgcC5vaWQsIHAucHVidmlhcm9vdCwgcC5wdWJh bGx0YWJsZXMsIGZ0LmZ0cmVsaWQgIgorCQkiZnJvbSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9u IHAsIExBVEVSQUwgIgorCQkicGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhwLnB1Ym5hbWUpIGdw dCwgTEFURVJBTCAiCisJCSJwZ19wYXJ0aXRpb25fdHJlZShncHQucmVsaWQpIGd0IEpPSU4gcGdf Y2F0YWxvZy5wZ19mb3JlaWduX3RhYmxlIGZ0IE9OICIKKwkJImZ0LmZ0cmVsaWQgPSBndC5yZWxp ZCBXSEVSRSBwLnB1YnZpYXJvb3QgPSB0cnVlOyI7CisKKwl0YXNrID0gdXBncmFkZV90YXNrX2Ny ZWF0ZSgpOworCXVwZ3JhZGVfdGFza19hZGRfc3RlcCh0YXNrLCBxdWVyeSwKKwkJCQkJCSAgcHJv Y2Vzc19wdWJfY2hlY2ssCisJCQkJCQkgIHRydWUsICZyZXBvcnQpOworCXVwZ3JhZGVfdGFza19y dW4odGFzaywgY2x1c3Rlcik7CisJdXBncmFkZV90YXNrX2ZyZWUodGFzayk7CisKKwlpZiAocmVw b3J0LmZpbGUpCisJeworCQlmY2xvc2UocmVwb3J0LmZpbGUpOworCQlwZ19sb2coUEdfUkVQT1JU LCAiZmF0YWwiKTsKKwkJcGdfZmF0YWwoIllvdXIgaW5zdGFsbGF0aW9uIGNvbnRhaW5zIHB1Ymxp Y2F0aW9ucyB3aGVyZSBvbmUgb3IgbW9yZSBwYXJ0aXRpb25lZCB0YWJsZXMgaGF2ZSBmb3JlaWdu IHRhYmxlcyBhcyBwYXJ0aXRpb25zLlxuIgorCQkJCSAiQSBsaXN0IG9mIHBvdGVudGlhbGx5LWFm ZmVjdGVkIHB1YmxpY2F0aW9ucyBpcyBpbiB0aGUgZmlsZTpcbiIKKwkJCQkgIiAgICAlcyIsIHJl cG9ydC5wYXRoKTsKKwl9CisJZWxzZQorCQljaGVja19vaygpOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRkZXNjLmggYi9zcmMvaW5jbHVkZS9wYXJ0aXRpb25p bmcvcGFydGRlc2MuaAppbmRleCAzNDUzM2Y3MDA0Yy4uNWZiYWZkYzA2ZjkgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5oCisrKyBiL3NyYy9pbmNsdWRlL3Bh cnRpdGlvbmluZy9wYXJ0ZGVzYy5oCkBAIC03MSw1ICs3MSw2IEBAIGV4dGVybiBQYXJ0aXRpb25E ZXNjIFBhcnRpdGlvbkRpcmVjdG9yeUxvb2t1cChQYXJ0aXRpb25EaXJlY3RvcnksIFJlbGF0aW9u KTsKIGV4dGVybiB2b2lkIERlc3Ryb3lQYXJ0aXRpb25EaXJlY3RvcnkoUGFydGl0aW9uRGlyZWN0 b3J5IHBkaXIpOwogCiBleHRlcm4gT2lkCWdldF9kZWZhdWx0X29pZF9mcm9tX3BhcnRkZXNjKFBh cnRpdGlvbkRlc2MgcGFydGRlc2MpOworZXh0ZXJuIGJvb2wgUmVsYXRpb25IYXNGb3JlaWduUGFy dGl0aW9uKFJlbGF0aW9uIHJlbCk7CiAKICNlbmRpZgkJCQkJCQkvKiBQQVJUREVTQ19IICovCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vTWFrZWZpbGUgYi9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vTWFrZWZpbGUKaW5kZXggNTBiNjVkOGY2ZWEuLjExMDQxZjc5NjY3IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBAIHRvcF9idWlsZGRpciA9IC4uLy4uLy4u CiBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAKIEVYVFJBX0lO U1RBTEwgPSBjb250cmliL2hzdG9yZQorRVhUUkFfSU5TVEFMTCArPSBjb250cmliL3Bvc3RncmVz X2ZkdwogCiBleHBvcnQgd2l0aF9pY3UKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDEzX3BhcnRpdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxM19wYXJ0 aXRpb24ucGwKaW5kZXggNGY3OGRkNDg4MTUuLjQ2NjQ3M2JkMzg3IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9zdWJzY3JpcHRpb24vdC8wMTNfcGFydGl0aW9uLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNj cmlwdGlvbi90LzAxM19wYXJ0aXRpb24ucGwKQEAgLTgsNiArOCw5IEBAIHVzZSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6 Ok1vcmU7CiAKK215ICRzdGRvdXQ7CitteSAkc3RkZXJyOworCiAjIHNldHVwCiAKIG15ICRub2Rl X3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7 CkBAIC04OTAsNCArODkzLDE0MCBAQCAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAogCSJTRUxFQ1QgYSwgYiwgYyBGUk9NIHRhYjVfMSBPUkRFUiBCWSAx Iik7CiBpcygkcmVzdWx0LCBxcSg0fHwxKSwgJ3VwZGF0ZXMgb2YgdGFiNSByZXBsaWNhdGVkIGNv cnJlY3RseScpOwogCisjIFRlc3Qgd2l0aCBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZvcmVpZ24g dGFibGUgYXMgaXRzIHBhcnRpdGlvbi4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJDUkVBVEUgREFUQUJBU0UgZGIxIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgKKwknZGIxJywKKwlxe0NSRUFURSBFWFRFTlNJT04gSUYgTk9UIEVYSVNUUyBwb3N0Z3Jlc19m ZHc7CisJQ1JFQVRFIFNFUlZFUiBmZHcgRk9SRUlHTiBEQVRBIFdSQVBQRVIgcG9zdGdyZXNfZmR3 OworCUNSRUFURSBVU0VSIE1BUFBJTkcgRk9SIENVUlJFTlRfVVNFUiBTRVJWRVIgZmR3O30pOwor Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwknZGIxJywKKwlxe0NSRUFURSBTQ0hFTUEg c2MxOworCUNSRUFURSBTQ0hFTUEgc2MyOworCUNSRUFURSBUQUJMRSBzYzEudGFiNihpZCBpbnQp IFBBUlRJVElPTiBCWSBSQU5HRShpZCk7CisJQ1JFQVRFIFRBQkxFIHNjMS50YWI2XzEgUEFSVElU SU9OIE9GIHNjMS50YWI2IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDUpOworCUNSRUFURSBUQUJM RSBzYzEudGFiNl8yIFBBUlRJVElPTiBPRiBzYzEudGFiNiBGT1IgVkFMVUVTIEZST00gKDUpIFRP ICgxNSkgUEFSVElUSU9OIEJZIFJBTkdFKGlkKTsKKwlDUkVBVEUgRk9SRUlHTiBUQUJMRSBzYzEu dGFiNl8yXzEgUEFSVElUSU9OIE9GIHNjMS50YWI2XzIgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8g KDE1KSBTRVJWRVIgZmR3O30KKyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwknZGIx JywKKwlxe0NSRUFURSBQVUJMSUNBVElPTiBwdWJfZm9yZWlnbl8xIEZPUiBUQUJMRSBzYzEudGFi NiB3aXRoIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9O IHB1Yl9mb3JlaWduXzIgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgc2MxIHdpdGggKHB1Ymxpc2hfdmlh X3BhcnRpdGlvbl9yb290KTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViX2ZvcmVpZ25fMyBGT1Ig QUxMIFRBQkxFUyB3aXRoIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CisJQ1JFQVRFIFBV QkxJQ0FUSU9OIHB1Yl9mb3JlaWduXzQgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgc2MyIHdpdGggKHB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKwl9KTsKKworJG5vZGVfc3Vic2NyaWJlcjEtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIERBVEFCQVNFIGRiMSIpOworJG5vZGVfc3Vic2Ny aWJlcjEtPnNhZmVfcHNxbCgKKwknZGIxJywKKwlxe0NSRUFURSBTQ0hFTUEgc2MxOworCUNSRUFU RSBTQ0hFTUEgc2MyOworCUNSRUFURSBUQUJMRSBzYzEudGFiNihpZCBpbnQpIFBBUlRJVElPTiBC WSBSQU5HRShpZCk7CisJQ1JFQVRFIFRBQkxFIHNjMS50YWI2XzEgUEFSVElUSU9OIE9GIHNjMS50 YWI2IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDUpOworCUNSRUFURSBUQUJMRSBzYzEudGFiNl8y IFBBUlRJVElPTiBPRiBzYzEudGFiNiBGT1IgVkFMVUVTIEZST00gKDUpIFRPICgxNSkgUEFSVElU SU9OIEJZIFJBTkdFKGlkKTsKKwlDUkVBVEUgVEFCTEUgc2MxLnRhYjZfMl8xIFBBUlRJVElPTiBP RiBzYzEudGFiNl8yIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgxNSk7fQorKTsKKworJHB1Ymxp c2hlcl9jb25uc3RyID0gJG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9ZGIxJzsK KworIyBDcmVhdGUgc3Vic2NyaXB0aW9uIG9uIHB1YmxpY2F0aW9uIHdoaWNoIGhhcyBwYXJ0aXRp b25lZCB0YWJsZSB3aXRoIGZvcmVpZ24KKyMgdGFibGUgYXMgaXRzIHBhcnRpdGlvbi4KKygkcmVz dWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlX3N1YnNjcmliZXIxLT5wc3FsKCdkYjEnLAor CSJDUkVBVEUgU1VCU0NSSVBUSU9OIHN1Yl9mb3JlaWduXzEgQ09OTkVDVElPTiAnJHB1Ymxpc2hl cl9jb25uc3RyJyBQVUJMSUNBVElPTiBwdWJfZm9yZWlnbl8xOyIKKyk7CitsaWtlKAorCSRzdGRl cnIsCisJcXIvRVJST1I6ICBzdWJzY3JpcHRpb24gInN1Yl9mb3JlaWduXzEiIHdpdGggY29weV9k YXRhID0gdHJ1ZSBjYW5ub3Qgc3Vic2NyaWJlIHRvIGEgcHVibGljYXRpb24gd2l0aCBwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUgYW5kIHB1Ymxpc2hlcyBwYXJ0aXRpb25lZCB0YWJs ZSB3aXRoIGZvcmVpZ24gdGFibGUgYXMgcGFydGl0aW9uLywKKwkiQ3JlYXRlIHN1YnNjcmlwdGlv biBvbiBhIHB1YmxpY2F0aW9uIEZPUiBUQUJMRSBvbiBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZv cmVpZ24gdGFibGUgYXMgaXRzIHBhcnRpdGlvbiIKKyk7CisKKygkcmVzdWx0LCAkc3Rkb3V0LCAk c3RkZXJyKSA9ICRub2RlX3N1YnNjcmliZXIxLT5wc3FsKCdkYjEnLAorCSJDUkVBVEUgU1VCU0NS SVBUSU9OIHN1Yl9mb3JlaWduXzEgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJM SUNBVElPTiBwdWJfZm9yZWlnbl8yOyIKKyk7CitsaWtlKAorCSRzdGRlcnIsCisJcXIvRVJST1I6 ICBzdWJzY3JpcHRpb24gInN1Yl9mb3JlaWduXzEiIHdpdGggY29weV9kYXRhID0gdHJ1ZSBjYW5u b3Qgc3Vic2NyaWJlIHRvIGEgcHVibGljYXRpb24gd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25f cm9vdCA9IHRydWUgYW5kIHB1Ymxpc2hlcyBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZvcmVpZ24g dGFibGUgYXMgcGFydGl0aW9uLywKKwkiQ3JlYXRlIHN1YnNjcmlwdGlvbiBvbiBhIHB1YmxpY2F0 aW9uIEZPUiBUQUJMRVMgSU4gU0NIRU1BIG9uIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWln biB0YWJsZSBhcyBpdHMgcGFydGl0aW9uIgorKTsKKygkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJy KSA9ICRub2RlX3N1YnNjcmliZXIxLT5wc3FsKCdkYjEnLAorCSJDUkVBVEUgU1VCU0NSSVBUSU9O IHN1Yl9mb3JlaWduXzEgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElP TiBwdWJfZm9yZWlnbl8zOyIKKyk7CitsaWtlKAorCSRzdGRlcnIsCisJcXIvRVJST1I6ICBzdWJz Y3JpcHRpb24gInN1Yl9mb3JlaWduXzEiIHdpdGggY29weV9kYXRhID0gdHJ1ZSBjYW5ub3Qgc3Vi c2NyaWJlIHRvIGEgcHVibGljYXRpb24gd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9 IHRydWUgYW5kIHB1Ymxpc2hlcyBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZvcmVpZ24gdGFibGUg YXMgcGFydGl0aW9uLywKKwkiQ3JlYXRlIHN1YnNjcmlwdGlvbiBvbiBhIHB1YmxpY2F0aW9uIEZP UiBBTEwgVEFCTEVTIG9uIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWlnbiB0YWJsZSBhcyBp dHMgcGFydGl0aW9uIgorKTsKKworIyBJZiBwdWJsaWNhdGlvbiBpcyBjcmVhdGVkIHdpdGggcHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSwgd2UgY2FuCisjIGNyZWF0ZSBzdWJzY3Jp cHRpb24gb24gaXQuIEJ1dCByZXBsaWNhdGlvbiBvZiBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZv cmVpZ24KKyMgaXMgc2tpcHBlZAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ2RiMScsCisJ IkFMVEVSIFBVQkxJQ0FUSU9OIHB1Yl9mb3JlaWduXzEgU0VUIChwdWJsaXNoX3ZpYV9wYXJ0aXRp b25fcm9vdCA9IGZhbHNlKSIKKyk7CisoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkbm9k ZV9zdWJzY3JpYmVyMS0+cHNxbCgnZGIxJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiBzdWJfZm9y ZWlnbl8xIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gcHViX2Zv cmVpZ25fMTsiCispOworJG5vZGVfc3Vic2NyaWJlcjEtPnNhZmVfcHNxbCgnZGIxJywgJ0RST1Ag U1VCU0NSSVBUSU9OIHN1Yl9mb3JlaWduXzEnKTsKKworIyBpZiBzdWJzY3JpcHRpb24gaXMgY3Jl YXRlZCB3aXRoIGNvcHlfZGF0YT1mYWxzZSwgd2UgY2FuIGNyZWF0ZSBzdWJzY3JpcHRpb24KKygk cmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlX3N1YnNjcmliZXIxLT5wc3FsKCdkYjEn LAorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHN1Yl9mb3JlaWduXzEgQ09OTkVDVElPTiAnJHB1Ymxp c2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiBwdWJfZm9yZWlnbl8yIFdJVEggKGNvcHlfZGF0YT1m YWxzZSkiCispOworJG5vZGVfc3Vic2NyaWJlcjEtPnNhZmVfcHNxbCgnZGIxJywgJ0RST1AgU1VC U0NSSVBUSU9OIHN1Yl9mb3JlaWduXzEnKTsKKworIyBBbHRlciBzdWJzY3JpcHRpb24gdG8gaW5j bHVkZSBwdWJsaXNoZXIgd2hpY2ggaGFzIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGgKKyMgZm9yZWln biB0YWJsZSBhcyBpdHMgcGFydGl0aW9uLgorJG5vZGVfc3Vic2NyaWJlcjEtPnNhZmVfcHNxbCgn ZGIxJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiBzdWJfZm9yZWlnbl8xIENPTk5FQ1RJT04gJyRw dWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gcHViX2ZvcmVpZ25fNDsiCispOworKCRyZXN1 bHQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGVfc3Vic2NyaWJlcjEtPnBzcWwoJ2RiMScsCisJ IkFMVEVSIFNVQlNDUklQVElPTiBzdWJfZm9yZWlnbl8xIEFERCBQVUJMSUNBVElPTiBwdWJfZm9y ZWlnbl8yOyIpOworbGlrZSgKKwkkc3RkZXJyLAorCXFyL0VSUk9SOiAgc3Vic2NyaXB0aW9uICJz dWJfZm9yZWlnbl8xIiB3aXRoIGNvcHlfZGF0YSA9IHRydWUgY2Fubm90IHN1YnNjcmliZSB0byBh IHB1YmxpY2F0aW9uIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlIGFuZCBw dWJsaXNoZXMgcGFydGl0aW9uZWQgdGFibGUgd2l0aCBmb3JlaWduIHRhYmxlIGFzIHBhcnRpdGlv bi8sCisJIkFkZCBwdWJsaWNhdGlvbiB3aGljaCBoYXMgcGFydGl0aW9uZWQgdGFibGUgd2l0aCBm b3JlaWduIHRhYmxlIGFzIGl0cyBwYXJ0aXRpb24gdG8gc3Vic2NyaXB0aW9uIgorKTsKKygkcmVz dWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlX3N1YnNjcmliZXIxLT5wc3FsKCdkYjEnLAor CSJBTFRFUiBTVUJTQ1JJUFRJT04gc3ViX2ZvcmVpZ25fMSBTRVQgUFVCTElDQVRJT04gcHViX2Zv cmVpZ25fMjsiKTsKK2xpa2UoCisJJHN0ZGVyciwKKwlxci9FUlJPUjogIHN1YnNjcmlwdGlvbiAi c3ViX2ZvcmVpZ25fMSIgd2l0aCBjb3B5X2RhdGEgPSB0cnVlIGNhbm5vdCBzdWJzY3JpYmUgdG8g YSBwdWJsaWNhdGlvbiB3aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSBhbmQg cHVibGlzaGVzIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWlnbiB0YWJsZSBhcyBwYXJ0aXRp b24vLAorCSJzZXQgcHVibGljYXRpb24gd2hpY2ggaGFzIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGgg Zm9yZWlnbiB0YWJsZSBhcyBpdHMgcGFydGl0aW9uIGZvciBzdWJzY3JpcHRpb24iCispOworCisj IENyZWF0ZSBmb3JlaWduIHRhYmxlIGFzIGEgcGFydGl0aW9uIG9mIHBhcnRpdGlvbmVkIHRhYmxl IGFscmVhZHkgcGFydCBvZgorIyBwdWJsaWNhdGlvbi4KKygkcmVzdWx0LCAkc3Rkb3V0LCAkc3Rk ZXJyKSA9ICRub2RlX3N1YnNjcmliZXIxLT5wc3FsKCdkYjEnLAorCSJDUkVBVEUgRk9SRUlHTiBU QUJMRSBzYzEudGFiNl8yXzEgUEFSVElUSU9OIE9GIHNjMS50YWI2XzIgRk9SIFZBTFVFUyBGUk9N ICgxMCkgVE8gKDE1KSBTRVJWRVIgZmR3OyIKKyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgnZGIxJywgIkRST1AgRk9SRUlHTiBUQUJMRSBzYzEudGFiNl8yXzEiKTsKKygkcmVzdWx0LCAk c3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlX3B1Ymxpc2hlci0+cHNxbCgnZGIxJywKKwkiQ1JFQVRF IEZPUkVJR04gVEFCTEUgc2MxLnRhYjZfMl8xIFBBUlRJVElPTiBPRiBzYzEudGFiNl8yIEZPUiBW QUxVRVMgRlJPTSAoMTApIFRPICgxNSkgU0VSVkVSIGZkdyIKKyk7CitsaWtlKAorCSRzdGRlcnIs CisJcXIvRVJST1I6ICBjYW5ub3QgY3JlYXRlIGZvcmVpZ24gdGFibGUgInRhYjZfMl8xIiBhcyBh IHBhcnRpdGlvbiBvZiAidGFiNl8yIi8sCisJIkNyZWF0ZSBmb3JlaWduIHRhYmxlIGFzIGEgcGFy dGl0aW9uIG9mIHBhcnRpdGlvbmVkIHRhYmxlIGFscmVhZHkgcGFydCBvZiBwdWJsaWNhdGlvbiIK Kyk7CisKKyMgQXR0YWNoIGZvcmVpZ24gdGFibGUgYXMgYSBwYXJ0aXRpb24gb2YgcGFydGl0aW9u ZWQgdGFibGUgYWxyZWFkeSBwYXJ0IG9mCisjIHB1YmxpY2F0aW9uLgorKCRyZXN1bHQsICRzdGRv dXQsICRzdGRlcnIpID0gJG5vZGVfc3Vic2NyaWJlcjEtPnBzcWwoJ2RiMScsCisJIkNSRUFURSBG T1JFSUdOIFRBQkxFIHNjMS50YWI2XzJfMSAoaWQgaW50KSBTRVJWRVIgZmR3Iik7CisoJHJlc3Vs dCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkbm9kZV9zdWJzY3JpYmVyMS0+cHNxbCgnZGIxJywKKwki QUxURVIgVEFCTEUgc2MxLnRhYjZfMiBBVFRBQ0ggUEFSVElUSU9OIHNjMS50YWI2XzJfMSBGT1Ig VkFMVUVTIEZST00gKDEwKSBUTyAoMTUpIgorKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdkYjEnLAorCSJDUkVBVEUgRk9SRUlHTiBUQUJMRSBzYzEudGFiNl8yXzEgKGlkIGludCkgU0VS VkVSIGZkdyIpOworKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGVfcHVibGlzaGVy LT5wc3FsKCdkYjEnLAorCSJBTFRFUiBUQUJMRSBzYzEudGFiNl8yIEFUVEFDSCBQQVJUSVRJT04g c2MxLnRhYjZfMl8xIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgxNSkiCispOworbGlrZSgKKwkk c3RkZXJyLAorCXFyL0VSUk9SOiAgY2Fubm90IGF0dGFjaCBmb3JlaWduIHRhYmxlICJ0YWI2XzJf MSIgdG8gcGFydGl0aW9uIHRhYmxlICJ0YWI2XzIiLywKKwkiQXR0YWNoIGZvcmVpZ24gdGFibGUg YXMgYSBwYXJ0aXRpb24gb2YgYWxyZWFkeSBwdWJsaXNoZWQgcGFydGl0aW9uZWQgdGFibGUiCisp OworCiBkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMzQuMQoK --00000000000031b85b0639136b0a--