Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1stWaW-00H6Px-Cg for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Sep 2024 18:18:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1stWaU-00COuZ-AT for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Sep 2024 18:18:06 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1stWaT-00COuR-JL for pgsql-hackers@lists.postgresql.org; Wed, 25 Sep 2024 18:18:05 +0000 Received: from mail-il1-x12b.google.com ([2607:f8b0:4864:20::12b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1stWaM-0012AC-Nn for pgsql-hackers@lists.postgresql.org; Wed, 25 Sep 2024 18:18:04 +0000 Received: by mail-il1-x12b.google.com with SMTP id e9e14a558f8ab-3a09c977dfbso480145ab.2 for ; Wed, 25 Sep 2024 11:17:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1727288278; x=1727893078; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=cWRag72e24MCg3Ica89Pguoe3SsP5WDq+EO4QzBHUuY=; b=UXC48MTW5qqwXZquo0mz9m3wVgZ3Uky4+vzfmBfKdE2psSySxjbIMFwy+Mnr2Hj0oU AzWWnZYN4uYfRd0jw96B89G/iPUedMn755prMprZWX3eEl6ivYBKvYZt9tp1+Uk/2XMe nV4qRpwVjd41Ln9QYER2ogB0UwhbItpsGkyAh2ayaHtXuDG13FjzJiq7W2x2GFp1zy7n A1pGoVA5Lm6nNOPmcCDaj0jy28qbezZWvkEWKZjUTfG9hAZ/X8tsVaYpmpTA6HFIMk3E S/20noBEHlY3whFr5fCtWNz3+BMVxhDzYTfdC6vvpNs+z7qfFeg+Z32cJaTD3a6IY1G7 IcpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727288278; x=1727893078; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=cWRag72e24MCg3Ica89Pguoe3SsP5WDq+EO4QzBHUuY=; b=GBYMLFkiE+GUSOdyDEOFzFyeBfwU1o1WMsmQYoX/u+szWCnwcZGAXMJ/3PLzctP0dj K03Vh/XP7Szb1H/rSBCYFFLAUrxFqsXElsiCDr2FDdglpkUfnSkPA7bebLrjyfL5bUl3 n/2lt6Hv36TTZPNx4ORey6uK7tEmV9Ox8gmo4tgciIVpm4fdgACGV6TQyXW9lC0uoh6/ wVb82kzm0SAS37SVAyXDMHtSr4n3Z7hchrUOr+CovoQKioeIOuvGD6bhOSD8E/ePQ4xD 1F0gqOF4cCndmnAD4xVFUrQu/9JAWVmCFSOHlZ1ThPBAAv8Zx8jMXKlQm5rocogdhbEc V+ww== X-Gm-Message-State: AOJu0YyRz2cxs/Ax0cAQNPCD9q74EIJl0h9JsWpNWMCyhi9GINDcVdKu tUOtcIerdCnqJGg0uV9aE35RJezpi01qlZ4NzIHwc1JbpcWMy1XxGf+8GolZzMNfhmtYyCe95bd myguBc+CSCll0ygNnkVHReezyBxo4seU2M50= X-Google-Smtp-Source: AGHT+IGvvsTpEZ8pEKQ/zAfK7H8JZhhOhF5RyxN/7aMWjKju/eMFUOKHNXn8/Zzmt0HNJP2S7lRSzef1rjq4HdUoxXY= X-Received: by 2002:a05:6e02:b41:b0:3a0:97df:997e with SMTP id e9e14a558f8ab-3a26d788d4dmr42690265ab.14.1727288277367; Wed, 25 Sep 2024 11:17:57 -0700 (PDT) MIME-Version: 1.0 From: Florents Tselai Date: Wed, 25 Sep 2024 21:17:20 +0300 Message-ID: Subject: PATCH: jsonpath string methods: lower, upper, initcap, l/r/btrim, replace, split_part To: pgsql-hackers Content-Type: multipart/mixed; boundary="00000000000032ac4f0622f5a46b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000032ac4f0622f5a46b Content-Type: multipart/alternative; boundary="00000000000032ac4d0622f5a469" --00000000000032ac4d0622f5a469 Content-Type: text/plain; charset="UTF-8" Hello hackers, This patch is a follow-up and generalization to [0]. It adds the following jsonpath methods: lower, upper, initcap, l/r/btrim, replace, split_part. It makes jsonpath able to support expressions like these: select jsonb_path_query('" hElLo WorlD "', '$.btrim().lower().upper().lower().replace("hello","bye") starts with "bye"'); select jsonb_path_query('"abc~@~def~@~ghi"', '$.split_part("~@~", 2)') They, of course, forward their implementation to the internal pg_proc-registered function. As a first wip/poc I've picked the functions I typically need to clean up JSON data. I've also added a README.jsonpath with documentation on how to add a new jsonpath method. If I had this available when I started, it would have saved me some time. So, I am leaving it here for the next hacker. This patch is not particularly intrusive to existing code: Afaict, the only struct I've touched is JsonPathParseItem , where I added { JsonPathParseItem *arg0, *arg1; } method_args. Up until now, most of the jsonpath methods that accept arguments rely on left/right operands, which works, but it could be more convenient for future more complex methods. I've also added the appropriate jspGetArgX(JsonPathItem *v, JsonPathItem *a). Open items - What happens if the jsonpath standard adds a new method by the same name? A.D. mentioned this in [0] with the proposal of having a prefix like pg_ or initial-upper letter. - Still using the default collation like the rest of the jsonpath code. - documentation N/A yet - I do realize that the process of adding a new method sketches an imaginary. CREATE JSONPATH FUNCTION. This has been on the back of my mind for some time now, but I can't say I have an action plan for this yet. GitHub PR view if you prefer: https://github.com/Florents-Tselai/postgres/pull/18 [0] https://www.postgresql.org/message-id/flat/185BF814-9225-46DB-B1A1-6468CF2C8B63%40justatheory.com#1850a37a98198974cf543aefe225ba56 All the best, Flo --00000000000032ac4d0622f5a469 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello hackers,

This patch is a follow-u= p and generalization to [0].

It adds the foll= owing jsonpath methods:=C2=A0=C2=A0lower, upper, initcap, l/r/btrim, replac= e, split_part.

It makes = jsonpath able to support expressions like these:

s= elect jsonb_path_query('" =C2=A0 hElLo WorlD "', =C2=A0&#= 39;$.btrim().lower().upper().lower().replace("hello","bye&qu= ot;) starts with "bye"');
select jsonb_path_query(&= #39;"abc~@~def~@~ghi"', '$.split_part("~@~", 2)= ')

They, of course, forward their implementation to t= he internal pg_proc-registered function.

As a firs= t wip/poc I've picked the functions I typically need to clean up JSON d= ata.
I've also added a README.jsonpath=C2=A0with documentation on ho= w to add a new jsonpath method.
If I had this available when I started, = it would have saved me some time.
So, I am leaving it here for the next = hacker.

This patch is not particularly intrusive t= o existing code:
Afaict, the only struct I've touched is=C2=A0JsonPa= thParseItem , where I added=C2=A0{ JsonPathParseItem *arg0, *arg1; } method= _args.
Up until now, most of the jsonpath methods that accept arguments = rely on left/right operands,=C2=A0
which works, but it could be m= ore convenient for future more complex methods.=C2=A0
I've al= so added the appropriate jspGetArgX(JsonPathItem *v, JsonPathItem *a).

Open items
- What happens if the jsonpath st= andard adds a new method by the same name?=C2=A0
A.D. mentioned t= his in [0] with the proposal of having a prefix like pg_ or initial-upper l= etter.
- Still using the default collation like the rest of the j= sonpath code.
- documentation N/A yet
- I do reali= ze that the process of adding a new method sketches an imaginary.
=
CREATE JSONPATH FUNCTION. This has been on the back of my mind for som= e time now,
but I can't say I have an action plan for this ye= t.



All = the best,
Flo
--00000000000032ac4d0622f5a469-- --00000000000032ac4f0622f5a46b Content-Type: application/octet-stream; name="v1-0001-This-patch-adds-the-following-string-processing-m.patch" Content-Disposition: attachment; filename="v1-0001-This-patch-adds-the-following-string-processing-m.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m1i6ry3c0 RnJvbSAzY2YzMzhkMGU4OTRhMzk4ODRhMmMyNmY4MTliMTczNzgxYTJmNWMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGbG9yZW50cyBUc2VsYWkgPGZsb3JlbnRzLnRzZWxhaUBnbWFp bC5jb20+CkRhdGU6IFdlZCwgMjUgU2VwIDIwMjQgMjE6MTA6MDcgKzAzMDAKU3ViamVjdDogW1BB VENIIHYxXSBUaGlzIHBhdGNoIGFkZHMgdGhlIGZvbGxvd2luZyBzdHJpbmcgcHJvY2Vzc2luZyBt ZXRob2RzIHRvCiBqc29ucGF0aDogKiBsL3IvYnRyaW0oKSAqIGxvd2VyKCksIHVwcGVyKCksIGlu aXRjYXAoKSAqIHJlcGxhY2UoKSwKIHNwbGl0X3BhcnQoKQoKVGhlIGFjdHVhbCBpbXBsZW1lbnRh dGlvbiBvZiB0aGVzZSwgaXMgcm91dGVkIHRvIHRoZSBzdGFuZGFyZCBzdHJpbmcgcHJvY2Vzc2lu ZyBmdW5jdGlvbnMuCgpBbHNvIGFkZHMgYSBqc29ucGF0aC5SRUFETUUgZG9jdW1lbnRpbmcgdGhl IHByb2Nlc3Mgb2YgYWRkaW5nIGEgbmV3IG1ldGhvZCwKZm9yIGZ1dHVyZSByZWZlcmVuY2UuCi0t LQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoLmMgICAgICAgICAgICAgfCAxNzYgKysr KysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jICAgICAgICB8IDE4 OSArKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9ncmFtLnkgICAgICAg IHwgIDcxICsrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9zY2FuLmwgICAgICAg IHwgICA4ICsKIHNyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmggICAgICAgICAgICAgICAgIHwg IDIyICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX2pzb25wYXRoLm91dCB8IDM5 MyArKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25wYXRo Lm91dCAgICAgICB8ICA3MiArKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9qc29ucGF0 aC5zcWwgICAgICB8IDEwOCArKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbnBhdGguc3Fs ICAgICAgICAgICAgfCAgMTMgKwogOSBmaWxlcyBjaGFuZ2VkLCAxMDQ4IGluc2VydGlvbnMoKyks IDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25w YXRoLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGguYwppbmRleCAwZjY5MWJjNWYw Li44ODdkOTVkMTNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGgu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGguYwpAQCAtMzI2LDYgKzMyNiwz OCBAQCBmbGF0dGVuSnNvblBhdGhQYXJzZUl0ZW0oU3RyaW5nSW5mbyBidWYsIGludCAqcmVzdWx0 LCBzdHJ1Y3QgTm9kZSAqZXNjb250ZXh0LAogCQkJCSooaW50MzIgKikgKGJ1Zi0+ZGF0YSArIHJp Z2h0KSA9IGNobGQgLSBwb3M7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBqcGlSZXBsYWNlRnVu YzoKKwkJY2FzZSBqcGlTdHJTcGxpdFBhcnRGdW5jOgorCQl7CisJCQl7CisJCQkJLyoKKwkJCQkg KiBGaXJzdCwgcmVzZXJ2ZSBwbGFjZSBmb3IgbGVmdC9yaWdodCBhcmcncyBwb3NpdGlvbnMsIHRo ZW4KKwkJCQkgKiByZWNvcmQgYm90aCBhcmdzIGFuZCBzZXRzIGFjdHVhbCBwb3NpdGlvbiBpbiBy ZXNlcnZlZAorCQkJCSAqIHBsYWNlcy4KKwkJCQkgKi8KKwkJCQlpbnQzMgkJYXJnMCA9IHJlc2Vy dmVTcGFjZUZvckl0ZW1Qb2ludGVyKGJ1Zik7CisJCQkJaW50MzIJCWFyZzEgPSByZXNlcnZlU3Bh Y2VGb3JJdGVtUG9pbnRlcihidWYpOworCisJCQkJaWYgKCFpdGVtLT52YWx1ZS5tZXRob2RfYXJn cy5hcmcwKQorCQkJCQljaGxkID0gcG9zOworCQkJCWVsc2UgaWYgKCFmbGF0dGVuSnNvblBhdGhQ YXJzZUl0ZW0oYnVmLCAmY2hsZCwgZXNjb250ZXh0LAorCQkJCQkJCQkJCQkJICAgaXRlbS0+dmFs dWUubWV0aG9kX2FyZ3MuYXJnMCwKKwkJCQkJCQkJCQkJCSAgIG5lc3RpbmdMZXZlbCArIGFyZ05l c3RpbmdMZXZlbCwKKwkJCQkJCQkJCQkJCSAgIGluc2lkZUFycmF5U3Vic2NyaXB0KSkKKwkJCQkJ cmV0dXJuIGZhbHNlOworCQkJCSooaW50MzIgKikgKGJ1Zi0+ZGF0YSArIGFyZzApID0gY2hsZCAt IHBvczsKKworCQkJCWlmICghaXRlbS0+dmFsdWUubWV0aG9kX2FyZ3MuYXJnMSkKKwkJCQkJY2hs ZCA9IHBvczsKKwkJCQllbHNlIGlmICghZmxhdHRlbkpzb25QYXRoUGFyc2VJdGVtKGJ1ZiwgJmNo bGQsIGVzY29udGV4dCwKKwkJCQkJCQkJCQkJCSAgIGl0ZW0tPnZhbHVlLm1ldGhvZF9hcmdzLmFy ZzEsCisJCQkJCQkJCQkJCQkgICBuZXN0aW5nTGV2ZWwgKyBhcmdOZXN0aW5nTGV2ZWwsCisJCQkJ CQkJCQkJCQkgICBpbnNpZGVBcnJheVN1YnNjcmlwdCkpCisJCQkJCXJldHVybiBmYWxzZTsKKwkJ CQkqKGludDMyICopIChidWYtPmRhdGEgKyBhcmcxKSA9IGNobGQgLSBwb3M7CisJCQl9CisJCX0K KwkJYnJlYWs7CiAJCWNhc2UganBpTGlrZVJlZ2V4OgogCQkJewogCQkJCWludDMyCQlvZmZzOwpA QCAtMzYyLDYgKzM5NCw5IEBAIGZsYXR0ZW5Kc29uUGF0aFBhcnNlSXRlbShTdHJpbmdJbmZvIGJ1 ZiwgaW50ICpyZXN1bHQsIHN0cnVjdCBOb2RlICplc2NvbnRleHQsCiAJCWNhc2UganBpVGltZVR6 OgogCQljYXNlIGpwaVRpbWVzdGFtcDoKIAkJY2FzZSBqcGlUaW1lc3RhbXBUejoKKwkJY2FzZSBq cGlTdHJMdHJpbUZ1bmM6CisJCWNhc2UganBpU3RyUnRyaW1GdW5jOgorCQljYXNlIGpwaVN0ckJ0 cmltRnVuYzoKIAkJCXsKIAkJCQlpbnQzMgkJYXJnID0gcmVzZXJ2ZVNwYWNlRm9ySXRlbVBvaW50 ZXIoYnVmKTsKIApAQCAtNDU3LDYgKzQ5Miw5IEBAIGZsYXR0ZW5Kc29uUGF0aFBhcnNlSXRlbShT dHJpbmdJbmZvIGJ1ZiwgaW50ICpyZXN1bHQsIHN0cnVjdCBOb2RlICplc2NvbnRleHQsCiAJCWNh c2UganBpSW50ZWdlcjoKIAkJY2FzZSBqcGlOdW1iZXI6CiAJCWNhc2UganBpU3RyaW5nRnVuYzoK KwkJY2FzZSBqcGlTdHJMb3dlckZ1bmM6CisJCWNhc2UganBpU3RyVXBwZXJGdW5jOgorCQljYXNl IGpwaVN0ckluaXRjYXBGdW5jOgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9S LCAidW5yZWNvZ25pemVkIGpzb25wYXRoIGl0ZW0gdHlwZTogJWQiLCBpdGVtLT50eXBlKTsKQEAg LTgzMSw2ICs4NjksNzIgQEAgcHJpbnRKc29uUGF0aEl0ZW0oU3RyaW5nSW5mbyBidWYsIEpzb25Q YXRoSXRlbSAqdiwgYm9vbCBpbktleSwKIAkJCX0KIAkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1 ZiwgJyknKTsKIAkJCWJyZWFrOworCQljYXNlIGpwaVJlcGxhY2VGdW5jOgorCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsICIucmVwbGFjZSgiKTsKKwkJCWlmICh2LT5jb250ZW50Lm1ldGhv ZF9hcmdzLmFyZzApCisJCQl7CisJCQkJanNwR2V0QXJnMCh2LCAmZWxlbSk7CisJCQkJcHJpbnRK c29uUGF0aEl0ZW0oYnVmLCAmZWxlbSwgZmFsc2UsIGZhbHNlKTsKKwkJCX0KKwkJCWlmICh2LT5j b250ZW50Lm1ldGhvZF9hcmdzLmFyZzEpCisJCQl7CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo YnVmLCAnLCcpOworCQkJCWpzcEdldEFyZzEodiwgJmVsZW0pOworCQkJCXByaW50SnNvblBhdGhJ dGVtKGJ1ZiwgJmVsZW0sIGZhbHNlLCBmYWxzZSk7CisJCQl9CisJCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihidWYsICcpJyk7CisJCQlicmVhazsKKwkJY2FzZSBqcGlTdHJTcGxpdFBhcnRGdW5jOgor CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIuc3BsaXRfcGFydCgiKTsKKwkJCWlmICh2 LT5jb250ZW50Lm1ldGhvZF9hcmdzLmFyZzApCisJCQl7CisJCQkJanNwR2V0QXJnMCh2LCAmZWxl bSk7CisJCQkJcHJpbnRKc29uUGF0aEl0ZW0oYnVmLCAmZWxlbSwgZmFsc2UsIGZhbHNlKTsKKwkJ CX0KKwkJCWlmICh2LT5jb250ZW50Lm1ldGhvZF9hcmdzLmFyZzEpCisJCQl7CisJCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoYnVmLCAnLCcpOworCQkJCWpzcEdldEFyZzEodiwgJmVsZW0pOworCQkJ CXByaW50SnNvblBhdGhJdGVtKGJ1ZiwgJmVsZW0sIGZhbHNlLCBmYWxzZSk7CisJCQl9CisJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7CisJCQlicmVhazsKKwkJY2FzZSBqcGlTdHJM b3dlckZ1bmM6CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIi5sb3dlcigpIik7CisJ CQlicmVhazsKKwkJY2FzZSBqcGlTdHJVcHBlckZ1bmM6CisJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKGJ1ZiwgIi51cHBlcigpIik7CisJCQlicmVhazsKKwkJY2FzZSBqcGlTdHJJbml0Y2FwRnVu YzoKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiLmluaXRjYXAoKSIpOworCQkJYnJl YWs7CisJCWNhc2UganBpU3RyTHRyaW1GdW5jOgorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhi dWYsICIubHRyaW0oIik7CisJCQlpZiAodi0+Y29udGVudC5hcmcpCisJCQl7CisJCQkJanNwR2V0 QXJnKHYsICZlbGVtKTsKKwkJCQlwcmludEpzb25QYXRoSXRlbShidWYsICZlbGVtLCBmYWxzZSwg ZmFsc2UpOworCQkJfQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKScpOworCQkJYnJl YWs7CisJCWNhc2UganBpU3RyUnRyaW1GdW5jOgorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhi dWYsICIucnRyaW0oIik7CisJCQlpZiAodi0+Y29udGVudC5hcmcpCisJCQl7CisJCQkJanNwR2V0 QXJnKHYsICZlbGVtKTsKKwkJCQlwcmludEpzb25QYXRoSXRlbShidWYsICZlbGVtLCBmYWxzZSwg ZmFsc2UpOworCQkJfQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKScpOworCQkJYnJl YWs7CisJCWNhc2UganBpU3RyQnRyaW1GdW5jOgorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhi dWYsICIuYnRyaW0oIik7CisJCQlpZiAodi0+Y29udGVudC5hcmcpCisJCQl7CisJCQkJanNwR2V0 QXJnKHYsICZlbGVtKTsKKwkJCQlwcmludEpzb25QYXRoSXRlbShidWYsICZlbGVtLCBmYWxzZSwg ZmFsc2UpOworCQkJfQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKScpOworCQkJYnJl YWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGpzb25wYXRoIGl0 ZW0gdHlwZTogJWQiLCB2LT50eXBlKTsKIAl9CkBAIC05MDYsNiArMTAxMCwxMiBAQCBqc3BPcGVy YXRpb25OYW1lKEpzb25QYXRoSXRlbVR5cGUgdHlwZSkKIAkJCXJldHVybiAibnVtYmVyIjsKIAkJ Y2FzZSBqcGlTdHJpbmdGdW5jOgogCQkJcmV0dXJuICJzdHJpbmciOworCQljYXNlIGpwaVJlcGxh Y2VGdW5jOgorCQkJcmV0dXJuICJyZXBsYWNlIjsKKwkJY2FzZSBqcGlTdHJMb3dlckZ1bmM6CisJ CQlyZXR1cm4gImxvd2VyIjsKKwkJY2FzZSBqcGlTdHJVcHBlckZ1bmM6CisJCQlyZXR1cm4gInVw cGVyIjsKIAkJY2FzZSBqcGlUaW1lOgogCQkJcmV0dXJuICJ0aW1lIjsKIAkJY2FzZSBqcGlUaW1l VHo6CkBAIC05MTQsNiArMTAyNCwxNiBAQCBqc3BPcGVyYXRpb25OYW1lKEpzb25QYXRoSXRlbVR5 cGUgdHlwZSkKIAkJCXJldHVybiAidGltZXN0YW1wIjsKIAkJY2FzZSBqcGlUaW1lc3RhbXBUejoK IAkJCXJldHVybiAidGltZXN0YW1wX3R6IjsKKwkJY2FzZSBqcGlTdHJMdHJpbUZ1bmM6CisJCQly ZXR1cm4gImx0cmltIjsKKwkJY2FzZSBqcGlTdHJSdHJpbUZ1bmM6CisJCQlyZXR1cm4gInJ0cmlt IjsKKwkJY2FzZSBqcGlTdHJCdHJpbUZ1bmM6CisJCQlyZXR1cm4gImJ0cmltIjsKKwkJY2FzZSBq cGlTdHJJbml0Y2FwRnVuYzoKKwkJCXJldHVybiAiaW5pdGNhcCI7CisJCWNhc2UganBpU3RyU3Bs aXRQYXJ0RnVuYzoKKwkJCXJldHVybiAic3BsaXRfcGFydCI7CiAJCWRlZmF1bHQ6CiAJCQllbG9n KEVSUk9SLCAidW5yZWNvZ25pemVkIGpzb25wYXRoIGl0ZW0gdHlwZTogJWQiLCB0eXBlKTsKIAkJ CXJldHVybiBOVUxMOwpAQCAtMTAxNiw2ICsxMTM2LDkgQEAganNwSW5pdEJ5QnVmZmVyKEpzb25Q YXRoSXRlbSAqdiwgY2hhciAqYmFzZSwgaW50MzIgcG9zKQogCQljYXNlIGpwaUludGVnZXI6CiAJ CWNhc2UganBpTnVtYmVyOgogCQljYXNlIGpwaVN0cmluZ0Z1bmM6CisJCWNhc2UganBpU3RyTG93 ZXJGdW5jOgorCQljYXNlIGpwaVN0clVwcGVyRnVuYzoKKwkJY2FzZSBqcGlTdHJJbml0Y2FwRnVu YzoKIAkJCWJyZWFrOwogCQljYXNlIGpwaVN0cmluZzoKIAkJY2FzZSBqcGlLZXk6CkBAIC0xMDQ0 LDYgKzExNjcsMTEgQEAganNwSW5pdEJ5QnVmZmVyKEpzb25QYXRoSXRlbSAqdiwgY2hhciAqYmFz ZSwgaW50MzIgcG9zKQogCQkJcmVhZF9pbnQzMih2LT5jb250ZW50LmFyZ3MubGVmdCwgYmFzZSwg cG9zKTsKIAkJCXJlYWRfaW50MzIodi0+Y29udGVudC5hcmdzLnJpZ2h0LCBiYXNlLCBwb3MpOwog CQkJYnJlYWs7CisJCWNhc2UganBpUmVwbGFjZUZ1bmM6CisJCWNhc2UganBpU3RyU3BsaXRQYXJ0 RnVuYzoKKwkJCXJlYWRfaW50MzIodi0+Y29udGVudC5tZXRob2RfYXJncy5hcmcwLCBiYXNlLCBw b3MpOworCQkJcmVhZF9pbnQzMih2LT5jb250ZW50Lm1ldGhvZF9hcmdzLmFyZzEsIGJhc2UsIHBv cyk7CisJCWJyZWFrOwogCQljYXNlIGpwaU5vdDoKIAkJY2FzZSBqcGlJc1Vua25vd246CiAJCWNh c2UganBpRXhpc3RzOgpAQCAtMTA1NSw2ICsxMTgzLDkgQEAganNwSW5pdEJ5QnVmZmVyKEpzb25Q YXRoSXRlbSAqdiwgY2hhciAqYmFzZSwgaW50MzIgcG9zKQogCQljYXNlIGpwaVRpbWVUejoKIAkJ Y2FzZSBqcGlUaW1lc3RhbXA6CiAJCWNhc2UganBpVGltZXN0YW1wVHo6CisJCWNhc2UganBpU3Ry THRyaW1GdW5jOgorCQljYXNlIGpwaVN0clJ0cmltRnVuYzoKKwkJY2FzZSBqcGlTdHJCdHJpbUZ1 bmM6CiAJCQlyZWFkX2ludDMyKHYtPmNvbnRlbnQuYXJnLCBiYXNlLCBwb3MpOwogCQkJYnJlYWs7 CiAJCWNhc2UganBpSW5kZXhBcnJheToKQEAgLTEwOTAsNyArMTIyMSwxMCBAQCBqc3BHZXRBcmco SnNvblBhdGhJdGVtICp2LCBKc29uUGF0aEl0ZW0gKmEpCiAJCSAgIHYtPnR5cGUgPT0ganBpVGlt ZSB8fAogCQkgICB2LT50eXBlID09IGpwaVRpbWVUeiB8fAogCQkgICB2LT50eXBlID09IGpwaVRp bWVzdGFtcCB8fAotCQkgICB2LT50eXBlID09IGpwaVRpbWVzdGFtcFR6KTsKKwkJICAgdi0+dHlw ZSA9PSBqcGlUaW1lc3RhbXBUeiB8fAorCQkgICB2LT50eXBlID09IGpwaVN0ckx0cmltRnVuYyB8 fAorCQkgICB2LT50eXBlID09IGpwaVN0clJ0cmltRnVuYyB8fAorCQkgICB2LT50eXBlID09IGpw aVN0ckJ0cmltRnVuYyk7CiAKIAlqc3BJbml0QnlCdWZmZXIoYSwgdi0+YmFzZSwgdi0+Y29udGVu dC5hcmcpOwogfQpAQCAtMTE0OSwxMCArMTI4MywxOCBAQCBqc3BHZXROZXh0KEpzb25QYXRoSXRl bSAqdiwgSnNvblBhdGhJdGVtICphKQogCQkJICAgdi0+dHlwZSA9PSBqcGlJbnRlZ2VyIHx8CiAJ CQkgICB2LT50eXBlID09IGpwaU51bWJlciB8fAogCQkJICAgdi0+dHlwZSA9PSBqcGlTdHJpbmdG dW5jIHx8CisJCQkgICB2LT50eXBlID09IGpwaVJlcGxhY2VGdW5jIHx8CisJCQkgICB2LT50eXBl ID09IGpwaVN0ckxvd2VyRnVuYyB8fAorCQkJICAgdi0+dHlwZSA9PSBqcGlTdHJVcHBlckZ1bmMg fHwKIAkJCSAgIHYtPnR5cGUgPT0ganBpVGltZSB8fAogCQkJICAgdi0+dHlwZSA9PSBqcGlUaW1l VHogfHwKIAkJCSAgIHYtPnR5cGUgPT0ganBpVGltZXN0YW1wIHx8Ci0JCQkgICB2LT50eXBlID09 IGpwaVRpbWVzdGFtcFR6KTsKKwkJCSAgIHYtPnR5cGUgPT0ganBpVGltZXN0YW1wVHogfHwKKwkJ CSAgIHYtPnR5cGUgPT0ganBpU3RyTHRyaW1GdW5jIHx8CisJCQkgICB2LT50eXBlID09IGpwaVN0 clJ0cmltRnVuYyB8fAorCQkJICAgdi0+dHlwZSA9PSBqcGlTdHJCdHJpbUZ1bmMgfHwKKwkJCSAg IHYtPnR5cGUgPT0ganBpU3RySW5pdGNhcEZ1bmMgfHwKKwkJCSAgIHYtPnR5cGUgPT0ganBpU3Ry U3BsaXRQYXJ0RnVuYyk7CiAKIAkJaWYgKGEpCiAJCQlqc3BJbml0QnlCdWZmZXIoYSwgdi0+YmFz ZSwgdi0+bmV4dFBvcyk7CkBAIC0xMTg0LDYgKzEzMjYsMjQgQEAganNwR2V0TGVmdEFyZyhKc29u UGF0aEl0ZW0gKnYsIEpzb25QYXRoSXRlbSAqYSkKIAlqc3BJbml0QnlCdWZmZXIoYSwgdi0+YmFz ZSwgdi0+Y29udGVudC5hcmdzLmxlZnQpOwogfQogCit2b2lkCitqc3BHZXRBcmcwKEpzb25QYXRo SXRlbSAqdiwgSnNvblBhdGhJdGVtICphKQoreworCUFzc2VydCh2LT50eXBlID09IGpwaVJlcGxh Y2VGdW5jIHx8CisJCQl2LT50eXBlID09IGpwaVN0clNwbGl0UGFydEZ1bmMpOworCisJanNwSW5p dEJ5QnVmZmVyKGEsIHYtPmJhc2UsIHYtPmNvbnRlbnQubWV0aG9kX2FyZ3MuYXJnMCk7Cit9CisK K3ZvaWQKK2pzcEdldEFyZzEoSnNvblBhdGhJdGVtICp2LCBKc29uUGF0aEl0ZW0gKmEpCit7CisJ QXNzZXJ0KHYtPnR5cGUgPT0ganBpUmVwbGFjZUZ1bmMgfHwKKwkJCXYtPnR5cGUgPT0ganBpU3Ry U3BsaXRQYXJ0RnVuYyk7CisKKwlqc3BJbml0QnlCdWZmZXIoYSwgdi0+YmFzZSwgdi0+Y29udGVu dC5tZXRob2RfYXJncy5hcmcxKTsKK30KKwogdm9pZAoganNwR2V0UmlnaHRBcmcoSnNvblBhdGhJ dGVtICp2LCBKc29uUGF0aEl0ZW0gKmEpCiB7CkBAIC0xMjA2LDYgKzEzNjYsNyBAQCBqc3BHZXRS aWdodEFyZyhKc29uUGF0aEl0ZW0gKnYsIEpzb25QYXRoSXRlbSAqYSkKIAlqc3BJbml0QnlCdWZm ZXIoYSwgdi0+YmFzZSwgdi0+Y29udGVudC5hcmdzLnJpZ2h0KTsKIH0KIAorCiBib29sCiBqc3BH ZXRCb29sKEpzb25QYXRoSXRlbSAqdikKIHsKQEAgLTEyMjcsNyArMTM4OCw4IEBAIGpzcEdldFN0 cmluZyhKc29uUGF0aEl0ZW0gKnYsIGludDMyICpsZW4pCiB7CiAJQXNzZXJ0KHYtPnR5cGUgPT0g anBpS2V5IHx8CiAJCSAgIHYtPnR5cGUgPT0ganBpU3RyaW5nIHx8Ci0JCSAgIHYtPnR5cGUgPT0g anBpVmFyaWFibGUpOworCQkgICB2LT50eXBlID09IGpwaVZhcmlhYmxlIHx8CisJCSAgIHYtPnR5 cGUgPT0ganBpU3RyaW5nRnVuYyk7CiAKIAlpZiAobGVuKQogCQkqbGVuID0gdi0+Y29udGVudC52 YWx1ZS5kYXRhbGVuOwpAQCAtMTUwMSw2ICsxNjYzLDE0IEBAIGpzcElzTXV0YWJsZVdhbGtlcihK c29uUGF0aEl0ZW0gKmpwaSwgc3RydWN0IEpzb25QYXRoTXV0YWJsZUNvbnRleHQgKmN4dCkKIAkJ CWNhc2UganBpSW50ZWdlcjoKIAkJCWNhc2UganBpTnVtYmVyOgogCQkJY2FzZSBqcGlTdHJpbmdG dW5jOgorCQkJY2FzZSBqcGlSZXBsYWNlRnVuYzoKKwkJCWNhc2UganBpU3RyTG93ZXJGdW5jOgor CQkJY2FzZSBqcGlTdHJVcHBlckZ1bmM6CisJCQljYXNlIGpwaVN0ckx0cmltRnVuYzoKKwkJCWNh c2UganBpU3RyUnRyaW1GdW5jOgorCQkJY2FzZSBqcGlTdHJCdHJpbUZ1bmM6CisJCQljYXNlIGpw aVN0ckluaXRjYXBGdW5jOgorCQkJY2FzZSBqcGlTdHJTcGxpdFBhcnRGdW5jOgogCQkJCXN0YXR1 cyA9IGpwZHNOb25EYXRlVGltZTsKIAkJCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u cGF0aF9leGVjLmMKaW5kZXggMTE4NGNiYTk4My4uZWI5ZGEzMzc0MSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvanNvbnBhdGhfZXhlYy5jCkBAIC0zMDMsNiArMzAzLDggQEAgc3RhdGljIEpzb25QYXRo RXhlY1Jlc3VsdCBleGVjdXRlTnVtZXJpY0l0ZW1NZXRob2QoSnNvblBhdGhFeGVjQ29udGV4dCAq Y3h0LAogCQkJCQkJCQkJCQkJICAgSnNvblZhbHVlTGlzdCAqZm91bmQpOwogc3RhdGljIEpzb25Q YXRoRXhlY1Jlc3VsdCBleGVjdXRlRGF0ZVRpbWVNZXRob2QoSnNvblBhdGhFeGVjQ29udGV4dCAq Y3h0LCBKc29uUGF0aEl0ZW0gKmpzcCwKIAkJCQkJCQkJCQkJCUpzb25iVmFsdWUgKmpiLCBKc29u VmFsdWVMaXN0ICpmb3VuZCk7CitzdGF0aWMgSnNvblBhdGhFeGVjUmVzdWx0IGV4ZWN1dGVTdHJp bmdJbnRlcm5hbE1ldGhvZChKc29uUGF0aEV4ZWNDb250ZXh0ICpjeHQsIEpzb25QYXRoSXRlbSAq anNwLAorCQkJCQkJCQkJCQkJSnNvbmJWYWx1ZSAqamIsIEpzb25WYWx1ZUxpc3QgKmZvdW5kKTsK IHN0YXRpYyBKc29uUGF0aEV4ZWNSZXN1bHQgZXhlY3V0ZUtleVZhbHVlTWV0aG9kKEpzb25QYXRo RXhlY0NvbnRleHQgKmN4dCwKIAkJCQkJCQkJCQkJCUpzb25QYXRoSXRlbSAqanNwLCBKc29uYlZh bHVlICpqYiwgSnNvblZhbHVlTGlzdCAqZm91bmQpOwogc3RhdGljIEpzb25QYXRoRXhlY1Jlc3Vs dCBhcHBlbmRCb29sUmVzdWx0KEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwKQEAgLTE2NjAsNiAr MTY2MiwyMyBAQCBleGVjdXRlSXRlbU9wdFVud3JhcFRhcmdldChKc29uUGF0aEV4ZWNDb250ZXh0 ICpjeHQsIEpzb25QYXRoSXRlbSAqanNwLAogCQkJfQogCQkJYnJlYWs7CiAKKwkJY2FzZSBqcGlT dHJMdHJpbUZ1bmM6CisJCWNhc2UganBpU3RyTG93ZXJGdW5jOgorCQljYXNlIGpwaVN0clVwcGVy RnVuYzoKKwkJY2FzZSBqcGlSZXBsYWNlRnVuYzoKKwkJY2FzZSBqcGlTdHJSdHJpbUZ1bmM6CisJ CWNhc2UganBpU3RyQnRyaW1GdW5jOgorCQljYXNlIGpwaVN0ckluaXRjYXBGdW5jOgorCQljYXNl IGpwaVN0clNwbGl0UGFydEZ1bmM6CisJCXsKKwkJCWlmICh1bndyYXAgJiYgSnNvbmJUeXBlKGpi KSA9PSBqYnZBcnJheSkKKwkJCQlyZXR1cm4gZXhlY3V0ZUl0ZW1VbndyYXBUYXJnZXRBcnJheShj eHQsIGpzcCwgamIsIGZvdW5kLCBmYWxzZSk7CisKKwkJCXJldHVybiBleGVjdXRlU3RyaW5nSW50 ZXJuYWxNZXRob2QoY3h0LCBqc3AsIGpiLCBmb3VuZCk7CisJCX0KKwkJYnJlYWs7CisKKwogCQlk ZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBqc29ucGF0aCBpdGVtIHR5cGU6 ICVkIiwganNwLT50eXBlKTsKIAl9CkBAIC0yNzkzLDYgKzI4MTIsMTc2IEBAIGV4ZWN1dGVEYXRl VGltZU1ldGhvZChKc29uUGF0aEV4ZWNDb250ZXh0ICpjeHQsIEpzb25QYXRoSXRlbSAqanNwLAog CXJldHVybiBleGVjdXRlTmV4dEl0ZW0oY3h0LCBqc3AsICZlbGVtLCBqYiwgZm91bmQsIGhhc05l eHQpOwogfQogCisvKgorICogSW1wbGVtZW50YXRpb24gb2YgLnVwcGVyKCksIGxvd2VyKCkgZXQu IGFsLiBtZXRob2RzLAorICogdGhhdCBmb3J3YXJkIHRoZWlyIGFjdHVhbCBpbXBsZW1lbnRhdGlv biB0byBpbnRlcm5hbCBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBKc29uUGF0aEV4ZWNSZXN1bHQg ZXhlY3V0ZVN0cmluZ0ludGVybmFsTWV0aG9kKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwgSnNv blBhdGhJdGVtICpqc3AsCisJCQkJCQkJCQkJCQlKc29uYlZhbHVlICpqYiwgSnNvblZhbHVlTGlz dCAqZm91bmQpIHsKKwlBc3NlcnQoCWpzcC0+dHlwZSA9PSBqcGlTdHJMb3dlckZ1bmMgfHwKKwkJ CWpzcC0+dHlwZSA9PSBqcGlTdHJVcHBlckZ1bmMgfHwKKwkJCWpzcC0+dHlwZSA9PSBqcGlSZXBs YWNlRnVuYyB8fAorCQkJanNwLT50eXBlID09IGpwaVN0ckx0cmltRnVuYyB8fAorCQkJanNwLT50 eXBlID09IGpwaVN0clJ0cmltRnVuYyB8fAorCQkJanNwLT50eXBlID09IGpwaVN0ckJ0cmltRnVu YyB8fAorCQkJanNwLT50eXBlID09IGpwaVN0ckluaXRjYXBGdW5jIHx8CisJCQlqc3AtPnR5cGUg PT0ganBpU3RyU3BsaXRQYXJ0RnVuYyk7CisJSnNvbmJWYWx1ZQlqYnZidWY7CisJYm9vbAkJaGFz TmV4dDsKKwlKc29uUGF0aEV4ZWNSZXN1bHQgcmVzID0ganBlck5vdEZvdW5kOworCUpzb25QYXRo SXRlbSBlbGVtOworCURhdHVtCQlzdHI7IC8qIERhdHVtIHJlcHJlc2VudGF0aW9uIGZvciB0aGUg Y3VycmVudCBzdHJpbmcgdmFsdWUuIFRoZSBmaXJzdCBhcmd1bWVudCB0byBpbnRlcm5hbCBmdW5j dGlvbnMgKi8KKwljaGFyCQkqdG1wID0gTlVMTDsKKwljaGFyCQkqcmVzU3RyID0gTlVMTDsKKwor CWlmICghKGpiID0gZ2V0U2NhbGFyKGpiLCBqYnZTdHJpbmcpKSkKKwkJUkVUVVJOX0VSUk9SKGVy ZXBvcnQoRVJST1IsCisJCQkJCQkJIChlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9BUkdVTUVOVF9G T1JfU1FMX0pTT05fREFURVRJTUVfRlVOQ1RJT04pLAorCQkJCQkJCSAgZXJybXNnKCJqc29ucGF0 aCBpdGVtIG1ldGhvZCAuJXMoKSBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGEgc3RyaW5nIiwKKwkJ CQkJCQkJCSBqc3BPcGVyYXRpb25OYW1lKGpzcC0+dHlwZSkpKSkpOworCisJdG1wID0gcG5zdHJk dXAoamItPnZhbC5zdHJpbmcudmFsLCBqYi0+dmFsLnN0cmluZy5sZW4pOworCXN0ciA9IENTdHJp bmdHZXRUZXh0RGF0dW0odG1wKTsKKworCS8qIEludGVybmFsIHN0cmluZyBmdW5jdGlvbnMgdGhh dCBhY2NlcHQgbm8gYXJndW1lbnRzICovCisJc3dpdGNoIChqc3AtPnR5cGUpCisJeworCQljYXNl IGpwaVN0ckx0cmltRnVuYzoKKwkJY2FzZSBqcGlTdHJSdHJpbUZ1bmM6CisJCWNhc2UganBpU3Ry QnRyaW1GdW5jOgorCQl7CisJCQljaGFyCSAgICpjaGFyYWN0ZXJzX3N0cjsKKwkJCWludAkJCWNo YXJhY3RlcnNfbGVuOworCQkJUEdGdW5jdGlvbglmdW5jID0gTlVMTDsKKworCQkJc3dpdGNoIChq c3AtPnR5cGUpCisJCQl7CisJCQkJY2FzZSBqcGlTdHJMdHJpbUZ1bmM6CisJCQkJCWZ1bmMgPSBs dHJpbTE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UganBpU3RyUnRyaW1GdW5jOgorCQkJCQlmdW5j ID0gcnRyaW0xOworCQkJCQlicmVhazsKKwkJCQljYXNlIGpwaVN0ckJ0cmltRnVuYzoKKwkJCQkJ ZnVuYyA9IGJ0cmltMTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDogOworCQkJfQorCisJCQlp ZiAoanNwLT5jb250ZW50LmFyZykKKwkJCXsKKwkJCQlqc3BHZXRBcmcoanNwLCAmZWxlbSk7CisJ CQkJaWYgKGVsZW0udHlwZSAhPSBqcGlTdHJpbmcpCisJCQkJCWVsb2coRVJST1IsICJpbnZhbGlk IGpzb25wYXRoIGl0ZW0gdHlwZSBmb3IgLiVzKCkgYXJndW1lbnQiLCBqc3BPcGVyYXRpb25OYW1l KGpzcC0+dHlwZSkpOworCisJCQkJY2hhcmFjdGVyc19zdHIgPSBqc3BHZXRTdHJpbmcoJmVsZW0s ICZjaGFyYWN0ZXJzX2xlbik7CisJCQkJcmVzU3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhEaXJl Y3RGdW5jdGlvbkNhbGwyQ29sbChmdW5jLAorCQkJCQlERUZBVUxUX0NPTExBVElPTl9PSUQsIHN0 ciwKKwkJCQkJQ1N0cmluZ0dldFRleHREYXR1bShjaGFyYWN0ZXJzX3N0cikpKTsKKwkJCQlicmVh azsKKwkJCX0KKworCQkJcmVzU3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlv bkNhbGwyQ29sbChmdW5jLAorCQkJCQlERUZBVUxUX0NPTExBVElPTl9PSUQsIHN0ciwKKwkJCQkJ Q1N0cmluZ0dldFRleHREYXR1bSgiICIpKSk7CisJCQlicmVhazsKKwkJfQorCisJCWNhc2UganBp U3RyTG93ZXJGdW5jOgorCQkJcmVzU3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5j dGlvbkNhbGwxQ29sbChsb3dlciwgREVGQVVMVF9DT0xMQVRJT05fT0lELCBzdHIpKTsKKwkJCWJy ZWFrOworCQljYXNlIGpwaVN0clVwcGVyRnVuYzoKKwkJCXJlc1N0ciA9IFRleHREYXR1bUdldENT dHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsMUNvbGwodXBwZXIsIERFRkFVTFRfQ09MTEFUSU9OX09J RCwgc3RyKSk7CisJCQlicmVhazsKKwkJY2FzZSBqcGlTdHJJbml0Y2FwRnVuYzoKKwkJCXJlc1N0 ciA9IFRleHREYXR1bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsMUNvbGwoaW5pdGNhcCwg REVGQVVMVF9DT0xMQVRJT05fT0lELCBzdHIpKTsKKwkJCWJyZWFrOworCQljYXNlIGpwaVJlcGxh Y2VGdW5jOgorCQl7CisJCQljaGFyCQkqZnJvbV9zdHIsICp0b19zdHI7CisJCQlpbnQJCQlmcm9t X2xlbiwgdG9fbGVuOworCisJCQlqc3BHZXRBcmcwKGpzcCwgJmVsZW0pOworCQkJaWYgKGVsZW0u dHlwZSAhPSBqcGlTdHJpbmcpCisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQganNvbnBhdGggaXRl bSB0eXBlIGZvciAucmVwbGFjZSgpIGZyb20iKTsKKworCQkJZnJvbV9zdHIgPSBqc3BHZXRTdHJp bmcoJmVsZW0sICZmcm9tX2xlbik7CisKKwkJCWpzcEdldEFyZzEoanNwLCAmZWxlbSk7CisJCQlp ZiAoZWxlbS50eXBlICE9IGpwaVN0cmluZykKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBqc29u cGF0aCBpdGVtIHR5cGUgZm9yIC5yZXBsYWNlKCkgdG8iKTsKKworCQkJdG9fc3RyID0ganNwR2V0 U3RyaW5nKCZlbGVtLCAmdG9fbGVuKTsKKworCQkJcmVzU3RyID0gVGV4dERhdHVtR2V0Q1N0cmlu ZyhEaXJlY3RGdW5jdGlvbkNhbGwzQ29sbChyZXBsYWNlX3RleHQsCisJCQkJQ19DT0xMQVRJT05f T0lELAorCQkJCUNTdHJpbmdHZXRUZXh0RGF0dW0odG1wKSwKKwkJCQlDU3RyaW5nR2V0VGV4dERh dHVtKGZyb21fc3RyKSwKKwkJCQlDU3RyaW5nR2V0VGV4dERhdHVtKHRvX3N0cikpKTsKKwkJCWJy ZWFrOworCQl9CisJCWNhc2UganBpU3RyU3BsaXRQYXJ0RnVuYzoKKwkJeworCQkJY2hhcgkJKmZy b21fc3RyOworCQkJTnVtZXJpYwkJbjsKKwkJCWludAkJCWZyb21fbGVuOworCisJCQlqc3BHZXRB cmcwKGpzcCwgJmVsZW0pOworCQkJaWYgKGVsZW0udHlwZSAhPSBqcGlTdHJpbmcpCisJCQkJZWxv ZyhFUlJPUiwgImludmFsaWQganNvbnBhdGggaXRlbSB0eXBlIGZvciAuc3BsaXRfcGFydCgpIik7 CisKKwkJCWZyb21fc3RyID0ganNwR2V0U3RyaW5nKCZlbGVtLCAmZnJvbV9sZW4pOworCisJCQlq c3BHZXRBcmcxKGpzcCwgJmVsZW0pOworCQkJaWYgKGVsZW0udHlwZSAhPSBqcGlOdW1lcmljKQor CQkJCWVsb2coRVJST1IsICJpbnZhbGlkIGpzb25wYXRoIGl0ZW0gdHlwZSBmb3IgLnNwbGl0X3Bh cnQoKSIpOworCisJCQluID0ganNwR2V0TnVtZXJpYygmZWxlbSk7CisKKwkJCXJlc1N0ciA9IFRl eHREYXR1bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsM0NvbGwoc3BsaXRfcGFydCwKKwkJ CQlDX0NPTExBVElPTl9PSUQsCisJCQkJQ1N0cmluZ0dldFRleHREYXR1bSh0bXApLAorCQkJCUNT dHJpbmdHZXRUZXh0RGF0dW0oZnJvbV9zdHIpLAorCQkJCURpcmVjdEZ1bmN0aW9uQ2FsbDEobnVt ZXJpY19pbnQ4LCBOdW1lcmljR2V0RGF0dW0obikpKSk7CisJCQlicmVhazsKKwkJfQorCQlkZWZh dWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGpzb25wYXRoIGl0ZW0gdHlwZTogJWQi LCBqc3AtPnR5cGUpOworCX0KKworCWlmIChyZXNTdHIpCisJCXJlcyA9IGpwZXJPazsKKworCWhh c05leHQgPSBqc3BHZXROZXh0KGpzcCwgJmVsZW0pOworCisJaWYgKCFoYXNOZXh0ICYmICFmb3Vu ZCkKKwkJcmV0dXJuIHJlczsKKworCWpiID0gaGFzTmV4dCA/ICZqYnZidWYgOiBwYWxsb2Moc2l6 ZW9mKCpqYikpOworCisJLyogQ3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBqYiB2YWx1ZSB0byByZXR1 cm4gKi8KKwlzd2l0Y2ggKGpzcC0+dHlwZSkKKwl7CisJCS8qIENhc2VzIGZvciBmdW5jdGlvbnMg dGhhdCByZXR1cm4gdGV4dCAqLworCQljYXNlIGpwaVN0ckxvd2VyRnVuYzoKKwkJY2FzZSBqcGlT dHJVcHBlckZ1bmM6CisJCWNhc2UganBpUmVwbGFjZUZ1bmM6CisJCWNhc2UganBpU3RyTHRyaW1G dW5jOgorCQljYXNlIGpwaVN0clJ0cmltRnVuYzoKKwkJY2FzZSBqcGlTdHJCdHJpbUZ1bmM6CisJ CWNhc2UganBpU3RySW5pdGNhcEZ1bmM6CisJCWNhc2UganBpU3RyU3BsaXRQYXJ0RnVuYzoKKwkJ CWpiLT50eXBlID0gamJ2U3RyaW5nOworCQkJamItPnZhbC5zdHJpbmcudmFsID0gcmVzU3RyOwor CQkJamItPnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGpiLT52YWwuc3RyaW5nLnZhbCk7CisJCWRl ZmF1bHQ6CisJCQk7CisJCQkvKiBjYW50JyBoYXBwZW4gKi8KKwl9CisKKwlyZXR1cm4gZXhlY3V0 ZU5leHRJdGVtKGN4dCwganNwLCAmZWxlbSwgamIsIGZvdW5kLCBoYXNOZXh0KTsKK30KKwogLyoK ICAqIEltcGxlbWVudGF0aW9uIG9mIC5rZXl2YWx1ZSgpIG1ldGhvZC4KICAqCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZ3JhbS55IGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2pzb25wYXRoX2dyYW0ueQppbmRleCA4NzMzYTBlYWM2Li45OTExNGI3OGM4IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZ3JhbS55CisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9ncmFtLnkKQEAgLTQzLDYgKzQzLDkgQEAgc3RhdGlj IGJvb2wgbWFrZUl0ZW1MaWtlUmVnZXgoSnNvblBhdGhQYXJzZUl0ZW0gKmV4cHIsCiAJCQkJCQkJ ICBKc29uUGF0aFN0cmluZyAqZmxhZ3MsCiAJCQkJCQkJICBKc29uUGF0aFBhcnNlSXRlbSAqKiBy ZXN1bHQsCiAJCQkJCQkJICBzdHJ1Y3QgTm9kZSAqZXNjb250ZXh0KTsKK3N0YXRpYyBKc29uUGF0 aFBhcnNlSXRlbSAqbWFrZUl0ZW1SZXBsYWNlRnVuYyhKc29uUGF0aFBhcnNlSXRlbSAqYXJnMCwg SnNvblBhdGhQYXJzZUl0ZW0gKmFyZzEpOworc3RhdGljIEpzb25QYXRoUGFyc2VJdGVtICptYWtl SXRlbVN0clNwbGl0UGFydEZ1bmMoSnNvblBhdGhQYXJzZUl0ZW0gKmFyZzAsIEpzb25QYXRoUGFy c2VJdGVtICphcmcxKTsKKwogCiAvKgogICogQmlzb24gZG9lc24ndCBhbGxvY2F0ZSBhbnl0aGlu ZyB0aGF0IG5lZWRzIHRvIGxpdmUgYWNyb3NzIHBhcnNlciBjYWxscywKQEAgLTg0LDYgKzg3LDgg QEAgc3RhdGljIGJvb2wgbWFrZUl0ZW1MaWtlUmVnZXgoSnNvblBhdGhQYXJzZUl0ZW0gKmV4cHIs CiAldG9rZW4JPHN0cj4JCURBVEVUSU1FX1AKICV0b2tlbgk8c3RyPgkJQklHSU5UX1AgQk9PTEVB Tl9QIERBVEVfUCBERUNJTUFMX1AgSU5URUdFUl9QIE5VTUJFUl9QCiAldG9rZW4JPHN0cj4JCVNU UklOR0ZVTkNfUCBUSU1FX1AgVElNRV9UWl9QIFRJTUVTVEFNUF9QIFRJTUVTVEFNUF9UWl9QCisl dG9rZW4JPHN0cj4JCVNUUl9SRVBMQUNFRlVOQ19QIFNUUl9MT1dFUl9QIFNUUl9VUFBFUl9QIFNU Ul9MVFJJTV9QIFNUUl9SVFJJTV9QIFNUUl9CVFJJTV9QCisJCQkJCVNUUl9JTklUQ0FQX1AgU1RS X1NQTElUX1BBUlRfUAogCiAldHlwZQk8cmVzdWx0PglyZXN1bHQKIApAQCAtOTIsOCArOTcsOSBA QCBzdGF0aWMgYm9vbCBtYWtlSXRlbUxpa2VSZWdleChKc29uUGF0aFBhcnNlSXRlbSAqZXhwciwK IAkJCQkJaW5kZXhfZWxlbSBzdGFydHNfd2l0aF9pbml0aWFsIGV4cHJfb3JfcHJlZGljYXRlCiAJ CQkJCWRhdGV0aW1lX3RlbXBsYXRlIG9wdF9kYXRldGltZV90ZW1wbGF0ZSBjc3ZfZWxlbQogCQkJ CQlkYXRldGltZV9wcmVjaXNpb24gb3B0X2RhdGV0aW1lX3ByZWNpc2lvbgorCQkJCQlzdHJfbWV0 aG9kX2FyZ19lbGVtCiAKLSV0eXBlCTxlbGVtcz4JCWFjY2Vzc29yX2V4cHIgY3N2X2xpc3Qgb3B0 X2Nzdl9saXN0CisldHlwZQk8ZWxlbXM+CQlhY2Nlc3Nvcl9leHByIGNzdl9saXN0IG9wdF9jc3Zf bGlzdCBzdHJfbWV0aG9kX2FyZ19saXN0CiAKICV0eXBlCTxpbmRleHM+CWluZGV4X2xpc3QKIApA QCAtMjc2LDYgKzI4MiwzMiBAQCBhY2Nlc3Nvcl9vcDoKIAkJeyAkJCA9IG1ha2VJdGVtVW5hcnko anBpVGltZXN0YW1wLCAkNCk7IH0KIAl8ICcuJyBUSU1FU1RBTVBfVFpfUCAnKCcgb3B0X2RhdGV0 aW1lX3ByZWNpc2lvbiAnKScKIAkJeyAkJCA9IG1ha2VJdGVtVW5hcnkoanBpVGltZXN0YW1wVHos ICQ0KTsgfQorCXwgJy4nIFNUUl9SRVBMQUNFRlVOQ19QICcoJyBzdHJfbWV0aG9kX2FyZ19saXN0 ICcpJworCQl7CisJCQlpZiAobGlzdF9sZW5ndGgoJDQpID09IDIpCisJCQkJJCQgPSBtYWtlSXRl bVJlcGxhY2VGdW5jKGxpbml0aWFsKCQ0KSwgbHNlY29uZCgkNCkpOworCQkJZWxzZQorCQkJCWVy ZXR1cm4oZXNjb250ZXh0LCBmYWxzZSwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VS Uk9SKSwKKwkJCQkJCSBlcnJtc2coImludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlICVzIiwg Impzb25wYXRoIiksCisJCQkJCQkgZXJyZGV0YWlsKCIucmVwbGFjZSgpIGFjY2VwdHMgdHdvIGFy Z3VtZW50cy4iKSkpOworCQl9CisJfCAnLicgU1RSX1NQTElUX1BBUlRfUCAnKCcgc3RyX21ldGhv ZF9hcmdfbGlzdCAnKScKKwkJeworCQkJaWYgKGxpc3RfbGVuZ3RoKCQ0KSA9PSAyKQorCQkJCSQk ID0gbWFrZUl0ZW1TdHJTcGxpdFBhcnRGdW5jKGxpbml0aWFsKCQ0KSwgbHNlY29uZCgkNCkpOwor CQkJZWxzZQorCQkJCWVyZXR1cm4oZXNjb250ZXh0LCBmYWxzZSwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCSBlcnJtc2coImludmFsaWQgaW5wdXQgc3ludGF4 IGZvciB0eXBlICVzIiwgImpzb25wYXRoIiksCisJCQkJCQkgZXJyZGV0YWlsKCIuc3BsaXRfcGFy dCgpIGFjY2VwdHMgdHdvIGFyZ3VtZW50cy4iKSkpOworCQl9CisJfCAnLicgU1RSX0xUUklNX1Ag JygnIG9wdF9kYXRldGltZV90ZW1wbGF0ZSAnKScKKwkJeyAkJCA9IG1ha2VJdGVtVW5hcnkoanBp U3RyTHRyaW1GdW5jLCAkNCk7IH0KKwl8ICcuJyBTVFJfUlRSSU1fUCAnKCcgb3B0X2RhdGV0aW1l X3RlbXBsYXRlICcpJworCQl7ICQkID0gbWFrZUl0ZW1VbmFyeShqcGlTdHJSdHJpbUZ1bmMsICQ0 KTsgfQorCXwgJy4nIFNUUl9CVFJJTV9QICcoJyBvcHRfZGF0ZXRpbWVfdGVtcGxhdGUgJyknCisJ CXsgJCQgPSBtYWtlSXRlbVVuYXJ5KGpwaVN0ckJ0cmltRnVuYywgJDQpOyB9CiAJOwogCiBjc3Zf ZWxlbToKQEAgLTMxNSw2ICszNDcsMTUgQEAgb3B0X2RhdGV0aW1lX3RlbXBsYXRlOgogCXwgLyog RU1QVFkgKi8JCQkJCXsgJCQgPSBOVUxMOyB9CiAJOwogCitzdHJfbWV0aG9kX2FyZ19lbGVtOgor CVNUUklOR19QCQkJCQkJeyAkJCA9IG1ha2VJdGVtU3RyaW5nKCYkMSk7IH0KKwl8IElOVF9QCQkJ CQkJCXsgJCQgPSBtYWtlSXRlbU51bWVyaWMoJiQxKTsgfQorCTsKKworc3RyX21ldGhvZF9hcmdf bGlzdDoKKwlzdHJfbWV0aG9kX2FyZ19lbGVtCQkJCQkJCXsgJCQgPSBsaXN0X21ha2UxKCQxKTsg fQorCXwgc3RyX21ldGhvZF9hcmdfbGlzdCAnLCcgc3RyX21ldGhvZF9hcmdfZWxlbQl7ICQkID0g bGFwcGVuZCgkMSwgJDMpOyB9CisJOwoga2V5OgogCWtleV9uYW1lCQkJCQkJeyAkJCA9IG1ha2VJ dGVtS2V5KCYkMSk7IH0KIAk7CkBAIC0zNTUsNiArMzk2LDkgQEAga2V5X25hbWU6CiAJfCBUSU1F X1RaX1AKIAl8IFRJTUVTVEFNUF9QCiAJfCBUSU1FU1RBTVBfVFpfUAorCXwgU1RSX0xUUklNX1AK Kwl8IFNUUl9SVFJJTV9QCisJfCBTVFJfQlRSSU1fUAogCTsKIAogbWV0aG9kOgpAQCAtMzcxLDYg KzQxNSw5IEBAIG1ldGhvZDoKIAl8IElOVEVHRVJfUAkJCQkJCXsgJCQgPSBqcGlJbnRlZ2VyOyB9 CiAJfCBOVU1CRVJfUAkJCQkJCXsgJCQgPSBqcGlOdW1iZXI7IH0KIAl8IFNUUklOR0ZVTkNfUAkJ CQkJeyAkJCA9IGpwaVN0cmluZ0Z1bmM7IH0KKwl8IFNUUl9MT1dFUl9QCQkJCQl7ICQkID0ganBp U3RyTG93ZXJGdW5jOyB9CisJfCBTVFJfVVBQRVJfUAkJCQkJeyAkJCA9IGpwaVN0clVwcGVyRnVu YzsgfQorCXwgU1RSX0lOSVRDQVBfUAkJCQkJeyAkJCA9IGpwaVN0ckluaXRjYXBGdW5jOyB9CiAJ OwogJSUKIApAQCAtNDcwLDYgKzUxNywyOCBAQCBtYWtlSXRlbUJpbmFyeShKc29uUGF0aEl0ZW1U eXBlIHR5cGUsIEpzb25QYXRoUGFyc2VJdGVtICpsYSwgSnNvblBhdGhQYXJzZUl0ZW0gKgogCXJl dHVybiB2OwogfQogCitzdGF0aWMgSnNvblBhdGhQYXJzZUl0ZW0gKgorbWFrZUl0ZW1SZXBsYWNl RnVuYyhKc29uUGF0aFBhcnNlSXRlbSAqYXJnMCwgSnNvblBhdGhQYXJzZUl0ZW0gKmFyZzEpCit7 CisJSnNvblBhdGhQYXJzZUl0ZW0gKnYgPSBtYWtlSXRlbVR5cGUoanBpUmVwbGFjZUZ1bmMpOwor CisJdi0+dmFsdWUubWV0aG9kX2FyZ3MuYXJnMCA9IGFyZzA7CisJdi0+dmFsdWUubWV0aG9kX2Fy Z3MuYXJnMSA9IGFyZzE7CisKKwlyZXR1cm4gdjsKK30KKworc3RhdGljIEpzb25QYXRoUGFyc2VJ dGVtICoKK21ha2VJdGVtU3RyU3BsaXRQYXJ0RnVuYyhKc29uUGF0aFBhcnNlSXRlbSAqYXJnMCwg SnNvblBhdGhQYXJzZUl0ZW0gKmFyZzEpCit7CisJSnNvblBhdGhQYXJzZUl0ZW0gKnYgPSBtYWtl SXRlbVR5cGUoanBpU3RyU3BsaXRQYXJ0RnVuYyk7CisKKwl2LT52YWx1ZS5tZXRob2RfYXJncy5h cmcwID0gYXJnMDsKKwl2LT52YWx1ZS5tZXRob2RfYXJncy5hcmcxID0gYXJnMTsKKworCXJldHVy biB2OworfQorCiBzdGF0aWMgSnNvblBhdGhQYXJzZUl0ZW0gKgogbWFrZUl0ZW1VbmFyeShKc29u UGF0aEl0ZW1UeXBlIHR5cGUsIEpzb25QYXRoUGFyc2VJdGVtICphKQogewpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX3NjYW4ubCBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9qc29ucGF0aF9zY2FuLmwKaW5kZXggN2FjZGE3NzgzNy4uMzIyNTU2NDZiMCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX3NjYW4ubAorKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbnBhdGhfc2Nhbi5sCkBAIC00MTAsOCArNDEwLDEzIEBAIHN0YXRp YyBjb25zdCBKc29uUGF0aEtleXdvcmQga2V5d29yZHNbXSA9IHsKIAl7IDQsIHRydWUsCVRSVUVf UCwJCSJ0cnVlIn0sCiAJeyA0LCBmYWxzZSwJVFlQRV9QLAkJInR5cGUifSwKIAl7IDQsIGZhbHNl LAlXSVRIX1AsCQkid2l0aCJ9LAorCXsgNSwgZmFsc2UsIFNUUl9CVFJJTV9QLCAiYnRyaW0ifSwK IAl7IDUsIHRydWUsCUZBTFNFX1AsCSJmYWxzZSJ9LAogCXsgNSwgZmFsc2UsCUZMT09SX1AsCSJm bG9vciJ9LAorCXsgNSwgZmFsc2UsIFNUUl9MT1dFUl9QLCAibG93ZXIifSwKKwl7IDUsIGZhbHNl LCBTVFJfTFRSSU1fUCwgImx0cmltIn0sCisJeyA1LCBmYWxzZSwgU1RSX1JUUklNX1AsICJydHJp bSJ9LAorCXsgNSwgZmFsc2UsIFNUUl9VUFBFUl9QLCAidXBwZXIifSwKIAl7IDYsIGZhbHNlLAlC SUdJTlRfUCwJImJpZ2ludCJ9LAogCXsgNiwgZmFsc2UsCURPVUJMRV9QLAkiZG91YmxlIn0sCiAJ eyA2LCBmYWxzZSwJRVhJU1RTX1AsCSJleGlzdHMifSwKQEAgLTQyMiwxMyArNDI3LDE2IEBAIHN0 YXRpYyBjb25zdCBKc29uUGF0aEtleXdvcmQga2V5d29yZHNbXSA9IHsKIAl7IDcsIGZhbHNlLAlC T09MRUFOX1AsCSJib29sZWFuIn0sCiAJeyA3LCBmYWxzZSwJQ0VJTElOR19QLAkiY2VpbGluZyJ9 LAogCXsgNywgZmFsc2UsCURFQ0lNQUxfUCwJImRlY2ltYWwifSwKKwl7IDcsIGZhbHNlLCBTVFJf SU5JVENBUF9QLCAiaW5pdGNhcCJ9LAogCXsgNywgZmFsc2UsCUlOVEVHRVJfUCwJImludGVnZXIi fSwKKwl7IDcsIGZhbHNlLCBTVFJfUkVQTEFDRUZVTkNfUCwgInJlcGxhY2UifSwKIAl7IDcsIGZh bHNlLAlUSU1FX1RaX1AsCSJ0aW1lX3R6In0sCiAJeyA3LCBmYWxzZSwJVU5LTk9XTl9QLAkidW5r bm93biJ9LAogCXsgOCwgZmFsc2UsCURBVEVUSU1FX1AsCSJkYXRldGltZSJ9LAogCXsgOCwgZmFs c2UsCUtFWVZBTFVFX1AsCSJrZXl2YWx1ZSJ9LAogCXsgOSwgZmFsc2UsCVRJTUVTVEFNUF9QLCAi dGltZXN0YW1wIn0sCiAJeyAxMCxmYWxzZSwgTElLRV9SRUdFWF9QLCAibGlrZV9yZWdleCJ9LAor CXsgMTAsZmFsc2UsIFNUUl9TUExJVF9QQVJUX1AsICJzcGxpdF9wYXJ0In0sCiAJeyAxMixmYWxz ZSwgVElNRVNUQU1QX1RaX1AsICJ0aW1lc3RhbXBfdHoifSwKIH07CiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5o CmluZGV4IGVlMzU2OThkMDguLjJiYTVjZDcwYzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0 aWxzL2pzb25wYXRoLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaApAQCAtMTE1 LDYgKzExNSwxNCBAQCB0eXBlZGVmIGVudW0gSnNvblBhdGhJdGVtVHlwZQogCWpwaVRpbWVUeiwJ CQkJCS8qIC50aW1lX3R6KCkgaXRlbSBtZXRob2QgKi8KIAlqcGlUaW1lc3RhbXAsCQkJCS8qIC50 aW1lc3RhbXAoKSBpdGVtIG1ldGhvZCAqLwogCWpwaVRpbWVzdGFtcFR6LAkJCQkvKiAudGltZXN0 YW1wX3R6KCkgaXRlbSBtZXRob2QgKi8KKwlqcGlSZXBsYWNlRnVuYywJCQkJLyogLnJlcGxhY2Uo KSBpdGVtIG1ldGhvZCAqLworCWpwaVN0ckxvd2VyRnVuYywJCQkvKiAubG93ZXIoKSBpdGVtIG1l dGhvZCAqLworCWpwaVN0clVwcGVyRnVuYywJCQkvKiAudXBwZXIoKSBpdGVtIG1ldGhvZCAqLwor CWpwaVN0ckx0cmltRnVuYywJCQkvKiAubHRyaW0oKSBpdGVtIG1ldGhvZCAqLworCWpwaVN0clJ0 cmltRnVuYywJCQkvKiAucnRyaW0oKSBpdGVtIG1ldGhvZCAqLworCWpwaVN0ckJ0cmltRnVuYywJ CQkvKiAuYnRyaW0oKSBpdGVtIG1ldGhvZCAqLworCWpwaVN0ckluaXRjYXBGdW5jLAkJCS8qIC5p bml0Y2FwKCkgaXRlbSBtZXRob2QgKi8KKwlqcGlTdHJTcGxpdFBhcnRGdW5jLAkJLyogLnNwbGl0 X3BhcnQoKSBpdGVtIG1ldGhvZCAqLwogfSBKc29uUGF0aEl0ZW1UeXBlOwogCiAvKiBYUXVlcnkg cmVnZXggbW9kZSBmbGFncyBmb3IgTElLRV9SRUdFWCBwcmVkaWNhdGUgKi8KQEAgLTE4OCw2ICsx OTYsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvblBhdGhJdGVtCiAJCQlpbnQzMgkJcGF0dGVybmxl bjsKIAkJCXVpbnQzMgkJZmxhZ3M7CiAJCX0JCQlsaWtlX3JlZ2V4OworCisJCXN0cnVjdAorCQl7 CisJCQlpbnQzMgkJYXJnMDsKKwkJCWludDMyCQlhcmcxOworCQl9CQkJbWV0aG9kX2FyZ3M7CiAJ fQkJCWNvbnRlbnQ7CiB9IEpzb25QYXRoSXRlbTsKIApAQCAtMTk5LDYgKzIxMyw4IEBAIGV4dGVy biBib29sIGpzcEdldE5leHQoSnNvblBhdGhJdGVtICp2LCBKc29uUGF0aEl0ZW0gKmEpOwogZXh0 ZXJuIHZvaWQganNwR2V0QXJnKEpzb25QYXRoSXRlbSAqdiwgSnNvblBhdGhJdGVtICphKTsKIGV4 dGVybiB2b2lkIGpzcEdldExlZnRBcmcoSnNvblBhdGhJdGVtICp2LCBKc29uUGF0aEl0ZW0gKmEp OwogZXh0ZXJuIHZvaWQganNwR2V0UmlnaHRBcmcoSnNvblBhdGhJdGVtICp2LCBKc29uUGF0aEl0 ZW0gKmEpOworZXh0ZXJuIHZvaWQganNwR2V0QXJnMChKc29uUGF0aEl0ZW0gKnYsIEpzb25QYXRo SXRlbSAqYSk7CitleHRlcm4gdm9pZCBqc3BHZXRBcmcxKEpzb25QYXRoSXRlbSAqdiwgSnNvblBh dGhJdGVtICphKTsKIGV4dGVybiBOdW1lcmljIGpzcEdldE51bWVyaWMoSnNvblBhdGhJdGVtICp2 KTsKIGV4dGVybiBib29sIGpzcEdldEJvb2woSnNvblBhdGhJdGVtICp2KTsKIGV4dGVybiBjaGFy ICpqc3BHZXRTdHJpbmcoSnNvblBhdGhJdGVtICp2LCBpbnQzMiAqbGVuKTsKQEAgLTI2Niw2ICsy ODIsMTIgQEAgc3RydWN0IEpzb25QYXRoUGFyc2VJdGVtCiAJCQl1aW50MzIJCWxlbjsKIAkJCWNo YXIJICAgKnZhbDsJLyogY291bGQgbm90IGJlIG5vdCBudWxsLXRlcm1pbmF0ZWQgKi8KIAkJfQkJ CXN0cmluZzsKKworCQlzdHJ1Y3QKKwkJeworCQkJSnNvblBhdGhQYXJzZUl0ZW0gKmFyZzA7CisJ CQlKc29uUGF0aFBhcnNlSXRlbSAqYXJnMTsKKwkJfQkJCW1ldGhvZF9hcmdzOwogCX0JCQl2YWx1 ZTsKIH07CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfanNv bnBhdGgub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9qc29ucGF0aC5vdXQK aW5kZXggYWNkZjdlNDM2Zi4uYTkwOWVlY2Q5OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9qc29uYl9qc29ucGF0aC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9qc29uYl9qc29ucGF0aC5vdXQKQEAgLTI3MTksNiArMjcxOSwzOTkgQEAgc2VsZWN0IGpz b25iX3BhdGhfcXVlcnkoJyIyMDIzLTA4LTE1IDEyOjM0OjU2IicsICckLnRpbWVzdGFtcCgpLnN0 cmluZygpJyk7CiAoMSByb3cpCiAKIHJvbGxiYWNrOworLS0gdGVzdCAubHRyaW0oKQorc2VsZWN0 IGpzb25iX3BhdGhfcXVlcnkoJyIgICBoZWxsbyAgICInLCAnJC5sdHJpbSgiICIpJyk7CisganNv bmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQorICJoZWxsbyAgICIKKygxIHJvdykK Kworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJyIgICBoZWxsbyAgICInLCAnJC5sdHJpbSgiICIp Jyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQorICJoZWxsbyAgICIK KygxIHJvdykKKworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJyIgICBoZWxsbyAgICInLCAnJC5s dHJpbSgpJyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQorICJoZWxs byAgICIKKygxIHJvdykKKworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJyIgICBoZWxsbyAgICIn LCAnJC5sdHJpbSgpJyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQor ICJoZWxsbyAgICIKKygxIHJvdykKKworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ251bGwnLCAn JC5sdHJpbSgpJyk7CitFUlJPUjogIGpzb25wYXRoIGl0ZW0gbWV0aG9kIC5sdHJpbSgpIGNhbiBv bmx5IGJlIGFwcGxpZWQgdG8gYSBzdHJpbmcKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdudWxs JywgJyQubHRyaW0oKScsIHNpbGVudCA9PiB0cnVlKTsKKyBqc29uYl9wYXRoX3F1ZXJ5IAorLS0t LS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnW10n LCAnJC5sdHJpbSgpJyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQor KDAgcm93cykKKworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ1tdJywgJ3N0cmljdCAkLmx0cmlt KCknKTsKK0VSUk9SOiAganNvbnBhdGggaXRlbSBtZXRob2QgLmx0cmltKCkgY2FuIG9ubHkgYmUg YXBwbGllZCB0byBhIHN0cmluZworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ3t9JywgJyQubHRy aW0oKScpOworRVJST1I6ICBqc29ucGF0aCBpdGVtIG1ldGhvZCAubHRyaW0oKSBjYW4gb25seSBi ZSBhcHBsaWVkIHRvIGEgc3RyaW5nCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnW10nLCAnc3Ry aWN0ICQubHRyaW0oKScsIHNpbGVudCA9PiB0cnVlKTsKKyBqc29uYl9wYXRoX3F1ZXJ5IAorLS0t LS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgne30n LCAnJC5sdHJpbSgpJywgc2lsZW50ID0+IHRydWUpOworIGpzb25iX3BhdGhfcXVlcnkgCistLS0t LS0tLS0tLS0tLS0tLS0KKygwIHJvd3MpCisKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCcxLjIz JywgJyQubHRyaW0oKScpOworRVJST1I6ICBqc29ucGF0aCBpdGVtIG1ldGhvZCAubHRyaW0oKSBj YW4gb25seSBiZSBhcHBsaWVkIHRvIGEgc3RyaW5nCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgn IjEuMjMiJywgJyQubHRyaW0oKScpOworIGpzb25iX3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0t LS0tLS0KKyAiMS4yMyIKKygxIHJvdykKKworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJyIxLjIz YWFhIicsICckLmx0cmltKCknKTsKKyBqc29uYl9wYXRoX3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0t LS0tCisgIjEuMjNhYWEiCisoMSByb3cpCisKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCcxMjM0 JywgJyQubHRyaW0oKScpOworRVJST1I6ICBqc29ucGF0aCBpdGVtIG1ldGhvZCAubHRyaW0oKSBj YW4gb25seSBiZSBhcHBsaWVkIHRvIGEgc3RyaW5nCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgn dHJ1ZScsICckLmx0cmltKCknKTsKK0VSUk9SOiAganNvbnBhdGggaXRlbSBtZXRob2QgLmx0cmlt KCkgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhIHN0cmluZworc2VsZWN0IGpzb25iX3BhdGhfcXVl cnkoJzEyMzQnLCAnJC5sdHJpbSgpLnR5cGUoKScpOworRVJST1I6ICBqc29ucGF0aCBpdGVtIG1l dGhvZCAubHRyaW0oKSBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGEgc3RyaW5nCitzZWxlY3QganNv bmJfcGF0aF9xdWVyeSgnWzIsIHRydWVdJywgJyQubHRyaW0oKScpOworRVJST1I6ICBqc29ucGF0 aCBpdGVtIG1ldGhvZCAubHRyaW0oKSBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGEgc3RyaW5nCitz ZWxlY3QganNvbmJfcGF0aF9xdWVyeV9hcnJheSgnWyIgIG1heWJlICAiLCAiICB5ZXMiLCAiICBu byJdJywgJyRbKl0ubHRyaW0oKScpOworICBqc29uYl9wYXRoX3F1ZXJ5X2FycmF5ICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgWyJtYXliZSAgIiwgInllcyIsICJubyJdCisoMSByb3cp CisKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5X2FycmF5KCdbIiAgbWF5YmUgICIsICIgIHllcyIs ICIgIG5vIl0nLCAnJFsqXS5sdHJpbSgpLnR5cGUoKScpOworICAgICBqc29uYl9wYXRoX3F1ZXJ5 X2FycmF5ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgWyJzdHJpbmci LCAic3RyaW5nIiwgInN0cmluZyJdCisoMSByb3cpCisKKy0tIHRlc3QgLnJ0cmltKCkKK3NlbGVj dCBqc29uYl9wYXRoX3F1ZXJ5KCciICAgaGVsbG8gICAiJywgJyQucnRyaW0oIiAiKScpOworIGpz b25iX3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAiICAgaGVsbG8iCisoMSByb3cp CisKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciICAgaGVsbG8gICAiJywgJyQucnRyaW0oIiAi KScpOworIGpzb25iX3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAiICAgaGVsbG8i CisoMSByb3cpCisKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciICAgaGVsbG8gICAiJywgJyQu cnRyaW0oKScpOworIGpzb25iX3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAiICAg aGVsbG8iCisoMSByb3cpCisKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciICAgaGVsbG8gICAi JywgJyQucnRyaW0oKScpOworIGpzb25iX3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0K KyAiICAgaGVsbG8iCisoMSByb3cpCisKKy0tIHRlc3QgLmJ0cmltKCkKK3NlbGVjdCBqc29uYl9w YXRoX3F1ZXJ5KCciICAgaGVsbG8gICAiJywgJyQuYnRyaW0oIiAiKScpOworIGpzb25iX3BhdGhf cXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAiaGVsbG8iCisoMSByb3cpCisKK3NlbGVjdCBq c29uYl9wYXRoX3F1ZXJ5KCciICAgaGVsbG8gICAiJywgJyQuYnRyaW0oIiAiKScpOworIGpzb25i X3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAiaGVsbG8iCisoMSByb3cpCisKK3Nl bGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciICAgaGVsbG8gICAiJywgJyQuYnRyaW0oKScpOworIGpz b25iX3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAiaGVsbG8iCisoMSByb3cpCisK K3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciICAgaGVsbG8gICAiJywgJyQuYnRyaW0oKScpOwor IGpzb25iX3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAiaGVsbG8iCisoMSByb3cp CisKKy0tIHRlc3QgLmxvd2VyKCkKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdudWxsJywgJyQu bG93ZXIoKScpOworRVJST1I6ICBqc29ucGF0aCBpdGVtIG1ldGhvZCAubG93ZXIoKSBjYW4gb25s eSBiZSBhcHBsaWVkIHRvIGEgc3RyaW5nCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnbnVsbCcs ICckLmxvd2VyKCknLCBzaWxlbnQgPT4gdHJ1ZSk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0t LS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ1tdJywg JyQubG93ZXIoKScpOworIGpzb25iX3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKygw IHJvd3MpCisKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdbXScsICdzdHJpY3QgJC5sb3dlcigp Jyk7CitFUlJPUjogIGpzb25wYXRoIGl0ZW0gbWV0aG9kIC5sb3dlcigpIGNhbiBvbmx5IGJlIGFw cGxpZWQgdG8gYSBzdHJpbmcKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCd7fScsICckLmxvd2Vy KCknKTsKK0VSUk9SOiAganNvbnBhdGggaXRlbSBtZXRob2QgLmxvd2VyKCkgY2FuIG9ubHkgYmUg YXBwbGllZCB0byBhIHN0cmluZworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ1tdJywgJ3N0cmlj dCAkLmxvd2VyKCknLCBzaWxlbnQgPT4gdHJ1ZSk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0t LS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ3t9Jywg JyQubG93ZXIoKScsIHNpbGVudCA9PiB0cnVlKTsKKyBqc29uYl9wYXRoX3F1ZXJ5IAorLS0tLS0t LS0tLS0tLS0tLS0tCisoMCByb3dzKQorCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnMS4yMycs ICckLmxvd2VyKCknKTsKK0VSUk9SOiAganNvbnBhdGggaXRlbSBtZXRob2QgLmxvd2VyKCkgY2Fu IG9ubHkgYmUgYXBwbGllZCB0byBhIHN0cmluZworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJyIx LjIzIicsICckLmxvd2VyKCknKTsKKyBqc29uYl9wYXRoX3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0t LS0tCisgIjEuMjMiCisoMSByb3cpCisKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciMS4yM2Fh YSInLCAnJC5sb3dlcigpJyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0t LQorICIxLjIzYWFhIgorKDEgcm93KQorCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnMTIzNCcs ICckLmxvd2VyKCknKTsKK0VSUk9SOiAganNvbnBhdGggaXRlbSBtZXRob2QgLmxvd2VyKCkgY2Fu IG9ubHkgYmUgYXBwbGllZCB0byBhIHN0cmluZworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ3Ry dWUnLCAnJC5sb3dlcigpJyk7CitFUlJPUjogIGpzb25wYXRoIGl0ZW0gbWV0aG9kIC5sb3dlcigp IGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gYSBzdHJpbmcKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5 KCcxMjM0JywgJyQubG93ZXIoKS50eXBlKCknKTsKK0VSUk9SOiAganNvbnBhdGggaXRlbSBtZXRo b2QgLmxvd2VyKCkgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhIHN0cmluZworc2VsZWN0IGpzb25i X3BhdGhfcXVlcnkoJ1syLCB0cnVlXScsICckLmxvd2VyKCknKTsKK0VSUk9SOiAganNvbnBhdGgg aXRlbSBtZXRob2QgLmxvd2VyKCkgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhIHN0cmluZworc2Vs ZWN0IGpzb25iX3BhdGhfcXVlcnlfYXJyYXkoJ1sibWF5YmUiLCAieWVzIiwgIm5vIl0nLCAnJFsq XS5sb3dlcigpJyk7CisganNvbmJfcGF0aF9xdWVyeV9hcnJheSAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFsibWF5YmUiLCAieWVzIiwgIm5vIl0KKygxIHJvdykKKworc2VsZWN0IGpzb25i X3BhdGhfcXVlcnlfYXJyYXkoJ1sibWF5YmUiLCAieWVzIiwgIm5vIl0nLCAnJFsqXS5sb3dlcigp LnR5cGUoKScpOworICAgICBqc29uYl9wYXRoX3F1ZXJ5X2FycmF5ICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgWyJzdHJpbmciLCAic3RyaW5nIiwgInN0cmluZyJdCiso MSByb3cpCisKKy0tIHRlc3QgLnVwcGVyKCkKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdudWxs JywgJyQudXBwZXIoKScpOworRVJST1I6ICBqc29ucGF0aCBpdGVtIG1ldGhvZCAudXBwZXIoKSBj YW4gb25seSBiZSBhcHBsaWVkIHRvIGEgc3RyaW5nCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgn bnVsbCcsICckLnVwcGVyKCknLCBzaWxlbnQgPT4gdHJ1ZSk7CisganNvbmJfcGF0aF9xdWVyeSAK Ky0tLS0tLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnko J1tdJywgJyQudXBwZXIoKScpOworIGpzb25iX3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0t LS0KKygwIHJvd3MpCisKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdbXScsICdzdHJpY3QgJC51 cHBlcigpJyk7CitFUlJPUjogIGpzb25wYXRoIGl0ZW0gbWV0aG9kIC51cHBlcigpIGNhbiBvbmx5 IGJlIGFwcGxpZWQgdG8gYSBzdHJpbmcKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCd7fScsICck LnVwcGVyKCknKTsKK0VSUk9SOiAganNvbnBhdGggaXRlbSBtZXRob2QgLnVwcGVyKCkgY2FuIG9u bHkgYmUgYXBwbGllZCB0byBhIHN0cmluZworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ1tdJywg J3N0cmljdCAkLnVwcGVyKCknLCBzaWxlbnQgPT4gdHJ1ZSk7CisganNvbmJfcGF0aF9xdWVyeSAK Ky0tLS0tLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnko J3t9JywgJyQudXBwZXIoKScsIHNpbGVudCA9PiB0cnVlKTsKKyBqc29uYl9wYXRoX3F1ZXJ5IAor LS0tLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgn MS4yMycsICckLnVwcGVyKCknKTsKK0VSUk9SOiAganNvbnBhdGggaXRlbSBtZXRob2QgLnVwcGVy KCkgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhIHN0cmluZworc2VsZWN0IGpzb25iX3BhdGhfcXVl cnkoJyIxLjIzIicsICckLnVwcGVyKCknKTsKKyBqc29uYl9wYXRoX3F1ZXJ5IAorLS0tLS0tLS0t LS0tLS0tLS0tCisgIjEuMjMiCisoMSByb3cpCisKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCci MS4yM2FhYSInLCAnJC51cHBlcigpJyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0t LS0tLS0tLQorICIxLjIzQUFBIgorKDEgcm93KQorCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgn MTIzNCcsICckLnVwcGVyKCknKTsKK0VSUk9SOiAganNvbnBhdGggaXRlbSBtZXRob2QgLnVwcGVy KCkgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhIHN0cmluZworc2VsZWN0IGpzb25iX3BhdGhfcXVl cnkoJ3RydWUnLCAnJC51cHBlcigpJyk7CitFUlJPUjogIGpzb25wYXRoIGl0ZW0gbWV0aG9kIC51 cHBlcigpIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gYSBzdHJpbmcKK3NlbGVjdCBqc29uYl9wYXRo X3F1ZXJ5KCcxMjM0JywgJyQudXBwZXIoKS50eXBlKCknKTsKK0VSUk9SOiAganNvbnBhdGggaXRl bSBtZXRob2QgLnVwcGVyKCkgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhIHN0cmluZworc2VsZWN0 IGpzb25iX3BhdGhfcXVlcnkoJ1syLCB0cnVlXScsICckLnVwcGVyKCknKTsKK0VSUk9SOiAganNv bnBhdGggaXRlbSBtZXRob2QgLnVwcGVyKCkgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhIHN0cmlu Zworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnlfYXJyYXkoJ1sibWF5YmUiLCAieWVzIiwgIm5vIl0n LCAnJFsqXS51cHBlcigpJyk7CisganNvbmJfcGF0aF9xdWVyeV9hcnJheSAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFsiTUFZQkUiLCAiWUVTIiwgIk5PIl0KKygxIHJvdykKKworc2VsZWN0 IGpzb25iX3BhdGhfcXVlcnlfYXJyYXkoJ1sibWF5YmUiLCAieWVzIiwgIm5vIl0nLCAnJFsqXS51 cHBlcigpLnR5cGUoKScpOworICAgICBqc29uYl9wYXRoX3F1ZXJ5X2FycmF5ICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgWyJzdHJpbmciLCAic3RyaW5nIiwgInN0cmlu ZyJdCisoMSByb3cpCisKKy0tIHRlc3QgLmluaXRjYXAoKQorc2VsZWN0IGpzb25iX3BhdGhfcXVl cnkoJ251bGwnLCAnJC5pbml0Y2FwKCknKTsKK0VSUk9SOiAganNvbnBhdGggaXRlbSBtZXRob2Qg LmluaXRjYXAoKSBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGEgc3RyaW5nCitzZWxlY3QganNvbmJf cGF0aF9xdWVyeSgnbnVsbCcsICckLmluaXRjYXAoKScsIHNpbGVudCA9PiB0cnVlKTsKKyBqc29u Yl9wYXRoX3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCitzZWxlY3QganNv bmJfcGF0aF9xdWVyeSgnW10nLCAnJC5pbml0Y2FwKCknKTsKKyBqc29uYl9wYXRoX3F1ZXJ5IAor LS0tLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgn W10nLCAnc3RyaWN0ICQuaW5pdGNhcCgpJyk7CitFUlJPUjogIGpzb25wYXRoIGl0ZW0gbWV0aG9k IC5pbml0Y2FwKCkgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhIHN0cmluZworc2VsZWN0IGpzb25i X3BhdGhfcXVlcnkoJ3t9JywgJyQuaW5pdGNhcCgpJyk7CitFUlJPUjogIGpzb25wYXRoIGl0ZW0g bWV0aG9kIC5pbml0Y2FwKCkgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhIHN0cmluZworc2VsZWN0 IGpzb25iX3BhdGhfcXVlcnkoJ1tdJywgJ3N0cmljdCAkLmluaXRjYXAoKScsIHNpbGVudCA9PiB0 cnVlKTsKKyBqc29uYl9wYXRoX3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQor CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgne30nLCAnJC5pbml0Y2FwKCknLCBzaWxlbnQgPT4g dHJ1ZSk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQorKDAgcm93cykK Kworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJzEuMjMnLCAnJC5pbml0Y2FwKCknKTsKK0VSUk9S OiAganNvbnBhdGggaXRlbSBtZXRob2QgLmluaXRjYXAoKSBjYW4gb25seSBiZSBhcHBsaWVkIHRv IGEgc3RyaW5nCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnIjEuMjMiJywgJyQuaW5pdGNhcCgp Jyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQorICIxLjIzIgorKDEg cm93KQorCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnIjEuMjNhYWEiJywgJyQuaW5pdGNhcCgp Jyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQorICIxLjIzYWFhIgor KDEgcm93KQorCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnMTIzNCcsICckLmluaXRjYXAoKScp OworRVJST1I6ICBqc29ucGF0aCBpdGVtIG1ldGhvZCAuaW5pdGNhcCgpIGNhbiBvbmx5IGJlIGFw cGxpZWQgdG8gYSBzdHJpbmcKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCd0cnVlJywgJyQuaW5p dGNhcCgpJyk7CitFUlJPUjogIGpzb25wYXRoIGl0ZW0gbWV0aG9kIC5pbml0Y2FwKCkgY2FuIG9u bHkgYmUgYXBwbGllZCB0byBhIHN0cmluZworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJzEyMzQn LCAnJC5pbml0Y2FwKCkudHlwZSgpJyk7CitFUlJPUjogIGpzb25wYXRoIGl0ZW0gbWV0aG9kIC5p bml0Y2FwKCkgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhIHN0cmluZworc2VsZWN0IGpzb25iX3Bh dGhfcXVlcnkoJ1syLCB0cnVlXScsICckLmluaXRjYXAoKScpOworRVJST1I6ICBqc29ucGF0aCBp dGVtIG1ldGhvZCAuaW5pdGNhcCgpIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gYSBzdHJpbmcKK3Nl bGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdbIm1heWJlIHllcyIsICJwcm9iYWJseSBubyJdJywgJyQu aW5pdGNhcCgpJyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQorICJN YXliZSBZZXMiCisgIlByb2JhYmx5IE5vIgorKDIgcm93cykKKworLS0gVGVzdCAucmVwbGFjZSgp CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnbnVsbCcsICckLnJlcGxhY2UoIngiLCAiYnllIikn KTsKK0VSUk9SOiAganNvbnBhdGggaXRlbSBtZXRob2QgLnJlcGxhY2UoKSBjYW4gb25seSBiZSBh cHBsaWVkIHRvIGEgc3RyaW5nCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnbnVsbCcsICckLnJl cGxhY2UoIngiLCAiYnllIiknLCBzaWxlbnQgPT4gdHJ1ZSk7CisganNvbmJfcGF0aF9xdWVyeSAK Ky0tLS0tLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnko J1sieCIsICJ5IiwgInoiXScsICckLnJlcGxhY2UoIngiLCAiYnllIiknKTsKKyBqc29uYl9wYXRo X3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tCisgImJ5ZSIKKyAieSIKKyAieiIKKygzIHJvd3Mp CisKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCd7fScsICckLnJlcGxhY2UoIngiLCAiYnllIikn KTsKK0VSUk9SOiAganNvbnBhdGggaXRlbSBtZXRob2QgLnJlcGxhY2UoKSBjYW4gb25seSBiZSBh cHBsaWVkIHRvIGEgc3RyaW5nCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnW10nLCAnc3RyaWN0 ICQucmVwbGFjZSgieCIsICJieWUiKScsIHNpbGVudCA9PiB0cnVlKTsKKyBqc29uYl9wYXRoX3F1 ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCitzZWxlY3QganNvbmJfcGF0aF9x dWVyeSgne30nLCAnJC5yZXBsYWNlKCJ4IiwgImJ5ZSIpJywgc2lsZW50ID0+IHRydWUpOworIGpz b25iX3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKygwIHJvd3MpCisKK3NlbGVjdCBq c29uYl9wYXRoX3F1ZXJ5KCcxLjIzJywgJyQucmVwbGFjZSgieCIsICJieWUiKScpOworRVJST1I6 ICBqc29ucGF0aCBpdGVtIG1ldGhvZCAucmVwbGFjZSgpIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8g YSBzdHJpbmcKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciaGVsbG8gd29ybGQiJywgJyQucmVw bGFjZSgiaGVsbG8iLCJieWUiKScpOworIGpzb25iX3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0t LS0tLS0KKyAiYnllIHdvcmxkIgorKDEgcm93KQorCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgn ImhlbGxvIHdvcmxkIicsICckLnJlcGxhY2UoImhlbGxvIiwiYnllIikgc3RhcnRzIHdpdGggImJ5 ZSInKTsKKyBqc29uYl9wYXRoX3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tCisgdHJ1ZQorKDEg cm93KQorCistLSBUZXN0IC5zcGxpdF9wYXJ0KCkKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCci YWJjfkB+ZGVmfkB+Z2hpIicsICckLnNwbGl0X3BhcnQoIn5AfiIsIDIpJyk7CisganNvbmJfcGF0 aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQorICJkZWYiCisoMSByb3cpCisKKy0tIFRlc3Qg c3RyaW5nIG1ldGhvZHMgcGxheSBuaWNlbHkgdG9nZXRoZXIKK3NlbGVjdCBqc29uYl9wYXRoX3F1 ZXJ5KCciaGVsbG8gd29ybGQiJywgJyQucmVwbGFjZSgiaGVsbG8iLCJieWUiKS51cHBlcigpJyk7 CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQorICJCWUUgV09STEQiCiso MSByb3cpCisKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciaEVsTG8gV29ybEQiJywgJyQubG93 ZXIoKS51cHBlcigpLmxvd2VyKCkucmVwbGFjZSgiaGVsbG8iLCJieWUiKScpOworIGpzb25iX3Bh dGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAiYnllIHdvcmxkIgorKDEgcm93KQorCitz ZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnImhFbExvIFdvcmxEIicsICckLnVwcGVyKCkubG93ZXIo KS51cHBlcigpLnJlcGxhY2UoIkhFTExPIiwgIkJZRSIpJyk7CisganNvbmJfcGF0aF9xdWVyeSAK Ky0tLS0tLS0tLS0tLS0tLS0tLQorICJCWUUgV09STEQiCisoMSByb3cpCisKK3NlbGVjdCBqc29u Yl9wYXRoX3F1ZXJ5KCciaEVsTG8gV29ybEQiJywgJyQubG93ZXIoKS51cHBlcigpLmxvd2VyKCku cmVwbGFjZSgiaGVsbG8iLCJieWUiKSBzdGFydHMgd2l0aCAiYnllIicpOworIGpzb25iX3BhdGhf cXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKyB0cnVlCisoMSByb3cpCisKK3NlbGVjdCBqc29u Yl9wYXRoX3F1ZXJ5KCciICAgaEVsTG8gV29ybEQgIicsICckLmJ0cmltKCkubG93ZXIoKS51cHBl cigpLmxvd2VyKCkucmVwbGFjZSgiaGVsbG8iLCJieWUiKSBzdGFydHMgd2l0aCAiYnllIicpOwor IGpzb25iX3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKyB0cnVlCisoMSByb3cpCisK IC0tIFRlc3QgLnRpbWUoKQogc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ251bGwnLCAnJC50aW1l KCknKTsKIEVSUk9SOiAganNvbnBhdGggaXRlbSBtZXRob2QgLnRpbWUoKSBjYW4gb25seSBiZSBh cHBsaWVkIHRvIGEgc3RyaW5nCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2pzb25wYXRoLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbnBhdGgub3V0Cmlu ZGV4IGZkOWJkNzU1ZjUuLjFiMTIyZTg3N2QgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvanNvbnBhdGgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNv bnBhdGgub3V0CkBAIC00MzUsNiArNDM1LDc4IEBAIHNlbGVjdCAnJC5zdHJpbmcoKSc6Ompzb25w YXRoOwogICQuc3RyaW5nKCkKICgxIHJvdykKIAorc2VsZWN0ICckLnJlcGxhY2UoImhlbGxvIiwi YnllIiknOjpqc29ucGF0aDsKKyAgICAgICAgIGpzb25wYXRoICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICQucmVwbGFjZSgiaGVsbG8iLCJieWUiKQorKDEgcm93KQorCitz ZWxlY3QgJyQubG93ZXIoKSc6Ompzb25wYXRoOworIGpzb25wYXRoICAKKy0tLS0tLS0tLS0tCisg JC5sb3dlcigpCisoMSByb3cpCisKK3NlbGVjdCAnJC51cHBlcigpJzo6anNvbnBhdGg7CisganNv bnBhdGggIAorLS0tLS0tLS0tLS0KKyAkLnVwcGVyKCkKKygxIHJvdykKKworc2VsZWN0ICckLmxv d2VyKCkudXBwZXIoKS5sb3dlcigpLnJlcGxhY2UoImhlbGxvIiwiYnllIiknOjpqc29ucGF0aDsK KyAgICAgICAgICAgICAgICAgICAgIGpzb25wYXRoICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICQubG93ZXIo KS51cHBlcigpLmxvd2VyKCkucmVwbGFjZSgiaGVsbG8iLCJieWUiKQorKDEgcm93KQorCitzZWxl Y3QgJyQubHRyaW0oKSc6Ompzb25wYXRoOworIGpzb25wYXRoICAKKy0tLS0tLS0tLS0tCisgJC5s dHJpbSgpCisoMSByb3cpCisKK3NlbGVjdCAnJC5sdHJpbSgieHl6IiknOjpqc29ucGF0aDsKKyAg ICBqc29ucGF0aCAgICAKKy0tLS0tLS0tLS0tLS0tLS0KKyAkLmx0cmltKCJ4eXoiKQorKDEgcm93 KQorCitzZWxlY3QgJyQucnRyaW0oKSc6Ompzb25wYXRoOworIGpzb25wYXRoICAKKy0tLS0tLS0t LS0tCisgJC5ydHJpbSgpCisoMSByb3cpCisKK3NlbGVjdCAnJC5ydHJpbSgieHl6IiknOjpqc29u cGF0aDsKKyAgICBqc29ucGF0aCAgICAKKy0tLS0tLS0tLS0tLS0tLS0KKyAkLnJ0cmltKCJ4eXoi KQorKDEgcm93KQorCitzZWxlY3QgJyQuYnRyaW0oKSc6Ompzb25wYXRoOworIGpzb25wYXRoICAK Ky0tLS0tLS0tLS0tCisgJC5idHJpbSgpCisoMSByb3cpCisKK3NlbGVjdCAnJC5idHJpbSgieHl6 IiknOjpqc29ucGF0aDsKKyAgICBqc29ucGF0aCAgICAKKy0tLS0tLS0tLS0tLS0tLS0KKyAkLmJ0 cmltKCJ4eXoiKQorKDEgcm93KQorCitzZWxlY3QgJyQuaW5pdGNhcCgpJzo6anNvbnBhdGg7Cisg IGpzb25wYXRoICAgCistLS0tLS0tLS0tLS0tCisgJC5pbml0Y2FwKCkKKygxIHJvdykKKworc2Vs ZWN0ICckLnNwbGl0X3BhcnQoIn5AfiIsIDIpJzo6anNvbnBhdGg7CisgICAgICAganNvbnBhdGgg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAkLnNwbGl0X3BhcnQoIn5AfiIsMikK KygxIHJvdykKKwogc2VsZWN0ICckLnRpbWUoKSc6Ompzb25wYXRoOwogIGpzb25wYXRoIAogLS0t LS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfanNvbnBhdGgu c3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfanNvbnBhdGguc3FsCmluZGV4IGRhM2Y3 OTY5Y2EuLmU2OWY4OGY5NjMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25i X2pzb25wYXRoLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9qc29ucGF0aC5z cWwKQEAgLTYxOSw2ICs2MTksMTE0IEBAIHNlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciMjAyMy0w OC0xNSAxMjozNDo1NiArNTozMCInLCAnJC50aW1lc3RhbXBfdHooKS5zdHJpbmcoCiBzZWxlY3Qg anNvbmJfcGF0aF9xdWVyeSgnIjIwMjMtMDgtMTUgMTI6MzQ6NTYiJywgJyQudGltZXN0YW1wKCku c3RyaW5nKCknKTsKIHJvbGxiYWNrOwogCistLSB0ZXN0IC5sdHJpbSgpCitzZWxlY3QganNvbmJf cGF0aF9xdWVyeSgnIiAgIGhlbGxvICAgIicsICckLmx0cmltKCIgIiknKTsKK3NlbGVjdCBqc29u Yl9wYXRoX3F1ZXJ5KCciICAgaGVsbG8gICAiJywgJyQubHRyaW0oIiAiKScpOworc2VsZWN0IGpz b25iX3BhdGhfcXVlcnkoJyIgICBoZWxsbyAgICInLCAnJC5sdHJpbSgpJyk7CitzZWxlY3QganNv bmJfcGF0aF9xdWVyeSgnIiAgIGhlbGxvICAgIicsICckLmx0cmltKCknKTsKK3NlbGVjdCBqc29u Yl9wYXRoX3F1ZXJ5KCdudWxsJywgJyQubHRyaW0oKScpOworc2VsZWN0IGpzb25iX3BhdGhfcXVl cnkoJ251bGwnLCAnJC5sdHJpbSgpJywgc2lsZW50ID0+IHRydWUpOworc2VsZWN0IGpzb25iX3Bh dGhfcXVlcnkoJ1tdJywgJyQubHRyaW0oKScpOworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ1td JywgJ3N0cmljdCAkLmx0cmltKCknKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCd7fScsICck Lmx0cmltKCknKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdbXScsICdzdHJpY3QgJC5sdHJp bSgpJywgc2lsZW50ID0+IHRydWUpOworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ3t9JywgJyQu bHRyaW0oKScsIHNpbGVudCA9PiB0cnVlKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCcxLjIz JywgJyQubHRyaW0oKScpOworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJyIxLjIzIicsICckLmx0 cmltKCknKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciMS4yM2FhYSInLCAnJC5sdHJpbSgp Jyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnMTIzNCcsICckLmx0cmltKCknKTsKK3NlbGVj dCBqc29uYl9wYXRoX3F1ZXJ5KCd0cnVlJywgJyQubHRyaW0oKScpOworc2VsZWN0IGpzb25iX3Bh dGhfcXVlcnkoJzEyMzQnLCAnJC5sdHJpbSgpLnR5cGUoKScpOworc2VsZWN0IGpzb25iX3BhdGhf cXVlcnkoJ1syLCB0cnVlXScsICckLmx0cmltKCknKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5 X2FycmF5KCdbIiAgbWF5YmUgICIsICIgIHllcyIsICIgIG5vIl0nLCAnJFsqXS5sdHJpbSgpJyk7 CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeV9hcnJheSgnWyIgIG1heWJlICAiLCAiICB5ZXMiLCAi ICBubyJdJywgJyRbKl0ubHRyaW0oKS50eXBlKCknKTsKKworLS0gdGVzdCAucnRyaW0oKQorc2Vs ZWN0IGpzb25iX3BhdGhfcXVlcnkoJyIgICBoZWxsbyAgICInLCAnJC5ydHJpbSgiICIpJyk7Citz ZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnIiAgIGhlbGxvICAgIicsICckLnJ0cmltKCIgIiknKTsK K3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciICAgaGVsbG8gICAiJywgJyQucnRyaW0oKScpOwor c2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJyIgICBoZWxsbyAgICInLCAnJC5ydHJpbSgpJyk7CisK Ky0tIHRlc3QgLmJ0cmltKCkKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciICAgaGVsbG8gICAi JywgJyQuYnRyaW0oIiAiKScpOworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJyIgICBoZWxsbyAg ICInLCAnJC5idHJpbSgiICIpJyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnIiAgIGhlbGxv ICAgIicsICckLmJ0cmltKCknKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciICAgaGVsbG8g ICAiJywgJyQuYnRyaW0oKScpOworCistLSB0ZXN0IC5sb3dlcigpCitzZWxlY3QganNvbmJfcGF0 aF9xdWVyeSgnbnVsbCcsICckLmxvd2VyKCknKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdu dWxsJywgJyQubG93ZXIoKScsIHNpbGVudCA9PiB0cnVlKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1 ZXJ5KCdbXScsICckLmxvd2VyKCknKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdbXScsICdz dHJpY3QgJC5sb3dlcigpJyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgne30nLCAnJC5sb3dl cigpJyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnW10nLCAnc3RyaWN0ICQubG93ZXIoKScs IHNpbGVudCA9PiB0cnVlKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCd7fScsICckLmxvd2Vy KCknLCBzaWxlbnQgPT4gdHJ1ZSk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnMS4yMycsICck Lmxvd2VyKCknKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciMS4yMyInLCAnJC5sb3dlcigp Jyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnIjEuMjNhYWEiJywgJyQubG93ZXIoKScpOwor c2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJzEyMzQnLCAnJC5sb3dlcigpJyk7CitzZWxlY3QganNv bmJfcGF0aF9xdWVyeSgndHJ1ZScsICckLmxvd2VyKCknKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1 ZXJ5KCcxMjM0JywgJyQubG93ZXIoKS50eXBlKCknKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5 KCdbMiwgdHJ1ZV0nLCAnJC5sb3dlcigpJyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeV9hcnJh eSgnWyJtYXliZSIsICJ5ZXMiLCAibm8iXScsICckWypdLmxvd2VyKCknKTsKK3NlbGVjdCBqc29u Yl9wYXRoX3F1ZXJ5X2FycmF5KCdbIm1heWJlIiwgInllcyIsICJubyJdJywgJyRbKl0ubG93ZXIo KS50eXBlKCknKTsKKworLS0gdGVzdCAudXBwZXIoKQorc2VsZWN0IGpzb25iX3BhdGhfcXVlcnko J251bGwnLCAnJC51cHBlcigpJyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnbnVsbCcsICck LnVwcGVyKCknLCBzaWxlbnQgPT4gdHJ1ZSk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnW10n LCAnJC51cHBlcigpJyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnW10nLCAnc3RyaWN0ICQu dXBwZXIoKScpOworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ3t9JywgJyQudXBwZXIoKScpOwor c2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ1tdJywgJ3N0cmljdCAkLnVwcGVyKCknLCBzaWxlbnQg PT4gdHJ1ZSk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgne30nLCAnJC51cHBlcigpJywgc2ls ZW50ID0+IHRydWUpOworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJzEuMjMnLCAnJC51cHBlcigp Jyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnIjEuMjMiJywgJyQudXBwZXIoKScpOworc2Vs ZWN0IGpzb25iX3BhdGhfcXVlcnkoJyIxLjIzYWFhIicsICckLnVwcGVyKCknKTsKK3NlbGVjdCBq c29uYl9wYXRoX3F1ZXJ5KCcxMjM0JywgJyQudXBwZXIoKScpOworc2VsZWN0IGpzb25iX3BhdGhf cXVlcnkoJ3RydWUnLCAnJC51cHBlcigpJyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnMTIz NCcsICckLnVwcGVyKCkudHlwZSgpJyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnWzIsIHRy dWVdJywgJyQudXBwZXIoKScpOworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnlfYXJyYXkoJ1sibWF5 YmUiLCAieWVzIiwgIm5vIl0nLCAnJFsqXS51cHBlcigpJyk7CitzZWxlY3QganNvbmJfcGF0aF9x dWVyeV9hcnJheSgnWyJtYXliZSIsICJ5ZXMiLCAibm8iXScsICckWypdLnVwcGVyKCkudHlwZSgp Jyk7CisKKy0tIHRlc3QgLmluaXRjYXAoKQorc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ251bGwn LCAnJC5pbml0Y2FwKCknKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdudWxsJywgJyQuaW5p dGNhcCgpJywgc2lsZW50ID0+IHRydWUpOworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ1tdJywg JyQuaW5pdGNhcCgpJyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnW10nLCAnc3RyaWN0ICQu aW5pdGNhcCgpJyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgne30nLCAnJC5pbml0Y2FwKCkn KTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdbXScsICdzdHJpY3QgJC5pbml0Y2FwKCknLCBz aWxlbnQgPT4gdHJ1ZSk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgne30nLCAnJC5pbml0Y2Fw KCknLCBzaWxlbnQgPT4gdHJ1ZSk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnMS4yMycsICck LmluaXRjYXAoKScpOworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJyIxLjIzIicsICckLmluaXRj YXAoKScpOworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJyIxLjIzYWFhIicsICckLmluaXRjYXAo KScpOworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJzEyMzQnLCAnJC5pbml0Y2FwKCknKTsKK3Nl bGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCd0cnVlJywgJyQuaW5pdGNhcCgpJyk7CitzZWxlY3QganNv bmJfcGF0aF9xdWVyeSgnMTIzNCcsICckLmluaXRjYXAoKS50eXBlKCknKTsKK3NlbGVjdCBqc29u Yl9wYXRoX3F1ZXJ5KCdbMiwgdHJ1ZV0nLCAnJC5pbml0Y2FwKCknKTsKK3NlbGVjdCBqc29uYl9w YXRoX3F1ZXJ5KCdbIm1heWJlIHllcyIsICJwcm9iYWJseSBubyJdJywgJyQuaW5pdGNhcCgpJyk7 CisKKy0tIFRlc3QgLnJlcGxhY2UoKQorc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ251bGwnLCAn JC5yZXBsYWNlKCJ4IiwgImJ5ZSIpJyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnbnVsbCcs ICckLnJlcGxhY2UoIngiLCAiYnllIiknLCBzaWxlbnQgPT4gdHJ1ZSk7CitzZWxlY3QganNvbmJf cGF0aF9xdWVyeSgnWyJ4IiwgInkiLCAieiJdJywgJyQucmVwbGFjZSgieCIsICJieWUiKScpOwor c2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ3t9JywgJyQucmVwbGFjZSgieCIsICJieWUiKScpOwor c2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ1tdJywgJ3N0cmljdCAkLnJlcGxhY2UoIngiLCAiYnll IiknLCBzaWxlbnQgPT4gdHJ1ZSk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgne30nLCAnJC5y ZXBsYWNlKCJ4IiwgImJ5ZSIpJywgc2lsZW50ID0+IHRydWUpOworc2VsZWN0IGpzb25iX3BhdGhf cXVlcnkoJzEuMjMnLCAnJC5yZXBsYWNlKCJ4IiwgImJ5ZSIpJyk7CitzZWxlY3QganNvbmJfcGF0 aF9xdWVyeSgnImhlbGxvIHdvcmxkIicsICckLnJlcGxhY2UoImhlbGxvIiwiYnllIiknKTsKK3Nl bGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciaGVsbG8gd29ybGQiJywgJyQucmVwbGFjZSgiaGVsbG8i LCJieWUiKSBzdGFydHMgd2l0aCAiYnllIicpOworCistLSBUZXN0IC5zcGxpdF9wYXJ0KCkKK3Nl bGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciYWJjfkB+ZGVmfkB+Z2hpIicsICckLnNwbGl0X3BhcnQo In5AfiIsIDIpJyk7CisKKy0tIFRlc3Qgc3RyaW5nIG1ldGhvZHMgcGxheSBuaWNlbHkgdG9nZXRo ZXIKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciaGVsbG8gd29ybGQiJywgJyQucmVwbGFjZSgi aGVsbG8iLCJieWUiKS51cHBlcigpJyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnImhFbExv IFdvcmxEIicsICckLmxvd2VyKCkudXBwZXIoKS5sb3dlcigpLnJlcGxhY2UoImhlbGxvIiwiYnll IiknKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCciaEVsTG8gV29ybEQiJywgJyQudXBwZXIo KS5sb3dlcigpLnVwcGVyKCkucmVwbGFjZSgiSEVMTE8iLCAiQllFIiknKTsKK3NlbGVjdCBqc29u Yl9wYXRoX3F1ZXJ5KCciaEVsTG8gV29ybEQiJywgJyQubG93ZXIoKS51cHBlcigpLmxvd2VyKCku cmVwbGFjZSgiaGVsbG8iLCJieWUiKSBzdGFydHMgd2l0aCAiYnllIicpOworc2VsZWN0IGpzb25i X3BhdGhfcXVlcnkoJyIgICBoRWxMbyBXb3JsRCAiJywgJyQuYnRyaW0oKS5sb3dlcigpLnVwcGVy KCkubG93ZXIoKS5yZXBsYWNlKCJoZWxsbyIsImJ5ZSIpIHN0YXJ0cyB3aXRoICJieWUiJyk7CisK IC0tIFRlc3QgLnRpbWUoKQogc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ251bGwnLCAnJC50aW1l KCknKTsKIHNlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCd0cnVlJywgJyQudGltZSgpJyk7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29ucGF0aC5zcWwgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9qc29ucGF0aC5zcWwKaW5kZXggNjFhNTI3MGQ0ZS4uODc1MmZmY2YwOCAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbnBhdGguc3FsCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2pzb25wYXRoLnNxbApAQCAtNzgsNiArNzgsMTkgQEAgc2VsZWN0ICckLmJvb2xl YW4oKSc6Ompzb25wYXRoOwogc2VsZWN0ICckLmRhdGUoKSc6Ompzb25wYXRoOwogc2VsZWN0ICck LmRlY2ltYWwoNCwyKSc6Ompzb25wYXRoOwogc2VsZWN0ICckLnN0cmluZygpJzo6anNvbnBhdGg7 CitzZWxlY3QgJyQucmVwbGFjZSgiaGVsbG8iLCJieWUiKSc6Ompzb25wYXRoOworc2VsZWN0ICck Lmxvd2VyKCknOjpqc29ucGF0aDsKK3NlbGVjdCAnJC51cHBlcigpJzo6anNvbnBhdGg7CitzZWxl Y3QgJyQubG93ZXIoKS51cHBlcigpLmxvd2VyKCkucmVwbGFjZSgiaGVsbG8iLCJieWUiKSc6Ompz b25wYXRoOworc2VsZWN0ICckLmx0cmltKCknOjpqc29ucGF0aDsKK3NlbGVjdCAnJC5sdHJpbSgi eHl6IiknOjpqc29ucGF0aDsKK3NlbGVjdCAnJC5ydHJpbSgpJzo6anNvbnBhdGg7CitzZWxlY3Qg JyQucnRyaW0oInh5eiIpJzo6anNvbnBhdGg7CitzZWxlY3QgJyQuYnRyaW0oKSc6Ompzb25wYXRo Oworc2VsZWN0ICckLmJ0cmltKCJ4eXoiKSc6Ompzb25wYXRoOworc2VsZWN0ICckLmluaXRjYXAo KSc6Ompzb25wYXRoOworc2VsZWN0ICckLnNwbGl0X3BhcnQoIn5AfiIsIDIpJzo6anNvbnBhdGg7 CisKIHNlbGVjdCAnJC50aW1lKCknOjpqc29ucGF0aDsKIHNlbGVjdCAnJC50aW1lKDYpJzo6anNv bnBhdGg7CiBzZWxlY3QgJyQudGltZV90eigpJzo6anNvbnBhdGg7Ci0tIAoyLjM5LjUgKEFwcGxl IEdpdC0xNTQpCgo= --00000000000032ac4f0622f5a46b--