Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vWCRh-00F1Uw-0o for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Dec 2025 11:45:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vWCRg-001qkj-0i for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Dec 2025 11:45:25 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vWCRf-001qkV-2d for pgsql-hackers@lists.postgresql.org; Thu, 18 Dec 2025 11:45:24 +0000 Received: from mail-oa1-x35.google.com ([2001:4860:4864:20::35]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vWCRd-001OzT-0v for pgsql-hackers@lists.postgresql.org; Thu, 18 Dec 2025 11:45:23 +0000 Received: by mail-oa1-x35.google.com with SMTP id 586e51a60fabf-3ed15120e55so378959fac.2 for ; Thu, 18 Dec 2025 03:45:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766058319; x=1766663119; 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=yQzOrixLyRdOI2nDS4YRBRIa9AikHlDfMSsMLiUMISQ=; b=iXLQWLeKsrMSclM2vXu/16D7f1ZCiflNILKdnknhF63L4uwkab5Mnt8bx3MCShzDYt MbTGApJlh/WjrVusRj5RsEikBJY8Ut37IggM3VHGTsAqpye9lj0aVyGIrvWTJDKCEeD+ cEmtk6QWDuKq/P+2bYZmQkKLRDV3EM68x0pBEdOACvuwyDv1ovRZrqR3NF6WRAySc616 +uJ+FFUkp4ZM0quIVG5j4B4Ouy4j0l1gmGFcLl1+ySvzPiJLXP7/48IPGYwRm/Zoqxq4 36y+GOHiFa3y5fDVE/dtc6q/fUEYF9w+OS84GRRYLDMVEEQLzFyXMAFZDPBdolT1SZKf Neng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766058319; x=1766663119; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=yQzOrixLyRdOI2nDS4YRBRIa9AikHlDfMSsMLiUMISQ=; b=qeGt84rC1j0BlwxxzL5bdFH47nbupkETQKrUt/QR8D79ZsQq3fZ03IZLQ9ruWqwE/x KJgULK6Bo3u2XN4tDlxPMGxM74sCuPi21hgOlC2Q4gCiCD3/WN3FfjrIBGkiINGh/BIB QnFg+dzRVHTdzxFKb10eifxs9gQkQNp+NA4pOM0gX3aP40V9G3r+aZf59O2Ojl4ev3vX 10bJGdSXjySni64OZ4jCWbod7mPsZ0RPwAew36uGEy+kCw+LvXcsMjKHty3aE2uxd5sk MrUYfJNvFAXuyWny9G/qk3vXmAK3+oVTUK19tOuU94VJkVYqf9gCbpWpMJt9OnWJeYZm Z8fA== X-Forwarded-Encrypted: i=1; AJvYcCWZAd4RyJhWfBz2riPr/HcL4pex5+0u88Tn0P8A+qnoW2j+ucLCbtSoqhWOoGoG0mhZFAtQJuJONl4CjpxI@lists.postgresql.org X-Gm-Message-State: AOJu0Yx9uJhdrhuqk/QHMGfnVNW3ki0QiyTWq+6IZwO0KNHfT3K8733n vu0/pFxtUR/OP8tXb9wgLyrmOLkuASdiG3JGiAvGIizhpo0XQxTQrqjTrXc9jmuCc9A+u8Im03d l0Q7sjsmaNNfGEUYoE2KXyJbMWoBviI8= X-Gm-Gg: AY/fxX4C2NplW4Z87LsLlROV2o2Dn3PbULRG0N2tPsscvZ/EaXwhmIJSjbPP8ITLEzV +cCieGSwdextfmXMkiCECgibtlZvnB/61CC/I1KtieUP6rne92xB0qxVEYNaKmvi3nHoltjcfQI gzEap2PlIaoOQDvTANGa9YoYrqzizC0dJv9eyyYH1pfzSAkq+728ZpRc8aBu6PfwdwabXIPFILU fFXQePOSSH6K7KFgN73x7+GhXDDd/Lsw4Z3JDO5NAO0M6aZQIj7cB84VyTjs51Dp+fodw9S236P hL1CEbr8 X-Google-Smtp-Source: AGHT+IGnXbf1ak0utkjwg0MGoNGuLFJ5jVccWcO2XDZ8eyO1HZslPb0WxZCkia9xtFzY9lAlHGHqRzuYH7gu893IDc8= X-Received: by 2002:a05:6870:1596:b0:321:2772:dd9 with SMTP id 586e51a60fabf-3f5fc38b02cmr9288450fac.12.1766058318758; Thu, 18 Dec 2025 03:45:18 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Shlok Kyal Date: Thu, 18 Dec 2025 17:15:06 +0530 X-Gm-Features: AQt7F2opIgLGM9HlwaXVYhFOAMdt8f8fDDSZ8m6u5s_VrKz1EBwgxz6JweEr5n0 Message-ID: Subject: Re: Skipping schema changes in publication To: shveta malik Cc: Peter Smith , Amit Kapila , vignesh C , "Zhijie Hou (Fujitsu)" , YeXiu <1518981153@qq.com>, Ian Lawrence Barwick , Bharath Rupireddy , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000be23d60646387e39" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000be23d60646387e39 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, 18 Dec 2025 at 11:30, shveta malik wrote: > > On Wed, Dec 17, 2025 at 11:24=E2=80=AFAM shveta malik wrote: > > > > On Tue, Dec 16, 2025 at 2:50=E2=80=AFPM Shlok Kyal wrote: > > > > > > I have also addressed the remaining comments and attached the latest = patch. > > > > > > > Thanks. A few comments: > > > > 1) > > + if (!set_top && puballtables) > > + set_top =3D !list_member_oid(aexceptpubids, puboid); > > > > In GetTopMostAncestorInPublication(), we have made the above change > > which will now get ancestor from all-tables publication as well, > > provided table is not part of 'except' List. Earlier this function was > > only checking pg_subscription_rel and pg_publication_namespace which > > does not include all-tables publication. Won't it change the > > result-set for callers? > > It can change the result set of callers. I analysed more and saw that GetTopMostAncestorInPublication is called from 3 places. 1. pub_rf_contains_invalid_column: it is called when publication is not ALL TABLES. It will have no impact with the change. 2. pub_contains_invalid_column : it is called for all type of publication. it calls GetTopMostAncestorInPublication like: ``` if (pubviaroot && relation->rd_rel->relispartition) { publish_as_relid =3D GetTopMostAncestorInPublication(pubid, ancestors, NULL, puballtables); if (!OidIsValid(publish_as_relid)) publish_as_relid =3D relid; } ``` In HEAD for ALL TABLES publication GetTopMostAncestorInPublication will always return InvalidOid. With this patch it can have some value. So there is a difference in behaviour. 3. get_rel_sync_entry in HEAD we had ``` if (pub->alltables) { publish =3D true; if (pub->pubviaroot && am_partition) { List *ancestors =3D get_partition_ancestors(relid); pub_relid =3D llast_oid(ancestors); ancestor_level =3D list_length(ancestors); } } ``` With patch this condition is not valid because we cannot set 'pub_relid =3D llast_oid(ancestors);' directly as the table can be excluded. So, the change in GetTopMostAncestorInPublication will even handle the case of "ALL TABLES" publication. Since we have a behaviour difference for the 2nd function, I have removed the changes for 'ALL TABLES' from GetTopMostAncestorInPublication and added it separately 'get_rel_sync_entry'. Thoughts? > > 2) > > + * Publications declared with FOR ALL TABLES or FOR ALL SEQUENCES shou= ld use > > + * GetAllPublicationRelations() to obtain the complete set of tables c= overed by > > + * the publication. > > + */ > > +List * > > +GetPublicationIncludedRelations(Oid pubid, PublicationPartOpt pub_part= opt) > > +{ > > + return GetPublicationRelationsInternal(pubid, pub_partopt, false); > > +} > > > > We can have an Assert here that pubid passed is not for ALL-Tables or > > ALL-sequences > > Added assert for all tables. I found during testing that this function can be called for ALL SEQUENCES in HEAD. So I have not added an assertion for it. I think it is a bug and shared the same in [1]. Will add assert for all sequences as well once the bug is fixed. > > 3) > > GetAllPublicationRelations: > > * If the publication publishes partition changes via their respective = root > > * partitioned tables, we must exclude partitions in favor of including= the > > * root partitioned tables. This is not applicable to FOR ALL SEQUENCES > > * publication. > > > > + * The list does not include relations that are explicitly excluded vi= a the > > + * EXCEPT TABLE clause of the publication specified by pubid. > > > > Suggestion: > > /* > > * If the publication publishes partition changes via their respective = root > > * partitioned tables, we must exclude partitions in favor of including= the > > * root partitioned tables. The list also excludes tables that are > > * explicitly excluded via the EXCEPT TABLE clause of the publication > > * identified by pubid. Neither of these rules applies to FOR ALL SEQUE= NCES > > * publications. > > */ > > > > 4) > > GetAllPublicationRelations: > > + if (relkind =3D=3D RELKIND_RELATION) > > + exceptlist =3D GetPublicationExcludedRelations(pubid, pubviaroot ? > > + PUBLICATION_PART_ALL : > > + PUBLICATION_PART_ROOT); > > > > Assert(!(relkind =3D=3D RELKIND_SEQUENCE && pubviaroot)); > > > > Generally we keep such parameters' sanity checks as the first step. We > > can add new code after Assert. > > > > 5) > > ObjectsInAllPublicationToOids() only has one caller which calls it > > under check: 'if (stmt->for_all_tables)' > > > > Thus IMO, we do not need a switch-case in > > ObjectsInAllPublicationToOids(). We can simply have a sanity check to > > see it is 'PUBLICATION_ALL_TABLES' and then do the needed operation > > for this pub-type. > > > > 6) > > CreatePublication(): > > /* > > * If publication is for ALL TABLES and relations is not empty, it means > > * that there are some relations to be excluded from the publication. > > * Else, relations is the list of relations to be added to the > > * publication. > > */ > > > > Shall we rephrase slightly to: > > > > /* > > * If the publication is for ALL TABLES and 'relations' is not empty, > > * it indicates that some relations should be excluded from the publica= tion. > > * Add those excluded relations to the publication with 'prexcept' set = to true. > > * Otherwise, 'relations' contains the list of relations to be explicit= ly > > * included in the publication. > > */ > > > > 7) > > + /* Associate objects with the publication. */ > > + if (stmt->for_all_tables) > > + { > > + /* Invalidate relcache so that publication info is rebuilt. */ > > + CacheInvalidateRelcacheAll(); > > + } > > > > I think this comment is misplaced. We shall have it at previous place, = atop: > > if (stmt->for_all_tables) > > This is because here we are just trying to invalidate cache while at > > previous place we are trying to associate. > > > > Few more: > > 8) > get_rel_sync_entry() > + List *exceptTablePubids =3D NIL; > > At all other places, we are using exceptpubids, shall we use the same her= e? > > 9) > ObjectsInPublicationToOids() > > case PUBLICATIONOBJ_TABLE: > + case PUBLICATIONOBJ_EXCEPT_TABLE: > + pubobj->pubtable->except =3D (pubobj->pubobjtype =3D=3D > PUBLICATIONOBJ_EXCEPT_TABLE); > *rels =3D lappend(*rels, pubobj->pubtable); > break; > > It looks slightly odd that for pubobjtype case > 'PUBLICATIONOBJ_EXCEPT_TABLE', we have to check pubobjtype against > PUBLICATIONOBJ_EXCEPT_TABLE itself. > > Shall we make it: > case PUBLICATIONOBJ_EXCEPT_TABLE: > pubobj->pubtable->except =3D true; > /* fall through */ > case PUBLICATIONOBJ_TABLE: > *rels =3D lappend(*rels, pubobj->pubtable); > break; > We should also make pubobj->pubtable->except =3D false for PUBLICATIONOBJ_T= ABLE? Updated the condition like: case PUBLICATIONOBJ_EXCEPT_TABLE: pubobj->pubtable->except =3D true; *rels =3D lappend(*rels, pubobj->pubtable); break; case PUBLICATIONOBJ_TABLE: pubobj->pubtable->except =3D false; *rels =3D lappend(*rels, pubobj->pubtable); break; > 10) > I want to understand the usage of DO_PUBLICATION_EXCEPT_REL. Can you > give a scenario where its usage in DOTypeNameCompare() will be hit? > Its all other usages too need some analysis and validation. > In the current patch we are not setting an objecttype to DO_PUBLICATION_EXCEPT_REL. We are storing the list of except tables in 'pubinfo[i].excepttbls' list in function getPublications and "pubinfo[i].dobj.objType =3D DO_PUBLICATION". So, I don't see any requirement of DO_PUBLICATION_EXCEPT_REL now. I have removed it. > 11) > + List *except_objects; /* List of publication object to be excluded *= / > > object --> objects > Currently since we exclude only tables, does it make sense to name it > as except_tables? > I have also addressed the remaining comments and attached the updated v33 p= atch. [1]: https://www.postgresql.org/message-id/CALDaNm0qoNtsX%2B9KPug6qb%3DuC-H= 2iPMYW%2BgL%3DHehx%2BNgOxga6w%40mail.gmail.com Thanks, Shlok Kyal --000000000000be23d60646387e39 Content-Type: application/octet-stream; name="v33-0001-Skip-publishing-the-tables-specified-in-EXCEPT-T.patch" Content-Disposition: attachment; filename="v33-0001-Skip-publishing-the-tables-specified-in-EXCEPT-T.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjbdgb3e0 RnJvbSAxMjc1ZjFlMmM4MDU2Y2M1OWEyYTkxZjJlZTQ2ZDIxZDAwZTIxZDk5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgOSBEZWMgMjAyNSAyMjo0MToyMyArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjMz XSBTa2lwIHB1Ymxpc2hpbmcgdGhlIHRhYmxlcyBzcGVjaWZpZWQgaW4gRVhDRVBUIFRBQkxFLgoK QSBuZXcgIkVYQ0VQVCBUQUJMRSIgY2xhdXNlIGZvciBDUkVBVEUvQUxURVIgUFVCTElDQVRJT04g YWxsb3dzIG9uZSBvcgptb3JlIHRhYmxlcyB0byBiZSBleGNsdWRlZC4gVGhlIHB1Ymxpc2hlciB3 aWxsIG5vdCBzZW5kIHRoZSBkYXRhIG9mCmV4Y2x1ZGVkIHRhYmxlcyB0byB0aGUgc3Vic2NyaWJl ci4KClRoZSBuZXcgc3ludGF4IGFsbG93cyBzcGVjaWZ5aW5nIGV4Y2x1ZGVkIHJlbGF0aW9ucyB3 aGVuIGNyZWF0aW5nIGEKcHVibGljYXRpb24uIEZvciBleGFtcGxlOgpDUkVBVEUgUFVCTElDQVRJ T04gcHViMSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHQxLHQyKTsKCkEgbmV3IGNvbHVt biAicHJleGNlcHQiIGlzIGFkZGVkIHRvIHRhYmxlICJwZ19wdWJsaWNhdGlvbl9yZWwiLCB0byBm bGFnCnRoZSByZWxhdGlvbnMgdGhhdCB0aGUgdXNlciB3YW50cyB0byBleGNsdWRlIGZyb20gdGhl IHB1YmxpY2F0aW9ucy4KCnBnX2R1bXAgaXMgdXBkYXRlZCB0byBpZGVudGlmeSBhbmQgZHVtcCB0 aGUgZXhjbHVkZWQgdGFibGVzIG9mIHRoZSBwdWJsaWNhdGlvbnMuCgpUaGUgcHNxbCBcZCBmYW1p bHkgb2YgY29tbWFuZHMgY2FuIG5vdyBkaXNwbGF5IGV4Y2x1ZGVkIHRhYmxlcy4gZS5nLiBwc3Fs ClxkUnArIHZhcmlhbnQgd2lsbCBub3cgZGlzcGxheSBhc3NvY2lhdGVkICJleGNlcHQgdGFibGVz IiBpZiBhbnkuCgpCdW1wIGNhdGFsb2cgdmVyc2lvbi4KLS0tCiBkb2Mvc3JjL3NnbWwvY2F0YWxv Z3Muc2dtbCAgICAgICAgICAgICAgICAgICAgfCAgMTAgKwogZG9jL3NyYy9zZ21sL2xvZ2ljYWwt cmVwbGljYXRpb24uc2dtbCAgICAgICAgIHwgICA2ICstCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0 ZV9wdWJsaWNhdGlvbi5zZ21sICAgICAgfCAgNTIgKysrKy0KIGRvYy9zcmMvc2dtbC9yZWYvcHNx bC1yZWYuc2dtbCAgICAgICAgICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5jICAgICAgICAgIHwgMTUxICsrKysrKysrKy0tLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgICAgICAgIHwgMTA5ICsrKysrKy0tLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFj a2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgICAgICAgICAgfCAgMzMgKystCiBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jICAgfCAgMjIgKy0KIHNyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICAgICB8ICAyMSArLQogc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICAgICAgIHwgIDY2ICsrKysrLQogc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4v cGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsICAgICAgICAgICAgICB8ICAzMCArKysKIHNyYy9iaW4v cHNxbC9kZXNjcmliZS5jICAgICAgICAgICAgICAgICAgICAgICB8ICA4NyArKysrKystCiBzcmMv YmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMgICAgICAgICAgICAgICAgfCAgMTIgKy0KIHNyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCAgICAgICAgICB8ICAxMyArLQogc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCAgICAgIHwgICAxICsKIHNyYy9pbmNs dWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCAgICAgfCAgNzUgKysrKystCiBzcmMvdGVz dC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwgICAgICAgICAgfCAgMzMgKystCiBzcmMvdGVz dC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQgICAgICAgICAgICAgfCAgIDEgKwogLi4uL3QvMDM3 X3JlcF9jaGFuZ2VzX2V4Y2VwdF90YWJsZS5wbCAgICAgICAgIHwgMjE5ICsrKysrKysrKysrKysr KysrKwogMjIgZmlsZXMgY2hhbmdlZCwgODQxIGluc2VydGlvbnMoKyksIDExMyBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzdfcmVwX2No YW5nZXNfZXhjZXB0X3RhYmxlLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dz LnNnbWwgYi9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbAppbmRleCAyZmM2MzQ0Mjk4MC4uOWU4 NDcxNTJiNDQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCkBAIC02NTgxLDYgKzY1ODEsMTYgQEAgU0NSQU0tU0hB LTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBjb3VudCZndDs8L3JlcGxhY2VhYmxlPjo8 cmVwbGFjZWFibGU+JmwKICAgICAgIGlmIHRoZXJlIGlzIG5vIHB1YmxpY2F0aW9uIHF1YWxpZnlp bmcgY29uZGl0aW9uLjwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KIAorICAgICA8cm93Pgor ICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVt bl9kZWZpbml0aW9uIj4KKyAgICAgIDxzdHJ1Y3RmaWVsZD5wcmV4Y2VwdDwvc3RydWN0ZmllbGQ+ IDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBU cnVlIGlmIHRoZSByZWxhdGlvbiBpcyBleGNsdWRlZCBmcm9tIHRoZSBwdWJsaWNhdGlvbi4gU2Vl CisgICAgICAgPGxpbmsgbGlua2VuZD0ic3FsLWNyZWF0ZXB1YmxpY2F0aW9uLXBhcmFtcy1mb3It ZXhjZXB0LXRhYmxlIj48bGl0ZXJhbD5FWENFUFQgVEFCTEU8L2xpdGVyYWw+PC9saW5rPi4KKyAg ICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKwogICAgICA8cm93PgogICAgICAgPGVu dHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0 aW9uIj4KICAgICAgICA8c3RydWN0ZmllbGQ+cHJhdHRyczwvc3RydWN0ZmllbGQ+IDx0eXBlPmlu dDJ2ZWN0b3I8L3R5cGU+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNh dGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAppbmRleCBh YTAxM2YzNDhkNC4uODA1MTJmODdmZGEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2dpY2Fs LXJlcGxpY2F0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24u c2dtbApAQCAtMTE2LDcgKzExNiwxMSBAQAogICAgPGxpdGVyYWw+Rk9SIFRBQkxFUyBJTiBTQ0hF TUE8L2xpdGVyYWw+LCA8bGl0ZXJhbD5GT1IgQUxMIFRBQkxFUzwvbGl0ZXJhbD4sCiAgICBvciA8 bGl0ZXJhbD5GT1IgQUxMIFNFUVVFTkNFUzwvbGl0ZXJhbD4uIFVubGlrZSB0YWJsZXMsIHNlcXVl bmNlcyBjYW4gYmUKICAgIHN5bmNocm9uaXplZCBhdCBhbnkgdGltZS4gRm9yIG1vcmUgaW5mb3Jt YXRpb24sIHNlZQotICAgPHhyZWYgbGlua2VuZD0ibG9naWNhbC1yZXBsaWNhdGlvbi1zZXF1ZW5j ZXMiLz4uCisgICA8eHJlZiBsaW5rZW5kPSJsb2dpY2FsLXJlcGxpY2F0aW9uLXNlcXVlbmNlcyIv Pi4gV2hlbiBhIHB1YmxpY2F0aW9uIGlzCisgICBjcmVhdGVkIHdpdGggPGxpdGVyYWw+Rk9SIEFM TCBUQUJMRVM8L2xpdGVyYWw+LCB0YWJsZXMgY2FuIGJlIGV4cGxpY2l0bHkKKyAgIGV4Y2x1ZGVk IGZyb20gcHVibGljYXRpb24gdXNpbmcgdGhlIDxsaXRlcmFsPkVYQ0VQVCBUQUJMRTwvbGl0ZXJh bD4gY2xhdXNlLgorICAgU2VlIDxsaW5rIGxpbmtlbmQ9InNxbC1jcmVhdGVwdWJsaWNhdGlvbi1w YXJhbXMtZm9yLWV4Y2VwdC10YWJsZSI+PGxpdGVyYWw+RVhDRVBUIFRBQkxFPC9saXRlcmFsPjwv bGluaz4KKyAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sIGIvZG9j L3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbAppbmRleCA3NWE1MDhiZWJmYS4u NmIxYzdmMzgzZTUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0 aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbApA QCAtMzIsMTIgKzMyLDE2IEBAIENSRUFURSBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+CiAKIDxwaHJhc2U+YW5kIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNhdGlvbl9hbGxfb2JqZWN0PC9yZXBsYWNlYWJsZT4g aXMgb25lIG9mOjwvcGhyYXNlPgogCi0gICAgQUxMIFRBQkxFUworICAgIEFMTCBUQUJMRVMgWyBF WENFUFQgWyBUQUJMRSBdICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4Y2VwdF90 YWJsZV9vYmplY3Q8L3JlcGxhY2VhYmxlPiBbLCAuLi4gXSApIF0KICAgICBBTEwgU0VRVUVOQ0VT CiAKIDxwaHJhc2U+YW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9hbmRf Y29sdW1uczwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgogCiAgICAgWyBPTkxZIF0gPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBb ICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJs ZT4gWywgLi4uIF0gKSBdIFsgV0hFUkUgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ICkgXQorCis8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5leGNlcHRfdGFibGVfb2JqZWN0PC9yZXBsYWNlYWJsZT4gaXM6 PC9waHJhc2U+CisKKyAgICBbIE9OTFkgXSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKiBdCiA8L3N5bm9wc2lzPgogIDwvcmVmc3lub3Bz aXNkaXY+CiAKQEAgLTE2NCw3ICsxNjgsOCBAQCBDUkVBVEUgUFVCTElDQVRJT04gPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPgogICAgIDxsaXN0aXRlbT4K ICAgICAgPHBhcmE+CiAgICAgICBNYXJrcyB0aGUgcHVibGljYXRpb24gYXMgb25lIHRoYXQgcmVw bGljYXRlcyBjaGFuZ2VzIGZvciBhbGwgdGFibGVzIGluCi0gICAgICB0aGUgZGF0YWJhc2UsIGlu Y2x1ZGluZyB0YWJsZXMgY3JlYXRlZCBpbiB0aGUgZnV0dXJlLgorICAgICAgdGhlIGRhdGFiYXNl LCBpbmNsdWRpbmcgdGFibGVzIGNyZWF0ZWQgaW4gdGhlIGZ1dHVyZS4gVGFibGVzIGxpc3RlZCBp bgorICAgICAgRVhDRVBUIFRBQkxFIGFyZSBleGNsdWRlZCBmcm9tIHRoZSBwdWJsaWNhdGlvbi4K ICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTE4 NCw2ICsxODksMzIgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0 ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9InNxbC1jcmVhdGVwdWJsaWNhdGlvbi1wYXJh bXMtZm9yLWV4Y2VwdC10YWJsZSI+CisgICAgPHRlcm0+PGxpdGVyYWw+RVhDRVBUIFRBQkxFPC9s aXRlcmFsPjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgVGhpcyBj bGF1c2Ugc3BlY2lmaWVzIGEgbGlzdCBvZiB0YWJsZXMgdG8gYmUgZXhjbHVkZWQgZnJvbSB0aGUK KyAgICAgIHB1YmxpY2F0aW9uLiBJZiA8bGl0ZXJhbD5PTkxZPC9saXRlcmFsPiBpcyBzcGVjaWZp ZWQgYmVmb3JlIHRoZSB0YWJsZQorICAgICAgbmFtZSwgb25seSB0aGF0IHRhYmxlIGlzIGV4Y2x1 ZGVkIGZyb20gdGhlIHB1YmxpY2F0aW9uLiBJZgorICAgICAgPGxpdGVyYWw+T05MWTwvbGl0ZXJh bD4gaXMgbm90IHNwZWNpZmllZCwgdGhlIHRhYmxlIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnQKKyAg ICAgIHRhYmxlcyAoaWYgYW55KSBhcmUgZXhjbHVkZWQuIE9wdGlvbmFsbHksIDxsaXRlcmFsPio8 L2xpdGVyYWw+IGNhbiBiZQorICAgICAgc3BlY2lmaWVkIGFmdGVyIHRoZSB0YWJsZSBuYW1lIHRv IGV4cGxpY2l0bHkgaW5kaWNhdGUgdGhhdCBkZXNjZW5kYW50CisgICAgICB0YWJsZXMgYXJlIGV4 Y2x1ZGVkLiBUaGlzIGRvZXMgbm90IGFwcGx5IHRvIGEgcGFydGl0aW9uZWQgdGFibGUsIGhvd2V2 ZXIuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBXaGVuIDxsaXRlcmFsPnB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290PC9saXRlcmFsPiBpcyBzZXQgdG8KKyAgICAgIDxsaXRlcmFs PnRydWU8L2xpdGVyYWw+LCBzcGVjaWZ5aW5nIGEgcm9vdCBwYXJ0aXRpb25lZCB0YWJsZSBpbgor ICAgICAgPGxpdGVyYWw+RVhDRVBUIFRBQkxFPC9saXRlcmFsPiBleGNsdWRlcyBpdCBhbmQgYWxs IGl0cyBwYXJ0aXRpb25zIGZyb20KKyAgICAgIHJlcGxpY2F0aW9uLiBTcGVjaWZ5aW5nIGEgbGVh ZiBwYXJ0aXRpb24gaGFzIG5vIGVmZmVjdCwgYXMgaXRzIGNoYW5nZXMgYXJlCisgICAgICBzdGls bCByZXBsaWNhdGVkIHZpYSB0aGUgcm9vdCBwYXJ0aXRpb25lZCB0YWJsZS4gV2hlbgorICAgICAg PGxpdGVyYWw+cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Q8L2xpdGVyYWw+IGlzIHNldCB0bwor ICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LCBzcGVjaWZ5aW5nIGEgcm9vdCBwYXJ0aXRp b25lZCB0YWJsZSBoYXMgbm8KKyAgICAgIGVmZmVjdCwgYXMgY2hhbmdlcyBhcmUgcmVwbGljYXRl ZCB2aWEgdGhlIGxlYWYgcGFydGl0aW9ucy4gU3BlY2lmeWluZyBhCisgICAgICBsZWFmIHBhcnRp dGlvbiBleGNsdWRlcyBvbmx5IHRoYXQgcGFydGl0aW9uIGZyb20gcmVwbGljYXRpb24uCisgICAg IDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKICAgIDx2YXJs aXN0ZW50cnkgaWQ9InNxbC1jcmVhdGVwdWJsaWNhdGlvbi1wYXJhbXMtd2l0aCI+CiAgICAgPHRl cm0+PGxpdGVyYWw+V0lUSCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNh dGlvbl9wYXJhbWV0ZXI8L3JlcGxhY2VhYmxlPiBbPSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+dmFsdWU8L3JlcGxhY2VhYmxlPl0gWywgLi4uIF0gKTwvbGl0ZXJhbD48L3Rlcm0+CiAg ICAgPGxpc3RpdGVtPgpAQCAtNDg3LDYgKzUxOCwyMyBAQCBDUkVBVEUgUFVCTElDQVRJT04gYWxs X3NlcXVlbmNlcyBGT1IgQUxMIFNFUVVFTkNFUzsKICAgIGFsbCBzZXF1ZW5jZXMgZm9yIHN5bmNo cm9uaXphdGlvbjoKIDxwcm9ncmFtbGlzdGluZz4KIENSRUFURSBQVUJMSUNBVElPTiBhbGxfdGFi bGVzX3NlcXVlbmNlcyBGT1IgQUxMIFRBQkxFUywgQUxMIFNFUVVFTkNFUzsKKzwvcHJvZ3JhbWxp c3Rpbmc+CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIENyZWF0ZSBhIHB1YmxpY2F0aW9uIHRo YXQgcHVibGlzaGVzIGFsbCBjaGFuZ2VzIGluIGFsbCB0YWJsZXMgZXhjZXB0CisgICA8c3RydWN0 bmFtZT51c2Vyczwvc3RydWN0bmFtZT4gYW5kIDxzdHJ1Y3RuYW1lPmRlcGFydG1lbnRzPC9zdHJ1 Y3RuYW1lPjoKKzxwcm9ncmFtbGlzdGluZz4KK0NSRUFURSBQVUJMSUNBVElPTiBhbGxfdGFibGVz X2V4Y2VwdCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgKHVzZXJzLCBkZXBhcnRtZW50cyk7Cis8L3By b2dyYW1saXN0aW5nPgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBDcmVhdGUgYSBwdWJsaWNh dGlvbiB0aGF0IHB1Ymxpc2hlcyBhbGwgY2hhbmdlcyBpbiBhbGwgc2VxdWVuY2VzIGFuZCBhbGwK KyAgIHRhYmxlcyBleGNlcHQgdGFibGVzIDxzdHJ1Y3RuYW1lPnVzZXJzPC9zdHJ1Y3RuYW1lPiBh bmQKKyAgIDxzdHJ1Y3RuYW1lPmRlcGFydG1lbnRzPC9zdHJ1Y3RuYW1lPjoKKzxwcm9ncmFtbGlz dGluZz4KK0NSRUFURSBQVUJMSUNBVElPTiBhbGxfc2VxdWVuY2VzX3RhYmxlc19leGNlcHQgRk9S IEFMTCBTRVFVRU5DRVMsIEFMTCBUQUJMRVMgRVhDRVBUICh1c2VycywgZGVwYXJ0bWVudHMpOwog PC9wcm9ncmFtbGlzdGluZz4KICAgPC9wYXJhPgogIDwvcmVmc2VjdDE+CmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvcmVmL3BzcWwtcmVmLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BzcWwtcmVm LnNnbWwKaW5kZXggZjU2YzcwMjYzZTAuLmYxYjNjZTM4MGI2IDEwMDY0NAotLS0gYS9kb2Mvc3Jj L3NnbWwvcmVmL3BzcWwtcmVmLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5z Z21sCkBAIC0yMTAzLDggKzIxMDMsOSBAQCBTRUxFQ1QgJDEgXHBhcnNlIHN0bXQxCiAgICAgICAg IGxpc3RlZC4KICAgICAgICAgSWYgPGxpdGVyYWw+eDwvbGl0ZXJhbD4gaXMgYXBwZW5kZWQgdG8g dGhlIGNvbW1hbmQgbmFtZSwgdGhlIHJlc3VsdHMKICAgICAgICAgYXJlIGRpc3BsYXllZCBpbiBl eHBhbmRlZCBtb2RlLgotICAgICAgICBJZiA8bGl0ZXJhbD4rPC9saXRlcmFsPiBpcyBhcHBlbmRl ZCB0byB0aGUgY29tbWFuZCBuYW1lLCB0aGUgdGFibGVzIGFuZAotICAgICAgICBzY2hlbWFzIGFz c29jaWF0ZWQgd2l0aCBlYWNoIHB1YmxpY2F0aW9uIGFyZSBzaG93biBhcyB3ZWxsLgorICAgICAg ICBJZiA8bGl0ZXJhbD4rPC9saXRlcmFsPiBpcyBhcHBlbmRlZCB0byB0aGUgY29tbWFuZCBuYW1l LCB0aGUgdGFibGVzLAorICAgICAgICBleGNsdWRlZCB0YWJsZXMsIGFuZCBzY2hlbWFzIGFzc29j aWF0ZWQgd2l0aCBlYWNoIHB1YmxpY2F0aW9uIGFyZSBzaG93bgorICAgICAgICBhcyB3ZWxsLgog ICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRy eT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwppbmRleCA3YWEzZjE3OTkyNC4uMGFi ZDJmYzhiNWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24u YworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTM2NiwxMSAr MzY2LDIwIEBAIEdldFRvcE1vc3RBbmNlc3RvckluUHVibGljYXRpb24oT2lkIHB1Ym9pZCwgTGlz dCAqYW5jZXN0b3JzLCBpbnQgKmFuY2VzdG9yX2xldmVsCiAJZm9yZWFjaChsYywgYW5jZXN0b3Jz KQogCXsKIAkJT2lkCQkJYW5jZXN0b3IgPSBsZmlyc3Rfb2lkKGxjKTsKLQkJTGlzdAkgICAqYXB1 YmlkcyA9IEdldFJlbGF0aW9uUHVibGljYXRpb25zKGFuY2VzdG9yKTsKKwkJTGlzdAkgICAqYXB1 YmlkcyA9IE5JTDsKKwkJTGlzdAkgICAqYWV4Y2VwdHB1YmlkcyA9IE5JTDsKIAkJTGlzdAkgICAq YXNjaGVtYVB1YmlkcyA9IE5JTDsKIAorCQlHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhhbmNlc3Rv ciwgJmFwdWJpZHMsICZhZXhjZXB0cHViaWRzKTsKKwogCQlsZXZlbCsrOwogCisJCWlmIChsaXN0 X21lbWJlcl9vaWQoYWV4Y2VwdHB1YmlkcywgcHVib2lkKSkKKwkJeworCQkJbGlzdF9mcmVlKGFl eGNlcHRwdWJpZHMpOworCQkJY29udGludWU7CisJCX0KKwogCQlpZiAobGlzdF9tZW1iZXJfb2lk KGFwdWJpZHMsIHB1Ym9pZCkpCiAJCXsKIAkJCXRvcG1vc3RfcmVsaWQgPSBhbmNlc3RvcjsKQEAg LTM5MSw2ICs0MDAsNyBAQCBHZXRUb3BNb3N0QW5jZXN0b3JJblB1YmxpY2F0aW9uKE9pZCBwdWJv aWQsIExpc3QgKmFuY2VzdG9ycywgaW50ICphbmNlc3Rvcl9sZXZlbAogCQl9CiAKIAkJbGlzdF9m cmVlKGFwdWJpZHMpOworCQlsaXN0X2ZyZWUoYWV4Y2VwdHB1Ymlkcyk7CiAJCWxpc3RfZnJlZShh c2NoZW1hUHViaWRzKTsKIAl9CiAKQEAgLTQ2Niw2ICs0NzYsMjYgQEAgcHVibGljYXRpb25fYWRk X3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRpb25SZWxJbmZvICpwcmksCiAJCQkJCQlSZWxh dGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwpLCBwdWItPm5hbWUpKSk7CiAJfQogCisJLyoK KwkgKiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBwYXJ0aXRpb24gaXMgZXhjbHVkZWQgYnkgRVhD RVBUIFRBQkxFIHdoaWxlCisJICogcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlLgor CSAqLworCWlmIChwdWItPmFsbHRhYmxlcyAmJiBwdWItPnB1YnZpYXJvb3QgJiYgcHJpLT5leGNl cHQgJiYKKwkJdGFyZ2V0cmVsLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKQorCQllcmVwb3J0KFdB Uk5JTkcsCisJCQkJKGVycm1zZygicGFydGl0aW9uIFwiJXNcIiBtaWdodCBiZSByZXBsaWNhdGVk IGFzIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGlzIFwiJXNcIiIsCisJCQkJCQlSZWxhdGlv bkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwpLCAidHJ1ZSIpKSk7CisKKwkvKgorCSAqIEhhbmRs ZSB0aGUgY2FzZSB3aGVyZSBhIHBhcnRpdGlvbmVkIHRhYmxlIGlzIGV4Y2x1ZGVkIGJ5IEVYQ0VQ VCBUQUJMRQorCSAqIHdoaWxlIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UuCisJ ICovCisJaWYgKHB1Yi0+YWxsdGFibGVzICYmICFwdWItPnB1YnZpYXJvb3QgJiYgcHJpLT5leGNl cHQgJiYKKwkJdGFyZ2V0cmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05F RF9UQUJMRSkKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coInBhcnRpdGlvbmVkIHRh YmxlIFwiJXNcIiBtaWdodCBiZSByZXBsaWNhdGVkIGFzIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290IGlzIFwiJXNcIiIsCisJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwp LCAiZmFsc2UiKSkpOworCiAJY2hlY2tfcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKHRhcmdldHJl bCk7CiAKIAkvKiBWYWxpZGF0ZSBhbmQgdHJhbnNsYXRlIGNvbHVtbiBuYW1lcyBpbnRvIGEgQml0 bWFwc2V0IG9mIGF0dG51bXMuICovCkBAIC00ODIsNiArNTEyLDggQEAgcHVibGljYXRpb25fYWRk X3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRpb25SZWxJbmZvICpwcmksCiAJCU9iamVjdElk R2V0RGF0dW0ocHViaWQpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcnJlbGlk IC0gMV0gPQogCQlPYmplY3RJZEdldERhdHVtKHJlbGlkKTsKKwl2YWx1ZXNbQW51bV9wZ19wdWJs aWNhdGlvbl9yZWxfcHJleGNlcHQgLSAxXSA9CisJCUJvb2xHZXREYXR1bShwcmktPmV4Y2VwdCk7 CiAKIAkvKiBBZGQgcXVhbGlmaWNhdGlvbnMsIGlmIGF2YWlsYWJsZSAqLwogCWlmIChwcmktPndo ZXJlQ2xhdXNlICE9IE5VTEwpCkBAIC03NDksMzggKzc4MSw1OCBAQCBwdWJsaWNhdGlvbl9hZGRf c2NoZW1hKE9pZCBwdWJpZCwgT2lkIHNjaGVtYWlkLCBib29sIGlmX25vdF9leGlzdHMpCiAJcmV0 dXJuIG15c2VsZjsKIH0KIAotLyogR2V0cyBsaXN0IG9mIHB1YmxpY2F0aW9uIG9pZHMgZm9yIGEg cmVsYXRpb24gKi8KLUxpc3QgKgotR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoT2lkIHJlbGlkKQor LyoKKyAqIEdldCB0aGUgbGlzdCBvZiBwdWJsaWNhdGlvbiBvaWRzIGFzc29jaWF0ZWQgd2l0aCBh IHNwZWNpZmllZCByZWxhdGlvbi4KKyAqCisgKiBQYXJhbWV0ZXIgJ3B1YmlkcycgcmV0dXJucyB0 aGUgT0lEcyBvZiB0aGUgcHVibGljYXRpb25zIHRoZSByZWxhdGlvbiBpcyBwYXJ0CisgKiBvZi4g UGFyYW1ldGVyICdleGNlcHRfcHViaWRzJyByZXR1cm5zIHRoZSBPSURzIG9mIHB1YmxpY2F0aW9u cyB0aGUgcmVsYXRpb24KKyAqIGlzIGV4Y2x1ZGVkIGZyb20uCisgKgorICogVGhpcyBmdW5jdGlv biByZXR1cm5zIHRydWUgaWYgdGhlIHJlbGF0aW9uIGlzIHBhcnQgb2YgYW55IHB1YmxpY2F0aW9u LgorICovCitib29sCitHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhPaWQgcmVsaWQsIExpc3QgKipw dWJpZHMsIExpc3QgKipleGNlcHRfcHViaWRzKQogewotCUxpc3QJICAgKnJlc3VsdCA9IE5JTDsK IAlDYXRDTGlzdCAgICpwdWJyZWxsaXN0OwotCWludAkJCWk7CisJYm9vbAkJZm91bmQgPSBmYWxz ZTsKIAogCS8qIEZpbmQgYWxsIHB1YmxpY2F0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbGF0 aW9uLiAqLwogCXB1YnJlbGxpc3QgPSBTZWFyY2hTeXNDYWNoZUxpc3QxKFBVQkxJQ0FUSU9OUkVM TUFQLAogCQkJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpKTsKLQlmb3IgKGkgPSAwOyBp IDwgcHVicmVsbGlzdC0+bl9tZW1iZXJzOyBpKyspCisJZm9yIChpbnQgaSA9IDA7IGkgPCBwdWJy ZWxsaXN0LT5uX21lbWJlcnM7IGkrKykKIAl7CiAJCUhlYXBUdXBsZQl0dXAgPSAmcHVicmVsbGlz dC0+bWVtYmVyc1tpXS0+dHVwbGU7Ci0JCU9pZAkJCXB1YmlkID0gKChGb3JtX3BnX3B1YmxpY2F0 aW9uX3JlbCkgR0VUU1RSVUNUKHR1cCkpLT5wcnB1YmlkOworCQlGb3JtX3BnX3B1YmxpY2F0aW9u X3JlbCBwdWJyZWwgPSAoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVCh0dXApOwor CQlPaWQJCQlwdWJpZCA9IHB1YnJlbC0+cHJwdWJpZDsKIAotCQlyZXN1bHQgPSBsYXBwZW5kX29p ZChyZXN1bHQsIHB1YmlkKTsKKwkJaWYgKHB1YnJlbC0+cHJleGNlcHQpCisJCXsKKwkJCWlmIChl eGNlcHRfcHViaWRzKQorCQkJCSpleGNlcHRfcHViaWRzID0gbGFwcGVuZF9vaWQoKmV4Y2VwdF9w dWJpZHMsIHB1YmlkKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChwdWJpZHMpCisJCQkJKnB1 YmlkcyA9IGxhcHBlbmRfb2lkKCpwdWJpZHMsIHB1YmlkKTsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJ fQogCX0KIAogCVJlbGVhc2VTeXNDYWNoZUxpc3QocHVicmVsbGlzdCk7CiAKLQlyZXR1cm4gcmVz dWx0OworCXJldHVybiBmb3VuZDsKIH0KIAogLyoKLSAqIEdldHMgbGlzdCBvZiByZWxhdGlvbiBv aWRzIGZvciBhIHB1YmxpY2F0aW9uLgorICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2V0IHRoZSBs aXN0IG9mIHJlbGF0aW9uIE9JRHMgZm9yIGEgcHVibGljYXRpb24uCiAgKgotICogVGhpcyBzaG91 bGQgb25seSBiZSB1c2VkIEZPUiBUQUJMRSBwdWJsaWNhdGlvbnMsIHRoZSBGT1IgQUxMIFRBQkxF Uy9TRVFVRU5DRVMKLSAqIHNob3VsZCB1c2UgR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoKS4K KyAqIElmIGV4Y2VwdF9mbGFnIGlzIHRydWUsIHJldHVybnMgdGhlIGxpc3Qgb2YgcmVsYXRpb25z IGV4Y2x1ZGVkIGZyb20gdGhlCisgKiBwdWJsaWNhdGlvbjsgb3RoZXJ3aXNlLCByZXR1cm5zIHRo ZSBsaXN0IG9mIHJlbGF0aW9ucyBpbmNsdWRlZCBpbiB0aGUKKyAqIHB1YmxpY2F0aW9uLgogICov Ci1MaXN0ICoKLUdldFB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJpZCwgUHVibGljYXRpb25Q YXJ0T3B0IHB1Yl9wYXJ0b3B0KQorc3RhdGljIExpc3QgKgorR2V0UHVibGljYXRpb25SZWxhdGlv bnNJbnRlcm5hbChPaWQgcHViaWQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCwKKwkJ CQkJCQkJYm9vbCBleGNlcHRfZmxhZykKIHsKIAlMaXN0CSAgICpyZXN1bHQ7CiAJUmVsYXRpb24J cHVicmVsc3JlbDsKQEAgLTgwNSw4ICs4NTcsMTAgQEAgR2V0UHVibGljYXRpb25SZWxhdGlvbnMo T2lkIHB1YmlkLCBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQpCiAJCUZvcm1fcGdfcHVi bGljYXRpb25fcmVsIHB1YnJlbDsKIAogCQlwdWJyZWwgPSAoRm9ybV9wZ19wdWJsaWNhdGlvbl9y ZWwpIEdFVFNUUlVDVCh0dXApOwotCQlyZXN1bHQgPSBHZXRQdWJQYXJ0aXRpb25PcHRpb25SZWxh dGlvbnMocmVzdWx0LCBwdWJfcGFydG9wdCwKLQkJCQkJCQkJCQkJCXB1YnJlbC0+cHJyZWxpZCk7 CisKKwkJaWYgKGV4Y2VwdF9mbGFnID09IHB1YnJlbC0+cHJleGNlcHQpCisJCQlyZXN1bHQgPSBH ZXRQdWJQYXJ0aXRpb25PcHRpb25SZWxhdGlvbnMocmVzdWx0LCBwdWJfcGFydG9wdCwKKwkJCQkJ CQkJCQkJCQlwdWJyZWwtPnBycmVsaWQpOwogCX0KIAogCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7 CkBAIC04MTksNiArODczLDM2IEBAIEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJpZCwg UHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0KQogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8q CisgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgcmVsYXRpb24gT0lEcyBmb3IgYSBwdWJsaWNhdGlvbi4K KyAqCisgKiBGb3IgYSBGT1IgVEFCTEUgcHVibGljYXRpb24sIHRoaXMgcmV0dXJucyB0aGUgbGlz dCBvZiByZWxhdGlvbnMgZXhwbGljaXRseQorICogaW5jbHVkZWQgaW4gdGhlIHB1YmxpY2F0aW9u LgorICoKKyAqIFB1YmxpY2F0aW9ucyBkZWNsYXJlZCB3aXRoIEZPUiBBTEwgVEFCTEVTIG9yIEZP UiBBTEwgU0VRVUVOQ0VTIHNob3VsZCB1c2UKKyAqIEdldEFsbFB1YmxpY2F0aW9uUmVsYXRpb25z KCkgdG8gb2J0YWluIHRoZSBjb21wbGV0ZSBzZXQgb2YgdGFibGVzIGNvdmVyZWQgYnkKKyAqIHRo ZSBwdWJsaWNhdGlvbi4KKyAqLworTGlzdCAqCitHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVsYXRp b25zKE9pZCBwdWJpZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0KQoreworCUFzc2Vy dCghR2V0UHVibGljYXRpb24ocHViaWQpLT5hbGx0YWJsZXMpOworCisJcmV0dXJuIEdldFB1Ymxp Y2F0aW9uUmVsYXRpb25zSW50ZXJuYWwocHViaWQsIHB1Yl9wYXJ0b3B0LCBmYWxzZSk7Cit9CisK Ky8qCisgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgcmVsYXRpb24gT0lEcyBleGNsdWRlZCBmcm9tIGEg cHVibGljYXRpb24uCisgKiBUaGlzIGlzIG9ubHkgYXBwbGljYWJsZSBmb3IgRk9SIEFMTCBUQUJM RVMgcHVibGljYXRpb25zLgorICovCitMaXN0ICoKK0dldFB1YmxpY2F0aW9uRXhjbHVkZWRSZWxh dGlvbnMoT2lkIHB1YmlkLCBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQpCit7CisJQXNz ZXJ0KEdldFB1YmxpY2F0aW9uKHB1YmlkKS0+YWxsdGFibGVzKTsKKworCXJldHVybiBHZXRQdWJs aWNhdGlvblJlbGF0aW9uc0ludGVybmFsKHB1YmlkLCBwdWJfcGFydG9wdCwgdHJ1ZSk7Cit9CisK IC8qCiAgKiBHZXRzIGxpc3Qgb2YgcHVibGljYXRpb24gb2lkcyBmb3IgcHVibGljYXRpb25zIG1h cmtlZCBhcyBGT1IgQUxMIFRBQkxFUy4KICAqLwpAQCAtODYyLDIwICs5NDYsMjggQEAgR2V0QWxs VGFibGVzUHVibGljYXRpb25zKHZvaWQpCiAgKgogICogSWYgdGhlIHB1YmxpY2F0aW9uIHB1Ymxp c2hlcyBwYXJ0aXRpb24gY2hhbmdlcyB2aWEgdGhlaXIgcmVzcGVjdGl2ZSByb290CiAgKiBwYXJ0 aXRpb25lZCB0YWJsZXMsIHdlIG11c3QgZXhjbHVkZSBwYXJ0aXRpb25zIGluIGZhdm9yIG9mIGlu Y2x1ZGluZyB0aGUKLSAqIHJvb3QgcGFydGl0aW9uZWQgdGFibGVzLiBUaGlzIGlzIG5vdCBhcHBs aWNhYmxlIHRvIEZPUiBBTEwgU0VRVUVOQ0VTCi0gKiBwdWJsaWNhdGlvbi4KKyAqIHJvb3QgcGFy dGl0aW9uZWQgdGFibGVzLiBUaGUgbGlzdCBhbHNvIGV4Y2x1ZGVzIHRhYmxlcyB0aGF0IGFyZQor ICogZXhwbGljaXRseSBleGNsdWRlZCB2aWEgdGhlIEVYQ0VQVCBUQUJMRSBjbGF1c2Ugb2YgdGhl IHB1YmxpY2F0aW9uCisgKiBpZGVudGlmaWVkIGJ5IHB1YmlkLiBOZWl0aGVyIG9mIHRoZXNlIHJ1 bGVzIGFwcGxpZXMgdG8gRk9SIEFMTCBTRVFVRU5DRVMKKyAqIHB1YmxpY2F0aW9ucy4KICAqLwog TGlzdCAqCi1HZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9ucyhjaGFyIHJlbGtpbmQsIGJvb2wgcHVi dmlhcm9vdCkKK0dldEFsbFB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJpZCwgY2hhciByZWxr aW5kLCBib29sIHB1YnZpYXJvb3QpCiB7CiAJUmVsYXRpb24JY2xhc3NSZWw7CiAJU2NhbktleURh dGEga2V5WzFdOwogCVRhYmxlU2NhbkRlc2Mgc2NhbjsKIAlIZWFwVHVwbGUJdHVwbGU7CiAJTGlz dAkgICAqcmVzdWx0ID0gTklMOworCUxpc3QJICAgKmV4Y2VwdGxpc3QgPSBOSUw7CiAKIAlBc3Nl cnQoIShyZWxraW5kID09IFJFTEtJTkRfU0VRVUVOQ0UgJiYgcHVidmlhcm9vdCkpOwogCisJaWYg KHJlbGtpbmQgPT0gUkVMS0lORF9SRUxBVElPTikKKwkJZXhjZXB0bGlzdCA9IEdldFB1YmxpY2F0 aW9uRXhjbHVkZWRSZWxhdGlvbnMocHViaWQsIHB1YnZpYXJvb3QgPworCQkJCQkJCQkJCQkJCSBQ VUJMSUNBVElPTl9QQVJUX0FMTCA6CisJCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfUk9P VCk7CisKIAljbGFzc1JlbCA9IHRhYmxlX29wZW4oUmVsYXRpb25SZWxhdGlvbklkLCBBY2Nlc3NT aGFyZUxvY2spOwogCiAJU2NhbktleUluaXQoJmtleVswXSwKQEAgLTg5MSw3ICs5ODMsOCBAQCBH ZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9ucyhjaGFyIHJlbGtpbmQsIGJvb2wgcHVidmlhcm9vdCkK IAkJT2lkCQkJcmVsaWQgPSByZWxGb3JtLT5vaWQ7CiAKIAkJaWYgKGlzX3B1Ymxpc2hhYmxlX2Ns YXNzKHJlbGlkLCByZWxGb3JtKSAmJgotCQkJIShyZWxGb3JtLT5yZWxpc3BhcnRpdGlvbiAmJiBw dWJ2aWFyb290KSkKKwkJCSEocmVsRm9ybS0+cmVsaXNwYXJ0aXRpb24gJiYgcHVidmlhcm9vdCkg JiYKKwkJCSFsaXN0X21lbWJlcl9vaWQoZXhjZXB0bGlzdCwgcmVsaWQpKQogCQkJcmVzdWx0ID0g bGFwcGVuZF9vaWQocmVzdWx0LCByZWxpZCk7CiAJfQogCkBAIC05MTIsNyArMTAwNSw4IEBAIEdl dEFsbFB1YmxpY2F0aW9uUmVsYXRpb25zKGNoYXIgcmVsa2luZCwgYm9vbCBwdWJ2aWFyb290KQog CQkJT2lkCQkJcmVsaWQgPSByZWxGb3JtLT5vaWQ7CiAKIAkJCWlmIChpc19wdWJsaXNoYWJsZV9j bGFzcyhyZWxpZCwgcmVsRm9ybSkgJiYKLQkJCQkhcmVsRm9ybS0+cmVsaXNwYXJ0aXRpb24pCisJ CQkJIXJlbEZvcm0tPnJlbGlzcGFydGl0aW9uICYmCisJCQkJIWxpc3RfbWVtYmVyX29pZChleGNl cHRsaXN0LCByZWxpZCkpCiAJCQkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVzdWx0LCByZWxpZCk7 CiAJCX0KIApAQCAtMTE2OCwxNyArMTI2MiwxOCBAQCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVz KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkgKiB0aG9zZS4gT3RoZXJ3aXNlLCBnZXQgdGhlIHBhcnRp dGlvbmVkIHRhYmxlIGl0c2VsZi4KIAkJCSAqLwogCQkJaWYgKHB1Yl9lbGVtLT5hbGx0YWJsZXMp Ci0JCQkJcHViX2VsZW1fdGFibGVzID0gR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoUkVMS0lO RF9SRUxBVElPTiwKKwkJCQlwdWJfZWxlbV90YWJsZXMgPSBHZXRBbGxQdWJsaWNhdGlvblJlbGF0 aW9ucyhwdWJfZWxlbS0+b2lkLAorCQkJCQkJCQkJCQkJCQkJIFJFTEtJTkRfUkVMQVRJT04sCiAJ CQkJCQkJCQkJCQkJCQkgcHViX2VsZW0tPnB1YnZpYXJvb3QpOwogCQkJZWxzZQogCQkJewogCQkJ CUxpc3QJICAgKnJlbGlkcywKIAkJCQkJCSAgICpzY2hlbWFyZWxpZHM7CiAKLQkJCQlyZWxpZHMg PSBHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJfZWxlbS0+b2lkLAotCQkJCQkJCQkJCQkJIHB1 Yl9lbGVtLT5wdWJ2aWFyb290ID8KLQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX1JPT1Qg OgotCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfTEVBRik7CisJCQkJcmVsaWRzID0gR2V0 UHVibGljYXRpb25JbmNsdWRlZFJlbGF0aW9ucyhwdWJfZWxlbS0+b2lkLAorCQkJCQkJCQkJCQkJ CQkgcHViX2VsZW0tPnB1YnZpYXJvb3QgPworCQkJCQkJCQkJCQkJCQkgUFVCTElDQVRJT05fUEFS VF9ST09UIDoKKwkJCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfTEVBRik7CiAJCQkJc2No ZW1hcmVsaWRzID0gR2V0QWxsU2NoZW1hUHVibGljYXRpb25SZWxhdGlvbnMocHViX2VsZW0tPm9p ZCwKIAkJCQkJCQkJCQkJCQkJCQlwdWJfZWxlbS0+cHVidmlhcm9vdCA/CiAJCQkJCQkJCQkJCQkJ CQkJUFVCTElDQVRJT05fUEFSVF9ST09UIDoKQEAgLTEzNjcsNyArMTQ2Miw3IEBAIHBnX2dldF9w dWJsaWNhdGlvbl9zZXF1ZW5jZXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJcHVibGljYXRpb24gPSBH ZXRQdWJsaWNhdGlvbkJ5TmFtZShwdWJuYW1lLCBmYWxzZSk7CiAKIAkJaWYgKHB1YmxpY2F0aW9u LT5hbGxzZXF1ZW5jZXMpCi0JCQlzZXF1ZW5jZXMgPSBHZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9u cyhSRUxLSU5EX1NFUVVFTkNFLCBmYWxzZSk7CisJCQlzZXF1ZW5jZXMgPSBHZXRBbGxQdWJsaWNh dGlvblJlbGF0aW9ucyhwdWJsaWNhdGlvbi0+b2lkLCBSRUxLSU5EX1NFUVVFTkNFLCBmYWxzZSk7 CiAKIAkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gc2VxdWVuY2VzOwogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IGExOTgzNTA4OTUwLi5mNzZiOTY4YzA0YSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTE3MCw2ICsxNzAsMzAgQEAgcGFy c2VfcHVibGljYXRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJfQogfQogCisvKgor ICogQ29udmVydCB0aGUgUHVibGljYXRpb25PYmpTcGVjIGxpc3Qgd2hpY2ggaXMgcGFydCBvZgor ICogUHVibGljYXRpb25BbGxPYmpTcGVjVHlwZSBsaXN0IGludG8gUHVibGljYXRpb25UYWJsZSBs aXN0LgorICovCitzdGF0aWMgdm9pZAorT2JqZWN0c0luQWxsUHVibGljYXRpb25Ub09pZHMoTGlz dCAqcHViYWxsb2Jqc3BlY19saXN0LAorCQkJCQkJCSAgUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0 ICoqcmVscykKK3sKKwlpZiAoIXB1YmFsbG9ianNwZWNfbGlzdCkKKwkJcmV0dXJuOworCisJZm9y ZWFjaF9wdHIoUHVibGljYXRpb25BbGxPYmpTcGVjLCBwdWJhbGxvYmosIHB1YmFsbG9ianNwZWNf bGlzdCkKKwl7CisJCWlmIChwdWJhbGxvYmotPnB1Ym9ianR5cGUgIT0gUFVCTElDQVRJT05fQUxM X1RBQkxFUykKKwkJCWNvbnRpbnVlOworCisJCWZvcmVhY2hfcHRyKFB1YmxpY2F0aW9uT2JqU3Bl YywgcHVib2JqLCBwdWJhbGxvYmotPmV4Y2VwdF90YWJsZXMpCisJCXsKKwkJCXB1Ym9iai0+cHVi dGFibGUtPmV4Y2VwdCA9IHRydWU7CisJCQkqcmVscyA9IGxhcHBlbmQoKnJlbHMsIHB1Ym9iai0+ cHVidGFibGUpOworCQl9CisJfQorfQorCiAvKgogICogQ29udmVydCB0aGUgUHVibGljYXRpb25P YmpTcGVjVHlwZSBsaXN0IGludG8gc2NoZW1hIG9pZCBsaXN0IGFuZAogICogUHVibGljYXRpb25U YWJsZSBsaXN0LgpAQCAtMTkzLDcgKzIxNywxMiBAQCBPYmplY3RzSW5QdWJsaWNhdGlvblRvT2lk cyhMaXN0ICpwdWJvYmpzcGVjX2xpc3QsIFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAogCQlzd2l0Y2gg KHB1Ym9iai0+cHVib2JqdHlwZSkKIAkJeworCQkJY2FzZSBQVUJMSUNBVElPTk9CSl9FWENFUFRf VEFCTEU6CisJCQkJcHVib2JqLT5wdWJ0YWJsZS0+ZXhjZXB0ID0gdHJ1ZTsKKwkJCQkqcmVscyA9 IGxhcHBlbmQoKnJlbHMsIHB1Ym9iai0+cHVidGFibGUpOworCQkJCWJyZWFrOwogCQkJY2FzZSBQ VUJMSUNBVElPTk9CSl9UQUJMRToKKwkJCQlwdWJvYmotPnB1YnRhYmxlLT5leGNlcHQgPSBmYWxz ZTsKIAkJCQkqcmVscyA9IGxhcHBlbmQoKnJlbHMsIHB1Ym9iai0+cHVidGFibGUpOwogCQkJCWJy ZWFrOwogCQkJY2FzZSBQVUJMSUNBVElPTk9CSl9UQUJMRVNfSU5fU0NIRU1BOgpAQCAtMzU1LDgg KzM4NCw3IEBAIHB1Yl9yZl9jb250YWluc19pbnZhbGlkX2NvbHVtbihPaWQgcHViaWQsIFJlbGF0 aW9uIHJlbGF0aW9uLCBMaXN0ICphbmNlc3RvcnMsCiBib29sCiBwdWJfY29udGFpbnNfaW52YWxp ZF9jb2x1bW4oT2lkIHB1YmlkLCBSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqYW5jZXN0b3JzLAog CQkJCQkJCWJvb2wgcHVidmlhcm9vdCwgY2hhciBwdWJnZW5jb2xzX3R5cGUsCi0JCQkJCQkJYm9v bCAqaW52YWxpZF9jb2x1bW5fbGlzdCwKLQkJCQkJCQlib29sICppbnZhbGlkX2dlbl9jb2wpCisJ CQkJCQkJYm9vbCAqaW52YWxpZF9jb2x1bW5fbGlzdCwgYm9vbCAqaW52YWxpZF9nZW5fY29sKQog ewogCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CiAJT2lkCQkJcHVi bGlzaF9hc19yZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOwpAQCAtNTE0LDggKzU0 Miw4IEBAIEludmFsaWRhdGVQdWJSZWxTeW5jQ2FjaGUoT2lkIHB1YmlkLCBib29sIHB1YmFsbHRh YmxlcykKIAkJICogYSB0YXJnZXQuIEhvd2V2ZXIsIFdBTCByZWNvcmRzIGZvciBUUlVOQ0FURSBz cGVjaWZ5IGJvdGggYSByb290IGFuZAogCQkgKiBpdHMgbGVhdmVzLgogCQkgKi8KLQkJcmVsaWRz ID0gR2V0UHVibGljYXRpb25SZWxhdGlvbnMocHViaWQsCi0JCQkJCQkJCQkJIFBVQkxJQ0FUSU9O X1BBUlRfQUxMKTsKKwkJcmVsaWRzID0gR2V0UHVibGljYXRpb25JbmNsdWRlZFJlbGF0aW9ucyhw dWJpZCwKKwkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX0FMTCk7CiAJCXNjaGVtYXJlbGlk cyA9IEdldEFsbFNjaGVtYVB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmlkLAogCQkJCQkJCQkJCQkJ CQlQVUJMSUNBVElPTl9QQVJUX0FMTCk7CiAKQEAgLTkyNSwxNCArOTUzLDggQEAgQ3JlYXRlUHVi bGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQp CiAKIAkvKiBBc3NvY2lhdGUgb2JqZWN0cyB3aXRoIHRoZSBwdWJsaWNhdGlvbi4gKi8KIAlpZiAo c3RtdC0+Zm9yX2FsbF90YWJsZXMpCi0JewotCQkvKgotCQkgKiBJbnZhbGlkYXRlIHJlbGNhY2hl IHNvIHRoYXQgcHVibGljYXRpb24gaW5mbyBpcyByZWJ1aWx0LiBTZXF1ZW5jZXMKLQkJICogcHVi bGljYXRpb24gZG9lc24ndCByZXF1aXJlIGludmFsaWRhdGlvbiwgYXMgcmVwbGljYSBpZGVudGl0 eQotCQkgKiBjaGVja3MgZG9uJ3QgYXBwbHkgdG8gdGhlbS4KLQkJICovCi0JCUNhY2hlSW52YWxp ZGF0ZVJlbGNhY2hlQWxsKCk7Ci0JfQorCQlPYmplY3RzSW5BbGxQdWJsaWNhdGlvblRvT2lkcyhz dG10LT5wdWJvYmplY3RzLCBwc3RhdGUsICZyZWxhdGlvbnMpOworCiAJZWxzZSBpZiAoIXN0bXQt PmZvcl9hbGxfc2VxdWVuY2VzKQogCXsKIAkJT2JqZWN0c0luUHVibGljYXRpb25Ub09pZHMoc3Rt dC0+cHVib2JqZWN0cywgcHN0YXRlLCAmcmVsYXRpb25zLApAQCAtOTQ0LDIyICs5NjYsNiBAQCBD cmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3Rt dCAqc3RtdCkKIAkJCQkJZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVOVF9QUklWSUxFR0UpLAog CQkJCQllcnJtc2coIm11c3QgYmUgc3VwZXJ1c2VyIHRvIGNyZWF0ZSBGT1IgVEFCTEVTIElOIFND SEVNQSBwdWJsaWNhdGlvbiIpKTsKIAotCQlpZiAocmVsYXRpb25zICE9IE5JTCkKLQkJewotCQkJ TGlzdAkgICAqcmVsczsKLQotCQkJcmVscyA9IE9wZW5UYWJsZUxpc3QocmVsYXRpb25zKTsKLQkJ CVRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhyZWxzLCBwc3RhdGUtPnBfc291cmNldGV4dCwKLQkJ CQkJCQkJCSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7Ci0KLQkJCUNoZWNrUHViUmVsYXRp b25Db2x1bW5MaXN0KHN0bXQtPnB1Ym5hbWUsIHJlbHMsCi0JCQkJCQkJCQkgICBzY2hlbWFpZGxp c3QgIT0gTklMLAotCQkJCQkJCQkJICAgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwotCi0J CQlQdWJsaWNhdGlvbkFkZFRhYmxlcyhwdWJvaWQsIHJlbHMsIHRydWUsIE5VTEwpOwotCQkJQ2xv c2VUYWJsZUxpc3QocmVscyk7Ci0JCX0KLQogCQlpZiAoc2NoZW1haWRsaXN0ICE9IE5JTCkKIAkJ ewogCQkJLyoKQEAgLTk3MSw4ICs5NzcsMzcgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0 ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCX0KIAl9CiAKKwkvKgor CSAqIElmIHRoZSBwdWJsaWNhdGlvbiBpcyBmb3IgQUxMIFRBQkxFUyBhbmQgJ3JlbGF0aW9ucycg aXMgbm90IGVtcHR5LCBpdAorCSAqIGluZGljYXRlcyB0aGF0IHNvbWUgcmVsYXRpb25zIHNob3Vs ZCBiZSBleGNsdWRlZCBmcm9tIHRoZSBwdWJsaWNhdGlvbi4KKwkgKiBBZGQgdGhvc2UgZXhjbHVk ZWQgcmVsYXRpb25zIHRvIHRoZSBwdWJsaWNhdGlvbiB3aXRoICdwcmV4Y2VwdCcgc2V0IHRvCisJ ICogdHJ1ZS4gT3RoZXJ3aXNlLCAncmVsYXRpb25zJyBjb250YWlucyB0aGUgbGlzdCBvZiByZWxh dGlvbnMgdG8gYmUKKwkgKiBleHBsaWNpdGx5IGluY2x1ZGVkIGluIHRoZSBwdWJsaWNhdGlvbi4K KwkgKi8KKwlpZiAocmVsYXRpb25zICE9IE5JTCkKKwl7CisJCUxpc3QJICAgKnJlbHM7CisKKwkJ cmVscyA9IE9wZW5UYWJsZUxpc3QocmVsYXRpb25zKTsKKwkJVHJhbnNmb3JtUHViV2hlcmVDbGF1 c2VzKHJlbHMsIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAorCQkJCQkJCQkgcHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QpOworCisJCUNoZWNrUHViUmVsYXRpb25Db2x1bW5MaXN0KHN0bXQtPnB1Ym5h bWUsIHJlbHMsCisJCQkJCQkJCSAgIHNjaGVtYWlkbGlzdCAhPSBOSUwsCisJCQkJCQkJCSAgIHB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKworCQlQdWJsaWNhdGlvbkFkZFRhYmxlcyhwdWJv aWQsIHJlbHMsIHRydWUsIE5VTEwpOworCQlDbG9zZVRhYmxlTGlzdChyZWxzKTsKKwl9CisKIAl0 YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOwogCisJaWYgKHN0bXQtPmZvcl9hbGxf dGFibGVzKQorCXsKKwkJLyogSW52YWxpZGF0ZSByZWxjYWNoZSBzbyB0aGF0IHB1YmxpY2F0aW9u IGluZm8gaXMgcmVidWlsdC4gKi8KKwkJQ2FjaGVJbnZhbGlkYXRlUmVsY2FjaGVBbGwoKTsKKwl9 CisKIAlJbnZva2VPYmplY3RQb3N0Q3JlYXRlSG9vayhQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1 Ym9pZCwgMCk7CiAKIAlpZiAod2FsX2xldmVsICE9IFdBTF9MRVZFTF9MT0dJQ0FMKQpAQCAtMTA0 MCw4ICsxMDc1LDggQEAgQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRl LCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAkJTG9ja0RhdGFiYXNlT2JqZWN0KFB1Ymxp Y2F0aW9uUmVsYXRpb25JZCwgcHViZm9ybS0+b2lkLCAwLAogCQkJCQkJICAgQWNjZXNzU2hhcmVM b2NrKTsKIAotCQlyb290X3JlbGlkcyA9IEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmZvcm0t Pm9pZCwKLQkJCQkJCQkJCQkJICBQVUJMSUNBVElPTl9QQVJUX1JPT1QpOworCQlyb290X3JlbGlk cyA9IEdldFB1YmxpY2F0aW9uSW5jbHVkZWRSZWxhdGlvbnMocHViZm9ybS0+b2lkLAorCQkJCQkJ CQkJCQkJCSAgUFVCTElDQVRJT05fUEFSVF9ST09UKTsKIAogCQlmb3JlYWNoKGxjLCByb290X3Jl bGlkcykKIAkJewpAQCAtMTE2MCw4ICsxMTk1LDggQEAgQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMo UGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAkJICogdHJl ZXMsIG5vdCBqdXN0IHRob3NlIGV4cGxpY2l0bHkgbWVudGlvbmVkIGluIHRoZSBwdWJsaWNhdGlv bi4KIAkJICovCiAJCWlmIChyb290X3JlbGlkcyA9PSBOSUwpCi0JCQlyZWxpZHMgPSBHZXRQdWJs aWNhdGlvblJlbGF0aW9ucyhwdWJmb3JtLT5vaWQsCi0JCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9Q QVJUX0FMTCk7CisJCQlyZWxpZHMgPSBHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVsYXRpb25zKHB1 YmZvcm0tPm9pZCwKKwkJCQkJCQkJCQkJCQkgUFVCTElDQVRJT05fUEFSVF9BTEwpOwogCQllbHNl CiAJCXsKIAkJCS8qCkBAIC0xMjQ2LDggKzEyODEsOCBAQCBBbHRlclB1YmxpY2F0aW9uVGFibGVz KEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LCBIZWFwVHVwbGUgdHVwLAogCQlQdWJsaWNhdGlv bkRyb3BUYWJsZXMocHViaWQsIHJlbHMsIGZhbHNlKTsKIAllbHNlCQkJCQkJLyogQVBfU2V0T2Jq ZWN0cyAqLwogCXsKLQkJTGlzdAkgICAqb2xkcmVsaWRzID0gR2V0UHVibGljYXRpb25SZWxhdGlv bnMocHViaWQsCi0JCQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CisJCUxpc3QJ ICAgKm9sZHJlbGlkcyA9IEdldFB1YmxpY2F0aW9uSW5jbHVkZWRSZWxhdGlvbnMocHViaWQsCisJ CQkJCQkJCQkJCQkJCQkJUFVCTElDQVRJT05fUEFSVF9ST09UKTsKIAkJTGlzdAkgICAqZGVscmVs cyA9IE5JTDsKIAkJTGlzdENlbGwgICAqb2xkbGM7CiAKQEAgLTEzNDgsNiArMTM4Myw3IEBAIEFs dGVyUHVibGljYXRpb25UYWJsZXMoQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsIEhlYXBUdXBs ZSB0dXAsCiAJCQkJb2xkcmVsID0gcGFsbG9jX29iamVjdChQdWJsaWNhdGlvblJlbEluZm8pOwog CQkJCW9sZHJlbC0+d2hlcmVDbGF1c2UgPSBOVUxMOwogCQkJCW9sZHJlbC0+Y29sdW1ucyA9IE5J TDsKKwkJCQlvbGRyZWwtPmV4Y2VwdCA9IGZhbHNlOwogCQkJCW9sZHJlbC0+cmVsYXRpb24gPSB0 YWJsZV9vcGVuKG9sZHJlbGlkLAogCQkJCQkJCQkJCQkgIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9j ayk7CiAJCQkJZGVscmVscyA9IGxhcHBlbmQoZGVscmVscywgb2xkcmVsKTsKQEAgLTEzOTgsNyAr MTQzNCw4IEBAIEFsdGVyUHVibGljYXRpb25TY2hlbWFzKEFsdGVyUHVibGljYXRpb25TdG10ICpz dG10LAogCQlMaXN0Q2VsbCAgICpsYzsKIAkJTGlzdAkgICAqcmVsb2lkczsKIAotCQlyZWxvaWRz ID0gR2V0UHVibGljYXRpb25SZWxhdGlvbnMocHViZm9ybS0+b2lkLCBQVUJMSUNBVElPTl9QQVJU X1JPT1QpOworCQlyZWxvaWRzID0gR2V0UHVibGljYXRpb25JbmNsdWRlZFJlbGF0aW9ucyhwdWJm b3JtLT5vaWQsCisJCQkJCQkJCQkJCQkgIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CiAKIAkJZm9y ZWFjaChsYywgcmVsb2lkcykKIAkJewpAQCAtMTc2MSw2ICsxNzk4LDcgQEAgT3BlblRhYmxlTGlz dChMaXN0ICp0YWJsZXMpCiAJCXB1Yl9yZWwtPnJlbGF0aW9uID0gcmVsOwogCQlwdWJfcmVsLT53 aGVyZUNsYXVzZSA9IHQtPndoZXJlQ2xhdXNlOwogCQlwdWJfcmVsLT5jb2x1bW5zID0gdC0+Y29s dW1uczsKKwkJcHViX3JlbC0+ZXhjZXB0ID0gdC0+ZXhjZXB0OwogCQlyZWxzID0gbGFwcGVuZChy ZWxzLCBwdWJfcmVsKTsKIAkJcmVsaWRzID0gbGFwcGVuZF9vaWQocmVsaWRzLCBteXJlbGlkKTsK IApAQCAtMTgzMyw2ICsxODcxLDcgQEAgT3BlblRhYmxlTGlzdChMaXN0ICp0YWJsZXMpCiAKIAkJ CQkvKiBjaGlsZCBpbmhlcml0cyBjb2x1bW4gbGlzdCBmcm9tIHBhcmVudCAqLwogCQkJCXB1Yl9y ZWwtPmNvbHVtbnMgPSB0LT5jb2x1bW5zOworCQkJCXB1Yl9yZWwtPmV4Y2VwdCA9IHQtPmV4Y2Vw dDsKIAkJCQlyZWxzID0gbGFwcGVuZChyZWxzLCBwdWJfcmVsKTsKIAkJCQlyZWxpZHMgPSBsYXBw ZW5kX29pZChyZWxpZHMsIGNoaWxkcmVsaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmlu ZGV4IDZiMWEwMGVkNDc3Li4zZWE5NWFlMWEyNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMK QEAgLTg2ODcsNyArODY4Nyw3IEBAIEFURXhlY1NldEV4cHJlc3Npb24oQWx0ZXJlZFRhYmxlSW5m byAqdGFiLCBSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmNvbE5hbWUsCiAJICogZXhwcmVzc2lv bnMuCiAJICovCiAJaWYgKGF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRV QUwgJiYKLQkJR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoUmVsYXRpb25HZXRSZWxpZChyZWwpKSAh PSBOSUwpCisJCUdldFJlbGF0aW9uUHVibGljYXRpb25zKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwg TlVMTCwgTlVMTCkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coIkFMVEVSIFRBQkxFIC8gU0VUIEVYUFJF U1NJT04gaXMgbm90IHN1cHBvcnRlZCBmb3IgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBpbiB0 YWJsZXMgdGhhdCBhcmUgcGFydCBvZiBhIHB1YmxpY2F0aW9uIiksCkBAIC0xODg4Miw3ICsxODg4 Miw3IEBAIEFUUHJlcENoYW5nZVBlcnNpc3RlbmNlKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVs YXRpb24gcmVsLCBib29sIHRvTG9nZ2VkKQogCSAqIFVOTE9HR0VELCBhcyBVTkxPR0dFRCB0YWJs ZXMgY2FuJ3QgYmUgcHVibGlzaGVkLgogCSAqLwogCWlmICghdG9Mb2dnZWQgJiYKLQkJR2V0UmVs YXRpb25QdWJsaWNhdGlvbnMoUmVsYXRpb25HZXRSZWxpZChyZWwpKSAhPSBOSUwpCisJCUdldFJl bGF0aW9uUHVibGljYXRpb25zKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgTlVMTCwgTlVMTCkpCiAJ CWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJF UVVJU0lURV9TVEFURSksCiAJCQkJIGVycm1zZygiY2Fubm90IGNoYW5nZSB0YWJsZSBcIiVzXCIg dG8gdW5sb2dnZWQgYmVjYXVzZSBpdCBpcyBwYXJ0IG9mIGEgcHVibGljYXRpb24iLApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFt LnkKaW5kZXggMjhmNGUxMWUzMGYuLmJjZjBiYzU3YWE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTQ1NSw2 ICs0NTUsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVs bmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCQkJCVRyaWdnZXJUcmFuc2l0aW9u cyBUcmlnZ2VyUmVmZXJlbmNpbmcKIAkJCQl2YWN1dW1fcmVsYXRpb25fbGlzdCBvcHRfdmFjdXVt X3JlbGF0aW9uX2xpc3QKIAkJCQlkcm9wX29wdGlvbl9saXN0IHB1Yl9vYmpfbGlzdCBwdWJfYWxs X29ial90eXBlX2xpc3QKKwkJCQlwdWJfZXhjZXB0X29ial9saXN0IG9wdF9wdWJfZXhjZXB0X2Ns YXVzZQogCiAldHlwZSA8cmV0Y2xhdXNlPiByZXR1cm5pbmdfY2xhdXNlCiAldHlwZSA8bm9kZT4J cmV0dXJuaW5nX29wdGlvbgpAQCAtNTkyLDYgKzU5Myw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVj dXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVy eSk7CiAldHlwZSA8bm9kZT4JdmFyX3ZhbHVlIHpvbmVfdmFsdWUKICV0eXBlIDxyb2xlc3BlYz4g YXV0aF9pZGVudCBSb2xlU3BlYyBvcHRfZ3JhbnRlZF9ieQogJXR5cGUgPHB1YmxpY2F0aW9ub2Jq ZWN0c3BlYz4gUHVibGljYXRpb25PYmpTcGVjCisldHlwZSA8cHVibGljYXRpb25vYmplY3RzcGVj PiBQdWJsaWNhdGlvbkV4Y2VwdE9ialNwZWMKICV0eXBlIDxwdWJsaWNhdGlvbmFsbG9iamVjdHNw ZWM+IFB1YmxpY2F0aW9uQWxsT2JqU3BlYwogCiAldHlwZSA8a2V5d29yZD4gdW5yZXNlcnZlZF9r ZXl3b3JkIHR5cGVfZnVuY19uYW1lX2tleXdvcmQKQEAgLTEwNzg3LDcgKzEwNzg5LDcgQEAgQWx0 ZXJPd25lclN0bXQ6IEFMVEVSIEFHR1JFR0FURSBhZ2dyZWdhdGVfd2l0aF9hcmd0eXBlcyBPV05F UiBUTyBSb2xlU3BlYwogICoKICAqIHB1Yl9hbGxfb2JqX3R5cGUgaXMgb25lIG9mOgogICoKLSAq CQlUQUJMRVMKKyAqCQlUQUJMRVMgW0VYQ0VQVCBbVEFCTEVdICggdGFibGUgWywgLi4uXSApXQog ICoJCVNFUVVFTkNFUwogICoKICAqIENSRUFURSBQVUJMSUNBVElPTiBGT1IgcHViX29iaiBbLCAu Li5dIFtXSVRIIG9wdGlvbnNdCkBAIC0xMDgxMyw2ICsxMDgxNSw3IEBAIENyZWF0ZVB1YmxpY2F0 aW9uU3RtdDoKIAkJCQkJQ3JlYXRlUHVibGljYXRpb25TdG10ICpuID0gbWFrZU5vZGUoQ3JlYXRl UHVibGljYXRpb25TdG10KTsKIAogCQkJCQluLT5wdWJuYW1lID0gJDM7CisJCQkJCW4tPnB1Ym9i amVjdHMgPSAkNTsKIAkJCQkJcHJlcHJvY2Vzc19wdWJfYWxsX29ianR5cGVfbGlzdCgkNSwgJm4t PmZvcl9hbGxfdGFibGVzLAogCQkJCQkJCQkJCQkJCSZuLT5mb3JfYWxsX3NlcXVlbmNlcywKIAkJ CQkJCQkJCQkJCQl5eXNjYW5uZXIpOwpAQCAtMTA4NTMsNiArMTA4NTYsNyBAQCBQdWJsaWNhdGlv bk9ialNwZWM6CiAJCQkJCSQkLT5wdWJ0YWJsZS0+cmVsYXRpb24gPSAkMjsKIAkJCQkJJCQtPnB1 YnRhYmxlLT5jb2x1bW5zID0gJDM7CiAJCQkJCSQkLT5wdWJ0YWJsZS0+d2hlcmVDbGF1c2UgPSAk NDsKKwkJCQkJJCQtPmxvY2F0aW9uID0gQDE7CiAJCQkJfQogCQkJfCBUQUJMRVMgSU5fUCBTQ0hF TUEgQ29sSWQKIAkJCQl7CkBAIC0xMDkyOCwxMSArMTA5MzIsMTkgQEAgcHViX29ial9saXN0OglQ dWJsaWNhdGlvbk9ialNwZWMKIAkJCQkJeyAkJCA9IGxhcHBlbmQoJDEsICQzKTsgfQogCTsKIAor b3B0X3B1Yl9leGNlcHRfY2xhdXNlOgorCQkJRVhDRVBUIG9wdF90YWJsZSAnKCcgcHViX2V4Y2Vw dF9vYmpfbGlzdCAnKScJeyAkJCA9ICQ0OyB9CisJCQl8IC8qRU1QVFkqLwkJCQkJCQkJCQl7ICQk ID0gTklMOyB9CisJCTsKKwogUHVibGljYXRpb25BbGxPYmpTcGVjOgotCQkJCUFMTCBUQUJMRVMK KwkJCQlBTEwgVEFCTEVTIG9wdF9wdWJfZXhjZXB0X2NsYXVzZQogCQkJCQl7CiAJCQkJCQkkJCA9 IG1ha2VOb2RlKFB1YmxpY2F0aW9uQWxsT2JqU3BlYyk7CiAJCQkJCQkkJC0+cHVib2JqdHlwZSA9 IFBVQkxJQ0FUSU9OX0FMTF9UQUJMRVM7CisJCQkJCQkkJC0+ZXhjZXB0X3RhYmxlcyA9ICQzOwor CQkJCQkJaWYoJCQtPmV4Y2VwdF90YWJsZXMgIT0gTlVMTCkKKwkJCQkJCQlwcmVwcm9jZXNzX3B1 Ym9ial9saXN0KCQkLT5leGNlcHRfdGFibGVzLCB5eXNjYW5uZXIpOwogCQkJCQkJJCQtPmxvY2F0 aW9uID0gQDE7CiAJCQkJCX0KIAkJCQl8IEFMTCBTRVFVRU5DRVMKQEAgLTEwOTQ5LDYgKzEwOTYx LDIzIEBAIHB1Yl9hbGxfb2JqX3R5cGVfbGlzdDoJUHVibGljYXRpb25BbGxPYmpTcGVjCiAJCQkJ CXsgJCQgPSBsYXBwZW5kKCQxLCAkMyk7IH0KIAk7CiAKK1B1YmxpY2F0aW9uRXhjZXB0T2JqU3Bl YzoKKwkJCSByZWxhdGlvbl9leHByCisJCQkJeworCQkJCQkkJCA9IG1ha2VOb2RlKFB1YmxpY2F0 aW9uT2JqU3BlYyk7CisJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05PQkpfRVhDRVBU X1RBQkxFOworCQkJCQkkJC0+cHVidGFibGUgPSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsK KwkJCQkJJCQtPnB1YnRhYmxlLT5leGNlcHQgPSB0cnVlOworCQkJCQkkJC0+cHVidGFibGUtPnJl bGF0aW9uID0gJDE7CisJCQkJCSQkLT5sb2NhdGlvbiA9IEAxOworCQkJCX0KKwk7CisKK3B1Yl9l eGNlcHRfb2JqX2xpc3Q6IFB1YmxpY2F0aW9uRXhjZXB0T2JqU3BlYworCQkJCQl7ICQkID0gbGlz dF9tYWtlMSgkMSk7IH0KKwkJCXwgcHViX2V4Y2VwdF9vYmpfbGlzdCAnLCcgUHVibGljYXRpb25F eGNlcHRPYmpTcGVjCisJCQkJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMyk7IH0KKwk7CiAKIC8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9w Z291dHB1dC5jCmluZGV4IDc4Nzk5OGFiYjhhLi44ODE3NGJkMjk5YSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC0yMDg0LDcgKzIwODQsOCBAQCBn ZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikK IAlpZiAoIWVudHJ5LT5yZXBsaWNhdGVfdmFsaWQpCiAJewogCQlPaWQJCQlzY2hlbWFJZCA9IGdl dF9yZWxfbmFtZXNwYWNlKHJlbGlkKTsKLQkJTGlzdAkgICAqcHViaWRzID0gR2V0UmVsYXRpb25Q dWJsaWNhdGlvbnMocmVsaWQpOworCQlMaXN0CSAgICpwdWJpZHMgPSBOSUw7CisJCUxpc3QJICAg KmV4Y2VwdHB1YmlkcyA9IE5JTDsKIAogCQkvKgogCQkgKiBXZSBkb24ndCBhY3F1aXJlIGEgbG9j ayBvbiB0aGUgbmFtZXNwYWNlIHN5c3RlbSB0YWJsZSBhcyB3ZSBidWlsZApAQCAtMjA5OSw2ICsy MTAwLDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24g cmVsYXRpb24pCiAJCWNoYXIJCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQocmVsaWQpOwogCQlM aXN0CSAgICpyZWxfcHVibGljYXRpb25zID0gTklMOwogCisJCUdldFJlbGF0aW9uUHVibGljYXRp b25zKHJlbGlkLCAmcHViaWRzLCAmZXhjZXB0cHViaWRzKTsKKwogCQkvKiBSZWxvYWQgcHVibGlj YXRpb25zIGlmIG5lZWRlZCBiZWZvcmUgdXNlLiAqLwogCQlpZiAoIXB1YmxpY2F0aW9uc192YWxp ZCkKIAkJewpAQCAtMjIwNSw5ICsyMjA4LDIxIEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1 dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJCWlmIChwdWItPnB1YnZpYXJvb3Qg JiYgYW1fcGFydGl0aW9uKQogCQkJCXsKIAkJCQkJTGlzdAkgICAqYW5jZXN0b3JzID0gZ2V0X3Bh cnRpdGlvbl9hbmNlc3RvcnMocmVsaWQpOworCQkJCQlpbnQJCQlsZXZlbCA9IDA7CisKKwkJCQkJ Zm9yZWFjaF9vaWQoYW5jZXN0b3IsIGFuY2VzdG9ycykKKwkJCQkJeworCQkJCQkJTGlzdAkgICAq YWV4Y2VwdHB1YmlkcyA9IE5JTDsKIAotCQkJCQlwdWJfcmVsaWQgPSBsbGFzdF9vaWQoYW5jZXN0 b3JzKTsKLQkJCQkJYW5jZXN0b3JfbGV2ZWwgPSBsaXN0X2xlbmd0aChhbmNlc3RvcnMpOworCQkJ CQkJbGV2ZWwrKzsKKwkJCQkJCUdldFJlbGF0aW9uUHVibGljYXRpb25zKGFuY2VzdG9yLCBOVUxM LCAmYWV4Y2VwdHB1Ymlkcyk7CisKKwkJCQkJCWlmICghbGlzdF9tZW1iZXJfb2lkKGFleGNlcHRw dWJpZHMsIHB1Yi0+b2lkKSkKKwkJCQkJCXsKKwkJCQkJCQlwdWJfcmVsaWQgPSBhbmNlc3RvcjsK KwkJCQkJCQlhbmNlc3Rvcl9sZXZlbCA9IGxldmVsOworCQkJCQkJfQorCQkJCQl9CiAJCQkJfQog CQkJfQogCkBAIC0yMzIyLDYgKzIzMzcsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXRE YXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAogCQlsaXN0X2ZyZWUocHViaWRzKTsKIAkJ bGlzdF9mcmVlKHNjaGVtYVB1Ymlkcyk7CisJCWxpc3RfZnJlZShleGNlcHRwdWJpZHMpOwogCQls aXN0X2ZyZWUocmVsX3B1YmxpY2F0aW9ucyk7CiAKIAkJZW50cnktPnJlcGxpY2F0ZV92YWxpZCA9 IHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCAyZDBjYjdiY2ZkNC4uYmM1 Zjk0OTU5MjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNTc5Myw3ICs1Nzkz LDkgQEAgUmVsYXRpb25HZXRFeGNsdXNpb25JbmZvKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiB2 b2lkCiBSZWxhdGlvbkJ1aWxkUHVibGljYXRpb25EZXNjKFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJs aWNhdGlvbkRlc2MgKnB1YmRlc2MpCiB7Ci0JTGlzdAkgICAqcHVib2lkczsKKwlMaXN0CSAgICpw dWJvaWRzID0gTklMOworCUxpc3QJICAgKmV4Y2VwdHB1Ym9pZHMgPSBOSUw7CisJTGlzdAkgICAq YWxsdGFibGVzcHVib2lkczsKIAlMaXN0Q2VsbCAgICpsYzsKIAlNZW1vcnlDb250ZXh0IG9sZGN4 dDsKIAlPaWQJCQlzY2hlbWFpZDsKQEAgLTU4MzEsNyArNTgzMyw3IEBAIFJlbGF0aW9uQnVpbGRQ dWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRpb24sIFB1YmxpY2F0aW9uRGVzYyAqcHViZGVz YykKIAlwdWJkZXNjLT5nZW5jb2xzX3ZhbGlkX2Zvcl9kZWxldGUgPSB0cnVlOwogCiAJLyogRmV0 Y2ggdGhlIHB1YmxpY2F0aW9uIG1lbWJlcnNoaXAgaW5mby4gKi8KLQlwdWJvaWRzID0gR2V0UmVs YXRpb25QdWJsaWNhdGlvbnMocmVsaWQpOworCUdldFJlbGF0aW9uUHVibGljYXRpb25zKHJlbGlk LCAmcHVib2lkcywgJmV4Y2VwdHB1Ym9pZHMpOwogCXNjaGVtYWlkID0gUmVsYXRpb25HZXROYW1l c3BhY2UocmVsYXRpb24pOwogCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9p ZHMsIEdldFNjaGVtYVB1YmxpY2F0aW9ucyhzY2hlbWFpZCkpOwogCkBAIC01ODQzLDE2ICs1ODQ1 LDI1IEBAIFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRpb24sIFB1 YmxpY2F0aW9uRGVzYyAqcHViZGVzYykKIAkJZm9yZWFjaChsYywgYW5jZXN0b3JzKQogCQl7CiAJ CQlPaWQJCQlhbmNlc3RvciA9IGxmaXJzdF9vaWQobGMpOworCQkJTGlzdAkgICAqYW5jZXN0b3Jf cHVib2lkcyA9IE5JTDsKKwkJCUxpc3QJICAgKmFuY2VzdG9yX2V4Y2VwdHB1Ym9pZHMgPSBOSUw7 CiAKLQkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsCi0JCQkJCQkJ CQkJCSBHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhhbmNlc3RvcikpOworCQkJR2V0UmVsYXRpb25Q dWJsaWNhdGlvbnMoYW5jZXN0b3IsICZhbmNlc3Rvcl9wdWJvaWRzLAorCQkJCQkJCQkJJmFuY2Vz dG9yX2V4Y2VwdHB1Ym9pZHMpOworCisJCQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29p ZChwdWJvaWRzLCBhbmNlc3Rvcl9wdWJvaWRzKTsKIAkJCXNjaGVtYWlkID0gZ2V0X3JlbF9uYW1l c3BhY2UoYW5jZXN0b3IpOwogCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVi b2lkcywKIAkJCQkJCQkJCQkJIEdldFNjaGVtYVB1YmxpY2F0aW9ucyhzY2hlbWFpZCkpOworCQkJ ZXhjZXB0cHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQoZXhjZXB0cHVib2lkcywKKwkJ CQkJCQkJCQkJCSAgIGFuY2VzdG9yX2V4Y2VwdHB1Ym9pZHMpOwogCQl9CiAJfQotCXB1Ym9pZHMg PSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsIEdldEFsbFRhYmxlc1B1YmxpY2F0aW9u cygpKTsKIAorCWFsbHRhYmxlc3B1Ym9pZHMgPSBHZXRBbGxUYWJsZXNQdWJsaWNhdGlvbnMoKTsK KwlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLAorCQkJCQkJCQkJIGxp c3RfZGlmZmVyZW5jZV9vaWQoYWxsdGFibGVzcHVib2lkcywKKwkJCQkJCQkJCQkJCQkJIGV4Y2Vw dHB1Ym9pZHMpKTsKIAlmb3JlYWNoKGxjLCBwdWJvaWRzKQogCXsKIAkJT2lkCQkJcHViaWQgPSBs Zmlyc3Rfb2lkKGxjKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDI0YWQyMDFhZjJmLi41MTY1ZTE1Y2IxNyAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jCkBAIC00NjM0LDkgKzQ2MzQsNDggQEAgZ2V0UHVibGljYXRpb25zKEFyY2hp dmUgKmZvdXQpCiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YnZpYXJvb3QpLCAi dCIpID09IDApOwogCQlwdWJpbmZvW2ldLnB1YmdlbmNvbHNfdHlwZSA9CiAJCQkqKFBRZ2V0dmFs dWUocmVzLCBpLCBpX3B1YmdlbmNvbHMpKTsKKwkJcHViaW5mb1tpXS5leGNlcHR0YmxzID0gKFNp bXBsZVB0ckxpc3QpCisJCXsKKwkJCU5VTEwsIE5VTEwKKwkJfTsKIAogCQkvKiBEZWNpZGUgd2hl dGhlciB3ZSB3YW50IHRvIGR1bXAgaXQgKi8KIAkJc2VsZWN0RHVtcGFibGVPYmplY3QoJihwdWJp bmZvW2ldLmRvYmopLCBmb3V0KTsKKworCQlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxOTAw MDApCisJCXsKKwkJCWludAkJCW50YmxzOworCQkJUEdyZXN1bHQgICAqcmVzX3RibHM7CisKKwkJ CXJlc2V0UFFFeHBCdWZmZXIocXVlcnkpOworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnksCisJ CQkJCQkJICAiU0VMRUNUIHBycmVsaWRcbiIKKwkJCQkJCQkgICJGUk9NIHBnX2NhdGFsb2cucGdf cHVibGljYXRpb25fcmVsXG4iCisJCQkJCQkJICAiV0hFUkUgcHJwdWJpZCA9ICV1IGFuZCBwcmV4 Y2VwdCA9IHRydWUiLAorCQkJCQkJCSAgcHViaW5mb1tpXS5kb2JqLmNhdElkLm9pZCk7CisKKwkJ CXJlc190YmxzID0gRXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBM RVNfT0spOworCisJCQludGJscyA9IFBRbnR1cGxlcyhyZXNfdGJscyk7CisJCQlpZiAobnRibHMg PT0gMCkKKwkJCQljb250aW51ZTsKKworCQkJZm9yIChpbnQgaiA9IDA7IGogPCBudGJsczsgaisr KQorCQkJeworCQkJCU9pZAkJCXBycmVsaWQ7CisJCQkJVGFibGVJbmZvICAqdGJpbmZvOworCisJ CQkJcHJyZWxpZCA9IGF0b29pZChQUWdldHZhbHVlKHJlc190YmxzLCBqLCAwKSk7CisKKwkJCQl0 YmluZm8gPSBmaW5kVGFibGVCeU9pZChwcnJlbGlkKTsKKwkJCQlpZiAodGJpbmZvID09IE5VTEwp CisJCQkJCWNvbnRpbnVlOworCisJCQkJc2ltcGxlX3B0cl9saXN0X2FwcGVuZCgmcHViaW5mb1tp XS5leGNlcHR0YmxzLCB0YmluZm8pOworCQkJfQorCisJCQlQUWNsZWFyKHJlc190YmxzKTsKKwkJ fQogCX0KIAogY2xlYW51cDoKQEAgLTQ2NzYsNyArNDcxNSwyOCBAQCBkdW1wUHVibGljYXRpb24o QXJjaGl2ZSAqZm91dCwgY29uc3QgUHVibGljYXRpb25JbmZvICpwdWJpbmZvKQogCWlmIChwdWJp bmZvLT5wdWJhbGx0YWJsZXMgJiYgcHViaW5mby0+cHViYWxsc2VxdWVuY2VzKQogCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cihxdWVyeSwgIiBGT1IgQUxMIFRBQkxFUywgQUxMIFNFUVVFTkNFUyIpOwog CWVsc2UgaWYgKHB1YmluZm8tPnB1YmFsbHRhYmxlcykKKwl7CisJCWJvb2wJCWZpcnN0X3RibCA9 IHRydWU7CisKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgRk9SIEFMTCBUQUJMRVMi KTsKKworCQkvKiBJbmNsdWRlIGV4Y2VwdGlvbiB0YWJsZXMgaWYgdGhlIHB1YmxpY2F0aW9uIGhh cyBFWENFUFQgVEFCTEVzICovCisJCWZvciAoU2ltcGxlUHRyTGlzdENlbGwgKmNlbGwgPSBwdWJp bmZvLT5leGNlcHR0YmxzLmhlYWQ7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0KQorCQl7CisJCQlU YWJsZUluZm8gICp0YmluZm8gPSAoVGFibGVJbmZvICopIGNlbGwtPnB0cjsKKworCQkJaWYgKGZp cnN0X3RibCkKKwkJCXsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiBFWENFUFQg VEFCTEUgKCIpOworCQkJCWZpcnN0X3RibCA9IGZhbHNlOworCQkJfQorCQkJZWxzZQorCQkJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCAiKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHF1 ZXJ5LCAiT05MWSAlcyIsIGZtdFF1YWxpZmllZER1bXBhYmxlKHRiaW5mbykpOworCQl9CisJCWlm ICghZmlyc3RfdGJsKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIpIik7CisJfQog CWVsc2UgaWYgKHB1YmluZm8tPnB1YmFsbHNlcXVlbmNlcykKIAkJYXBwZW5kUFFFeHBCdWZmZXJT dHIocXVlcnksICIgRk9SIEFMTCBTRVFVRU5DRVMiKTsKIApAQCAtNDg1Niw4ICs0OTE2LDkgQEAg Z2V0UHVibGljYXRpb25UYWJsZXMoQXJjaGl2ZSAqZm91dCwgVGFibGVJbmZvIHRibGluZm9bXSwg aW50IG51bVRhYmxlcykKIAogCS8qIENvbGxlY3QgYWxsIHB1YmxpY2F0aW9uIG1lbWJlcnNoaXAg aW5mby4gKi8KIAlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNTAwMDApCisJewogCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKLQkJCQkJCQkgIlNFTEVDVCB0YWJsZW9pZCwgb2lkLCBw cnB1YmlkLCBwcnJlbGlkLCAiCisJCQkJCQkJICJTRUxFQ1QgdGFibGVvaWQsIG9pZCwgcHJwdWJp ZCwgcHJyZWxpZCxcbiIKIAkJCQkJCQkgInBnX2NhdGFsb2cucGdfZ2V0X2V4cHIocHJxdWFsLCBw cnJlbGlkKSBBUyBwcnJlbHF1YWwsICIKIAkJCQkJCQkgIihDQVNFXG4iCiAJCQkJCQkJICIgIFdI RU4gcHIucHJhdHRycyBJUyBOT1QgTlVMTCBUSEVOXG4iCkBAIC00ODY4LDYgKzQ5MjksOSBAQCBn ZXRQdWJsaWNhdGlvblRhYmxlcyhBcmNoaXZlICpmb3V0LCBUYWJsZUluZm8gdGJsaW5mb1tdLCBp bnQgbnVtVGFibGVzKQogCQkJCQkJCSAiICAgICAgV0hFUkUgYXR0cmVsaWQgPSBwci5wcnJlbGlk IEFORCBhdHRudW0gPSBwcmF0dHJzW3NdKVxuIgogCQkJCQkJCSAiICBFTFNFIE5VTEwgRU5EKSBw cmF0dHJzICIKIAkJCQkJCQkgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwgcHIi KTsKKwkJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTkwMDAwKQorCQkJYXBwZW5kUFFFeHBC dWZmZXJTdHIocXVlcnksICIgV0hFUkUgcHJleGNlcHQgPSBmYWxzZSIpOworCX0KIAllbHNlCiAJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHRhYmxlb2lkLCBv aWQsIHBycHViaWQsIHBycmVsaWQsICIKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IDcyYTAwZTFiYzIwLi45ZWNj ZDJlZjQ5NSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAorKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5oCkBAIC02NzYsNiArNjc2LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg X1B1YmxpY2F0aW9uSW5mbwogCWJvb2wJCXB1YnRydW5jYXRlOwogCWJvb2wJCXB1YnZpYXJvb3Q7 CiAJUHVibGlzaEdlbmNvbHNUeXBlIHB1YmdlbmNvbHNfdHlwZTsKKwlTaW1wbGVQdHJMaXN0IGV4 Y2VwdHRibHM7CiB9IFB1YmxpY2F0aW9uSW5mbzsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAu cGwKaW5kZXggZTMzYWE5NWY2ZmYuLmEzZmNmM2MyYjBhIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvdC8wMDJfcGdfZHVtcC5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVt cC5wbApAQCAtMzE3MCw2ICszMTcwLDM2IEBAIG15ICV0ZXN0cyA9ICgKIAkJbGlrZSA9PiB7ICVm dWxsX3J1bnMsIHNlY3Rpb25fcG9zdF9kYXRhID0+IDEsIH0sCiAJfSwKIAorCSdDUkVBVEUgUFVC TElDQVRJT04gcHViOCcgPT4geworCQljcmVhdGVfb3JkZXIgPT4gNTAsCisJCWNyZWF0ZV9zcWwg PT4KKwkJICAnQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjggRk9SIEFMTCBUQUJMRVMgRVhDRVBUIChk dW1wX3Rlc3QudGVzdF90YWJsZSk7JywKKwkJcmVnZXhwID0+IHFyL14KKwkJCVxRQ1JFQVRFIFBV QkxJQ0FUSU9OIHB1YjggRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChPTkxZIGR1bXBfdGVz dC50ZXN0X3RhYmxlKSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUsIHRy dW5jYXRlJyk7XEUKKwkJCS94bSwKKwkJbGlrZSA9PiB7ICVmdWxsX3J1bnMsIHNlY3Rpb25fcG9z dF9kYXRhID0+IDEsIH0sCisJfSwKKworCSdDUkVBVEUgUFVCTElDQVRJT04gcHViOScgPT4gewor CQljcmVhdGVfb3JkZXIgPT4gNTAsCisJCWNyZWF0ZV9zcWwgPT4KKwkJICAnQ1JFQVRFIFBVQkxJ Q0FUSU9OIHB1YjkgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChkdW1wX3Rlc3QudGVzdF90 YWJsZSwgZHVtcF90ZXN0LnRlc3Rfc2Vjb25kX3RhYmxlKTsnLAorCQlyZWdleHAgPT4gcXIvXgor CQkJXFFDUkVBVEUgUFVCTElDQVRJT04gcHViOSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUg KE9OTFkgZHVtcF90ZXN0LnRlc3RfdGFibGUsIE9OTFkgZHVtcF90ZXN0LnRlc3Rfc2Vjb25kX3Rh YmxlKSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUsIHRydW5jYXRlJyk7 XEUKKwkJCS94bSwKKwkJbGlrZSA9PiB7ICVmdWxsX3J1bnMsIHNlY3Rpb25fcG9zdF9kYXRhID0+ IDEsIH0sCisJfSwKKworCSdDUkVBVEUgUFVCTElDQVRJT04gcHViMTAnID0+IHsKKwkJY3JlYXRl X29yZGVyID0+IDkyLAorCQljcmVhdGVfc3FsID0+CisJCSAgJ0NSRUFURSBQVUJMSUNBVElPTiBw dWIxMCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKGR1bXBfdGVzdC50ZXN0X2luaGVyaXRh bmNlX3BhcmVudCk7JywKKwkJcmVnZXhwID0+IHFyL14KKwkJCVxRQ1JFQVRFIFBVQkxJQ0FUSU9O IHB1YjEwIEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAoT05MWSBkdW1wX3Rlc3QudGVzdF9p bmhlcml0YW5jZV9wYXJlbnQsIE9OTFkgZHVtcF90ZXN0LnRlc3RfaW5oZXJpdGFuY2VfY2hpbGQp IFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZSwgdHJ1bmNhdGUnKTtcRQor CQkJL3htLAorCQlsaWtlID0+IHsgJWZ1bGxfcnVucywgc2VjdGlvbl9wb3N0X2RhdGEgPT4gMSwg fSwKKwl9LAorCiAJJ0NSRUFURSBTVUJTQ1JJUFRJT04gc3ViMScgPT4gewogCQljcmVhdGVfb3Jk ZXIgPT4gNTAsCiAJCWNyZWF0ZV9zcWwgPT4gJ0NSRUFURSBTVUJTQ1JJUFRJT04gc3ViMQpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUu YwppbmRleCAzNmYyNDUwMjg0Mi4uOGNkNzNiM2FkNTMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNx bC9kZXNjcmliZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBAIC0zMDczLDE3ICsz MDczLDM0IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUs CiAJCQkJCQkJCSAgIiAgICAgICAgICBXSEVSRSBhdHRyZWxpZCA9IHByLnBycmVsaWQgQU5EIGF0 dG51bSA9IHByYXR0cnNbc10pXG4iCiAJCQkJCQkJCSAgIiAgICAgICAgRUxTRSBOVUxMIEVORCkg IgogCQkJCQkJCQkgICJGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24gcFxuIgotCQkJCQkJ CQkgICIgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwgcHIgT04gcC5vaWQg PSBwci5wcnB1YmlkXG4iCi0JCQkJCQkJCSAgIiAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNz IGMgT04gYy5vaWQgPSBwci5wcnJlbGlkXG4iCi0JCQkJCQkJCSAgIldIRVJFIHByLnBycmVsaWQg PSAnJXMnXG4iCisJCQkJCQkJCSAgIgkJSk9JTiBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3Jl bCBwciBPTiBwLm9pZCA9IHByLnBycHViaWRcbiIKKwkJCQkJCQkJICAiCQlKT0lOIHBnX2NhdGFs b2cucGdfY2xhc3MgYyBPTiBjLm9pZCA9IHByLnBycmVsaWRcbiIKKwkJCQkJCQkJICAiV0hFUkUg cHIucHJyZWxpZCA9ICclcydcbiIsCisJCQkJCQkJCSAgb2lkLCBvaWQsIG9pZCk7CisKKwkJCQlp ZiAocHNldC5zdmVyc2lvbiA+PSAxOTAwMDApCisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZi dWYsICIgQU5EIE5PVCBwci5wcmV4Y2VwdFxuIik7CisKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigm YnVmLAogCQkJCQkJCQkgICJVTklPTlxuIgogCQkJCQkJCQkgICJTRUxFQ1QgcHVibmFtZVxuIgot CQkJCQkJCQkgICIgICAgICwgTlVMTFxuIgotCQkJCQkJCQkgICIgICAgICwgTlVMTFxuIgorCQkJ CQkJCQkgICIJCSwgTlVMTFxuIgorCQkJCQkJCQkgICIJCSwgTlVMTFxuIgogCQkJCQkJCQkgICJG Uk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24gcFxuIgotCQkJCQkJCQkgICJXSEVSRSBwLnB1 YmFsbHRhYmxlcyBBTkQgcGdfY2F0YWxvZy5wZ19yZWxhdGlvbl9pc19wdWJsaXNoYWJsZSgnJXMn KVxuIgotCQkJCQkJCQkgICJPUkRFUiBCWSAxOyIsCi0JCQkJCQkJCSAgb2lkLCBvaWQsIG9pZCwg b2lkKTsKKwkJCQkJCQkJICAiV0hFUkUgcC5wdWJhbGx0YWJsZXMgQU5EIHBnX2NhdGFsb2cucGdf cmVsYXRpb25faXNfcHVibGlzaGFibGUoJyVzJylcbiIsCisJCQkJCQkJCSAgb2lkKTsKKworCQkJ CWlmIChwc2V0LnN2ZXJzaW9uID49IDE5MDAwMCkKKwkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1 ZiwKKwkJCQkJCQkJCSAgIiAgICAgQU5EIE5PVCBFWElTVFMgKFxuIgorCQkJCQkJCQkJICAiCQlT RUxFQ1QgMVxuIgorCQkJCQkJCQkJICAiCQlGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25f cmVsIHByXG4iCisJCQkJCQkJCQkgICIJCUpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBwY1xuIgor CQkJCQkJCQkJICAiCQlPTiBwci5wcnJlbGlkID0gcGMub2lkXG4iCisJCQkJCQkJCQkgICIJCVdI RVJFIHByLnBycmVsaWQgPSAnJXMnIEFORCBwci5wcnB1YmlkID0gcC5vaWQpXG4iLAorCQkJCQkJ CQkJICBvaWQpOworCisJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwgIk9SREVSIEJZIDE7 Iik7CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC0zMTM0LDYgKzMxNTEsMzUgQEAgZGVzY3JpYmVP bmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCVBRY2xlYXIocmVzdWx0 KTsKIAkJfQogCisJCS8qIFByaW50IHB1YmxpY2F0aW9uIHRoZSByZWxhdGlvbiBpcyBleGNsdWRl ZCBleHBsaWNpdGx5ICovCisJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE5MDAwMCkKKwkJeworCQkJ cHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCQkgICJTRUxFQ1QgcHVibmFtZVxuIgorCQkJ CQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbiBwXG4iCisJCQkJCQkJICAiSk9J TiBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbCBwciBPTiBwLm9pZCA9IHByLnBycHViaWRc biIKKwkJCQkJCQkgICJXSEVSRSBwci5wcnJlbGlkID0gJyVzJ1xuIEFORCBwci5wcmV4Y2VwdFxu IgorCQkJCQkJCSAgIk9SREVSIEJZIDE7Iiwgb2lkKTsKKworCQkJcmVzdWx0ID0gUFNRTGV4ZWMo YnVmLmRhdGEpOworCQkJaWYgKCFyZXN1bHQpCisJCQkJZ290byBlcnJvcl9yZXR1cm47CisJCQll bHNlCisJCQkJdHVwbGVzID0gUFFudHVwbGVzKHJlc3VsdCk7CisKKwkJCWlmICh0dXBsZXMgPiAw KQorCQkJCXByaW50VGFibGVBZGRGb290ZXIoJmNvbnQsIF8oIkV4Y2VwdCBQdWJsaWNhdGlvbnM6 IikpOworCisJCQkvKiBNaWdodCBiZSBhbiBlbXB0eSBzZXQgLSB0aGF0J3Mgb2sgKi8KKwkJCWZv ciAoaSA9IDA7IGkgPCB0dXBsZXM7IGkrKykKKwkJCXsKKwkJCQlwcmludGZQUUV4cEJ1ZmZlcigm YnVmLCAiICAgIFwiJXNcIiIsIFBRZ2V0dmFsdWUocmVzdWx0LCBpLCAwKSk7CisKKwkJCQlwcmlu dFRhYmxlQWRkRm9vdGVyKCZjb250LCBidWYuZGF0YSk7CisJCQl9CisJCQlQUWNsZWFyKHJlc3Vs dCk7CisJCX0KKwogCQkvKgogCQkgKiBJZiB2ZXJib3NlLCBwcmludCBOT1QgTlVMTCBjb25zdHJh aW50cy4KIAkJICovCkBAIC02NzUzLDggKzY3OTksMTIgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMo Y29uc3QgY2hhciAqcGF0dGVybikKIAkJCQkJCQkgICIgICAgIHBnX2NhdGFsb2cucGdfcHVibGlj YXRpb25fcmVsIHByXG4iCiAJCQkJCQkJICAiV0hFUkUgYy5yZWxuYW1lc3BhY2UgPSBuLm9pZFxu IgogCQkJCQkJCSAgIiAgQU5EIGMub2lkID0gcHIucHJyZWxpZFxuIgotCQkJCQkJCSAgIiAgQU5E IHByLnBycHViaWQgPSAnJXMnXG4iCi0JCQkJCQkJICAiT1JERVIgQlkgMSwyIiwgcHViaWQpOwor CQkJCQkJCSAgIiAgQU5EIHByLnBycHViaWQgPSAnJXMnXG4iLCBwdWJpZCk7CisKKwkJCWlmIChw c2V0LnN2ZXJzaW9uID49IDE5MDAwMCkKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLCAiICBB TkQgTk9UIHByLnByZXhjZXB0XG4iKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwgIk9S REVSIEJZIDEsMiIpOwogCQkJaWYgKCFhZGRGb290ZXJUb1B1YmxpY2F0aW9uRGVzYygmYnVmLCBf KCJUYWJsZXM6IiksIGZhbHNlLCAmY29udCkpCiAJCQkJZ290byBlcnJvcl9yZXR1cm47CiAKQEAg LTY3NzIsNiArNjgyMiwyMyBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0 ZXJuKQogCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCX0KIAkJfQorCQllbHNlCisJCXsKKwkJ CWlmIChwc2V0LnN2ZXJzaW9uID49IDE5MDAwMCkKKwkJCXsKKwkJCQkvKiBHZXQgdGhlIGV4Y2x1 ZGVkIHRhYmxlcyBmb3IgdGhlIHNwZWNpZmllZCBwdWJsaWNhdGlvbiAqLworCQkJCXByaW50ZlBR RXhwQnVmZmVyKCZidWYsCisJCQkJCQkJCSAgIlNFTEVDVCBjb25jYXQoYy5yZWxuYW1lc3BhY2U6 OnJlZ25hbWVzcGFjZSwgJy4nLCBjLnJlbG5hbWUpXG4iCisJCQkJCQkJCSAgIkZST00gcGdfY2F0 YWxvZy5wZ19jbGFzcyBjXG4iCisJCQkJCQkJCSAgIiAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX3B1 YmxpY2F0aW9uX3JlbCBwciBPTiBjLm9pZCA9IHByLnBycmVsaWRcbiIKKwkJCQkJCQkJICAiV0hF UkUgcHIucHJwdWJpZCA9ICclcydcbiIKKwkJCQkJCQkJICAiICBBTkQgcHIucHJleGNlcHRcbiIK KwkJCQkJCQkJICAiT1JERVIgQlkgMSIsIHB1YmlkKTsKKwkJCQlpZiAoIWFkZEZvb3RlclRvUHVi bGljYXRpb25EZXNjKCZidWYsIF8oIkV4Y2VwdCB0YWJsZXM6IiksCisJCQkJCQkJCQkJCQl0cnVl LCAmY29udCkpCisJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJfQorCQl9CiAKIAkJcHJpbnRU YWJsZSgmY29udCwgcHNldC5xdWVyeUZvdXQsIGZhbHNlLCBwc2V0LmxvZ2ZpbGUpOwogCQlwcmlu dFRhYmxlQ2xlYW51cCgmY29udCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBs ZXRlLmluLmMgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKaW5kZXggYjFmZjZmNmNk OTQuLmFiNWM5OTkxYjUxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmlu LmMKKysrIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCkBAIC0zNjM3LDcgKzM2Mzcs MTcgQEAgbWF0Y2hfcHJldmlvdXNfd29yZHMoaW50IHBhdHRlcm5faWQsCiAJZWxzZSBpZiAoTWF0 Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJGT1IiLCAiQUxMIikpCiAJ CUNPTVBMRVRFX1dJVEgoIlRBQkxFUyIsICJTRVFVRU5DRVMiKTsKIAllbHNlIGlmIChNYXRjaGVz KCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIsICJBTEwiLCAiVEFCTEVT IikpCi0JCUNPTVBMRVRFX1dJVEgoIldJVEggKCIpOworCQlDT01QTEVURV9XSVRIKCJFWENFUFQg VEFCTEUgKCIsICJXSVRIICgiKTsKKwllbHNlIGlmIChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElD QVRJT04iLCBNYXRjaEFueSwgIkZPUiIsICJBTEwiLCAiVEFCTEVTIiwgIkVYQ0VQVCIpKQorCQlD T01QTEVURV9XSVRIKCJUQUJMRSAoIik7CisJZWxzZSBpZiAoTWF0Y2hlcygiQ1JFQVRFIiwgIlBV QkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJGT1IiLCAiQUxMIiwgIlRBQkxFUyIsICJFWENFUFQiLCAi VEFCTEUiKSkKKwkJQ09NUExFVEVfV0lUSCgiKCIpOworCWVsc2UgaWYgKE1hdGNoZXMoIkNSRUFU RSIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAiRk9SIiwgIkFMTCIsICJUQUJMRVMiLCAiRVhD RVBUIiwgIlRBQkxFIiwgIigiKSkKKwkJQ09NUExFVEVfV0lUSF9TQ0hFTUFfUVVFUlkoUXVlcnlf Zm9yX2xpc3Rfb2ZfdGFibGVzKTsKKwllbHNlIGlmIChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElD QVRJT04iLCBNYXRjaEFueSwgIkZPUiIsICJBTEwiLCAiVEFCTEVTIiwgIkVYQ0VQVCIsICJUQUJM RSIsICIoIiwgTWF0Y2hBbnlOKSAmJiBlbmRzX3dpdGgocHJldl93ZCwgJywnKSkKKwkJQ09NUExF VEVfV0lUSF9TQ0hFTUFfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2ZfdGFibGVzKTsKKwllbHNlIGlm IChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIsICJBTEwi LCAiVEFCTEVTIiwgIkVYQ0VQVCIsICJUQUJMRSIsICIoIiwgTWF0Y2hBbnlOKSAmJiAhZW5kc193 aXRoKHByZXZfd2QsICcsJykpCisJCUNPTVBMRVRFX1dJVEgoIikiKTsKIAllbHNlIGlmIChNYXRj aGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIsICJUQUJMRVMiKSkK IAkJQ09NUExFVEVfV0lUSCgiSU4gU0NIRU1BIik7CiAJZWxzZSBpZiAoTWF0Y2hlcygiQ1JFQVRF IiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJGT1IiLCAiVEFCTEUiLCBNYXRjaEFueSkgJiYg IWVuZHNfd2l0aChwcmV2X3dkLCAnLCcpKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wdWJsaWNhdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5o CmluZGV4IDIyZjQ4YmI4OTc1Li5lODdkY2Q4YWFiNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVi bGljYXRpb24uaApAQCAtMTQ2LDE0ICsxNDYsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRp b25SZWxJbmZvCiAJUmVsYXRpb24JcmVsYXRpb247CiAJTm9kZQkgICAqd2hlcmVDbGF1c2U7CiAJ TGlzdAkgICAqY29sdW1uczsKKwlib29sCQlleGNlcHQ7CiB9IFB1YmxpY2F0aW9uUmVsSW5mbzsK IAogZXh0ZXJuIFB1YmxpY2F0aW9uICpHZXRQdWJsaWNhdGlvbihPaWQgcHViaWQpOwogZXh0ZXJu IFB1YmxpY2F0aW9uICpHZXRQdWJsaWNhdGlvbkJ5TmFtZShjb25zdCBjaGFyICpwdWJuYW1lLCBi b29sIG1pc3Npbmdfb2spOwotZXh0ZXJuIExpc3QgKkdldFJlbGF0aW9uUHVibGljYXRpb25zKE9p ZCByZWxpZCk7CitleHRlcm4gYm9vbCBHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhPaWQgcmVsaWQs IExpc3QgKipwdWJpZHMsIExpc3QgKipleGNlcHRfcHViaWRzKTsKIAogLyotLS0tLS0tLS0KLSAq IEV4cGVjdGVkIHZhbHVlcyBmb3IgcHViX3BhcnRvcHQgcGFyYW1ldGVyIG9mIEdldFB1YmxpY2F0 aW9uUmVsYXRpb25zKCksCisgKiBFeHBlY3RlZCB2YWx1ZXMgZm9yIHB1Yl9wYXJ0b3B0IHBhcmFt ZXRlciBvZgorICogR2V0UHVibGljYXRpb25JbmNsdWRlZFJlbGF0aW9ucygpLCBhbmQgR2V0UHVi bGljYXRpb25FeGNsdWRlZFJlbGF0aW9ucygpLAogICogd2hpY2ggYWxsb3dzIGNhbGxlcnMgdG8g c3BlY2lmeSB3aGljaCBwYXJ0aXRpb25zIG9mIHBhcnRpdGlvbmVkIHRhYmxlcwogICogbWVudGlv bmVkIGluIHRoZSBwdWJsaWNhdGlvbiB0aGV5IGV4cGVjdCB0byBzZWUuCiAgKgpAQCAtMTY4LDkg KzE3MCwxMiBAQCB0eXBlZGVmIGVudW0gUHVibGljYXRpb25QYXJ0T3B0CiAJUFVCTElDQVRJT05f UEFSVF9BTEwsCiB9IFB1YmxpY2F0aW9uUGFydE9wdDsKIAotZXh0ZXJuIExpc3QgKkdldFB1Ymxp Y2F0aW9uUmVsYXRpb25zKE9pZCBwdWJpZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0 KTsKK2V4dGVybiBMaXN0ICpHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVsYXRpb25zKE9pZCBwdWJp ZCwKKwkJCQkJCQkJCQkJIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCk7CitleHRlcm4g TGlzdCAqR2V0UHVibGljYXRpb25FeGNsdWRlZFJlbGF0aW9ucyhPaWQgcHViaWQsCisJCQkJCQkJ CQkJCSBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQpOwogZXh0ZXJuIExpc3QgKkdldEFs bFRhYmxlc1B1YmxpY2F0aW9ucyh2b2lkKTsKLWV4dGVybiBMaXN0ICpHZXRBbGxQdWJsaWNhdGlv blJlbGF0aW9ucyhjaGFyIHJlbGtpbmQsIGJvb2wgcHVidmlhcm9vdCk7CitleHRlcm4gTGlzdCAq R2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoT2lkIHB1YmlkLCBjaGFyIHJlbGtpbmQsIGJvb2wg cHVidmlhcm9vdCk7CiBleHRlcm4gTGlzdCAqR2V0UHVibGljYXRpb25TY2hlbWFzKE9pZCBwdWJp ZCk7CiBleHRlcm4gTGlzdCAqR2V0U2NoZW1hUHVibGljYXRpb25zKE9pZCBzY2hlbWFpZCk7CiBl eHRlcm4gTGlzdCAqR2V0U2NoZW1hUHVibGljYXRpb25SZWxhdGlvbnMoT2lkIHNjaGVtYWlkLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmgKaW5kZXggOTJjYzM2ZGZkZjYu LmU3ZDdmM2JhODVjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uX3JlbC5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmgK QEAgLTMxLDYgKzMxLDcgQEAgQ0FUQUxPRyhwZ19wdWJsaWNhdGlvbl9yZWwsNjEwNixQdWJsaWNh dGlvblJlbFJlbGF0aW9uSWQpCiAJT2lkCQkJb2lkOwkJCS8qIG9pZCAqLwogCU9pZAkJCXBycHVi aWQgQktJX0xPT0tVUChwZ19wdWJsaWNhdGlvbik7IC8qIE9pZCBvZiB0aGUgcHVibGljYXRpb24g Ki8KIAlPaWQJCQlwcnJlbGlkIEJLSV9MT09LVVAocGdfY2xhc3MpOwkvKiBPaWQgb2YgdGhlIHJl bGF0aW9uICovCisJYm9vbAkJcHJleGNlcHQgQktJX0RFRkFVTFQoZik7CS8qIGV4Y2x1ZGUgdGhl IHJlbGF0aW9uICovCiAKICNpZmRlZglDQVRBTE9HX1ZBUkxFTgkJCS8qIHZhcmlhYmxlLWxlbmd0 aCBmaWVsZHMgc3RhcnQgaGVyZSAqLwogCXBnX25vZGVfdHJlZSBwcnF1YWw7CQkvKiBxdWFsaWZp Y2F0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IGJjN2FkYmE0YTBmLi5jYTEwNTUw NTFmOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3Ny Yy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtNDI5OSw2ICs0Mjk5LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgUHVibGljYXRpb25UYWJsZQogCVJhbmdlVmFyICAgKnJlbGF0aW9uOwkJLyogcmVs YXRpb24gdG8gYmUgcHVibGlzaGVkICovCiAJTm9kZQkgICAqd2hlcmVDbGF1c2U7CS8qIHF1YWxp ZmljYXRpb25zICovCiAJTGlzdAkgICAqY29sdW1uczsJCS8qIExpc3Qgb2YgY29sdW1ucyBpbiBh IHB1YmxpY2F0aW9uIHRhYmxlICovCisJYm9vbAkJZXhjZXB0OwkJCS8qIGV4Y2x1ZGUgdGhlIHJl bGF0aW9uICovCiB9IFB1YmxpY2F0aW9uVGFibGU7CiAKIC8qCkBAIC00MzA3LDYgKzQzMDgsNyBA QCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvblRhYmxlCiB0eXBlZGVmIGVudW0gUHVibGljYXRp b25PYmpTcGVjVHlwZQogewogCVBVQkxJQ0FUSU9OT0JKX1RBQkxFLAkJLyogQSB0YWJsZSAqLwor CVBVQkxJQ0FUSU9OT0JKX0VYQ0VQVF9UQUJMRSwJLyogQSB0YWJsZSB0byBiZSBleGNsdWRlZCAq LwogCVBVQkxJQ0FUSU9OT0JKX1RBQkxFU19JTl9TQ0hFTUEsCS8qIEFsbCB0YWJsZXMgaW4gc2No ZW1hICovCiAJUFVCTElDQVRJT05PQkpfVEFCTEVTX0lOX0NVUl9TQ0hFTUEsCS8qIEFsbCB0YWJs ZXMgaW4gZmlyc3QgZWxlbWVudCBvZgogCQkJCQkJCQkJCQkgKiBzZWFyY2hfcGF0aCAqLwpAQCAt NDMzNSw2ICs0MzM3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25BbGxPYmpTcGVjCiB7 CiAJTm9kZVRhZwkJdHlwZTsKIAlQdWJsaWNhdGlvbkFsbE9ialR5cGUgcHVib2JqdHlwZTsJLyog dHlwZSBvZiB0aGlzIHB1YmxpY2F0aW9uIG9iamVjdCAqLworCUxpc3QJICAgKmV4Y2VwdF90YWJs ZXM7CS8qIExpc3Qgb2YgdGFibGVzIHRvIGJlIGV4Y2x1ZGVkICovCiAJUGFyc2VMb2MJbG9jYXRp b247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLwogfSBQdWJsaWNhdGlv bkFsbE9ialNwZWM7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVi bGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQK aW5kZXggZTcyZDEzMDg5NjcuLjMxYTNkNmY0NzFkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMjEzLDEzICsyMTMsNDIgQEAgTm90LW51bGwgY29uc3Ry YWludHM6CiAgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IGYgICAgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBub25lICAg ICAgICAgICAgICB8IGYKICgxIHJvdykKIAorU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJS T1InOworLS0gRXhjbHVkZSB0YWJsZXMgdXNpbmcgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxF ICh0YWJsZWxpc3QpCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhj ZXB0dGFibGUgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFICh0ZXN0cHViX3RibDEsIHRlc3Rw dWJfdGJsMik7CistLSBFeGNsdWRlIHRhYmxlcyB1c2luZyBGT1IgQUxMIFRBQkxFUyBFWENFUFQg KHRhYmxlbGlzdCkKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNl cHR0YWJsZTEgRk9SIEFMTCBUQUJMRVMgRVhDRVBUICh0ZXN0cHViX3RibDEpOworUkVTRVQgY2xp ZW50X21pbl9tZXNzYWdlczsKK1xkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxl CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBBbGwgc2VxdWVuY2VzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgR2VuZXJhdGVkIGNvbHVtbnMgfCBWaWEgcm9vdCAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IGYgICAgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBub25lICAg ICAgICAgICAgICB8IGYKK0V4Y2VwdCB0YWJsZXM6CisgICAgInB1YmxpYy50ZXN0cHViX3RibDEi CisgICAgInB1YmxpYy50ZXN0cHViX3RibDIiCisKK1xkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVz X2V4Y2VwdHRhYmxlMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZTEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIHNlcXVlbmNlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IEdlbmVyYXRlZCBjb2x1bW5zIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAg ICAgfCBmICAgICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgbm9uZSAgICAgICAgICAgICAgfCBmCitFeGNlcHQgdGFibGVzOgorICAgICJwdWJsaWMu dGVzdHB1Yl90YmwxIgorCiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMjsKLURST1AgUFVCTElDQVRJ T04gdGVzdHB1Yl9mb3JhbGx0YWJsZXMsIHRlc3RwdWJfZm9ydGFibGUsIHRlc3RwdWJfZm9yc2No ZW1hLCB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hOwotQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsMyAo YSBpbnQpOwotQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsM2EgKGIgdGV4dCkgSU5IRVJJVFMgKHRl c3RwdWJfdGJsMyk7CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzLCB0ZXN0 cHViX2ZvcnRhYmxlLCB0ZXN0cHViX2ZvcnNjaGVtYSwgdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYSwg dGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUsIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4 Y2VwdHRhYmxlMTsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9wYXJlbnQgKGEgaW50KTsKK0NS RUFURSBUQUJMRSB0ZXN0cHViX3RibF9jaGlsZCAoYiB0ZXh0KSBJTkhFUklUUyAodGVzdHB1Yl90 YmxfcGFyZW50KTsKIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKLUNSRUFURSBQ VUJMSUNBVElPTiB0ZXN0cHViMyBGT1IgVEFCTEUgdGVzdHB1Yl90YmwzOwotQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsMzsKK0NSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViMyBGT1IgVEFCTEUgdGVzdHB1Yl90YmxfcGFyZW50OworQ1JFQVRFIFBV QkxJQ0FUSU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsX3BhcmVudDsKKy0t IEV4Y2x1ZGUgcGFyZW50IHRhYmxlLCBvbWl0dGluZyBib3RoIG9mICdPTkxZJyBhbmQgJyonCitD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjUgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFICh0 ZXN0cHViX3RibF9wYXJlbnQpOworLS0gRVhDRVBUIHdpdGggYXN0ZXJpc2s6IGV4Y2x1ZGUgdGFi bGUgYW5kIGFsbCBkZXNjZW5kYW50cworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IEZPUiBB TEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90YmxfcGFyZW50ICopOworLS0gRVhDRVBU IHdpdGggT05MWTogZXhjbHVkZSB0YWJsZSBidXQgbm90IGRlc2NlbmRhbnRzCitDUkVBVEUgUFVC TElDQVRJT04gdGVzdHB1YjcgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChPTkxZIHRlc3Rw dWJfdGJsX3BhcmVudCk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1 YjMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIzCkBAIC0yMjcsOCArMjU2LDggQEAgUkVTRVQgY2xpZW50X21p bl9tZXNzYWdlczsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCiAgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IGYgICAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBub25lICAgICAgICAgICAgICB8IGYKIFRhYmxlczoKLSAgICAicHVibGlj LnRlc3RwdWJfdGJsMyIKLSAgICAicHVibGljLnRlc3RwdWJfdGJsM2EiCisgICAgInB1YmxpYy50 ZXN0cHViX3RibF9jaGlsZCIKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX3BhcmVudCIKIAogXGRS cCsgdGVzdHB1YjQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0CkBAIC0yMzYsMTAgKzI2NSwzNiBAQCBUYWJs ZXM6CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQogIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCBmICAgICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgbm9uZSAgICAgICAgICAgICAgfCBmCiBUYWJsZXM6Ci0gICAgInB1YmxpYy50ZXN0cHVi X3RibDMiCisgICAgInB1YmxpYy50ZXN0cHViX3RibF9wYXJlbnQiCisKK1xkUnArIHRlc3RwdWI1 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBBbGwgc2VxdWVuY2VzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgR2VuZXJhdGVkIGNvbHVtbnMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IGYgICAgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBub25lICAgICAgICAgICAgICB8 IGYKK0V4Y2VwdCB0YWJsZXM6CisgICAgInB1YmxpYy50ZXN0cHViX3RibF9jaGlsZCIKKyAgICAi cHVibGljLnRlc3RwdWJfdGJsX3BhcmVudCIKKworXGRScCsgdGVzdHB1YjYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWI2CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBzZXF1 ZW5jZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBHZW5lcmF0 ZWQgY29sdW1ucyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAgICAgIHwgZgorRXhjZXB0IHRh YmxlczoKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX2NoaWxkIgorICAgICJwdWJsaWMudGVzdHB1 Yl90YmxfcGFyZW50IgorCitcZFJwKyB0ZXN0cHViNworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjcKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIHNlcXVlbmNlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IEdlbmVyYXRlZCBjb2x1bW5zIHwg VmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQg ICAgICAgICAgfCBmICAgICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgbm9uZSAgICAgICAgICAgICAgfCBmCitFeGNlcHQgdGFibGVzOgorICAgICJw dWJsaWMudGVzdHB1Yl90YmxfcGFyZW50IgogCi1EUk9QIFRBQkxFIHRlc3RwdWJfdGJsMywgdGVz dHB1Yl90YmwzYTsKLURST1AgUFVCTElDQVRJT04gdGVzdHB1YjMsIHRlc3RwdWI0OworRFJPUCBU QUJMRSB0ZXN0cHViX3RibF9wYXJlbnQsIHRlc3RwdWJfdGJsX2NoaWxkOworRFJPUCBQVUJMSUNB VElPTiB0ZXN0cHViMywgdGVzdHB1YjQsIHRlc3RwdWI1LCB0ZXN0cHViNiwgdGVzdHB1Yjc7CiAt LS0gVGVzdHMgZm9yIHB1YmxpY2F0aW9ucyB3aXRoIFNFUVVFTkNFUwogQ1JFQVRFIFNFUVVFTkNF IHJlZ3Jlc3NfcHViX3NlcTA7CiBDUkVBVEUgU0VRVUVOQ0UgcHViX3Rlc3QucmVncmVzc19wdWJf c2VxMTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbCBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbAppbmRleCAwMDM5MGFlY2Q0Ny4u NjgxNzQyMjM1NmQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9u LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKQEAgLTEwNSwy MCArMTA1LDM5IEBAIFNFTEVDVCBwdWJuYW1lLCBwdWJhbGx0YWJsZXMgRlJPTSBwZ19wdWJsaWNh dGlvbiBXSEVSRSBwdWJuYW1lID0gJ3Rlc3RwdWJfZm9yYWxsCiBcZCsgdGVzdHB1Yl90YmwyCiBc ZFJwKyB0ZXN0cHViX2ZvcmFsbHRhYmxlcwogCitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdF UlJPUic7CistLSBFeGNsdWRlIHRhYmxlcyB1c2luZyBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFC TEUgKHRhYmxlbGlzdCkKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFsbHRhYmxlc19l eGNlcHR0YWJsZSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHRlc3RwdWJfdGJsMSwgdGVz dHB1Yl90YmwyKTsKKy0tIEV4Y2x1ZGUgdGFibGVzIHVzaW5nIEZPUiBBTEwgVEFCTEVTIEVYQ0VQ VCAodGFibGVsaXN0KQorQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4 Y2VwdHRhYmxlMSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgKHRlc3RwdWJfdGJsMSk7CitSRVNFVCBj bGllbnRfbWluX21lc3NhZ2VzOworCitcZFJwKyB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0 YWJsZQorXGRScCsgdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUxCisKIERST1AgVEFC TEUgdGVzdHB1Yl90YmwyOwotRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFsbHRhYmxlcywg dGVzdHB1Yl9mb3J0YWJsZSwgdGVzdHB1Yl9mb3JzY2hlbWEsIHRlc3RwdWJfZm9yX3RibF9zY2hl bWE7CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzLCB0ZXN0cHViX2ZvcnRh YmxlLCB0ZXN0cHViX2ZvcnNjaGVtYSwgdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYSwgdGVzdHB1Yl9m b3JhbGx0YWJsZXNfZXhjZXB0dGFibGUsIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxl MTsKIAotQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsMyAoYSBpbnQpOwotQ1JFQVRFIFRBQkxFIHRl c3RwdWJfdGJsM2EgKGIgdGV4dCkgSU5IRVJJVFMgKHRlc3RwdWJfdGJsMyk7CitDUkVBVEUgVEFC TEUgdGVzdHB1Yl90YmxfcGFyZW50IChhIGludCk7CitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymxf Y2hpbGQgKGIgdGV4dCkgSU5IRVJJVFMgKHRlc3RwdWJfdGJsX3BhcmVudCk7CiBTRVQgY2xpZW50 X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7Ci1DUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMgRk9S IFRBQkxFIHRlc3RwdWJfdGJsMzsKLUNSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNCBGT1IgVEFC TEUgT05MWSB0ZXN0cHViX3RibDM7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRB QkxFIHRlc3RwdWJfdGJsX3BhcmVudDsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNCBGT1Ig VEFCTEUgT05MWSB0ZXN0cHViX3RibF9wYXJlbnQ7CistLSBFeGNsdWRlIHBhcmVudCB0YWJsZSwg b21pdHRpbmcgYm90aCBvZiAnT05MWScgYW5kICcqJworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3Rw dWI1IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90YmxfcGFyZW50KTsKKy0t IEVYQ0VQVCB3aXRoIGFzdGVyaXNrOiBleGNsdWRlIHRhYmxlIGFuZCBhbGwgZGVzY2VuZGFudHMK K0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNiBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUg KHRlc3RwdWJfdGJsX3BhcmVudCAqKTsKKy0tIEVYQ0VQVCB3aXRoIE9OTFk6IGV4Y2x1ZGUgdGFi bGUgYnV0IG5vdCBkZXNjZW5kYW50cworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI3IEZPUiBB TEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAoT05MWSB0ZXN0cHViX3RibF9wYXJlbnQpOwogUkVTRVQg Y2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzCiBcZFJwKyB0ZXN0cHViNAorXGRS cCsgdGVzdHB1YjUKK1xkUnArIHRlc3RwdWI2CitcZFJwKyB0ZXN0cHViNwogCi1EUk9QIFRBQkxF IHRlc3RwdWJfdGJsMywgdGVzdHB1Yl90YmwzYTsKLURST1AgUFVCTElDQVRJT04gdGVzdHB1YjMs IHRlc3RwdWI0OworRFJPUCBUQUJMRSB0ZXN0cHViX3RibF9wYXJlbnQsIHRlc3RwdWJfdGJsX2No aWxkOworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViMywgdGVzdHB1YjQsIHRlc3RwdWI1LCB0ZXN0 cHViNiwgdGVzdHB1Yjc7CiAKIC0tLSBUZXN0cyBmb3IgcHVibGljYXRpb25zIHdpdGggU0VRVUVO Q0VTCiBDUkVBVEUgU0VRVUVOQ0UgcmVncmVzc19wdWJfc2VxMDsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9tZXNv bi5idWlsZAppbmRleCA4NWQxMGE4OTk5NC4uYjhlNWM1NGMzMTQgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v bWVzb24uYnVpbGQKQEAgLTQ2LDYgKzQ2LDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3QvMDM0X3Rl bXBvcmFsLnBsJywKICAgICAgICd0LzAzNV9jb25mbGljdHMucGwnLAogICAgICAgJ3QvMDM2X3Nl cXVlbmNlcy5wbCcsCisgICAgICAndC8wMzdfcmVwX2NoYW5nZXNfZXhjZXB0X3RhYmxlLnBsJywK ICAgICAgICd0LzEwMF9idWdzLnBsJywKICAgICBdLAogICB9LApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDM3X3JlcF9jaGFuZ2VzX2V4Y2VwdF90YWJsZS5wbCBiL3NyYy90 ZXN0L3N1YnNjcmlwdGlvbi90LzAzN19yZXBfY2hhbmdlc19leGNlcHRfdGFibGUucGwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJhNTNhYWU3ZmJlCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM3X3JlcF9jaGFuZ2VzX2V4Y2VwdF90 YWJsZS5wbApAQCAtMCwwICsxLDIxOSBAQAorCisjIENvcHlyaWdodCAoYykgMjAyMS0yMDI1LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIExvZ2ljYWwgcmVwbGljYXRp b24gdGVzdHMgZm9yIEVYQ0VQVCBUQUJMRSBwdWJsaWNhdGlvbnMKK3VzZSBzdHJpY3Q7Cit1c2Ug d2FybmluZ3M7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FM OjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIEluaXRpYWxpemUgcHVibGlzaGVy IG5vZGUKK215ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5l dygncHVibGlzaGVyJyk7Ciskbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9 PiAnbG9naWNhbCcpOworJG5vZGVfcHVibGlzaGVyLT5zdGFydDsKKworIyBJbml0aWFsaXplIHN1 YnNjcmliZXIgbm9kZQorbXkgJG5vZGVfc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXItPm5ldygnc3Vic2NyaWJlcicpOworJG5vZGVfc3Vic2NyaWJlci0+aW5pdChhbGxvd3Nf c3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKKworIyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBFWENFUFQgVEFC TEUgdGVzdCBjYXNlcyBmb3Igbm9ybWFsIHRhYmxlcworIyA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorIyBDcmVhdGUgc2NoZW1hcyBhbmQgdGFibGVzIG9uIHB1 Ymxpc2hlcgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJ Q1JFQVRFIFNDSEVNQSBzY2gxOworCUNSRUFURSBUQUJMRSBzY2gxLnRhYjEgQVMgU0VMRUNUIGdl bmVyYXRlX3NlcmllcygxLDEwKSBBUyBhOworKSk7CisKKyMgQ3JlYXRlIHNjaGVtYXMgYW5kIHRh YmxlcyBvbiBzdWJzY3JpYmVyCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCisJJ3Bvc3Rn cmVzJywgcXEoCisJQ1JFQVRFIFNDSEVNQSBzY2gxOworCUNSRUFURSBUQUJMRSBzY2gxLnRhYjEg KGEgaW50KTsKKykpOworCisjIFNldHVwIGxvZ2ljYWwgcmVwbGljYXRpb24KK215ICRwdWJsaXNo ZXJfY29ubnN0ciA9ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVz JzsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJM SUNBVElPTiB0YXBfcHViX3NjaGVtYSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHNjaDEu dGFiMSkiCispOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki Q1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViX3NjaGVtYSBDT05ORUNUSU9OICckcHVibGlzaGVy X2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHRhcF9wdWJfc2NoZW1hIgorKTsKKworIyBXYWl0IGZvciBp bml0aWFsIHRhYmxlIHN5bmMgdG8gZmluaXNoCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9z dWJzY3JpcHRpb25fc3luYygkbm9kZV9wdWJsaXNoZXIsCisJJ3RhcF9zdWJfc2NoZW1hJyk7CisK KyMgQ2hlY2sgdGhlIHRhYmxlIGRhdGEgZG9lcyBub3Qgc3luYyBmb3IgZXhjbHVkZWQgdGFibGUK K215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki U0VMRUNUIGNvdW50KCopLCBtaW4oYSksIG1heChhKSBGUk9NIHNjaDEudGFiMSIpOworaXMoJHJl c3VsdCwgcXEoMHx8KSwKKwknY2hlY2sgdGhlcmUgaXMgbm8gaW5pdGlhbCBkYXRhIGNvcGllZCBm b3IgdGhlIGV4Y2x1ZGVkIHRhYmxlJyk7CisKKyMgVmVyaWZ5IHRoYXQgZGF0YSBpbnNlcnRlZCB0 byB0aGUgZXhjbHVkZWQgdGFibGUgaXMgbm90IHJlcGxpY2F0ZWQuCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyBzY2gxLnRhYjEgVkFMVUVTKGdl bmVyYXRlX3NlcmllcygxMSwyMCkpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgndGFwX3N1Yl9zY2hlbWEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgY291bnQoKiksIG1pbihhKSwgbWF4KGEpIEZS T00gc2NoMS50YWIxIik7CitpcygkcmVzdWx0LCBxcSgwfHwpLCAnY2hlY2sgcmVwbGljYXRlZCBp bnNlcnRzIG9uIHN1YnNjcmliZXInKTsKKworIyBjbGVhbnVwCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBQVUJMSUNBVElPTiB0YXBfcHViX3NjaGVtYSIpOwor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFNVQlNDUklQVElP TiB0YXBfc3ViX3NjaGVtYSIpOworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisjIEVYQ0VQVCBUQUJMRSB0ZXN0IGNhc2VzIGZvciBwYXJ0aXRpb25lZCB0 YWJsZXMKKyMgQ2hlY2sgYmVoYXZpb3Igb2YgRVhDRVBUIFRBQkxFIHdpdGggcHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3Qgb24gYQorIyBwYXJ0aXRpb25lZCB0YWJsZSBhbmQgaXRzIHBhcnRpdGlv bnMuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFNl dHVwIHBhcnRpdGlvbmVkIHRhYmxlIGFuZCBwYXJ0aXRpb25zIG9uIHRoZSBwdWJsaXNoZXIgdGhh dCBtYXAgdG8gbm9ybWFsCisjIHRhYmxlcyBvbiB0aGUgc3Vic2NyaWJlcgorJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHNjaDEudDEo YSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRShhKTsKKwlDUkVBVEUgVEFCTEUgc2NoMS5wYXJ0MSBQ QVJUSVRJT04gT0Ygc2NoMS50MSBGT1IgVkFMVUVTIEZST00gKDApIFRPICg1KTsKKwlDUkVBVEUg VEFCTEUgc2NoMS5wYXJ0MiBQQVJUSVRJT04gT0Ygc2NoMS50MSBGT1IgVkFMVUVTIEZST00gKDYp IFRPICgxMCk7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jl cycsIHFxKAorCUNSRUFURSBUQUJMRSBzY2gxLnQxKGEgaW50KTsKKwlDUkVBVEUgVEFCTEUgc2No MS5wYXJ0MShhIGludCk7CisJQ1JFQVRFIFRBQkxFIHNjaDEucGFydDIoYSBpbnQpOworKSk7CisK KyMgRVhDRVBUIFRBQkxFIChzY2gxLnBhcnQxKSB3aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290ID0gZmFsc2UKKyMgRXhjbHVkaW5nIGEgcGFydGl0aW9uIHdoaWxlIHB1Ymxpc2hfdmlhX3Bh cnRpdGlvbl9yb290ID0gZmFsc2UgcHJldmVudHMKKyMgcmVwbGljYXRpb24gb2Ygcm93cyBpbnNl cnRlZCBpbnRvIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSBmb3IgdGhhdCBwYXJ0aWN1bGFyCisjIHBh cnRpdGlvbi4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxKAor CUNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnQgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRB QkxFIChzY2gxLnBhcnQxKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNl KTsKKwlJTlNFUlQgSU5UTyBzY2gxLnQxIFZBTFVFUyAoMSksICg2KTsKKykpOworJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFw X3N1Yl9wYXJ0IENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gdGFw X3B1Yl9wYXJ0IgorKTsKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9z eW5jKCRub2RlX3B1Ymxpc2hlciwgJ3RhcF9zdWJfcGFydCcpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDIpLCAo Nyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3RhcF9zdWJfcGFydCcp OworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgKiBGUk9NIHNjaDEudDEiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9u IHBhcnRpdGlvbmVkIHRhYmxlJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS5wYXJ0MSIpOworaXMoJHJlc3Vs dCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gZXhjbHVkZWQgcGFydGl0aW9uJyk7CisKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00g c2NoMS5wYXJ0MiIpOworaXMoICRyZXN1bHQsIHFxKDYKKzcpLCAnY2hlY2sgcm93cyBvbiBvdGhl ciBwYXJ0aXRpb24nKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlRSVU5DQVRFIHNjaDEudDEiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn dGFwX3N1Yl9wYXJ0Jyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgU1VCU0NSSVBUSU9OIHRhcF9zdWJfcGFydCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0OyIpOworCisj IEVYQ0VQVCBUQUJMRSAoc2NoMS50MSkgd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9 IGZhbHNlCisjIEV4Y2x1ZGluZyB0aGUgcGFydGl0aW9uZWQgdGFibGUgc3RpbGwgYWxsb3dzIHJv d3MgaW5zZXJ0ZWQgaW50byB0aGUKKyMgcGFydGl0aW9uZWQgdGFibGUgdG8gYmUgcmVwbGljYXRl ZCB2aWEgaXRzIHBhcnRpdGlvbnMuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9z dGdyZXMnLCBxcSgKKwlDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0IEZPUiBBTEwgVEFC TEVTIEVYQ0VQVCBUQUJMRSAoc2NoMS50MSkgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QgPSBmYWxzZSk7CisJSU5TRVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDEpLCAoNik7CispKTsK KyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgU1VCU0NS SVBUSU9OIHRhcF9zdWJfcGFydCBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJ Q0FUSU9OIHRhcF9wdWJfcGFydCIKKyk7Ciskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJz Y3JpcHRpb25fc3luYygkbm9kZV9wdWJsaXNoZXIsICd0YXBfc3ViX3BhcnQnKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHNjaDEudDEgVkFM VUVTICgyKSwgKDcpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBf c3ViX3BhcnQnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnQxIik7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hl Y2sgcm93cyBvbiBwYXJ0aXRpb25lZCB0YWJsZScpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDEiKTsK K2lzKCAkcmVzdWx0LCBxcSgxCisyKSwgJ2NoZWNrIHJvd3Mgb24gZmlyc3QgcGFydGl0aW9uJyk7 CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCAqIEZST00gc2NoMS5wYXJ0MiIpOworaXMoICRyZXN1bHQsIHFxKDYKKzcpLCAnY2hlY2sg cm93cyBvbiBzZWNvbmQgcGFydGl0aW9uJyk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJUUlVOQ0FURSBzY2gxLnQxIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ3RhcF9zdWJfcGFydCcpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFNVQlNDUklQVElPTiB0YXBfc3ViX3BhcnQiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFBVQkxJQ0FUSU9OIHRhcF9wdWJf cGFydDsiKTsKKworIyBFWENFUFQgVEFCTEUgKHNjaDEudDEpIHdpdGggcHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QgPSB0cnVlCisjIFdoZW4gdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGlzIGV4Y2x1 ZGVkIGFuZCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBpcyB0cnVlLAorIyBubyByb3dzIGZy b20gdGhlIHRhYmxlIG9yIGl0cyBwYXJ0aXRpb25zIGFyZSByZXBsaWNhdGVkLgorJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9O IHRhcF9wdWJfcGFydCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHNjaDEudDEpIFdJVEgg KHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKwlJTlNFUlQgSU5UTyBzY2gxLnQxIFZBTFVF UyAoMSksICg2KTsKKykpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9wYXJ0IENPTk5FQ1RJT04gJyRwdWJsaXNo ZXJfY29ubnN0cicgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0IgorKTsKKyRub2RlX3N1YnNjcmli ZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3B1Ymxpc2hlciwgJ3RhcF9zdWJf cGFydCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJU IElOVE8gc2NoMS50MSBWQUxVRVMgKDIpLCAoNyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ3RhcF9zdWJfcGFydCcpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEudDEiKTsKK2lzKCRy ZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9uIHBhcnRpdGlvbmVkIHRhYmxlJyk7CisKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZS T00gc2NoMS5wYXJ0MSIpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gZmlyc3Qg cGFydGl0aW9uJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS5wYXJ0MiIpOworaXMoJHJlc3VsdCwgcXEoKSwg J2NoZWNrIHJvd3Mgb24gc2Vjb25kIHBhcnRpdGlvbicpOworCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgc2NoMS50MSIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBfc3ViX3BhcnQnKTsKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9wYXJ0Iik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBQVUJMSUNBVElPTiB0 YXBfcHViX3BhcnQ7Iik7CisKKyMgRVhDRVBUIFRBQkxFIChzY2gxLnBhcnQxKSB3aXRoIHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQorIyBXaGVuIGEgcGFydGl0aW9uIGlzIGV4Y2x1 ZGVkIGJ1dCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBpcyB0cnVlLAorIyByb3dzIHB1Ymxp c2hlZCB0aHJvdWdoIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSBjYW4gc3RpbGwgYmUgcmVwbGljYXRl ZC4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxKAorCUNSRUFU RSBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnQgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChz Y2gxLnBhcnQxKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CisJSU5TRVJUIElO VE8gc2NoMS50MSBWQUxVRVMgKDEpLCAoNikKKykpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9wYXJ0IENPTk5F Q1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0IgorKTsK KyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3B1Ymxp c2hlciwgJ3RhcF9zdWJfcGFydCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiSU5TRVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDIpLCAoNyk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3RhcF9zdWJfcGFydCcpOworCiskcmVzdWx0ID0K KyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9N IHNjaDEudDEgT1JERVIgQlkgYSIpOworaXMoICRyZXN1bHQsIHFxKDEKKzIKKzYKKzcpLCAnY2hl Y2sgcm93cyBvbiBwYXJ0aXRpb25lZCB0YWJsZScpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDEiKTsK K2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9uIGV4Y2x1ZGVkIHBhcnRpdGlvbicpOwor CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgKiBGUk9NIHNjaDEucGFydDIiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9u IG90aGVyIHBhcnRpdGlvbicpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zdG9wKCdmYXN0Jyk7Cisk bm9kZV9wdWJsaXNoZXItPnN0b3AoJ2Zhc3QnKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM0 LjEKCg== --000000000000be23d60646387e39--