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 1w2qpt-000fJX-1H for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 13:21:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2qps-00Asqq-0b for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 13:21:20 +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 1w2qpr-00Asqg-2X for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2026 13:21:19 +0000 Received: from mail-yx1-xb12b.google.com ([2607:f8b0:4864:20::b12b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2qpo-00000000w3X-3Q0y for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2026 13:21:19 +0000 Received: by mail-yx1-xb12b.google.com with SMTP id 956f58d0204a3-64c9cabfe5dso1225791d50.0 for ; Wed, 18 Mar 2026 06:21:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773840075; cv=none; d=google.com; s=arc-20240605; b=JnBJ/GYl3f/D4HjT3yGiFBsr8GjaClaiqKVOHRWuZzCY9mjMQDCYFGjRUOcexl51E0 nt8MCutOCkEATwII/DIS766LpiwarioBqfQP3ZW0GI915KoFQex82eW6l95p8wd7sKVw xsU9CYNFql1QVp3QMi2U9klWq8ZwV/0Dx4vHQFDDu29yARHahVA5Iy5P1QpbUwtkppVN URkJm3zan5QNcetl0mTlosEIOoE7fGSAn82c07wDEKZS6CPt1oF2y58AwpfSGz6HQIiJ EqC/wSnhw/S6u02XnbEaLWL+tZ5aamin6w9KS1YaMNol9ctcNygFhFZ/zq4w0+qW6ADy 02eA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=4BhJdxFOAVrQo6jmIPdkz63VNgltIj8VAmk1sIoOfGo=; fh=TzDDCujE/KHUj5pGBFSMVrlQX6oNeGBuh5se+kNCa6c=; b=DLuUGbX9ktAcYoZkzpdwN3jsWL13SYfvxhwauzsFZLhWrezKPqr/mw6Plv4+9WQktd PBeSdtnCZHHidcvohuj66OKoGy74Ma7/jsMS7hKMQmE/JQN4IqfR8wHRcwlzjcuAZs+p gtoTKaAvSi74cKppEH5pQjFTMIFnrBecUeB+OintUCLzVq6xDDhvj/mynACd6zIAFoLY KfYmzu7HViINlHuAbaWb8qkeBHOBXD+l3IBTJy62RaRMN6huBwRZVfcKqpW1ppZWizw0 Jye10KVdQ9z9QVpmVb4yfuG8JE08PaQU0gNg1QBM+d08Q755//yLsQGsYtRilcrbu2fI CYcw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773840075; x=1774444875; 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=4BhJdxFOAVrQo6jmIPdkz63VNgltIj8VAmk1sIoOfGo=; b=MUzVmHpgS2uPPycsYrRA+Ej6XchHAxsJHQiRyn67q/g7SgDA9Vmrd2pHnDpeNr7G86 j/v5Xit3giHh2NLNyjWlUzOoqbbuWqh2HJTICLzAVcNmDOAgARasgUnnfPaGo2uEJjac +n0qVsP2F7ayq+hVCeKp5fly1T6xqJS7GN3x/i+s8ocomBKhfdSEQI1tevhFmiVvRONs 1UjxFLiPzpyvbInMzReoP/UH+iZPoewjHaPDWgOKd4UhdlK23j7Q/l84ksrAFKi8z0Q9 WPEmQl+T9b2r6vV2YLXNRi7Ld5NdXkH6yEox/bZ1FkFLMvgIzH6D5HUXUbFe+naSyfqv Csmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773840075; x=1774444875; 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=4BhJdxFOAVrQo6jmIPdkz63VNgltIj8VAmk1sIoOfGo=; b=Dt6CHEycvvLCPG2CVaoi0mNV1CbQc9GDkNOVA+oXJ6ELcUKOYk0b7xdXgoxoH/zen8 KmPV6kzLsdb9kLk44oxxqKH5I08ZEJbn1UILbN9eBop6ZNax1iVy9c99SedpwTZJUxD4 NFiUmT8iWebJh4vccTDGypYX1eudpMJl6sCtGBc/FJBi68UoVNn8qtTIj3HhfK2W5ex1 nZdd/3IoyngKKWcdVEyqzN3JVVGPRUXf/P6EVtk+yJqYuOEstT3Yl9+Xe47aaFrcAtsS BB+/odEKMMjGR6IIjsoLKY1yUh3601Zh0J6gFUohEdFfXRN8w37eSWi432P7iE4QcwyW oB5Q== X-Forwarded-Encrypted: i=1; AJvYcCUrV7bAy2xknpeMJC2B4p/iNqVApZP8cMN8PA6WTSAeMr7nH6b9tNrZxKo6dr8pQkZPWCKuI9D4E3q3RBGo@lists.postgresql.org X-Gm-Message-State: AOJu0Yzm3zTP5Ggf8ONUFOwoi69YljVw3RoVvQsmuBhni4YpY885Jlel 1LELv0ciWsi9h35xEO+qJppt26wOJfbGJ0k4lYVM05Vh72MW+uetHgRe8TX5GuYuOhDQL6nnSyt Q4NMXibMELcQr650KJF4BsIQZIlr7dKQ= X-Gm-Gg: ATEYQzwv042PtF2ZSNh+zfUR12JT+5s6EMmul0IDRWp389MkUae2uKk3eUqlzIjORSX zx9UrxKryjAJqRPDKwepFnxTTMU17lX05xlIteeiQQiEH4VBWOTyqSsMZqctE5olZsjURDj+LJk jqOS3FmkxrbvJ4lzfefcY/1/c9q5F8mnXOCK47IDuk32BQ+3ypLV4oUvsuotrFq0OiVE6W6NTJq V25wEiNW7xFk3ar0/p++LgfBkzzZ0Qf6sR9LVx9x5eKfD71qI9vATSXzYALf6vQgHZsgn8L6zSG dKC9cCshrw== X-Received: by 2002:a05:690e:1249:b0:64e:7311:eb85 with SMTP id 956f58d0204a3-64e88ae2a0bmr6349375d50.24.1773840074873; Wed, 18 Mar 2026 06:21:14 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: vignesh C Date: Wed, 18 Mar 2026 18:51:02 +0530 X-Gm-Features: AaiRm50Lw6dEwhSiKKchkyvtZzYQO2ftheVUU0-e0iyFuAgIjFDxxGyvuxuEST0 Message-ID: Subject: Re: Skipping schema changes in publication To: Peter Smith Cc: shveta malik , Amit Kapila , Masahiko Sawada , "Hayato Kuroda (Fujitsu)" , Shlok Kyal , Nisha Moond , Ashutosh Sharma , "David G. Johnston" , Dilip Kumar , "Zhijie Hou (Fujitsu)" , YeXiu <1518981153@qq.com>, Ian Lawrence Barwick , Bharath Rupireddy , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000008d6a4c064d4c5375" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008d6a4c064d4c5375 Content-Type: text/plain; charset="UTF-8" On Wed, 18 Mar 2026 at 12:11, Peter Smith wrote: > > Hi Vignesh. > > Some review comments for patch v65-0001. > > ====== > doc/src/sgml/ref/alter_publication.sgml > > 1. > It seems that SET ALL TABLES is not supported if the publication > already has FOR TABLE. > > e.g > alter publication pub1 set all tables; > ERROR: publication "pub1" does not support ALL TABLES operations > DETAIL: This operation requires the publication to be defined as FOR > ALL TABLES/SEQUENCES or to be empty. > > e.g. > alter publication pub2 set table t1; > ERROR: publication "pub2" is defined as FOR ALL TABLES > DETAIL: Tables or sequences cannot be added to or dropped from FOR > ALL TABLES publications. > > I am not going to debate what rules are right or wrong. (Some rules do > seem a bit ad-hoc to me, but maybe they are just erring on the safety > side). But my point is that the documentation does not seem to say > anything much about what the rules are > > e.g. it says "Adding/Setting any schema when the publication also > publishes a table with a column list, and vice versa is not > supported.", but OTOH it says nothing about what is > supported/unsupported for SET ALL TABLES. Amit has already replied to this at [1]. > ====== > src/backend/catalog/pg_publication.c > > 2. > +/* > + * Returns true if the publication has explicitly included relation (i.e., > + * not marked as EXCEPT). > + */ > +bool > +is_table_publication(Oid pubid) > > To me, an "explicitly included relation" is like when you say "FOR > TABLE t1", where the "t1" is explicitly named. > > So it's not very clear whether you consider "FOR ALL TABLES" or a > "FOR TABLES IN SCHEMA" publication explicitly includes tables or not? > > The function comment needs to be clearer. Amit has already replied to this at [1]. > ~~~ > > publication_add_relation: > > 3. > + /* > + * Determine whether EXCEPT tables require explicit relcache invalidation. > + * > + * For CREATE PUBLICATION with EXCEPT tables, invalidation is not needed, > + * since it is handled when marking the publication as ALL TABLES. > + * > + * For ALTER PUBLICATION, invalidation is needed only when adding an EXCEPT > + * table to a publication already marked as ALL TABLES. For publications > + * that were originally empty or defined as ALL SEQUENCES and are being > + * converted to ALL TABLES, invalidation is skipped here, as it is handled > + * when marking the publication as ALL TABLES. > + */ > + inval_except_table = (stmt != NULL) && > + (stmt->for_all_tables == pub->alltables); > > 3a. > Why is this code done at the top of the function? Can you move it to > be adjacent to where it is getting used? Modified > ~ > > 3b. > I think 'alter_stmt' or 'alter_pub_stmt' might be a more informative > name here, instead of the generic 'stmt' Modified > ====== > src/backend/commands/publicationcmds.c > > 4. > - TransformPubWhereClauses(rels, queryString, pubform->pubviaroot); > + if (isexcept) > + oldrelids = GetExcludedPublicationTables(pubid, > + PUBLICATION_PART_ROOT); > + else > + { > + oldrelids = GetIncludedPublicationRelations(pubid, > + PUBLICATION_PART_ROOT); > > I felt there were some subtle things that the logic is using here: > > e.g. > It seems that because this function is called... > And because it is SET .... > And because it is SET ALL TABLES ... > Then, the tables can only be those in the EXCEPT TABLE list > > Maybe more comments about 'isexcept', and maybe an Assert(oldrelids != > NIL); could help here (??) Updated comments > ~~~ > > AlterPublicationAllFlags: > > 5. > + bool nulls[Natts_pg_publication]; > + bool replaces[Natts_pg_publication]; > + Datum values[Natts_pg_publication]; > + bool dirty = false; > + > + if (!stmt->for_all_tables && !stmt->for_all_sequences) > + return; > + > + pubform = (Form_pg_publication) GETSTRUCT(tup); > + > + memset(values, 0, sizeof(values)); > + memset(nulls, false, sizeof(nulls)); > + memset(replaces, false, sizeof(replaces)); > > AFAIK, these memsets are not needed if you just say "= {0}" where > those vars are declared. modified > AlterPublication: > > 6. > + relations = list_concat(relations, exceptrelations); > AlterPublicationTables(stmt, tup, relations, pstate->p_sourcetext, > schemaidlist != NIL); > > I did not quite understand this list_concat. > > Is this somehow asserting that `relations` must be empty when there > were `exceptrelations` and vice versa, because other combinations are > not supported by ALTER -- e.g. is this just a trick to so you can pass > the same parameter to AlterPublicationTables? This seems related to > the 'isexecpt' AlterPublicationTables function, which was also quite > subtle. > > Bottom line is, I'm unsure what the logic is here, but it appears > overly tricky to me. Would more comments help? Amit has already replied to this at [1]. > ====== > src/backend/parser/gram.y > > 7. > + * ALL TABLES [ EXCEPT TABLE ( table_name [, ...] ) ] > > The CREATE/ALTER docs synopsis says "[ ONLY ] table_name [ * ]" which > is different from this comment. So are ONLY and * handled properly or > not? It is handled, Is there any issue with the code? It is documented that way to keep it consistent with CreatePublicationStmt and ALTER PUBLICATION ADD/DROP/SET pub_obj. > ====== > src/include/nodes/parsenodes.h > > 8. > + bool for_all_tables; /* True if SET ALL TABLES is specified */ > + bool for_all_sequences; /* True if SET ALL SEQUENCES is specified */ > > Maybe these comments do not need to mention the keyword "SET". > > That way, in future if/when ADD/DROP get implemented, then this code > won't need to churn again. Modified The attached v66 version patch has the changes for the same. The comments from [2] have also been addressed in the attached patch. [1] - https://www.postgresql.org/message-id/CAA4eK1LCh7iCy2raNRrfVaS0LJaHxYokCUaNVue-qLfR%3DiG1PA%40mail.gmail.com [2] - https://www.postgresql.org/message-id/CAJpy0uCMnF25JNgx1vnQMV3FQoiiqdOJYwnCqYcOZ-g6B8%2BfWA%40mail.gmail.com Regards, Vignesh --0000000000008d6a4c064d4c5375 Content-Type: application/octet-stream; name="v66-0001-Add-support-for-EXCEPT-TABLE-in-ALTER-PUBLICATIO.patch" Content-Disposition: attachment; filename="v66-0001-Add-support-for-EXCEPT-TABLE-in-ALTER-PUBLICATIO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmw2ijjk0 RnJvbSAwOTkxZWQwYjNiOTk0NGNlOTU4YjYyMGNlMGE1MzFmYmM0YmNmMDU0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFdlZCwgNCBNYXIgMjAyNiAxNjoyODozMiArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjY2XSBBZGQg c3VwcG9ydCBmb3IgRVhDRVBUIFRBQkxFIGluIEFMVEVSIFBVQkxJQ0FUSU9OLgoKRm9sbG93aW5n IGNvbW1pdCBmZDM2NjA2NWUwLCB3aGljaCBhZGRlZCBFWENFUFQgVEFCTEUgc3VwcG9ydCB0bwpD UkVBVEUgUFVCTElDQVRJT04sIHRoaXMgY29tbWl0IGV4dGVuZHMgQUxURVIgUFVCTElDQVRJT04g dG8gYWxsb3cKbW9kaWZ5aW5nIHRoZSBleGNsdXNpb24gbGlzdC4KCk5ldyBTeW50YXg6CkFMVEVS IFBVQkxJQ0FUSU9OIG5hbWUgU0VUICBwdWJsaWNhdGlvbl9hbGxfb2JqZWN0IFssIC4uLiBdCgp3 aGVyZSBwdWJsaWNhdGlvbl9hbGxfb2JqZWN0IGlzIG9uZSBvZjoKQUxMIFRBQkxFUyBbIEVYQ0VQ VCBUQUJMRSAoIGV4Y2VwdF90YWJsZV9vYmplY3QgWywgLi4uIF0gKSBdCkFMTCBTRVFVRU5DRVMK ClRoZSBTRVQgQUxMIFRBQkxFUyBjbGF1c2UgdXBkYXRlcyBwZ19wdWJsaWNhdGlvbi5wdWJhbGx0 YWJsZXMgdG8gdHJ1ZS4KSWYgdGhlIEVYQ0VQVCBjbGF1c2UgaXMgcHJvdmlkZWQsIHRoZSBleGlz dGluZyBleGNsdXNpb24gbGlzdCBpbgpwZ19wdWJsaWNhdGlvbl9yZWwgaXMgcmVwbGFjZWQgd2l0 aCB0aGUgc3BlY2lmaWVkIHJlbGF0aW9ucy4gSWYgdGhlCkVYQ0VQVCBjbGF1c2UgaXMgb21pdHRl ZCwgYW55IGV4aXN0aW5nIGV4Y2x1c2lvbnMgZm9yIHRoZSBwdWJsaWNhdGlvbgphcmUgY2xlYXJl ZC4gU2ltaWxhcmx5LCBTRVQgQUxMIFNFUVVFTkNFUyB1cGRhdGVzCnBnX3B1YmxpY2F0aW9uLnB1 YmFsbHNlcXVlbmNlcyB0byB0cnVlLgoKTm90ZSB0aGF0IGJlY2F1c2UgdGhpcyBpcyBhIFNFVCBj b21tYW5kLCBzcGVjaWZ5aW5nIG9ubHkgb25lIG9iamVjdAp0eXBlIChlLmcuLCBTRVQgQUxMIFNF UVVFTkNFUykgd2lsbCByZXNldCB0aGUgb3RoZXIgdW5zcGVjaWZpZWQgZmxhZ3MKKGUuZy4sIHNl dHRpbmcgcHViYWxsdGFibGVzIHRvIGZhbHNlKS4KCkNvbnNpc3RlbnQgd2l0aCBDUkVBVEUgUFVC TElDQVRJT04sIG9ubHkgcm9vdCBwYXJ0aXRpb25lZCB0YWJsZXMgb3IKc3RhbmRhcmQgdGFibGVz IGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlIEVYQ0VQVCBsaXN0LiBTcGVjaWZ5aW5nIGEKcGFydGl0 aW9uIGNoaWxkIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yLgoKQXV0aG9yOiB2aWduZXNoIEMgPHZp Z25lc2gyMUBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBzaHZldGEgbWFsaWsgPHNodmV0YS5tYWxp a0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBBbWl0IEthcGlsYSA8YW1pdC5rYXBpbGExNkBnbWFp bC5jb20+ClJldmlld2VkLWJ5OiBQZXRlciBTbWl0aCA8c21pdGhwYjIyNTBAZ21haWwuY29tPgpS ZXZpZXdlZC1ieTogTmlzaGEgTW9vbmQgPG5pc2hhLm1vb25kNDEyQGdtYWlsLmNvbT4KRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUxEYU5tMz1KcnVjamhpaXdzWVF3NS1QR3RCSEZP TmE2RjdoaFdDWE1zR3ZoPXRhbUFAbWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvcmVm L2FsdGVyX3B1YmxpY2F0aW9uLnNnbWwgICB8ICA3OSArKysrKysrKysrKystLS0KIHNyYy9iYWNr ZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyAgICAgIHwgIDY2ICsrKysrKysrKysrLQogc3Jj L2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgICAgfCAxMTYgKysrKysrKysrKysr KysrKysrKystLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgfCAg IDMgKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAgICAgICAgIHwgIDIzICsr KysrCiBzcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMgICAgICAgICAgICB8ICAxMyArKy0K IHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCAgICAgIHwgICA0ICstCiBzcmMv aW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgICAgICB8ICAgMiArCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCB8ICA5MCArKysrKysrKysrKysrKysrLQog c3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsICAgICAgfCAgNTQgKysrKysrKysr LQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM3X2V4Y2VwdC5wbCAgICAgfCAgMzYgKysrKysr LQogMTEgZmlsZXMgY2hhbmdlZCwgNDQ5IGluc2VydGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfcHVibGljYXRpb24uc2dtbCBiL2Rv Yy9zcmMvc2dtbC9yZWYvYWx0ZXJfcHVibGljYXRpb24uc2dtbAppbmRleCAwMjg3NzBmMjE0OS4u MDMyODYxNTkzMWIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfcHVibGljYXRp b24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3B1YmxpY2F0aW9uLnNnbWwKQEAg LTIyLDggKzIyLDggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgPHJlZnN5bm9wc2lzZGl2 PgogPHN5bm9wc2lzPgogQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBBREQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPnB1YmxpY2F0aW9uX29iamVjdDwvcmVwbGFjZWFibGU+IFssIC4uLl0KLUFMVEVSIFBVQkxJ Q0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4g U0VUIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNhdGlvbl9vYmplY3Q8L3Jl cGxhY2VhYmxlPiBbLCAuLi5dCiBBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IERST1AgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPnB1YmxpY2F0aW9uX2Ryb3Bfb2JqZWN0PC9yZXBsYWNlYWJsZT4gWywgLi4uXQor QUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3Jl cGxhY2VhYmxlPiBTRVQgeyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVibGljYXRp b25fb2JqZWN0PC9yZXBsYWNlYWJsZT4gWywgLi4uXSB8IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5wdWJsaWNhdGlvbl9hbGxfb2JqZWN0PC9yZXBsYWNlYWJsZT4gWywgLi4uIF0gfQog QUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3Jl cGxhY2VhYmxlPiBTRVQgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVibGljYXRp b25fcGFyYW1ldGVyPC9yZXBsYWNlYWJsZT4gWz0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPnZhbHVlPC9yZXBsYWNlYWJsZT5dIFssIC4uLiBdICkKIEFMVEVSIFBVQkxJQ0FUSU9OIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gT1dORVIgVE8g eyA8cmVwbGFjZWFibGU+bmV3X293bmVyPC9yZXBsYWNlYWJsZT4gfCBDVVJSRU5UX1JPTEUgfCBD VVJSRU5UX1VTRVIgfCBTRVNTSU9OX1VTRVIgfQogQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBSRU5BTUUgVE8gPHJlcGxh Y2VhYmxlPm5ld19uYW1lPC9yZXBsYWNlYWJsZT4KQEAgLTMzLDYgKzMzLDExIEBAIEFMVEVSIFBV QkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJs ZT4gUkVOQU1FIFRPIDxyCiAgICAgVEFCTEUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PnRhYmxlX2FuZF9jb2x1bW5zPC9yZXBsYWNlYWJsZT4gWywgLi4uIF0KICAgICBUQUJMRVMgSU4g U0NIRU1BIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNjaGVtYV9uYW1lPC9yZXBs YWNlYWJsZT4gfCBDVVJSRU5UX1NDSEVNQSB9IFssIC4uLiBdCiAKKzxwaHJhc2U+YW5kIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNhdGlvbl9hbGxfb2JqZWN0PC9yZXBsYWNl YWJsZT4gaXMgb25lIG9mOjwvcGhyYXNlPgorCisgICAgQUxMIFRBQkxFUyBbIEVYQ0VQVCBUQUJM RSAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leGNlcHRfdGFibGVfb2JqZWN0PC9y ZXBsYWNlYWJsZT4gWywgLi4uIF0gKSBdCisgICAgQUxMIFNFUVVFTkNFUworCiA8cGhyYXNlPmFu ZCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVibGljYXRpb25fZHJvcF9vYmplY3Q8 L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+CiAKICAgICBUQUJMRSBbIE9OTFkgXSA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsg KiBdIFssIC4uLiBdCkBAIC00MSw2ICs0NiwxMCBAQCBBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IFJFTkFNRSBUTyA8cgog PHBocmFzZT5hbmQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX2FuZF9jb2x1 bW5zPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+CiAKICAgICBbIE9OTFkgXSA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKiBdIFsgKCA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBb LCAuLi4gXSApIF0gWyBXSEVSRSAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leHBy ZXNzaW9uPC9yZXBsYWNlYWJsZT4gKSBdCisKKzxwaHJhc2U+YW5kIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5leGNlcHRfdGFibGVfb2JqZWN0PC9yZXBsYWNlYWJsZT4gaXM6PC9waHJh c2U+CisKKyAgICBbIE9OTFkgXSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVf bmFtZTwvcmVwbGFjZWFibGU+IFsgKiBdCiA8L3N5bm9wc2lzPgogIDwvcmVmc3lub3BzaXNkaXY+ CiAKQEAgLTUzLDE4ICs2Miw0NiBAQCBBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IFJFTkFNRSBUTyA8cgogICA8L3BhcmE+ CiAKICAgPHBhcmE+Ci0gICBUaGUgZmlyc3QgdGhyZWUgdmFyaWFudHMgY2hhbmdlIHdoaWNoIHRh Ymxlcy9zY2hlbWFzIGFyZSBwYXJ0IG9mIHRoZQotICAgcHVibGljYXRpb24uICBUaGUgPGxpdGVy YWw+U0VUPC9saXRlcmFsPiBjbGF1c2Ugd2lsbCByZXBsYWNlIHRoZSBsaXN0IG9mCi0gICB0YWJs ZXMvc2NoZW1hcyBpbiB0aGUgcHVibGljYXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGxpc3Q7IHRo ZSBleGlzdGluZwotICAgdGFibGVzL3NjaGVtYXMgdGhhdCB3ZXJlIHByZXNlbnQgaW4gdGhlIHB1 YmxpY2F0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gIFRoZQotICAgPGxpdGVyYWw+QUREPC9saXRlcmFs PiBhbmQgPGxpdGVyYWw+RFJPUDwvbGl0ZXJhbD4gY2xhdXNlcyB3aWxsIGFkZCBhbmQKLSAgIHJl bW92ZSBvbmUgb3IgbW9yZSB0YWJsZXMvc2NoZW1hcyBmcm9tIHRoZSBwdWJsaWNhdGlvbi4gIE5v dGUgdGhhdCBhZGRpbmcKLSAgIHRhYmxlcy9zY2hlbWFzIHRvIGEgcHVibGljYXRpb24gdGhhdCBp cyBhbHJlYWR5IHN1YnNjcmliZWQgdG8gd2lsbCByZXF1aXJlIGFuCisgICBUaGUgZmlyc3QgdHdv IHZhcmlhbnRzIG1vZGlmeSB3aGljaCB0YWJsZXMvc2NoZW1hcyBhcmUgcGFydCBvZiB0aGUKKyAg IHB1YmxpY2F0aW9uLiBUaGUgPGxpdGVyYWw+QUREPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+RFJP UDwvbGl0ZXJhbD4gY2xhdXNlcworICAgd2lsbCBhZGQgYW5kIHJlbW92ZSBvbmUgb3IgbW9yZSB0 YWJsZXMvc2NoZW1hcyBmcm9tIHRoZSBwdWJsaWNhdGlvbi4KKyAgPC9wYXJhPgorCisgIDxwYXJh PgorICAgVGhlIHRoaXJkIHZhcmlhbnQgZWl0aGVyIG1vZGlmaWVzIHRoZSBpbmNsdWRlZCB0YWJs ZXMvc2NoZW1hcworICAgb3IgbWFya3MgdGhlIHB1YmxpY2F0aW9uIGFzIDxsaXRlcmFsPkZPUiBB TEwgU0VRVUVOQ0VTPC9saXRlcmFsPiBvcgorICAgPGxpdGVyYWw+Rk9SIEFMTCBUQUJMRVM8L2xp dGVyYWw+LCBvcHRpb25hbGx5IHVzaW5nCisgICA8bGl0ZXJhbD5FWENFUFQgVEFCTEU8L2xpdGVy YWw+IHRvIGV4Y2x1ZGUgc3BlY2lmaWMgdGFibGVzLiBUaGUKKyAgIDxsaXRlcmFsPlNFVCBBTEwg VEFCTEVTPC9saXRlcmFsPiBjbGF1c2UgY2FuIHRyYW5zZm9ybSBhbiBlbXB0eSBwdWJsaWNhdGlv biwKKyAgIG9yIG9uZSBkZWZpbmVkIGZvciA8bGl0ZXJhbD5BTEwgU0VRVUVOQ0VTPC9saXRlcmFs PiAob3IgYm90aAorICAgPGxpdGVyYWw+QUxMIFRBQkxFUzwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFs PkFMTCBTRVFVRU5DRVM8L2xpdGVyYWw+KSwgaW50bworICAgYSBwdWJsaWNhdGlvbiBkZWZpbmVk IGZvciBBTEwgVEFCTEVTLiBMaWtld2lzZSwKKyAgIDxsaXRlcmFsPlNFVCBBTEwgU0VRVUVOQ0VT PC9saXRlcmFsPiBjYW4gY29udmVydCBhbiBlbXB0eSBwdWJsaWNhdGlvbiwgb3IKKyAgIG9uZSBk ZWZpbmVkIGZvciA8bGl0ZXJhbD5BTEwgVEFCTEVTPC9saXRlcmFsPiAob3IgYm90aAorICAgPGxp dGVyYWw+QUxMIFRBQkxFUzwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPkFMTCBTRVFVRU5DRVM8L2xp dGVyYWw+KSwgaW50byBhCisgICBwdWJsaWNhdGlvbiBkZWZpbmVkIGZvciA8bGl0ZXJhbD5BTEwg U0VRVUVOQ0VTPC9saXRlcmFsPi4gSW4gYWRkaXRpb24sCisgICA8bGl0ZXJhbD5TRVQgQUxMIFRB QkxFUzwvbGl0ZXJhbD4gbWF5IGJlIHVzZWQgdG8gdXBkYXRlIHRoZQorICAgPGxpdGVyYWw+RVhD RVBUIFRBQkxFPC9saXRlcmFsPiBsaXN0IG9mIGEgPGxpdGVyYWw+Rk9SIEFMTCBUQUJMRVM8L2xp dGVyYWw+CisgICBwdWJsaWNhdGlvbi4gSWYgPGxpdGVyYWw+RVhDRVBUIFRBQkxFPC9saXRlcmFs PiBpcyBzcGVjaWZpZWQgd2l0aCBhIGxpc3Qgb2YKKyAgIHRhYmxlcywgdGhlIGV4aXN0aW5nIGV4 Y2x1c2lvbiBsaXN0IGlzIHJlcGxhY2VkIHdpdGggdGhlIHNwZWNpZmllZCB0YWJsZXMuCisgICBJ ZiA8bGl0ZXJhbD5FWENFUFQgVEFCTEU8L2xpdGVyYWw+IGlzIG9taXR0ZWQsIHRoZSBleGlzdGlu ZyBleGNsdXNpb24gbGlzdAorICAgaXMgY2xlYXJlZC4gVGhlIDxsaXRlcmFsPlNFVDwvbGl0ZXJh bD4gY2xhdXNlLCB3aGVuIHVzZWQgd2l0aCBhIHB1YmxpY2F0aW9uCisgICBkZWZpbmVkIHdpdGgg PGxpdGVyYWw+Rk9SIFRBQkxFPC9saXRlcmFsPiBvcgorICAgPGxpdGVyYWw+Rk9SIFRBQkxFUyBJ TiBTQ0hFTUE8L2xpdGVyYWw+LCByZXBsYWNlcyB0aGUgbGlzdCBvZiB0YWJsZXMvc2NoZW1hcwor ICAgaW4gdGhlIHB1YmxpY2F0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBsaXN0OyB0aGUgZXhpc3Rp bmcgdGFibGVzIG9yIHNjaGVtYXMKKyAgIHRoYXQgd2VyZSBwcmVzZW50IGluIHRoZSBwdWJsaWNh dGlvbiB3aWxsIGJlIHJlbW92ZWQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIE5vdGUgdGhh dCBhZGRpbmcgdGFibGVzL2V4Y2VwdCB0YWJsZXMvc2NoZW1hcyB0byBhIHB1YmxpY2F0aW9uIHRo YXQgaXMKKyAgIGFscmVhZHkgc3Vic2NyaWJlZCB0byB3aWxsIHJlcXVpcmUgYW4KICAgIDxsaW5r IGxpbmtlbmQ9InNxbC1hbHRlcnN1YnNjcmlwdGlvbi1wYXJhbXMtcmVmcmVzaC1wdWJsaWNhdGlv biI+Ci0gICA8bGl0ZXJhbD5BTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggUFVCTElDQVRJ T048L2xpdGVyYWw+PC9saW5rPiBhY3Rpb24gb24gdGhlCi0gICBzdWJzY3JpYmluZyBzaWRlIGlu IG9yZGVyIHRvIGJlY29tZSBlZmZlY3RpdmUuIE5vdGUgYWxzbyB0aGF0Ci0gICA8bGl0ZXJhbD5E Uk9QIFRBQkxFUyBJTiBTQ0hFTUE8L2xpdGVyYWw+IHdpbGwgbm90IGRyb3AgYW55IHNjaGVtYSB0 YWJsZXMKLSAgIHRoYXQgd2VyZSBzcGVjaWZpZWQgdXNpbmcKKyAgIDxsaXRlcmFsPkFMVEVSIFNV QlNDUklQVElPTiAuLi4gUkVGUkVTSCBQVUJMSUNBVElPTjwvbGl0ZXJhbD48L2xpbms+IGFjdGlv bgorICAgb24gdGhlIHN1YnNjcmliaW5nIHNpZGUgaW4gb3JkZXIgdG8gYmVjb21lIGVmZmVjdGl2 ZS4gTGlrZXdpc2UgYWx0ZXJpbmcgYQorICAgcHVibGljYXRpb24gdG8gc2V0IDxsaXRlcmFsPkFM TCBUQUJMRVM8L2xpdGVyYWw+IG9yIHRvIHNldCBvciB1bnNldAorICAgPGxpdGVyYWw+QUxMIFNF UVVFTkNFUzwvbGl0ZXJhbD4gYWxzbyByZXF1aXJlcyB0aGUgc3Vic2NyaWJlciB0byByZWZyZXNo IHRoZQorICAgcHVibGljYXRpb24uIE5vdGUgYWxzbyB0aGF0IDxsaXRlcmFsPkRST1AgVEFCTEVT IElOIFNDSEVNQTwvbGl0ZXJhbD4gd2lsbAorICAgbm90IGRyb3AgYW55IHNjaGVtYSB0YWJsZXMg dGhhdCB3ZXJlIHNwZWNpZmllZCB1c2luZwogICAgPGxpbmsgbGlua2VuZD0ic3FsLWNyZWF0ZXB1 YmxpY2F0aW9uLXBhcmFtcy1mb3ItdGFibGUiPjxsaXRlcmFsPkZPUiBUQUJMRTwvbGl0ZXJhbD48 L2xpbms+LwogICAgPGxpdGVyYWw+QUREIFRBQkxFPC9saXRlcmFsPi4KICAgPC9wYXJhPgpAQCAt ODMsOCArMTIwLDkgQEAgQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBSRU5BTUUgVE8gPHIKICAgPHBhcmE+CiAgICBZb3Ug bXVzdCBvd24gdGhlIHB1YmxpY2F0aW9uIHRvIHVzZSA8Y29tbWFuZD5BTFRFUiBQVUJMSUNBVElP TjwvY29tbWFuZD4uCiAgICBBZGRpbmcgYSB0YWJsZSB0byBhIHB1YmxpY2F0aW9uIGFkZGl0aW9u YWxseSByZXF1aXJlcyBvd25pbmcgdGhhdCB0YWJsZS4KLSAgIFRoZSA8bGl0ZXJhbD5BREQgVEFC TEVTIElOIFNDSEVNQTwvbGl0ZXJhbD4gYW5kCi0gICA8bGl0ZXJhbD5TRVQgVEFCTEVTIElOIFND SEVNQTwvbGl0ZXJhbD4gdG8gYSBwdWJsaWNhdGlvbiByZXF1aXJlcyB0aGUKKyAgIFRoZSA8bGl0 ZXJhbD5BREQgVEFCTEVTIElOIFNDSEVNQTwvbGl0ZXJhbD4sCisgICA8bGl0ZXJhbD5TRVQgVEFC TEVTIElOIFNDSEVNQTwvbGl0ZXJhbD4sIDxsaXRlcmFsPlNFVCBBTEwgVEFCTEVTPC9saXRlcmFs PiwKKyAgIGFuZCA8bGl0ZXJhbD5TRVQgQUxMIFNFUVVFTkNFUzwvbGl0ZXJhbD4gdG8gYSBwdWJs aWNhdGlvbiByZXF1aXJlcyB0aGUKICAgIGludm9raW5nIHVzZXIgdG8gYmUgYSBzdXBlcnVzZXIu CiAgICBUbyBhbHRlciB0aGUgb3duZXIsIHlvdSBtdXN0IGJlIGFibGUgdG8gPGxpdGVyYWw+U0VU IFJPTEU8L2xpdGVyYWw+IHRvIHRoZQogICAgbmV3IG93bmluZyByb2xlLCBhbmQgdGhhdCByb2xl IG11c3QgaGF2ZSA8bGl0ZXJhbD5DUkVBVEU8L2xpdGVyYWw+CkBAIC0yMjIsNiArMjYwLDE5IEBA IEFMVEVSIFBVQkxJQ0FUSU9OIG15cHVibGljYXRpb24gQUREIFRBQkxFIHVzZXJzICh1c2VyX2lk LCBmaXJzdG5hbWUpLCBkZXBhcnRtZW50CiAgICBDaGFuZ2UgdGhlIHNldCBvZiBjb2x1bW5zIHB1 Ymxpc2hlZCBmb3IgYSB0YWJsZToKIDxwcm9ncmFtbGlzdGluZz4KIEFMVEVSIFBVQkxJQ0FUSU9O IG15cHVibGljYXRpb24gU0VUIFRBQkxFIHVzZXJzICh1c2VyX2lkLCBmaXJzdG5hbWUsIGxhc3Ru YW1lKSwgVEFCTEUgZGVwYXJ0bWVudHM7Cis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KKworICA8 cGFyYT4KKyAgIFJlcGxhY2UgdGhlIHB1YmxpY2F0aW9uJ3MgRVhDRVBUIFRBQkxFIGxpc3Q6Cis8 cHJvZ3JhbWxpc3Rpbmc+CitBTFRFUiBQVUJMSUNBVElPTiBteXB1YmxpY2F0aW9uIFNFVCBBTEwg VEFCTEVTIEVYQ0VQVCBUQUJMRSAodXNlcnMsIGRlcGFydG1lbnRzKTsKKzwvcHJvZ3JhbWxpc3Rp bmc+PC9wYXJhPgorCisgIDxwYXJhPgorICAgUmVzZXQgdGhlIHB1YmxpY2F0aW9uIHRvIGJlIGEg Rk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24gd2l0aCBubyBleGNsdWRlZAorICAgdGFibGVzOgor PHByb2dyYW1saXN0aW5nPgorQUxURVIgUFVCTElDQVRJT04gbXlwdWJsaWNhdGlvbiBTRVQgQUxM IFRBQkxFUzsKIDwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0 YWxvZy9wZ19wdWJsaWNhdGlvbi5jCmluZGV4IGE3OTE1N2M0M2JmLi45MGNmYjAzN2UyYSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwpAQCAtMjcwLDYgKzI3MCw0OSBAQCBpc19z Y2hlbWFfcHVibGljYXRpb24oT2lkIHB1YmlkKQogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisg KiBSZXR1cm5zIHRydWUgaWYgdGhlIHB1YmxpY2F0aW9uIGhhcyBleHBsaWNpdGx5IGluY2x1ZGVk IHJlbGF0aW9uIChpLmUuLAorICogbm90IG1hcmtlZCBhcyBFWENFUFQpLgorICovCitib29sCitp c190YWJsZV9wdWJsaWNhdGlvbihPaWQgcHViaWQpCit7CisJUmVsYXRpb24JcHVicmVsc3JlbDsK KwlTY2FuS2V5RGF0YSBzY2Fua2V5OworCVN5c1NjYW5EZXNjIHNjYW47CisJSGVhcFR1cGxlCXR1 cDsKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsKKworCXB1YnJlbHNyZWwgPSB0YWJsZV9vcGVuKFB1 YmxpY2F0aW9uUmVsUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgm c2NhbmtleSwKKwkJCQlBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcnB1YmlkLAorCQkJCUJURXF1 YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKHB1YmlkKSk7 CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHB1YnJlbHNyZWwsCisJCQkJCQkJICBQdWJs aWNhdGlvblJlbFBycHViaWRJbmRleElkLAorCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJnNjYW5r ZXkpOworCXR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJaWYgKEhlYXBUdXBsZUlzVmFs aWQodHVwKSkKKwl7CisJCUZvcm1fcGdfcHVibGljYXRpb25fcmVsIHB1YnJlbDsKKworCQlwdWJy ZWwgPSAoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVCh0dXApOworCisJCS8qCisJ CSAqIEZvciBhbnkgcHVibGljYXRpb24sIHBnX3B1YmxpY2F0aW9uX3JlbCBjb250YWlucyBlaXRo ZXIgb25seSBFWENFUFQKKwkJICogZW50cmllcyBvciBvbmx5IGV4cGxpY2l0bHkgaW5jbHVkZWQg dGFibGVzLiBUaGVyZWZvcmUsIGV4YW1pbmluZworCQkgKiB0aGUgZmlyc3QgdHVwbGUgaXMgc3Vm ZmljaWVudCB0byBkZXRlcm1pbmUgdGFibGUgaW5jbHVzaW9uLgorCQkgKi8KKwkJcmVzdWx0ID0g IXB1YnJlbC0+cHJleGNlcHQ7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJs ZV9jbG9zZShwdWJyZWxzcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJlc3VsdDsK K30KKwogLyoKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVsYXRpb24gaGFzIGNvbHVtbiBsaXN0 IGFzc29jaWF0ZWQgd2l0aCB0aGUKICAqIHB1YmxpY2F0aW9uLCBmYWxzZSBvdGhlcndpc2UuCkBA IC00NDAsNyArNDgzLDcgQEAgYXR0bnVtc3RvaW50MnZlY3RvcihCaXRtYXBzZXQgKmF0dHJzKQog ICovCiBPYmplY3RBZGRyZXNzCiBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBQ dWJsaWNhdGlvblJlbEluZm8gKnByaSwKLQkJCQkJCSBib29sIGlmX25vdF9leGlzdHMpCisJCQkJ CQkgYm9vbCBpZl9ub3RfZXhpc3RzLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqYWx0ZXJfc3RtdCkK IHsKIAlSZWxhdGlvbglyZWw7CiAJSGVhcFR1cGxlCXR1cDsKQEAgLTQ1NSw2ICs0OTgsNyBAQCBw dWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnBy aSwKIAkJCQlyZWZlcmVuY2VkOwogCUxpc3QJICAgKnJlbGlkcyA9IE5JTDsKIAlpbnQJCQlpOwor CWJvb2wJCWludmFsX2V4Y2VwdF90YWJsZTsKIAogCXJlbCA9IHRhYmxlX29wZW4oUHVibGljYXRp b25SZWxSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIApAQCAtNTQzLDExICs1ODcsMjMg QEAgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRpb25SZWxJbmZv ICpwcmksCiAJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAogCS8qCi0JICog UmVsYXRpb25zIGV4Y2x1ZGVkIHZpYSB0aGUgRVhDRVBUIGNsYXVzZSBkbyBub3QgbmVlZCBleHBs aWNpdAotCSAqIGludmFsaWRhdGlvbiBhcyBDcmVhdGVQdWJsaWNhdGlvbigpIGZ1bmN0aW9uIGlu dmFsaWRhdGVzIGFsbCByZWxhdGlvbnMKLQkgKiBhcyBwYXJ0IG9mIGRlZmluaW5nIGEgRk9SIEFM TCBUQUJMRVMgcHVibGljYXRpb24uCisJICogRGV0ZXJtaW5lIHdoZXRoZXIgRVhDRVBUIHRhYmxl cyByZXF1aXJlIGV4cGxpY2l0IHJlbGNhY2hlIGludmFsaWRhdGlvbi4KKwkgKgorCSAqIEZvciBD UkVBVEUgUFVCTElDQVRJT04gd2l0aCBFWENFUFQgdGFibGVzLCBpbnZhbGlkYXRpb24gaXMgc2tp cHBlZAorCSAqIGhlcmUsIGFzIENyZWF0ZVB1YmxpY2F0aW9uKCkgZnVuY3Rpb24gaW52YWxpZGF0 ZXMgYWxsIHJlbGF0aW9ucyBhcyBwYXJ0CisJICogb2YgZGVmaW5pbmcgYSBGT1IgQUxMIFRBQkxF UyBwdWJsaWNhdGlvbi4KKwkgKgorCSAqIEZvciBBTFRFUiBQVUJMSUNBVElPTiwgaW52YWxpZGF0 aW9uIGlzIG5lZWRlZCBvbmx5IHdoZW4gYWRkaW5nIGFuCisJICogRVhDRVBUIHRhYmxlIHRvIGEg cHVibGljYXRpb24gYWxyZWFkeSBtYXJrZWQgYXMgQUxMIFRBQkxFUy4gRm9yCisJICogcHVibGlj YXRpb25zIHRoYXQgd2VyZSBvcmlnaW5hbGx5IGVtcHR5IG9yIGRlZmluZWQgYXMgQUxMIFNFUVVF TkNFUyBhbmQKKwkgKiBhcmUgYmVpbmcgY29udmVydGVkIHRvIEFMTCBUQUJMRVMsIGludmFsaWRh dGlvbiBpcyBza2lwcGVkIGhlcmUsIGFzCisJICogQWx0ZXJQdWJsaWNhdGlvbkFsbEZsYWdzKCkg ZnVuY3Rpb24gaW52YWxpZGF0ZXMgYWxsIHJlbGF0aW9ucyB3aGlsZQorCSAqIG1hcmtpbmcgdGhl IHB1YmxpY2F0aW9uIGFzIEFMTCBUQUJMRVMgcHVibGljYXRpb24uCiAJICovCi0JaWYgKCFwcmkt PmV4Y2VwdCkKKwlpbnZhbF9leGNlcHRfdGFibGUgPSAoYWx0ZXJfc3RtdCAhPSBOVUxMKSAmJgor CQkoYWx0ZXJfc3RtdC0+Zm9yX2FsbF90YWJsZXMgPT0gcHViLT5hbGx0YWJsZXMpOworCisJaWYg KCFwcmktPmV4Y2VwdCB8fCBpbnZhbF9leGNlcHRfdGFibGUpCiAJewogCQkvKgogCQkgKiBJbnZh bGlkYXRlIHJlbGNhY2hlIHNvIHRoYXQgcHVibGljYXRpb24gaW5mbyBpcyByZWJ1aWx0LgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCA2YTNjYTQ3NTFmYS4uOWE0Zjcw Mjc2YjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0xMjcyLDE1 ICsxMjcyLDM3IEBAIEFsdGVyUHVibGljYXRpb25UYWJsZXMoQWx0ZXJQdWJsaWNhdGlvblN0bXQg KnN0bXQsIEhlYXBUdXBsZSB0dXAsCiAJCVB1YmxpY2F0aW9uRHJvcFRhYmxlcyhwdWJpZCwgcmVs cywgZmFsc2UpOwogCWVsc2UJCQkJCQkvKiBBUF9TZXRPYmplY3RzICovCiAJewotCQlMaXN0CSAg ICpvbGRyZWxpZHMgPSBHZXRJbmNsdWRlZFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmlkLAotCQkJ CQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CisJCUxpc3QJICAgKm9sZHJlbGlk cyA9IE5JTDsKIAkJTGlzdAkgICAqZGVscmVscyA9IE5JTDsKIAkJTGlzdENlbGwgICAqb2xkbGM7 CiAKLQkJVHJhbnNmb3JtUHViV2hlcmVDbGF1c2VzKHJlbHMsIHF1ZXJ5U3RyaW5nLCBwdWJmb3Jt LT5wdWJ2aWFyb290KTsKKwkJaWYgKHN0bXQtPmZvcl9hbGxfdGFibGVzIHx8IHN0bXQtPmZvcl9h bGxfc2VxdWVuY2VzKQorCQl7CisJCQkvKgorCQkJICogSW4gRk9SIEFMTCBUQUJMRVMgbW9kZSwg cmVsYXRpb25zIGFyZSB0cmFja2VkIGFzIGV4Y2x1c2lvbnMKKwkJCSAqIChFWENFUFQgVEFCTEVT KS4gRmV0Y2ggdGhlIGN1cnJlbnQgZXhjbHVkZWQgcmVsYXRpb25zIHNvIHRoZXkKKwkJCSAqIGNh biBiZSByZWNvbmNpbGVkIHdpdGggdGhlIHNwZWNpZmllZCBFWENFUFQgbGlzdC4KKwkJCSAqCisJ CQkgKiBUaGlzIGFwcGxpZXMgb25seSBpZiB0aGUgZXhpc3RpbmcgcHVibGljYXRpb24gaXMgYWxy ZWFkeQorCQkJICogZGVmaW5lZCBhcyBGT1IgQUxMIFRBQkxFUzsgb3RoZXJ3aXNlLCB0aGVyZSBh cmUgbm8gZXhjbHVzaW9uCisJCQkgKiBlbnRyaWVzIHRvIHByb2Nlc3MuCisJCQkgKi8KKwkJCWlm IChwdWJmb3JtLT5wdWJhbGx0YWJsZXMpCisJCQl7CisJCQkJb2xkcmVsaWRzID0gR2V0RXhjbHVk ZWRQdWJsaWNhdGlvblRhYmxlcyhwdWJpZCwKKwkJCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BB UlRfUk9PVCk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlvbGRyZWxpZHMgPSBHZXRJbmNs dWRlZFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmlkLAorCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElP Tl9QQVJUX1JPT1QpOwogCi0JCUNoZWNrUHViUmVsYXRpb25Db2x1bW5MaXN0KHN0bXQtPnB1Ym5h bWUsIHJlbHMsIHB1Ymxpc2hfc2NoZW1hLAotCQkJCQkJCQkgICBwdWJmb3JtLT5wdWJ2aWFyb290 KTsKKwkJCVRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhyZWxzLCBxdWVyeVN0cmluZywgcHViZm9y bS0+cHVidmlhcm9vdCk7CisKKwkJCUNoZWNrUHViUmVsYXRpb25Db2x1bW5MaXN0KHN0bXQtPnB1 Ym5hbWUsIHJlbHMsIHB1Ymxpc2hfc2NoZW1hLAorCQkJCQkJCQkJICAgcHViZm9ybS0+cHVidmlh cm9vdCk7CisJCX0KIAogCQkvKgogCQkgKiBUbyByZWNyZWF0ZSB0aGUgcmVsYXRpb24gbGlzdCBm b3IgdGhlIHB1YmxpY2F0aW9uLCBsb29rIGZvcgpAQCAtMTQ5OCw2ICsxNTIwLDE2IEBAIENoZWNr QWx0ZXJQdWJsaWNhdGlvbihBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwgSGVhcFR1cGxlIHR1 cCwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVOVF9QUklWSUxFR0UpLAogCQkJCSBl cnJtc2coIm11c3QgYmUgc3VwZXJ1c2VyIHRvIGFkZCBvciBzZXQgc2NoZW1hcyIpKSk7CiAKKwlp ZiAoc3RtdC0+Zm9yX2FsbF90YWJsZXMgJiYgIXN1cGVydXNlcigpKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwKKwkJCQllcnJt c2coIm11c3QgYmUgc3VwZXJ1c2VyIHRvIHNldCBBTEwgVEFCTEVTIikpOworCisJaWYgKHN0bXQt PmZvcl9hbGxfc2VxdWVuY2VzICYmICFzdXBlcnVzZXIoKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQllcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCisJCQkJZXJybXNnKCJt dXN0IGJlIHN1cGVydXNlciB0byBzZXQgQUxMIFNFUVVFTkNFUyIpKTsKKwogCS8qCiAJICogQ2hl Y2sgdGhhdCB1c2VyIGlzIGFsbG93ZWQgdG8gbWFuaXB1bGF0ZSB0aGUgcHVibGljYXRpb24gdGFi bGVzIGluCiAJICogc2NoZW1hCkBAIC0xNTQ2LDYgKzE1NzgsNzMgQEAgQ2hlY2tBbHRlclB1Ymxp Y2F0aW9uKEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LCBIZWFwVHVwbGUgdHVwLAogCQkJCQkJ ICAgTmFtZVN0cihwdWJmb3JtLT5wdWJuYW1lKSksCiAJCQkJCWVycmRldGFpbCgiVGFibGVzIG9y IHNlcXVlbmNlcyBjYW5ub3QgYmUgYWRkZWQgdG8gb3IgZHJvcHBlZCBmcm9tIEZPUiBBTEwgU0VR VUVOQ0VTIHB1YmxpY2F0aW9ucy4iKSk7CiAJfQorCisJaWYgKHN0bXQtPmZvcl9hbGxfdGFibGVz IHx8IHN0bXQtPmZvcl9hbGxfc2VxdWVuY2VzKQorCXsKKwkJLyoKKwkJICogSWYgdGhlIHB1Ymxp Y2F0aW9uIGFscmVhZHkgY29udGFpbnMgc3BlY2lmaWMgdGFibGVzIG9yIHNjaGVtYXMsIHdlCisJ CSAqIHByZXZlbnQgc3dpdGNoaW5nIHRvIGEgQUxMIHN0YXRlIHVubGVzcyB0aGUgcHVibGljYXRp b24gaXMgZW1wdHkuCisJCSAqLworCQlpZiAoaXNfdGFibGVfcHVibGljYXRpb24ocHViZm9ybS0+ b2lkKSB8fAorCQkJaXNfc2NoZW1hX3B1YmxpY2F0aW9uKHB1YmZvcm0tPm9pZCkpCisJCXsKKwkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJF UVVJU0lURV9TVEFURSksCisJCQkJCXN0bXQtPmZvcl9hbGxfdGFibGVzID8KKwkJCQkJZXJybXNn KCJwdWJsaWNhdGlvbiBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBBTEwgVEFCTEVTIG9wZXJhdGlv bnMiLCBOYW1lU3RyKHB1YmZvcm0tPnB1Ym5hbWUpKSA6CisJCQkJCWVycm1zZygicHVibGljYXRp b24gXCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgQUxMIFNFUVVFTkNFUyBvcGVyYXRpb25zIiwgTmFt ZVN0cihwdWJmb3JtLT5wdWJuYW1lKSksCisJCQkJCWVycmRldGFpbCgiVGhpcyBvcGVyYXRpb24g cmVxdWlyZXMgdGhlIHB1YmxpY2F0aW9uIHRvIGJlIGRlZmluZWQgYXMgRk9SIEFMTCBUQUJMRVMv U0VRVUVOQ0VTIG9yIHRvIGJlIGVtcHR5LiIpKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFVwZGF0 ZSBGT1IgQUxMIFRBQkxFUyAvIEZPUiBBTEwgU0VRVUVOQ0VTIGZsYWdzIG9mIGEgcHVibGljYXRp b24uCisgKi8KK3N0YXRpYyB2b2lkCitBbHRlclB1YmxpY2F0aW9uQWxsRmxhZ3MoQWx0ZXJQdWJs aWNhdGlvblN0bXQgKnN0bXQsIFJlbGF0aW9uIHJlbCwKKwkJCQkJCSBIZWFwVHVwbGUgdHVwKQor eworCUZvcm1fcGdfcHVibGljYXRpb24gcHViZm9ybTsKKwlib29sCQludWxsc1tOYXR0c19wZ19w dWJsaWNhdGlvbl0gPSB7MH07CisJYm9vbAkJcmVwbGFjZXNbTmF0dHNfcGdfcHVibGljYXRpb25d ID0gezB9OworCURhdHVtCQl2YWx1ZXNbTmF0dHNfcGdfcHVibGljYXRpb25dID0gezB9OworCWJv b2wJCWRpcnR5ID0gZmFsc2U7CisKKwlpZiAoIXN0bXQtPmZvcl9hbGxfdGFibGVzICYmICFzdG10 LT5mb3JfYWxsX3NlcXVlbmNlcykKKwkJcmV0dXJuOworCisJcHViZm9ybSA9IChGb3JtX3BnX3B1 YmxpY2F0aW9uKSBHRVRTVFJVQ1QodHVwKTsKKworCS8qIFVwZGF0ZSBGT1IgQUxMIFRBQkxFUyBm bGFnIGlmIGNoYW5nZWQgKi8KKwlpZiAoc3RtdC0+Zm9yX2FsbF90YWJsZXMgIT0gcHViZm9ybS0+ cHViYWxsdGFibGVzKQorCXsKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViYWxsdGFi bGVzIC0gMV0gPQorCQkJQm9vbEdldERhdHVtKHN0bXQtPmZvcl9hbGxfdGFibGVzKTsKKwkJcmVw bGFjZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJhbGx0YWJsZXMgLSAxXSA9IHRydWU7CisJCWRp cnR5ID0gdHJ1ZTsKKwl9CisKKwkvKiBVcGRhdGUgRk9SIEFMTCBTRVFVRU5DRVMgZmxhZyBpZiBj aGFuZ2VkICovCisJaWYgKHN0bXQtPmZvcl9hbGxfc2VxdWVuY2VzICE9IHB1YmZvcm0tPnB1YmFs bHNlcXVlbmNlcykKKwl7CisJCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmFsbHNlcXVl bmNlcyAtIDFdID0KKwkJCUJvb2xHZXREYXR1bShzdG10LT5mb3JfYWxsX3NlcXVlbmNlcyk7CisJ CXJlcGxhY2VzW0FudW1fcGdfcHVibGljYXRpb25fcHViYWxsc2VxdWVuY2VzIC0gMV0gPSB0cnVl OworCQlkaXJ0eSA9IHRydWU7CisJfQorCisJaWYgKGRpcnR5KQorCXsKKwkJdHVwID0gaGVhcF9t b2RpZnlfdHVwbGUodHVwLCBSZWxhdGlvbkdldERlc2NyKHJlbCksIHZhbHVlcywKKwkJCQkJCQkJ bnVsbHMsIHJlcGxhY2VzKTsKKwkJQ2F0YWxvZ1R1cGxlVXBkYXRlKHJlbCwgJnR1cC0+dF9zZWxm LCB0dXApOworCQlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworCisJCS8qIEZvciBBTEwgVEFC TEVTLCB3ZSBtdXN0IGludmFsaWRhdGUgYWxsIHJlbGNhY2hlIGVudHJpZXMgKi8KKwkJaWYgKHJl cGxhY2VzW0FudW1fcGdfcHVibGljYXRpb25fcHViYWxsdGFibGVzIC0gMV0pCisJCQlDYWNoZUlu dmFsaWRhdGVSZWxjYWNoZUFsbCgpOworCX0KIH0KIAogLyoKQEAgLTE1OTEsOSArMTY5MCw2IEBA IEFsdGVyUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3Rt dCAqc3RtdCkKIAkJT2JqZWN0c0luUHVibGljYXRpb25Ub09pZHMoc3RtdC0+cHVib2JqZWN0cywg cHN0YXRlLCAmcmVsYXRpb25zLAogCQkJCQkJCQkgICAmZXhjZXB0cmVsYXRpb25zLCAmc2NoZW1h aWRsaXN0KTsKIAotCQkvKiBFWENFUFQgY2xhdXNlIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBBTFRF UiBQVUJMSUNBVElPTiAqLwotCQlBc3NlcnQoZXhjZXB0cmVsYXRpb25zID09IE5JTCk7Ci0KIAkJ Q2hlY2tBbHRlclB1YmxpY2F0aW9uKHN0bXQsIHR1cCwgcmVsYXRpb25zLCBzY2hlbWFpZGxpc3Qp OwogCiAJCWhlYXBfZnJlZXR1cGxlKHR1cCk7CkBAIC0xNjE1LDkgKzE3MTEsMTEgQEAgQWx0ZXJQ dWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10 KQogCQkJCQllcnJtc2coInB1YmxpY2F0aW9uIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsCiAJCQkJ CQkgICBzdG10LT5wdWJuYW1lKSk7CiAKKwkJcmVsYXRpb25zID0gbGlzdF9jb25jYXQocmVsYXRp b25zLCBleGNlcHRyZWxhdGlvbnMpOwogCQlBbHRlclB1YmxpY2F0aW9uVGFibGVzKHN0bXQsIHR1 cCwgcmVsYXRpb25zLCBwc3RhdGUtPnBfc291cmNldGV4dCwKIAkJCQkJCQkgICBzY2hlbWFpZGxp c3QgIT0gTklMKTsKIAkJQWx0ZXJQdWJsaWNhdGlvblNjaGVtYXMoc3RtdCwgdHVwLCBzY2hlbWFp ZGxpc3QpOworCQlBbHRlclB1YmxpY2F0aW9uQWxsRmxhZ3Moc3RtdCwgcmVsLCB0dXApOwogCX0K IAogCS8qIENsZWFudXAuICovCkBAIC0xOTUzLDcgKzIwNTEsNyBAQCBQdWJsaWNhdGlvbkFkZFRh YmxlcyhPaWQgcHViaWQsIExpc3QgKnJlbHMsIGJvb2wgaWZfbm90X2V4aXN0cywKIAkJCWFjbGNo ZWNrX2Vycm9yKEFDTENIRUNLX05PVF9PV05FUiwgZ2V0X3JlbGtpbmRfb2JqdHlwZShyZWwtPnJk X3JlbC0+cmVsa2luZCksCiAJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsK IAotCQlvYmogPSBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24ocHViaWQsIHB1Yl9yZWwsIGlmX25v dF9leGlzdHMpOworCQlvYmogPSBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24ocHViaWQsIHB1Yl9y ZWwsIGlmX25vdF9leGlzdHMsIHN0bXQpOwogCQlpZiAoc3RtdCkKIAkJewogCQkJRXZlbnRUcmln Z2VyQ29sbGVjdFNpbXBsZUNvbW1hbmQob2JqLCBJbnZhbGlkT2JqZWN0QWRkcmVzcywKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMKaW5kZXggNjdlNDJlNWRmMjkuLjE0MTVjMGEyNDNmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMjA2MTQsNyArMjA2MTQsOCBAQCBBVEV4ZWNBdHRhY2hQ YXJ0aXRpb24oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBQYXJ0aXRpb25DbWQgKmNtZCwK IAkJCQkJCQkgIGxpc3RfbGVuZ3RoKGV4Y2VwdHB1Ym9pZHMpLAogCQkJCQkJCSAgUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUoYXR0YWNocmVsKSwKIAkJCQkJCQkgIHB1Ym5hbWVzLmRhdGEpLAotCQkJ CWVycmRldGFpbCgiVGhlIHB1YmxpY2F0aW9uIEVYQ0VQVCBjbGF1c2UgY2Fubm90IGNvbnRhaW4g dGFibGVzIHRoYXQgYXJlIHBhcnRpdGlvbnMuIikpOworCQkJCWVycmRldGFpbCgiVGhlIHB1Ymxp Y2F0aW9uIEVYQ0VQVCBjbGF1c2UgY2Fubm90IGNvbnRhaW4gdGFibGVzIHRoYXQgYXJlIHBhcnRp dGlvbnMuIiksCisJCQkJZXJyaGludCgiTW9kaWZ5IHRoZSBwdWJsaWNhdGlvbidzIEVYQ0VQVCBj bGF1c2UgdXNpbmcgQUxURVIgUFVCTElDQVRJT04gLi4uIFNFVCBBTEwgVEFCTEVTLiIpKTsKIAl9 CiAKIAlsaXN0X2ZyZWUoZXhjZXB0cHVib2lkcyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9w YXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCAwYjRhNDkxMTM3 MC4uOTJkZWQ1MzA3YjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKKysr IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtMTE0NDUsMTEgKzExNDQ1LDE4IEBAIHB1 Yl9leGNlcHRfb2JqX2xpc3Q6IFB1YmxpY2F0aW9uRXhjZXB0T2JqU3BlYwogICoKICAqIEFMVEVS IFBVQkxJQ0FUSU9OIG5hbWUgU0VUIHB1Yl9vYmogWywgLi4uXQogICoKKyAqIEFMVEVSIFBVQkxJ Q0FUSU9OIG5hbWUgU0VUIHB1Yl9hbGxfb2JqX3R5cGUgWywgLi4uXQorICoKICAqIHB1Yl9vYmog aXMgb25lIG9mOgogICoKICAqCQlUQUJMRSB0YWJsZV9uYW1lIFssIC4uLl0KICAqCQlUQUJMRVMg SU4gU0NIRU1BIHNjaGVtYV9uYW1lIFssIC4uLl0KICAqCisgKiBwdWJfYWxsX29ial90eXBlIGlz IG9uZSBvZjoKKyAqCisgKgkJQUxMIFRBQkxFUyBbIEVYQ0VQVCBUQUJMRSAoIHRhYmxlX25hbWUg WywgLi4uXSApIF0KKyAqCQlBTEwgU0VRVUVOQ0VTCisgKgogICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwogCiBBbHRlclB1YmxpY2F0aW9uU3RtdDoKQEAgLTExNDU5LDYgKzExNDY2LDcgQEAgQWx0ZXJQ dWJsaWNhdGlvblN0bXQ6CiAKIAkJCQkJbi0+cHVibmFtZSA9ICQzOwogCQkJCQluLT5vcHRpb25z ID0gJDU7CisJCQkJCW4tPmZvcl9hbGxfdGFibGVzID0gZmFsc2U7CiAJCQkJCSQkID0gKE5vZGUg KikgbjsKIAkJCQl9CiAJCQl8IEFMVEVSIFBVQkxJQ0FUSU9OIG5hbWUgQUREX1AgcHViX29ial9s aXN0CkBAIC0xMTQ2OSw2ICsxMTQ3Nyw3IEBAIEFsdGVyUHVibGljYXRpb25TdG10OgogCQkJCQlu LT5wdWJvYmplY3RzID0gJDU7CiAJCQkJCXByZXByb2Nlc3NfcHVib2JqX2xpc3Qobi0+cHVib2Jq ZWN0cywgeXlzY2FubmVyKTsKIAkJCQkJbi0+YWN0aW9uID0gQVBfQWRkT2JqZWN0czsKKwkJCQkJ bi0+Zm9yX2FsbF90YWJsZXMgPSBmYWxzZTsKIAkJCQkJJCQgPSAoTm9kZSAqKSBuOwogCQkJCX0K IAkJCXwgQUxURVIgUFVCTElDQVRJT04gbmFtZSBTRVQgcHViX29ial9saXN0CkBAIC0xMTQ3OSw2 ICsxMTQ4OCwxOSBAQCBBbHRlclB1YmxpY2F0aW9uU3RtdDoKIAkJCQkJbi0+cHVib2JqZWN0cyA9 ICQ1OwogCQkJCQlwcmVwcm9jZXNzX3B1Ym9ial9saXN0KG4tPnB1Ym9iamVjdHMsIHl5c2Nhbm5l cik7CiAJCQkJCW4tPmFjdGlvbiA9IEFQX1NldE9iamVjdHM7CisJCQkJCW4tPmZvcl9hbGxfdGFi bGVzID0gZmFsc2U7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IEFMVEVSIFBV QkxJQ0FUSU9OIG5hbWUgU0VUIHB1Yl9hbGxfb2JqX3R5cGVfbGlzdAorCQkJCXsKKwkJCQkJQWx0 ZXJQdWJsaWNhdGlvblN0bXQgKm4gPSBtYWtlTm9kZShBbHRlclB1YmxpY2F0aW9uU3RtdCk7CisK KwkJCQkJbi0+cHVibmFtZSA9ICQzOworCQkJCQluLT5hY3Rpb24gPSBBUF9TZXRPYmplY3RzOwor CQkJCQlwcmVwcm9jZXNzX3B1Yl9hbGxfb2JqdHlwZV9saXN0KCQ1LCAmbi0+cHVib2JqZWN0cywK KwkJCQkJCQkJCQkJCQkmbi0+Zm9yX2FsbF90YWJsZXMsCisJCQkJCQkJCQkJCQkJJm4tPmZvcl9h bGxfc2VxdWVuY2VzLAorCQkJCQkJCQkJCQkJCXl5c2Nhbm5lcik7CiAJCQkJCSQkID0gKE5vZGUg KikgbjsKIAkJCQl9CiAJCQl8IEFMVEVSIFBVQkxJQ0FUSU9OIG5hbWUgRFJPUCBwdWJfb2JqX2xp c3QKQEAgLTExNDg5LDYgKzExNTExLDcgQEAgQWx0ZXJQdWJsaWNhdGlvblN0bXQ6CiAJCQkJCW4t PnB1Ym9iamVjdHMgPSAkNTsKIAkJCQkJcHJlcHJvY2Vzc19wdWJvYmpfbGlzdChuLT5wdWJvYmpl Y3RzLCB5eXNjYW5uZXIpOwogCQkJCQluLT5hY3Rpb24gPSBBUF9Ecm9wT2JqZWN0czsKKwkJCQkJ bi0+Zm9yX2FsbF90YWJsZXMgPSBmYWxzZTsKIAkJCQkJJCQgPSAoTm9kZSAqKSBuOwogCQkJCX0K IAkJOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jIGIvc3JjL2Jp bi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCmluZGV4IDViZGJmMTUzMGEyLi4yZjY3NDc2NGNhZCAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCisrKyBiL3NyYy9iaW4v cHNxbC90YWItY29tcGxldGUuaW4uYwpAQCAtMjMyOSw3ICsyMzI5LDE4IEBAIG1hdGNoX3ByZXZp b3VzX3dvcmRzKGludCBwYXR0ZXJuX2lkLAogCQlDT01QTEVURV9XSVRIKCJUQUJMRVMgSU4gU0NI RU1BIiwgIlRBQkxFIik7CiAJLyogQUxURVIgUFVCTElDQVRJT04gPG5hbWU+IFNFVCAqLwogCWVs c2UgaWYgKE1hdGNoZXMoIkFMVEVSIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJTRVQiKSkK LQkJQ09NUExFVEVfV0lUSCgiKCIsICJUQUJMRVMgSU4gU0NIRU1BIiwgIlRBQkxFIik7CisJCUNP TVBMRVRFX1dJVEgoIigiLCAiQUxMIFNFUVVFTkNFUyIsICJBTEwgVEFCTEVTIiwgIlRBQkxFUyBJ TiBTQ0hFTUEiLCAiVEFCTEUiKTsKKwllbHNlIGlmIChNYXRjaGVzKCJBTFRFUiIsICJQVUJMSUNB VElPTiIsIE1hdGNoQW55LCAiU0VUIiwgIkFMTCIpKQorCQlDT01QTEVURV9XSVRIKCJTRVFVRU5D RVMiLCAiVEFCTEVTIik7CisJZWxzZSBpZiAoTWF0Y2hlcygiQUxURVIiLCAiUFVCTElDQVRJT04i LCBNYXRjaEFueSwgIlNFVCIsICJBTEwiLCAiVEFCTEVTIikpCisJCUNPTVBMRVRFX1dJVEgoIkVY Q0VQVCBUQUJMRSAoIik7CisJZWxzZSBpZiAoTWF0Y2hlcygiQUxURVIiLCAiUFVCTElDQVRJT04i LCBNYXRjaEFueSwgIlNFVCIsICJBTEwiLCAiVEFCTEVTIiwgIkVYQ0VQVCIpKQorCQlDT01QTEVU RV9XSVRIKCJUQUJMRSAoIik7CisJZWxzZSBpZiAoTWF0Y2hlcygiQUxURVIiLCAiUFVCTElDQVRJ T04iLCBNYXRjaEFueSwgIlNFVCIsICJBTEwiLCAiVEFCTEVTIiwgIkVYQ0VQVCIsICJUQUJMRSIp KQorCQlDT01QTEVURV9XSVRIKCIoIik7CisJLyogQ29tcGxldGUgIkFMVEVSIFBVQkxJQ0FUSU9O IDxuYW1lPiBGT1IgVEFCTEUiIHdpdGggIjx0YWJsZT4sIC4uLiIgKi8KKwllbHNlIGlmIChNYXRj aGVzKCJBTFRFUiIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAiU0VUIiwgIkFMTCIsICJUQUJM RVMiLCAiRVhDRVBUIiwgIlRBQkxFIiwgIigiKSkKKwkJQ09NUExFVEVfV0lUSF9TQ0hFTUFfUVVF UlkoUXVlcnlfZm9yX2xpc3Rfb2ZfdGFibGVzKTsKIAllbHNlIGlmIChNYXRjaGVzKCJBTFRFUiIs ICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAiQUREfERST1B8U0VUIiwgIlRBQkxFUyIsICJJTiIs ICJTQ0hFTUEiKSkKIAkJQ09NUExFVEVfV0lUSF9RVUVSWV9QTFVTKFF1ZXJ5X2Zvcl9saXN0X29m X3NjaGVtYXMKIAkJCQkJCQkJICIgQU5EIG5zcG5hbWUgTk9UIExJS0UgRSdwZ1xcXFxfJSUnIiwK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAppbmRleCBlMjUyMjg3MTNlNy4uODliNGJi MTRmNjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAor KysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKQEAgLTE5NSwxMCArMTk1 LDEyIEBAIGV4dGVybiBPaWQJR2V0VG9wTW9zdEFuY2VzdG9ySW5QdWJsaWNhdGlvbihPaWQgcHVi b2lkLCBMaXN0ICphbmNlc3RvcnMsCiAKIGV4dGVybiBib29sIGlzX3B1Ymxpc2hhYmxlX3JlbGF0 aW9uKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gYm9vbCBpc19zY2hlbWFfcHVibGljYXRpb24oT2lk IHB1YmlkKTsKK2V4dGVybiBib29sIGlzX3RhYmxlX3B1YmxpY2F0aW9uKE9pZCBwdWJpZCk7CiBl eHRlcm4gYm9vbCBjaGVja19hbmRfZmV0Y2hfY29sdW1uX2xpc3QoUHVibGljYXRpb24gKnB1Yiwg T2lkIHJlbGlkLAogCQkJCQkJCQkJCU1lbW9yeUNvbnRleHQgbWN4dCwgQml0bWFwc2V0ICoqY29s cyk7CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lkIHB1 YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnByaSwKLQkJCQkJCQkJCQkJICBib29sIGlmX25vdF9l eGlzdHMpOworCQkJCQkJCQkJCQkgIGJvb2wgaWZfbm90X2V4aXN0cywKKwkJCQkJCQkJCQkJICBB bHRlclB1YmxpY2F0aW9uU3RtdCAqYWx0ZXJfc3RtdCk7CiBleHRlcm4gQml0bWFwc2V0ICpwdWJf Y29sbGlzdF92YWxpZGF0ZShSZWxhdGlvbiB0YXJnZXRyZWwsIExpc3QgKmNvbHVtbnMpOwogZXh0 ZXJuIE9iamVjdEFkZHJlc3MgcHVibGljYXRpb25fYWRkX3NjaGVtYShPaWQgcHViaWQsIE9pZCBz Y2hlbWFpZCwKIAkJCQkJCQkJCQkJYm9vbCBpZl9ub3RfZXhpc3RzKTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9k ZXMuaAppbmRleCBmZmFkZDY2NzE2Ny4uMzFmOWY3ZmZmNjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVz LmgKQEAgLTQ1MjUsNiArNDUyNSw4IEBAIHR5cGVkZWYgc3RydWN0IEFsdGVyUHVibGljYXRpb25T dG10CiAJTGlzdAkgICAqcHVib2JqZWN0czsJCS8qIE9wdGlvbmFsIGxpc3Qgb2YgcHVibGljYXRp b24gb2JqZWN0cyAqLwogCUFsdGVyUHVibGljYXRpb25BY3Rpb24gYWN0aW9uOwkvKiBXaGF0IGFj dGlvbiB0byBwZXJmb3JtIHdpdGggdGhlIGdpdmVuCiAJCQkJCQkJCQkgKiBvYmplY3RzICovCisJ Ym9vbAkJZm9yX2FsbF90YWJsZXM7IC8qIFRydWUgaWYgQUxMIFRBQkxFUyBpcyBzcGVjaWZpZWQg Ki8KKwlib29sCQlmb3JfYWxsX3NlcXVlbmNlczsJLyogVHJ1ZSBpZiBBTEwgU0VRVUVOQ0VTIGlz IHNwZWNpZmllZCAqLwogfSBBbHRlclB1YmxpY2F0aW9uU3RtdDsKIAogdHlwZWRlZiBzdHJ1Y3Qg Q3JlYXRlU3Vic2NyaXB0aW9uU3RtdApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wdWJsaWNhdGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0 aW9uLm91dAppbmRleCA2ODFkMjU2NGVkNS4uYjQ3NjI2YjUwM2EgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CkBAIC0yNTQsOSArMjU0LDgxIEBAIEV4Y2VwdCBQ dWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlIgogICAg ICJ0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZTEiCiAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gU0VUIEFMTCBUQUJMRVMvU0VRVUVOQ0VT CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFJlcGxh Y2UgdGhlIGV4aXN0aW5nIEVYQ0VQVCBUQUJMRSBsaXN0ICh0ZXN0cHViX3RibDEpIHdpdGggYSBu ZXcKKy0tIEVYQ0VQVCBUQUJMRSBsaXN0IGNvbnRhaW5pbmcgb25seSAodGVzdHB1Yl90YmwyKS4K K0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlIFNFVCBB TEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90YmwyKTsKK1xkUnArIHRlc3RwdWJfZm9y YWxsdGFibGVzX2V4Y2VwdHRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFi bGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIHNlcXVlbmNl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IEdlbmVyYXRlZCBj b2x1bW5zIHwgVmlhIHJvb3QgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAg ICAgICAgICAgIHwgZiAgICAgICAgfCAKK0V4Y2VwdCB0YWJsZXM6CisgICAgInB1YmxpYy50ZXN0 cHViX3RibDIiCisKKy0tIENsZWFyIHRoZSBFWENFUFQgVEFCTEUgbGlzdCwgbWFraW5nIHRoZSBw dWJsaWNhdGlvbiBpbmNsdWRlIGFsbCB0YWJsZXMuCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi X2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZSBTRVQgQUxMIFRBQkxFUzsKK1xkUnArIHRlc3RwdWJf Zm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0 dGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIHNlcXVl bmNlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IEdlbmVyYXRl ZCBjb2x1bW5zIHwgVmlhIHJvb3QgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUg ICAgICAgICAgICAgIHwgZiAgICAgICAgfCAKKygxIHJvdykKKworLS0gQ3JlYXRlIGFuIGVtcHR5 IHB1YmxpY2F0aW9uIGZvciBzdWJzZXF1ZW50IHRlc3RzLgorQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9yYWxsX3RibHNfc2VxczsKKy0tIEVuYWJsZSBib3RoIHB1YmFsbHRhYmxlcyBhbmQg cHViYWxsc2VxdWVuY2VzCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFsbF90YmxzX3Nl cXMgU0VUIEFMTCBUQUJMRVMsIEFMTCBTRVFVRU5DRVM7CitcZFJwKyB0ZXN0cHViX2ZvcmFsbF90 YmxzX3NlcXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGxfdGJsc19zZXFzCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBzZXF1ZW5jZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBHZW5lcmF0ZWQgY29sdW1ucyB8IFZpYSByb290 IHwgRGVzY3JpcHRpb24gCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IHQgICAgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBub25lICAgICAgICAgICAgICB8IGYgICAg ICAgIHwgCisoMSByb3cpCisKKy0tIEV4cGxpY2l0bHkgdGVzdCB0aGF0IFNFVCBBTEwgVEFCTEVT IHJlc2V0cyBwdWJhbGxzZXF1ZW5jZXMgdG8gZmFsc2UKKy0tIFJlc3VsdCBzaG91bGQgYmU6IHB1 YmFsbHRhYmxlcyA9IHRydWUsIHB1YmFsbHNlcXVlbmNlcyA9IGZhbHNlCitBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViX2ZvcmFsbF90YmxzX3NlcXMgU0VUIEFMTCBUQUJMRVM7CitcZFJwKyB0ZXN0 cHViX2ZvcmFsbF90YmxzX3NlcXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGxfdGJsc19zZXFzCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBzZXF1ZW5jZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBHZW5lcmF0ZWQgY29sdW1u cyB8IFZpYSByb290IHwgRGVzY3JpcHRpb24gCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IGYgICAgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBub25lICAgICAgICAg ICAgICB8IGYgICAgICAgIHwgCisoMSByb3cpCisKKy0tIEV4cGxpY2l0bHkgdGVzdCB0aGF0IFNF VCBBTEwgU0VRVUVOQ0VTIHJlc2V0cyBwdWJhbGx0YWJsZXMgdG8gZmFsc2UKKy0tIFJlc3VsdCBz aG91bGQgYmU6IHB1YmFsbHRhYmxlcyA9IGZhbHNlLCBwdWJhbGxzZXF1ZW5jZXMgPSB0cnVlCitB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFsbF90YmxzX3NlcXMgU0VUIEFMTCBTRVFVRU5D RVM7CitcZFJwKyB0ZXN0cHViX2ZvcmFsbF90YmxzX3NlcXMKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3Jh bGxfdGJsc19zZXFzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFs bCBzZXF1ZW5jZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBH ZW5lcmF0ZWQgY29sdW1ucyB8IFZpYSByb290IHwgRGVzY3JpcHRpb24gCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBub25lICAgICAgICAgICAgICB8IGYgICAgICAgIHwgCisoMSByb3cpCisKKy0tIGZhaWwgLSBT RVQgQUxMIFRBQkxFUy9TRVFVRU5DRVMgaXMgbm90IGFsbG93ZWQgZm9yIGEgJ0ZPUiBUQUJMRScg cHVibGljYXRpb24KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgU0VUIEFMTCBU QUJMRVMgRVhDRVBUIFRBQkxFICh0ZXN0cHViX3RibDEpOworRVJST1I6ICBwdWJsaWNhdGlvbiAi dGVzdHB1Yl9mb3J0YWJsZSIgZG9lcyBub3Qgc3VwcG9ydCBBTEwgVEFCTEVTIG9wZXJhdGlvbnMK K0RFVEFJTDogIFRoaXMgb3BlcmF0aW9uIHJlcXVpcmVzIHRoZSBwdWJsaWNhdGlvbiB0byBiZSBk ZWZpbmVkIGFzIEZPUiBBTEwgVEFCTEVTL1NFUVVFTkNFUyBvciB0byBiZSBlbXB0eS4KK0FMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgU0VUIEFMTCBUQUJMRVM7CitFUlJPUjogIHB1 YmxpY2F0aW9uICJ0ZXN0cHViX2ZvcnRhYmxlIiBkb2VzIG5vdCBzdXBwb3J0IEFMTCBUQUJMRVMg b3BlcmF0aW9ucworREVUQUlMOiAgVGhpcyBvcGVyYXRpb24gcmVxdWlyZXMgdGhlIHB1YmxpY2F0 aW9uIHRvIGJlIGRlZmluZWQgYXMgRk9SIEFMTCBUQUJMRVMvU0VRVUVOQ0VTIG9yIHRvIGJlIGVt cHR5LgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBTRVQgQUxMIFNFUVVFTkNF UzsKK0VSUk9SOiAgcHVibGljYXRpb24gInRlc3RwdWJfZm9ydGFibGUiIGRvZXMgbm90IHN1cHBv cnQgQUxMIFNFUVVFTkNFUyBvcGVyYXRpb25zCitERVRBSUw6ICBUaGlzIG9wZXJhdGlvbiByZXF1 aXJlcyB0aGUgcHVibGljYXRpb24gdG8gYmUgZGVmaW5lZCBhcyBGT1IgQUxMIFRBQkxFUy9TRVFV RU5DRVMgb3IgdG8gYmUgZW1wdHkuCistLSBmYWlsIC0gU0VUIEFMTCBUQUJMRVMgaXMgbm90IGFs bG93ZWQgZm9yIGEgc2NoZW1hIHB1YmxpY2F0aW9uCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi X2ZvcnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHB1Yl90ZXN0LnRlc3RwdWJf bm9wayk7CitFUlJPUjogIHB1YmxpY2F0aW9uICJ0ZXN0cHViX2ZvcnNjaGVtYSIgZG9lcyBub3Qg c3VwcG9ydCBBTEwgVEFCTEVTIG9wZXJhdGlvbnMKK0RFVEFJTDogIFRoaXMgb3BlcmF0aW9uIHJl cXVpcmVzIHRoZSBwdWJsaWNhdGlvbiB0byBiZSBkZWZpbmVkIGFzIEZPUiBBTEwgVEFCTEVTL1NF UVVFTkNFUyBvciB0byBiZSBlbXB0eS4KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2No ZW1hIFNFVCBBTEwgVEFCTEVTOworRVJST1I6ICBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3JzY2hl bWEiIGRvZXMgbm90IHN1cHBvcnQgQUxMIFRBQkxFUyBvcGVyYXRpb25zCitERVRBSUw6ICBUaGlz IG9wZXJhdGlvbiByZXF1aXJlcyB0aGUgcHVibGljYXRpb24gdG8gYmUgZGVmaW5lZCBhcyBGT1Ig QUxMIFRBQkxFUy9TRVFVRU5DRVMgb3IgdG8gYmUgZW1wdHkuCiBSRVNFVCBjbGllbnRfbWluX21l c3NhZ2VzOwogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7Ci1EUk9QIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZm9yYWxsdGFibGVzLCB0ZXN0cHViX2ZvcnRhYmxlLCB0ZXN0cHViX2ZvcnNjaGVtYSwgdGVz dHB1Yl9mb3JfdGJsX3NjaGVtYSwgdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUsIHRl c3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlMTsKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb3JhbGx0YWJsZXMsIHRlc3RwdWJfZm9ydGFibGUsIHRlc3RwdWJfZm9yc2NoZW1hLCB0ZXN0 cHViX2Zvcl90Ymxfc2NoZW1hOworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFsbF90Ymxz X3NlcXMsIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlLCB0ZXN0cHViX2ZvcmFsbHRh Ymxlc19leGNlcHR0YWJsZTE7CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIC0tIFRlc3RzIGZvciBpbmhlcml0ZWQgdGFibGVzLCBhbmQKIC0tIEVYQ0VQVCBU QUJMRSB0ZXN0cyBmb3IgaW5oZXJpdGVkIHRhYmxlcwpAQCAtMzYxLDYgKzQzMyw3IEBAIENSRUFU RSBUQUJMRSB0YWJfbWFpbiAoYSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRShhKTsKIEFMVEVSIFRB QkxFIHRhYl9tYWluIEFUVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl9yb290IEZPUiBWQUxVRVMgRlJP TSAoMCkgVE8gKDIwMCk7CiBFUlJPUjogIGNhbm5vdCBhdHRhY2ggdGFibGUgInRlc3RwdWJfcm9v dCIgYXMgcGFydGl0aW9uIGJlY2F1c2UgaXQgaXMgcmVmZXJlbmNlZCBpbiBwdWJsaWNhdGlvbiAi dGVzdHB1YjgiIEVYQ0VQVCBjbGF1c2UKIERFVEFJTDogIFRoZSBwdWJsaWNhdGlvbiBFWENFUFQg Y2xhdXNlIGNhbm5vdCBjb250YWluIHRhYmxlcyB0aGF0IGFyZSBwYXJ0aXRpb25zLgorSElOVDog IE1vZGlmeSB0aGUgcHVibGljYXRpb24ncyBFWENFUFQgY2xhdXNlIHVzaW5nIEFMVEVSIFBVQkxJ Q0FUSU9OIC4uLiBTRVQgQUxMIFRBQkxFUy4KIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBE Uk9QIFRBQkxFIHRlc3RwdWJfcm9vdCwgdGVzdHB1Yl9wYXJ0MSwgdGFiX21haW47CiBEUk9QIFBV QkxJQ0FUSU9OIHRlc3RwdWI4OwpAQCAtMTU0MSw3ICsxNjE0LDIwIEBAIEVSUk9SOiAgcGVybWlz c2lvbiBkZW5pZWQgdG8gY2hhbmdlIG93bmVyIG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViNCIKIEhJ TlQ6ICBUaGUgb3duZXIgb2YgYSBGT1IgQUxMIFRBQkxFUyBvciBBTEwgU0VRVUVOQ0VTIG9yIFRB QkxFUyBJTiBTQ0hFTUEgcHVibGljYXRpb24gbXVzdCBiZSBhIHN1cGVydXNlci4KIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWI0IG93bmVyIHRvIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjsgLS0g b2sKIFNFVCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjsKLURST1AgUFVCTElDQVRJT04g dGVzdHB1YjQ7CitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CitDUkVBVEUgUFVC TElDQVRJT04gdGVzdHB1YjUgRk9SIEFMTCBUQUJMRVM7CitSRVNFVCBjbGllbnRfbWluX21lc3Nh Z2VzOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgT1dORVIgVE8gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyMzsKK1NFVCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjM7CistLSBmYWls IC0gU0VUIEFMTCBUQUJMRVMvU0VRVUVOQ0VTIG9uIGEgcHVibGljYXRpb24gcmVxdWlyZXMgc3Vw ZXJ1c2VyIHByaXZpbGVnZXMKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBBTEwgVEFC TEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90YmwxKTsgLS0gZmFpbAorRVJST1I6ICBtdXN0IGJl IHN1cGVydXNlciB0byBzZXQgQUxMIFRBQkxFUworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUg U0VUIEFMTCBUQUJMRVM7IC0tIGZhaWwKK0VSUk9SOiAgbXVzdCBiZSBzdXBlcnVzZXIgdG8gc2V0 IEFMTCBUQUJMRVMKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBBTEwgU0VRVUVOQ0VT OyAtLSBmYWlsCitFUlJPUjogIG11c3QgYmUgc3VwZXJ1c2VyIHRvIHNldCBBTEwgU0VRVUVOQ0VT CitTRVQgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXI7CitEUk9QIFBVQkxJQ0FUSU9OIHRl c3RwdWI0LCB0ZXN0cHViNTsKIERST1AgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIzOwog UkVWT0tFIENSRUFURSBPTiBEQVRBQkFTRSByZWdyZXNzaW9uIEZST00gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyMjsKIERST1AgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9w dWJsaWNhdGlvbi5zcWwKaW5kZXggNDA1NTc5ZGFkNTIuLmY4YzU5MzJjOTA4IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvcHVibGljYXRpb24uc3FsCkBAIC0xMTksOSArMTE5LDQ4IEBAIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZTEgRk9SIEFMTCBUQUJMRVMg RVhDRVBUIFRBQkxFCiAtLSBpbiB0aGUgRVhDRVBUIFRBQkxFIGNsYXVzZQogXGQgdGVzdHB1Yl90 YmwxCiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0g U0VUIEFMTCBUQUJMRVMvU0VRVUVOQ0VTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKy0tIFJlcGxhY2UgdGhlIGV4aXN0aW5nIEVYQ0VQVCBUQUJMRSBsaXN0 ICh0ZXN0cHViX3RibDEpIHdpdGggYSBuZXcKKy0tIEVYQ0VQVCBUQUJMRSBsaXN0IGNvbnRhaW5p bmcgb25seSAodGVzdHB1Yl90YmwyKS4KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxs dGFibGVzX2V4Y2VwdHRhYmxlIFNFVCBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90 YmwyKTsKK1xkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlCisKKy0tIENsZWFy IHRoZSBFWENFUFQgVEFCTEUgbGlzdCwgbWFraW5nIHRoZSBwdWJsaWNhdGlvbiBpbmNsdWRlIGFs bCB0YWJsZXMuCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0 YWJsZSBTRVQgQUxMIFRBQkxFUzsKK1xkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRh YmxlCisKKy0tIENyZWF0ZSBhbiBlbXB0eSBwdWJsaWNhdGlvbiBmb3Igc3Vic2VxdWVudCB0ZXN0 cy4KK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFsbF90YmxzX3NlcXM7CisKKy0tIEVu YWJsZSBib3RoIHB1YmFsbHRhYmxlcyBhbmQgcHViYWxsc2VxdWVuY2VzCitBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViX2ZvcmFsbF90YmxzX3NlcXMgU0VUIEFMTCBUQUJMRVMsIEFMTCBTRVFVRU5D RVM7CitcZFJwKyB0ZXN0cHViX2ZvcmFsbF90YmxzX3NlcXMKKworLS0gRXhwbGljaXRseSB0ZXN0 IHRoYXQgU0VUIEFMTCBUQUJMRVMgcmVzZXRzIHB1YmFsbHNlcXVlbmNlcyB0byBmYWxzZQorLS0g UmVzdWx0IHNob3VsZCBiZTogcHViYWxsdGFibGVzID0gdHJ1ZSwgcHViYWxsc2VxdWVuY2VzID0g ZmFsc2UKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsX3RibHNfc2VxcyBTRVQgQUxM IFRBQkxFUzsKK1xkUnArIHRlc3RwdWJfZm9yYWxsX3RibHNfc2VxcworCistLSBFeHBsaWNpdGx5 IHRlc3QgdGhhdCBTRVQgQUxMIFNFUVVFTkNFUyByZXNldHMgcHViYWxsdGFibGVzIHRvIGZhbHNl CistLSBSZXN1bHQgc2hvdWxkIGJlOiBwdWJhbGx0YWJsZXMgPSBmYWxzZSwgcHViYWxsc2VxdWVu Y2VzID0gdHJ1ZQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JhbGxfdGJsc19zZXFzIFNF VCBBTEwgU0VRVUVOQ0VTOworXGRScCsgdGVzdHB1Yl9mb3JhbGxfdGJsc19zZXFzCisKKy0tIGZh aWwgLSBTRVQgQUxMIFRBQkxFUy9TRVFVRU5DRVMgaXMgbm90IGFsbG93ZWQgZm9yIGEgJ0ZPUiBU QUJMRScgcHVibGljYXRpb24KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgU0VU IEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFICh0ZXN0cHViX3RibDEpOworQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1Yl9mb3J0YWJsZSBTRVQgQUxMIFRBQkxFUzsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9ydGFibGUgU0VUIEFMTCBTRVFVRU5DRVM7CisKKy0tIGZhaWwgLSBTRVQgQUxMIFRB QkxFUyBpcyBub3QgYWxsb3dlZCBmb3IgYSBzY2hlbWEgcHVibGljYXRpb24KK0FMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIFNFVCBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAocHVi X3Rlc3QudGVzdHB1Yl9ub3BrKTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1h IFNFVCBBTEwgVEFCTEVTOworCiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogRFJPUCBUQUJM RSB0ZXN0cHViX3RibDI7Ci1EUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzLCB0 ZXN0cHViX2ZvcnRhYmxlLCB0ZXN0cHViX2ZvcnNjaGVtYSwgdGVzdHB1Yl9mb3JfdGJsX3NjaGVt YSwgdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUsIHRlc3RwdWJfZm9yYWxsdGFibGVz X2V4Y2VwdHRhYmxlMTsKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JhbGx0YWJsZXMsIHRl c3RwdWJfZm9ydGFibGUsIHRlc3RwdWJfZm9yc2NoZW1hLCB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1h OworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFsbF90YmxzX3NlcXMsIHRlc3RwdWJfZm9y YWxsdGFibGVzX2V4Y2VwdHRhYmxlLCB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZTE7 CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gVGVz dHMgZm9yIGluaGVyaXRlZCB0YWJsZXMsIGFuZApAQCAtOTkxLDcgKzEwMzAsMTggQEAgQUxURVIg UFVCTElDQVRJT04gdGVzdHB1YjQgb3duZXIgdG8gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsg LS0gZmFpbAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjQgb3duZXIgdG8gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyOyAtLSBvawogCiBTRVQgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXI7 Ci1EUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWI0OworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAn RVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEZPUiBBTEwgVEFCTEVTOworUkVT RVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IE9XTkVS IFRPIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjM7CitTRVQgUk9MRSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIzOworLS0gZmFpbCAtIFNFVCBBTEwgVEFCTEVTL1NFUVVFTkNFUyBvbiBhIHB1Ymxp Y2F0aW9uIHJlcXVpcmVzIHN1cGVydXNlciBwcml2aWxlZ2VzCitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViNSBTRVQgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHRlc3RwdWJfdGJsMSk7IC0tIGZh aWwKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBBTEwgVEFCTEVTOyAtLSBmYWlsCitB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBTRVQgQUxMIFNFUVVFTkNFUzsgLS0gZmFpbAorCitT RVQgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXI7CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3Rw dWI0LCB0ZXN0cHViNTsKIERST1AgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIzOwogCiBS RVZPS0UgQ1JFQVRFIE9OIERBVEFCQVNFIHJlZ3Jlc3Npb24gRlJPTSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIyOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM3X2V4Y2Vw dC5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzN19leGNlcHQucGwKaW5kZXggMjcyOWRm NGQ1YzAuLjEzYjk5ZWRhMjU4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w MzdfZXhjZXB0LnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzN19leGNlcHQucGwK QEAgLTE1MiwxOCArMTUyLDUwIEBAICRyZXN1bHQgPQogICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIGNoaWxkMSIpOwogaXMoJHJl c3VsdCwgcXEoMTApLCAnY2hlY2sgcmVwbGljYXRlZCBpbnNlcnRzIG9uIHN1YnNjcmliZXInKTsK IAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxF IHRhYjIgQVMgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLDEwKSBBUyBhIik7Ciskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0YWIyIChhIGludCki KTsKKworIyBSZXBsYWNlIHRoZSBFWENFUFQgVEFCTEUgbGlzdCBzbyB0aGF0IG9ubHkgdGFiMiBp cyBleGNsdWRlZC4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFM VEVSIFBVQkxJQ0FUSU9OIHRhYl9wdWIgU0VUIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFICh0YWIy KSIpOworCisjIFJlZnJlc2ggdGhlIHN1YnNjcmlwdGlvbiBzbyB0aGUgc3Vic2NyaWJlciBwaWNr cyB1cCB0aGUgdXBkYXRlZAorIyBwdWJsaWNhdGlvbiBkZWZpbml0aW9uIGFuZCBpbml0aWF0ZXMg dGFibGUgc3luY2hyb25pemF0aW9uLgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIkFMVEVSIFNVQlNDUklQVElPTiB0YWJfc3ViIFJFRlJFU0ggUFVCTElDQVRJT04i KTsKKworIyBXYWl0IGZvciBpbml0aWFsIHRhYmxlIHN5bmMgdG8gZmluaXNoCiskbm9kZV9zdWJz Y3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9wdWJsaXNoZXIsICd0YWJf c3ViJyk7CisKKyMgVmVyaWZ5IHRoYXQgaW5pdGlhbCB0YWJsZSBzeW5jaHJvbml6YXRpb24gZG9l cyBub3Qgb2NjdXIgZm9yIHRhYmxlcworIyBsaXN0ZWQgaW4gdGhlIEVYQ0VQVCBUQUJMRSBjbGF1 c2UuCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSB0YWIyIik7CitpcygkcmVzdWx0LCBxcSgwKSwKKwknY2hl Y2sgdGhlcmUgaXMgbm8gaW5pdGlhbCBkYXRhIGNvcGllZCBmb3IgdGhlIHRhYmxlcyBzcGVjaWZp ZWQgaW4gdGhlIEVYQ0VQVCBUQUJMRSBjbGF1c2UnCispOworCisjIFZlcmlmeSB0aGF0IHRhYmxl IHN5bmNocm9uaXphdGlvbiBub3cgaGFwcGVucyBmb3IgdGFiMS4gVGFibGUgdGFiMSBpcworIyBp bmNsdWRlZCBub3cgc2luY2UgdGhlIEVYQ0VQVCBUQUJMRSBsaXN0IGlzIG9ubHkgKHRhYjIpLgor JHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvdW50KCopIEZST00gdGFiMSIpOworaXMoJHJlc3VsdCwgcXEoMjApLAorCSdjaGVjayB0 aGF0IHRoZSBkYXRhIGlzIGNvcGllZCBhcyB0aGUgdGFiMSBpcyByZW1vdmVkIGZyb20gRVhDRVBU IFRBQkxFIGNsYXVzZScKKyk7CisKICMgY2xlYW51cAogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKAogCSdwb3N0Z3JlcycsIHFxKAogCURST1AgU1VCU0NSSVBUSU9OIHRhYl9zdWI7CiAJVFJV TkNBVEUgVEFCTEUgdGFiMTsKLQlEUk9QIFRBQkxFIHBhcmVudCwgcGFyZW50MSwgY2hpbGQsIGNo aWxkMTsKKwlEUk9QIFRBQkxFIHBhcmVudCwgcGFyZW50MSwgY2hpbGQsIGNoaWxkMSwgdGFiMjsK ICkpOwogJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCiAJJ3Bvc3RncmVzJywgcXEoCiAJRFJP UCBQVUJMSUNBVElPTiB0YWJfcHViOwogCVRSVU5DQVRFIFRBQkxFIHRhYjE7Ci0gICAgRFJPUCBU QUJMRSBwYXJlbnQsIHBhcmVudDEsIGNoaWxkLCBjaGlsZDE7CisgICAgRFJPUCBUQUJMRSBwYXJl bnQsIHBhcmVudDEsIGNoaWxkLCBjaGlsZDEsIHRhYjI7CiApKTsKIAogIyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLSAKMi40My4wCgo= --0000000000008d6a4c064d4c5375--