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 1uqWfN-007txr-H1 for pgpool-hackers@arkaria.postgresql.org; Mon, 25 Aug 2025 12:51:19 +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 1uqWfM-009GAt-JW for pgpool-hackers@arkaria.postgresql.org; Mon, 25 Aug 2025 12:51:17 +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 1uqWfL-009GAl-Sr for pgpool-hackers@lists.postgresql.org; Mon, 25 Aug 2025 12:51:16 +0000 Received: from mail-yw1-x112b.google.com ([2607:f8b0:4864:20::112b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uqWfH-001evK-0I for pgpool-hackers@lists.postgresql.org; Mon, 25 Aug 2025 12:51:15 +0000 Received: by mail-yw1-x112b.google.com with SMTP id 00721157ae682-71d603a9cfaso31477837b3.1 for ; Mon, 25 Aug 2025 05:51:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tailorbrands.com; s=google; t=1756126271; x=1756731071; 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=kYH3fA8VJHd91t2ixj7R8cc5kOZYvY+YS/1c7IRXhUo=; b=K/q9IOhHgmv+FiUYGxuV74k/N6z42ZEyUT01nqGHM6S7yAH29PBRFDHpUlmmP3s5t4 6+m+660Tha3K5V8WgcFAZlW9NlZhxMn55pKC/gvxDEgBauHDE6qaciOrjrWR4nvP9IdD Yk9DtKs1rNNWE7R4N6f9J54X5hDH1uktmf/JdOxgHcLTrH5n1aLbVte6p/Td/mif9KEW /I90oRR/kZFLup3H9oc5bEPQT84bJvbvUpKZ/J0PSiH6nV4hHFHW2+NQZpMCjy4vMp96 w3N5u8ZdnpnOM3eht4r+/C/bBNpyXSmfzFuQhatlEWusJYrYr/vJmZPs03PMO8DX29RH COnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756126271; x=1756731071; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=kYH3fA8VJHd91t2ixj7R8cc5kOZYvY+YS/1c7IRXhUo=; b=MV7fkYuHBQqsBWrV3wq23plcsQ0x7TOo7dZVQTJ8o84HS1Zcn6NLZwX/l0+xQ20GIp hlKFcHu11fiYaDrdUwPsvGTf4Psinh5kaA6I8BKhVhdmDHRBvb4hMAbwptpvsccpWYV+ WS9I7o/GYKka6rh/mY1Zm65ZjbcGNZbzjNkJku62P4PWuJqg6Teid/dgbB6pTFj4yn5M Imalim2dKCodvCelPApiGJe4AWHPsBbJTkPfsXNa52pNOE043lN9tA4Q0DFmqsxOrHFu FhaxV8eIQDGzrjaSkKY7AdkwSN6/DsFlSPniqyfQGToYfcsoJHBRa7WCa8NwdhDEgpW+ uOcg== X-Gm-Message-State: AOJu0YzwYtz3omzwWtrlPOJwPRrrCCqu7w32WK1rqRHVADLikRsIiE1c wHn+5Vn6pIWTHSDoS/NTSJGsogn4WLOKZ48f4Ecg/0znKD9MGWE0421g+gMfmWzNi88zM3YBy5E mAn4cKx6HSFbpniuA/10PppV3eUeA1bvXM+AvxOIpyh4RBljySIRHjBlcag== X-Gm-Gg: ASbGncuErxddic1Ye3dJjQTToi2SRWySmoQ2YuJDz0iPsY3+SXDIF10V/XziGcyfedc K3ibfC53Wok+yqHQF0ftZV7eOQp3oLOmXjhHFEtp2HarDaD+FTJei9Bn6fmerQOUKNAucJQRkkK OMu+2XadYM9T6IgGcgSUY9U+DpVE3ah9q+WpS75NGVn8/ARVzkjhxs6F6Eo05HEUaWP6DMqNwgo dy7jg== X-Google-Smtp-Source: AGHT+IE9VPTZ5Wep5L6FkX0eL70GpD/R35PPhSHUJVtHZvHQ4F0B43Nz+++myDqetlFZOsCrmvuBiPTKn6iO0+3pTEA= X-Received: by 2002:a05:690c:9c0e:b0:71a:234c:aaa8 with SMTP id 00721157ae682-71fdc2b0946mr131526327b3.2.1756126270627; Mon, 25 Aug 2025 05:51:10 -0700 (PDT) MIME-Version: 1.0 References: <20250821.192332.768193620076940871.ishii@postgresql.org> <20250825.111825.1765418484481637087.ishii@postgresql.org> In-Reply-To: <20250825.111825.1765418484481637087.ishii@postgresql.org> From: Nadav Shatz Date: Mon, 25 Aug 2025 15:50:58 +0300 X-Gm-Features: Ac12FXzdnZ2r_IwOz8em50cbONuUn72Ae5fZ9ZhRcH7ZBr7tzhDFlmRhjoRDVNs Message-ID: Subject: Re: Proposal: recent access based routing for primary-replica setups To: Tatsuo Ishii Cc: pgpool-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000008b0cc9063d30023e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008b0cc9063d30023e Content-Type: multipart/alternative; boundary="0000000000008b0cc7063d30023c" --0000000000008b0cc7063d30023c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Tatsuo, Thank you for the notes - please find attached an updated version. What do you think? Thanks, On Mon, Aug 25, 2025 at 5:18=E2=80=AFAM Tatsuo Ishii = wrote: > Hi Nadav, > > Thank you for the patch! > > I have one question. How do you provide a password (sr_check_password) > while executing replication_delay_source_cmd as sr_check_user? In my > understanding replication_delay_source_cmd is executed through su > command in your patch. In this case su command tries to read the > password from terminal. I don't see such a code in the patch. > > BTW, I start to think that executing replication_delay_source_cmd as > sr_check_user might not be a good idea. sr_check_user is a database > user, not OS user. In PostgreSQL they are not necessarily the > same. Also doing su in pgpool process needs to be very carefully to > avoid vulnerability. Probably we just execute it as pgpool OS user? > > Lastly when I apply the patches using git apply, there are some > trailing space errors. > > $ git apply ~/external-lag-feature-implementation.patch > /home/t-ishii/external-lag-feature-implementation.patch:314: trailing > whitespace. > > /home/t-ishii/external-lag-feature-implementation.patch:317: trailing > whitespace. > > /home/t-ishii/external-lag-feature-implementation.patch:318: trailing > whitespace. > cmd_len =3D strlen(escaped_cmd) + > /home/t-ishii/external-lag-feature-implementation.patch:320: trailing > whitespace. > > /home/t-ishii/external-lag-feature-implementation.patch:322: trailing > whitespace. > snprintf(full_command, cmd_len, "su - %s -c '%s'"= , > warning: squelched 4 whitespace errors > warning: 9 lines add whitespace errors. > > $ git apply ~/external-lag-feature-tests.patch > /home/t-ishii/external-lag-feature-tests.patch:87: trailing whitespace. > - test_parsing.sh: Unit test for parsing logic > /home/t-ishii/external-lag-feature-tests.patch:440: trailing whitespace. > # Test 2: Float values > warning: 2 lines add whitespace errors. > > Also I have some compilation errors after patching the source > code. See attached compilation log. > > Best regards, > -- > Tatsuo Ishii > SRA OSS K.K. > English: http://www.sraoss.co.jp/index_en/ > Japanese:http://www.sraoss.co.jp > --=20 Nadav Shatz Tailor Brands | CTO --0000000000008b0cc7063d30023c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi=C2=A0Tatsuo,

Thank you for the notes= - please find attached an updated version.

What d= o you think?

Thanks,

On= Mon, Aug 25, 2025 at 5:18=E2=80=AFAM Tatsuo Ishii <ishii@postgresql.org> wrote:
Hi Nadav,

Thank you for the patch!

I have one question. How do you provide a password (sr_check_password)
while executing replication_delay_source_cmd as sr_check_user? In my
understanding replication_delay_source_cmd is executed through su
command in your patch. In this case su command tries to read the
password from terminal. I don't see such a code in the patch.

BTW, I start to think that executing replication_delay_source_cmd as
sr_check_user might not be a good idea. sr_check_user is a database
user, not OS user. In PostgreSQL they are not necessarily the
same. Also doing su in pgpool process needs to be very carefully to
avoid vulnerability. Probably we just execute it as pgpool OS user?

Lastly when I apply the patches using git apply, there are some
trailing space errors.

$ git apply ~/external-lag-feature-implementation.patch
/home/t-ishii/external-lag-feature-implementation.patch:314: trailing white= space.

/home/t-ishii/external-lag-feature-implementation.patch:317: trailing white= space.

/home/t-ishii/external-lag-feature-implementation.patch:318: trailing white= space.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 cmd_len =3D strlen(escaped_cmd) +
/home/t-ishii/external-lag-feature-implementation.patch:320: trailing white= space.

/home/t-ishii/external-lag-feature-implementation.patch:322: trailing white= space.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 snprintf(full_command, cmd_len, "su - %s -c '%s'&qu= ot;,
warning: squelched 4 whitespace errors
warning: 9 lines add whitespace errors.

$ git apply ~/external-lag-feature-tests.patch
/home/t-ishii/external-lag-feature-tests.patch:87: trailing whitespace.
- test_parsing.sh: Unit test for parsing logic=C2=A0
/home/t-ishii/external-lag-feature-tests.patch:440: trailing whitespace. # Test 2: Float values=C2=A0
warning: 2 lines add whitespace errors.

Also I have some compilation errors after patching the source
code. See attached compilation log.

Best regards,
--
Tatsuo Ishii
SRA OSS K.K.
English: http://www.sraoss.co.jp/index_en/
Japanese:http://www.sraoss.co.jp


--
Nadav Shatz
<= font color=3D"#000000">Tailor Brands=C2=A0| CTO
--0000000000008b0cc7063d30023c-- --0000000000008b0cc9063d30023e Content-Type: application/octet-stream; name="changes.patch" Content-Disposition: attachment; filename="changes.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mer48bvp0 ZGlmZiAtLWdpdCBjL3NyYy9jb25maWcvcG9vbF9jb25maWdfdmFyaWFibGVzLmMgdy9zcmMvY29u ZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5jCmluZGV4IDViYmU0NmQzYS4uZDJiZTQzNGUwIDEw MDY0NAotLS0gYy9zcmMvY29uZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5jCisrKyB3L3NyYy9j b25maWcvcG9vbF9jb25maWdfdmFyaWFibGVzLmMKQEAgLTMxMCw2ICszMTAsMTIgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBjb25maWdfZW51bV9lbnRyeSBjaGVja190ZW1wX3RhYmxlX29wdGlvbnNb XSA9IHsKIAl7TlVMTCwgMCwgZmFsc2V9CiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZp Z19lbnVtX2VudHJ5IHJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9vcHRpb25zW10gPSB7CisJeyJi dWlsdGluIiwgUkVQTElDQVRJT05fREVMQVlfQlVJTFRJTiwgZmFsc2V9LAorCXsiY21kIiwgUkVQ TElDQVRJT05fREVMQVlfQ01ELCBmYWxzZX0sCisJe05VTEwsIDAsIGZhbHNlfQorfTsKKwogc3Rh dGljIGNvbnN0IHN0cnVjdCBjb25maWdfZW51bV9lbnRyeSBsb2dfYmFja2VuZF9tZXNzYWdlc19v cHRpb25zW10gPSB7CiAJeyJub25lIiwgQkdNU0dfTk9ORSwgZmFsc2V9LAkvKiB0dXJuIG9mZiBs b2dnaW5nICovCiAJeyJ0ZXJzZSIsIEJHTVNHX1RFUlNFLCBmYWxzZX0sCS8qIHRlcnNlIGxvZ2dp bmcgKHJlcGVhdGVkIG1lc3NhZ2VzIGFyZQpAQCAtOTgwLDYgKzk4NiwxNiBAQCBzdGF0aWMgc3Ry dWN0IGNvbmZpZ19zdHJpbmcgQ29uZmlndXJlTmFtZXNTdHJpbmdbXSA9CiAJCU5VTEwsIE5VTEws IE5VTEwsIE5VTEwKIAl9LAogCisJeworCQl7InJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQi LCBDRkdDWFRfUkVMT0FELCBTVFJFQU1JTkdfUkVQTElDQVRJT05fQ09ORklHLAorCQkJIkV4dGVy bmFsIGNvbW1hbmQgdG8gcmV0cmlldmUgcmVwbGljYXRpb24gZGVsYXkgaW5mb3JtYXRpb24uIiwK KwkJCUNPTkZJR19WQVJfVFlQRV9TVFJJTkcsIGZhbHNlLCAwCisJCX0sCisJCSZnX3Bvb2xfY29u ZmlnLnJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQsCisJCSIiLAorCQlOVUxMLCBOVUxMLCBO VUxMLCBOVUxMCisJfSwKKwogCXsKIAkJeyJmYWlsYmFja19jb21tYW5kIiwgQ0ZHQ1hUX1JFTE9B RCwgRkFJTE9WRVJfQ09ORklHLAogCQkJIkNvbW1hbmQgdG8gZXhlY3V0ZSB3aGVuIGJhY2tlbmQg bm9kZSBpcyBhdHRhY2hlZC4iLApAQCAtMjMyMyw2ICsyMzM5LDE3IEBAIHN0YXRpYyBzdHJ1Y3Qg Y29uZmlnX2ludCBDb25maWd1cmVOYW1lc0ludFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0s CiAKKwl7CisJCXsicmVwbGljYXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQiLCBDRkdDWFRfUkVM T0FELCBTVFJFQU1JTkdfUkVQTElDQVRJT05fQ09ORklHLAorCQkJIlRpbWVvdXQgZm9yIGV4dGVy bmFsIHJlcGxpY2F0aW9uIGRlbGF5IGNvbW1hbmQgZXhlY3V0aW9uIGluIHNlY29uZHMuIiwKKwkJ CUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnJl cGxpY2F0aW9uX2RlbGF5X3NvdXJjZV90aW1lb3V0LAorCQkxMCwKKwkJMSwgMzYwMCwKKwkJTlVM TCwgTlVMTCwgTlVMTAorCX0sCisKIAkvKiBFbmQtb2YtbGlzdCBtYXJrZXIgKi8KIAlFTVBUWV9D T05GSUdfSU5UCiB9OwpAQCAtMjQ4NSw2ICsyNTEyLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmln X2VudW0gQ29uZmlndXJlTmFtZXNFbnVtW10gPQogCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCiAJ fSwKIAorCXsKKwkJeyJyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2UiLCBDRkdDWFRfUkVMT0FELCBT VFJFQU1JTkdfUkVQTElDQVRJT05fQ09ORklHLAorCQkJIlNvdXJjZSBvZiByZXBsaWNhdGlvbiBk ZWxheSBpbmZvcm1hdGlvbi4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0VOVU0sIGZhbHNlLCAwCisJ CX0sCisJCShpbnQgKikgJmdfcG9vbF9jb25maWcucmVwbGljYXRpb25fZGVsYXlfc291cmNlLAor CQlSRVBMSUNBVElPTl9ERUxBWV9CVUlMVElOLAorCQlyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2Vf b3B0aW9ucywKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAkvKiBFbmQtb2YtbGlz dCBtYXJrZXIgKi8KIAlFTVBUWV9DT05GSUdfRU5VTQogfTsKZGlmZiAtLWdpdCBjL3NyYy9pbmNs dWRlL3Bvb2xfY29uZmlnLmggdy9zcmMvaW5jbHVkZS9wb29sX2NvbmZpZy5oCmluZGV4IGJlODI3 NTBlNS4uMWE4MjYyZGQ3IDEwMDY0NAotLS0gYy9zcmMvaW5jbHVkZS9wb29sX2NvbmZpZy5oCisr KyB3L3NyYy9pbmNsdWRlL3Bvb2xfY29uZmlnLmgKQEAgLTk0LDYgKzk0LDEyIEBAIHR5cGVkZWYg ZW51bSBMb2dTdGFuZGJ5RGVsYXlNb2RlcwogCUxTRF9OT05FCiB9IExvZ1N0YW5kYnlEZWxheU1v ZGVzOwogCit0eXBlZGVmIGVudW0gUmVwbGljYXRpb25EZWxheVNvdXJjZU1vZGVzCit7CisJUkVQ TElDQVRJT05fREVMQVlfQlVJTFRJTiA9IDEsCisJUkVQTElDQVRJT05fREVMQVlfQ01ECit9IFJl cGxpY2F0aW9uRGVsYXlTb3VyY2VNb2RlczsKKwogCiB0eXBlZGVmIGVudW0gTWVtQ2FjaGVNZXRo b2QKIHsKQEAgLTM3MSw2ICszNzcsOSBAQCB0eXBlZGVmIHN0cnVjdAogCWNoYXIJICAgKnNyX2No ZWNrX3Bhc3N3b3JkOwkvKiBwYXNzd29yZCBmb3Igc3JfY2hlY2tfdXNlciAqLwogCWNoYXIJICAg KnNyX2NoZWNrX2RhdGFiYXNlOwkvKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIG5hbWUgZm9yIHN0cmVh bWluZwogCQkJCQkJCQkJICogcmVwbGljYXRpb24gY2hlY2sgKi8KKwlpbnQJCQlyZXBsaWNhdGlv bl9kZWxheV9zb3VyY2U7CS8qIHJlcGxpY2F0aW9uIGRlbGF5IHNvdXJjZTogYnVpbHRpbiBvciBj bWQgKi8KKwljaGFyCSAgICpyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfY21kOwkvKiBleHRlcm5h bCBjb21tYW5kIGZvciByZXBsaWNhdGlvbiBkZWxheSAqLworCWludAkJCXJlcGxpY2F0aW9uX2Rl bGF5X3NvdXJjZV90aW1lb3V0OwkvKiB0aW1lb3V0IGZvciBleHRlcm5hbCBjb21tYW5kIGluIHNl Y29uZHMgKi8KIAljaGFyCSAgICpmYWlsb3Zlcl9jb21tYW5kOwkvKiBleGVjdXRlIGNvbW1hbmQg d2hlbiBmYWlsb3ZlciBoYXBwZW5zICovCiAJY2hhcgkgICAqZm9sbG93X3ByaW1hcnlfY29tbWFu ZDsgLyogZXhlY3V0ZSBjb21tYW5kIHdoZW4gZmFpbG92ZXIgaXMKIAkJCQkJCQkJCQkgKiBlbmRl ZCAqLwpkaWZmIC0tZ2l0IGMvc3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtIHcv c3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtCmluZGV4IGE3ZWI1OTRjOS4uNjYy ZTc2N2E2IDEwMDY0NAotLS0gYy9zcmMvc2FtcGxlL3BncG9vbC5jb25mLnNhbXBsZS1zdHJlYW0K KysrIHcvc3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtCkBAIC01MTksNiArNTE5 LDIyIEBAIGJhY2tlbmRfY2x1c3RlcmluZ19tb2RlID0gc3RyZWFtaW5nX3JlcGxpY2F0aW9uCiAK ICNzcl9jaGVja19kYXRhYmFzZSA9ICdwb3N0Z3JlcycKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyBEYXRhYmFzZSBuYW1lIGZvciBzdHJlYW1pbmcgcmVwbGljYXRpb24gY2hl Y2sKKworI3JlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZSA9ICdidWlsdGluJworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjIFNvdXJjZSBvZiByZXBsaWNhdGlvbiBkZWxheSBpbmZv cm1hdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICdidWlsdGluJzog dXNlIGJ1aWx0LWluIGRhdGFiYXNlIHF1ZXJpZXMgKGRlZmF1bHQpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgJ2NtZCc6IHVzZSBleHRlcm5hbCBjb21tYW5kCisjcmVwbGlj YXRpb25fZGVsYXlfc291cmNlX2NtZCA9ICcnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgRXh0ZXJuYWwgY29tbWFuZCB0byByZXRyaWV2ZSByZXBsaWNhdGlvbiBkZWxheSBp bmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE9ubHkgdXNl ZCB3aGVuIHJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZSA9ICdjbWQnCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgQ29tbWFuZCBzaG91bGQgb3V0cHV0IGRlbGF5IHZhbHVlcyBp biBtaWxsaXNlY29uZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGb3Jt YXQ6ICIwIDIwIDEwIiAobm9kZTAgbm9kZTEgbm9kZTIgZGVsYXlzKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIENvbW1hbmQgcnVucyBhcyB0aGUgcGdwb29sIHByb2Nlc3Mg dXNlcgorI3JlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV90aW1lb3V0ID0gMTAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyBUaW1lb3V0IGZvciBleHRlcm5hbCBjb21tYW5kIGV4 ZWN1dGlvbiBpbiBzZWNvbmRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg T25seSB1c2VkIHdoZW4gcmVwbGljYXRpb25fZGVsYXlfc291cmNlID0gJ2NtZCcKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSYW5nZTogMS0zNjAwIHNlY29uZHMgKGRlZmF1 bHQ6IDEwKQorCiAjZGVsYXlfdGhyZXNob2xkID0gMAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjIFRocmVzaG9sZCBiZWZvcmUgbm90IGRpc3BhdGNoaW5nIHF1ZXJ5IHRvIHN0 YW5kYnkgbm9kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFVuaXQgaXMg aW4gYnl0ZXMKZGlmZiAtLWdpdCBjL3NyYy9zdHJlYW1pbmdfcmVwbGljYXRpb24vcG9vbF93b3Jr ZXJfY2hpbGQuYyB3L3NyYy9zdHJlYW1pbmdfcmVwbGljYXRpb24vcG9vbF93b3JrZXJfY2hpbGQu YwppbmRleCA0ZjhmODIzYTMuLjI2MDk4OWYyNyAxMDA2NDQKLS0tIGMvc3JjL3N0cmVhbWluZ19y ZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jCisrKyB3L3NyYy9zdHJlYW1pbmdfcmVwbGlj YXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYwpAQCAtNzYsNiArNzYsNyBAQCBzdGF0aWMgdm9sYXRp bGUgc2lnX2F0b21pY190IHJlc3RhcnRfcmVxdWVzdCA9IDA7CiBzdGF0aWMgdm9pZCBlc3RhYmxp c2hfcGVyc2lzdGVudF9jb25uZWN0aW9uKHZvaWQpOwogc3RhdGljIHZvaWQgZGlzY2FyZF9wZXJz aXN0ZW50X2Nvbm5lY3Rpb24odm9pZCk7CiBzdGF0aWMgdm9pZCBjaGVja19yZXBsaWNhdGlvbl90 aW1lX2xhZyh2b2lkKTsKK3N0YXRpYyB2b2lkIGNoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnX3dp dGhfY21kKHZvaWQpOwogc3RhdGljIHZvaWQgQ2hlY2tSZXBsaWNhdGlvblRpbWVMYWdFcnJvckNi KHZvaWQgKmFyZyk7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGludCB0ZXh0X3RvX2xzbihj aGFyICp0ZXh0KTsKIHN0YXRpYyBSRVRTSUdUWVBFIG15X3NpZ25hbF9oYW5kbGVyKGludCBzaWcp OwpAQCAtMjU5LDcgKzI2MCwxMCBAQCBkb193b3JrZXJfY2hpbGQodm9pZCkKIAkJCQkJUE9PTF9O T0RFX1NUQVRVUyAqbm9kZV9zdGF0dXM7CiAJCQkJCWludAkJCWk7CiAKLQkJCQkJLyogRG8gcmVw bGljYXRpb24gdGltZSBsYWcgY2hlY2tpbmcgKi8KKwkJCQkvKiBEbyByZXBsaWNhdGlvbiB0aW1l IGxhZyBjaGVja2luZyAqLworCQkJCWlmIChwb29sX2NvbmZpZy0+cmVwbGljYXRpb25fZGVsYXlf c291cmNlID09IFJFUExJQ0FUSU9OX0RFTEFZX0NNRCkKKwkJCQkJY2hlY2tfcmVwbGljYXRpb25f dGltZV9sYWdfd2l0aF9jbWQoKTsKKwkJCQllbHNlCiAJCQkJCWNoZWNrX3JlcGxpY2F0aW9uX3Rp bWVfbGFnKCk7CiAKIAkJCQkJLyogQ2hlY2sgbm9kZSBzdGF0dXMgKi8KQEAgLTY1OSw2ICs2NjMs MjYwIEBAIGNoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnKHZvaWQpCiAJZXJyb3JfY29udGV4dF9z dGFjayA9IGNhbGxiYWNrLnByZXZpb3VzOwogfQogCisjZGVmaW5lIE1BWF9DTURfT1VUUFVUIDQw OTYKKyNkZWZpbmUgTUFYX1JFQVNPTkFCTEVfREVMQVlfTVMgMzYwMDAwMC4wICAvKiAxIGhvdXIg aW4gbWlsbGlzZWNvbmRzICovCisKKy8qIEdsb2JhbCB2YXJpYWJsZSB0byB0cmFjayBjb21tYW5k IHRpbWVvdXQgKi8KK3N0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgY29tbWFuZF90aW1lb3V0 X29jY3VycmVkID0gMDsKKworLyoKKyAqIFNpZ25hbCBoYW5kbGVyIGZvciBjb21tYW5kIHRpbWVv dQorICovCitzdGF0aWMgdm9pZAorY29tbWFuZF90aW1lb3V0X2hhbmRsZXIoaW50IHNpZykKK3sK Kwljb21tYW5kX3RpbWVvdXRfb2NjdXJyZWQgPSAxOworfQorCisKKworLyoKKyAqIENoZWNrIHJl cGxpY2F0aW9uIHRpbWUgbGFnIHVzaW5nIGV4dGVybmFsIGNvbW1hbmQKKyAqLworc3RhdGljIHZv aWQKK2NoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnX3dpdGhfY21kKHZvaWQpCit7CisJRklMRQkJ ICAgKmZwOworCWNoYXIJCSAgICpjb21tYW5kOworCWNoYXIJCSAgICpsaW5lOworCWNoYXIJCSAg ICp0b2tlbjsKKwljaGFyCQkgICAqc2F2ZXB0cjsKKwlpbnQJCQkJbm9kZV9pZDsKKwlkb3VibGUJ CQlkZWxheV9tczsKKwl1aW50NjQJCQlkZWxheTsKKwlpbnQJCQkJdG9rZW5fY291bnQgPSAwOwor CUJhY2tlbmRJbmZvCSAgICpia2luZm87CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgY2FsbGJhY2s7 CisKKwlpZiAoTlVNX0JBQ0tFTkRTIDw9IDEpCisJeworCQkvKiBJZiB0aGVyZSdzIG9ubHkgb25l IG5vZGUsIHRoZXJlJ3Mgbm8gcG9pbnQgdG8gZG8gY2hlY2tpbmcgKi8KKwkJcmV0dXJuOworCX0K KworCWlmIChSRUFMX1BSSU1BUllfTk9ERV9JRCA8IDApCisJeworCQkvKiBObyBuZWVkIHRvIGNo ZWNrIGlmIHRoZXJlJ3Mgbm8gcHJpbWFyeSAqLworCQlyZXR1cm47CisJfQorCisJaWYgKCFWQUxJ RF9CQUNLRU5EKFJFQUxfUFJJTUFSWV9OT0RFX0lEKSkKKwl7CisJCS8qIE5vIG5lZWQgdG8gY2hl Y2sgcmVwbGljYXRpb24gZGVsYXkgaWYgcHJpbWFyeSBpcyBkb3duICovCisJCXJldHVybjsKKwl9 CisKKwlpZiAoIXBvb2xfY29uZmlnLT5yZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfY21kIHx8CisJ CXN0cmxlbihwb29sX2NvbmZpZy0+cmVwbGljYXRpb25fZGVsYXlfc291cmNlX2NtZCkgPT0gMCkK Kwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJybXNnKCJyZXBsaWNhdGlvbl9kZWxheV9z b3VyY2UgaXMgc2V0IHRvICdjbWQnIGJ1dCByZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfY21kIGlz IG5vdCBjb25maWd1cmVkIiksCisJCQkJIGVycmhpbnQoIlNldCByZXBsaWNhdGlvbl9kZWxheV9z b3VyY2VfY21kIG9yIGNoYW5nZSByZXBsaWNhdGlvbl9kZWxheV9zb3VyY2UgdG8gJ2J1aWx0aW4n IikpKTsKKwkJLyogRmFsbCBiYWNrIHRvIGJ1aWx0aW4gbWV0aG9kICovCisJCWNoZWNrX3JlcGxp Y2F0aW9uX3RpbWVfbGFnKCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBidWZmZXIg Zm9yIGNvbW1hbmQgb3V0cHV0ICovCisJbGluZSA9IHBhbGxvYyhNQVhfQ01EX09VVFBVVCk7CisK KwkvKgorCSAqIFJlZ2lzdGVyIGEgZXJyb3IgY29udGV4dCBjYWxsYmFjayB0byB0aHJvdyBwcm9w ZXIgY29udGV4dCBtZXNzYWdlCisJICovCisJY2FsbGJhY2suY2FsbGJhY2sgPSBDaGVja1JlcGxp Y2F0aW9uVGltZUxhZ0Vycm9yQ2I7CisJY2FsbGJhY2suYXJnID0gTlVMTDsKKwljYWxsYmFjay5w cmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZj YWxsYmFjazsKKworCS8qIEV4ZWN1dGUgY29tbWFuZCBhcyBjdXJyZW50IHByb2Nlc3MgdXNlciAq LworCVBHX1RSWSgpOworCXsKKwkJY29tbWFuZCA9IHBvb2xfY29uZmlnLT5yZXBsaWNhdGlvbl9k ZWxheV9zb3VyY2VfY21kOworCisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2coImV4ZWN1 dGluZyByZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kOiAlcyIsIGNvbW1hbmQpKSk7CisKKwkJLyog U2V0IHVwIHRpbWVvdXQgZm9yIGNvbW1hbmQgZXhlY3V0aW9uICovCisJCWNvbW1hbmRfdGltZW91 dF9vY2N1cnJlZCA9IDA7CisJCXNpZ25hbChTSUdBTFJNLCBjb21tYW5kX3RpbWVvdXRfaGFuZGxl cik7CisJCWFsYXJtKHBvb2xfY29uZmlnLT5yZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfdGltZW91 dCk7CisKKwkJZnAgPSBwb3Blbihjb21tYW5kLCAiciIpOworCQlpZiAoZnAgPT0gTlVMTCkKKwkJ eworCQkJYWxhcm0oMCk7IC8qIENhbmNlbCBhbGFybSAqLworCQkJc2lnbmFsKFNJR0FMUk0sIFNJ R19ERkwpOworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycm1zZygiZmFpbGVkIHRvIGV4ZWN1 dGUgcmVwbGljYXRpb24gZGVsYXkgY29tbWFuZDogJXMiLCBjb21tYW5kKSwKKwkJCQkJIGVycmRl dGFpbCgicG9wZW4gZmFpbGVkOiAlbSIpKSk7CisJCX0KKworCQlpZiAoZmdldHMobGluZSwgTUFY X0NNRF9PVVRQVVQsIGZwKSA9PSBOVUxMKQorCQl7CisJCQlpbnQgcGNsb3NlX3Jlc3VsdCA9IHBj bG9zZShmcCk7CisJCQlmcCA9IE5VTEw7CisJCQlhbGFybSgwKTsgLyogQ2FuY2VsIGFsYXJtICov CisJCQlzaWduYWwoU0lHQUxSTSwgU0lHX0RGTCk7CisKKwkJCWlmIChjb21tYW5kX3RpbWVvdXRf b2NjdXJyZWQpCisJCQl7CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJtc2coInJlcGxp Y2F0aW9uIGRlbGF5IGNvbW1hbmQgdGltZWQgb3V0IGFmdGVyICVkIHNlY29uZHM6ICVzIiwKKwkJ CQkJCQkJcG9vbF9jb25maWctPnJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV90aW1lb3V0LCBjb21t YW5kKSwKKwkJCQkJCSBlcnJoaW50KCJDb25zaWRlciBpbmNyZWFzaW5nIHJlcGxpY2F0aW9uX2Rl bGF5X3NvdXJjZV90aW1lb3V0IG9yIG9wdGltaXppbmcgdGhlIGNvbW1hbmQiKSkpOworCQkJfQor CQkJZWxzZQorCQkJeworCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJybXNnKCJmYWlsZWQg dG8gcmVhZCBvdXRwdXQgZnJvbSByZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kOiAlcyIsIGNvbW1h bmQpLAorCQkJCQkJIGVycmRldGFpbCgiY29tbWFuZCBleGl0IHN0YXR1czogJWQiLCBwY2xvc2Vf cmVzdWx0KSkpOworCQkJfQorCQl9CisKKwkJYWxhcm0oMCk7IC8qIENhbmNlbCBhbGFybSAqLwor CQlzaWduYWwoU0lHQUxSTSwgU0lHX0RGTCk7CisKKwkJLyogQ2hlY2sgaWYgb3V0cHV0IHdhcyB0 cnVuY2F0ZWQgKi8KKwkJaWYgKHN0cmxlbihsaW5lKSA9PSBNQVhfQ01EX09VVFBVVCAtIDEgJiYg bGluZVtNQVhfQ01EX09VVFBVVCAtIDJdICE9ICdcbicpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklO RywKKwkJCQkJKGVycm1zZygicmVwbGljYXRpb24gZGVsYXkgY29tbWFuZCBvdXRwdXQgbWF5IGhh dmUgYmVlbiB0cnVuY2F0ZWQiKSkpOworCQl9CisKKwkJcGNsb3NlKGZwKTsKKwkJZnAgPSBOVUxM OworCisJCS8qIFBhcnNlIHRoZSBvdXRwdXQgZm9ybWF0ICIwIDIwIDEwIiB3aGVyZSBlYWNoIG51 bWJlciBpcyBkZWxheSBpbiBtaWxsaXNlY29uZHMgZm9yIG5vZGVzIDAsIDEsIDIgZXRjICovCisJ CS8qIENvdW50IHRva2VucyBmaXJzdCBmb3IgdmFsaWRhdGlvbiAqLworCQljaGFyICpsaW5lX2Nv cHkgPSBwc3RyZHVwKGxpbmUpOworCQljaGFyICp0ZW1wX3Rva2VuID0gc3RydG9rKGxpbmVfY29w eSwgIiBcdFxuIik7CisJCXdoaWxlICh0ZW1wX3Rva2VuICE9IE5VTEwpCisJCXsKKwkJCXRva2Vu X2NvdW50Kys7CisJCQl0ZW1wX3Rva2VuID0gc3RydG9rKE5VTEwsICIgXHRcbiIpOworCQl9CisJ CXBmcmVlKGxpbmVfY29weSk7CisKKwkJLyogTm93IHBhcnNlIHRoZSBhY3R1YWwgdG9rZW5zICov CisJCXRva2VuID0gc3RydG9rX3IobGluZSwgIiBcdFxuIiwgJnNhdmVwdHIpOworCQlub2RlX2lk ID0gMDsKKworCQlpZiAodG9rZW5fY291bnQgIT0gTlVNX0JBQ0tFTkRTKQorCQl7CisJCQllcmVw b3J0KFdBUk5JTkcsCisJCQkJCShlcnJtc2coInJlcGxpY2F0aW9uIGRlbGF5IGNvbW1hbmQgcmV0 dXJuZWQgJWQgdmFsdWVzLCBleHBlY3RlZCAlZCIsCisJCQkJCQkJdG9rZW5fY291bnQsIE5VTV9C QUNLRU5EUyksCisJCQkJCSBlcnJoaW50KCJDb21tYW5kIHNob3VsZCBvdXRwdXQgb25lIGRlbGF5 IHZhbHVlIHBlciBiYWNrZW5kIG5vZGUiKSkpOworCQl9CisKKwkJd2hpbGUgKHRva2VuICE9IE5V TEwgJiYgbm9kZV9pZCA8IE5VTV9CQUNLRU5EUykKKwkJeworCQkJaWYgKCFWQUxJRF9CQUNLRU5E KG5vZGVfaWQpKQorCQkJeworCQkJCW5vZGVfaWQrKzsKKwkJCQl0b2tlbiA9IHN0cnRva19yKE5V TEwsICIgXHRcbiIsICZzYXZlcHRyKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJY2hhciAq ZW5kcHRyOworCQkJZGVsYXlfbXMgPSBzdHJ0b2QodG9rZW4sICZlbmRwdHIpOworCisJCQkvKiBW YWxpZGF0ZSB0aGUgY29udmVyc2lvbiAqLworCQkJaWYgKCplbmRwdHIgIT0gJ1wwJykKKwkJCXsK KwkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkoZXJybXNnKCJpbnZhbGlkIGRlbGF5IHZhbHVl ICclcycgZm9yIG5vZGUgJWQsIHRyZWF0aW5nIGFzIDAiLAorCQkJCQkJCQl0b2tlbiwgbm9kZV9p ZCkpKTsKKwkJCQlkZWxheV9tcyA9IDA7CisJCQl9CisKKwkJCS8qIFZhbGlkYXRlIGRlbGF5IHZh bHVlIHJhbmdlICovCisJCQlpZiAoZGVsYXlfbXMgPCAwKQorCQkJeworCQkJCWVyZXBvcnQoV0FS TklORywKKwkJCQkJCShlcnJtc2coIm5lZ2F0aXZlIGRlbGF5IHZhbHVlICUuM2YgZm9yIG5vZGUg JWQsIHRyZWF0aW5nIGFzIDAiLAorCQkJCQkJCQlkZWxheV9tcywgbm9kZV9pZCkpKTsKKwkJCQlk ZWxheV9tcyA9IDA7CisJCQl9CisJCQllbHNlIGlmIChkZWxheV9tcyA+IE1BWF9SRUFTT05BQkxF X0RFTEFZX01TKQorCQkJeworCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCShlcnJtc2coImV4 dHJlbWVseSBsYXJnZSBkZWxheSB2YWx1ZSAlLjNmIGZvciBub2RlICVkIiwKKwkJCQkJCQkJZGVs YXlfbXMsIG5vZGVfaWQpKSk7CisJCQl9CisKKwkJCWJraW5mbyA9IHBvb2xfZ2V0X25vZGVfaW5m byhub2RlX2lkKTsKKworCQkJaWYgKFBSSU1BUllfTk9ERV9JRCA9PSBub2RlX2lkKQorCQkJewor CQkJCS8qIFByaW1hcnkgbm9kZSBzaG91bGQgYWx3YXlzIGhhdmUgMCBkZWxheSAqLworCQkJCWJr aW5mby0+c3RhbmRieV9kZWxheSA9IDA7CisJCQkJaWYgKGRlbGF5X21zID4gMCkKKwkJCQl7CisJ CQkJCWVyZXBvcnQoREVCVUcxLAorCQkJCQkJCShlcnJtc2coInByaW1hcnkgbm9kZSAlZCByZXBv cnRlZCBub24temVybyBkZWxheSAlLjNmLCBzZXR0aW5nIHRvIDAiLAorCQkJCQkJCQkJbm9kZV9p ZCwgZGVsYXlfbXMpKSk7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIENvbnZl cnQgZGVsYXkgZnJvbSBtaWxsaXNlY29uZHMgdG8gbWljcm9zZWNvbmRzIGZvciBpbnRlcm5hbCBz dG9yYWdlICovCisJCQkJZGVsYXkgPSAodWludDY0KShkZWxheV9tcyAqIDEwMDApOworCQkJCWJr aW5mby0+c3RhbmRieV9kZWxheSA9IGRlbGF5OworCQkJCWJraW5mby0+c3RhbmRieV9kZWxheV9i eV90aW1lID0gdHJ1ZTsKKworCQkJCS8qIExvZyBkZWxheSBpZiBuZWNlc3NhcnkgKi8KKwkJCQl1 aW50NjQgZGVsYXlfdGhyZXNob2xkX2J5X3RpbWUgPSBwb29sX2NvbmZpZy0+ZGVsYXlfdGhyZXNo b2xkX2J5X3RpbWUgKiAxMDAwOyAvKiB0aHJlc2hvbGQgaXMgaW4gbWlsbGlzZWNvbmRzLCBjb252 ZXJ0IHRvIG1pY3Jvc2Vjb25kcyAqLworCisJCQkJaWYgKChwb29sX2NvbmZpZy0+bG9nX3N0YW5k YnlfZGVsYXkgPT0gTFNEX0FMV0FZUyAmJiBkZWxheV9tcyA+IDApIHx8CisJCQkJCShwb29sX2Nv bmZpZy0+bG9nX3N0YW5kYnlfZGVsYXkgPT0gTFNEX09WRVJfVEhSRVNIT0xEICYmCisJCQkJCSBi a2luZm8tPnN0YW5kYnlfZGVsYXkgPiBkZWxheV90aHJlc2hvbGRfYnlfdGltZSkpCisJCQkJewor CQkJCQllcmVwb3J0KExPRywKKwkJCQkJCQkoZXJybXNnKCJSZXBsaWNhdGlvbiBvZiBub2RlOiAl ZCBpcyBiZWhpbmQgJS4zZiBzZWNvbmQocykgZnJvbSB0aGUgcHJpbWFyeSBzZXJ2ZXIgKG5vZGU6 ICVkKSBbZXh0ZXJuYWwgY29tbWFuZF0iLAorCQkJCQkJCQkJbm9kZV9pZCwgZGVsYXlfbXMgLyAx MDAwLCBQUklNQVJZX05PREVfSUQpKSk7CisJCQkJfQorCQkJfQorCisJCQlub2RlX2lkKys7CisJ CQl0b2tlbiA9IHN0cnRva19yKE5VTEwsICIgXHRcbiIsICZzYXZlcHRyKTsKKwkJfQorCisJfQor CVBHX0NBVENIKCk7CisJeworCQkvKiBDbGVhbnVwIGluIGNhc2Ugb2YgZXJyb3IgKi8KKwkJYWxh cm0oMCk7IC8qIENhbmNlbCBhbnkgcGVuZGluZyBhbGFybSAqLworCQlzaWduYWwoU0lHQUxSTSwg U0lHX0RGTCk7CisJCWlmIChmcCkKKwkJeworCQkJcGNsb3NlKGZwKTsKKwkJCWZwID0gTlVMTDsK KwkJfQorCQlpZiAobGluZSkKKwkJCXBmcmVlKGxpbmUpOworCQllcnJvcl9jb250ZXh0X3N0YWNr ID0gY2FsbGJhY2sucHJldmlvdXM7CisJCVBHX1JFX1RIUk9XKCk7CisJfQorCVBHX0VORF9UUlko KTsKKworCS8qIE5vcm1hbCBjbGVhbnVwICovCisJaWYgKGxpbmUpCisJCXBmcmVlKGxpbmUpOwor CisJZXJyb3JfY29udGV4dF9zdGFjayA9IGNhbGxiYWNrLnByZXZpb3VzOworfQorCiBzdGF0aWMg dm9pZAogQ2hlY2tSZXBsaWNhdGlvblRpbWVMYWdFcnJvckNiKHZvaWQgKmFyZykKIHsKZGlmZiAt LWdpdCBjL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDgzLmV4dGVybmFsX3JlcGxpY2F0aW9u X2RlbGF5L1JFQURNRSB3L3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDgzLmV4dGVybmFsX3Jl cGxpY2F0aW9uX2RlbGF5L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAuLmEzMjU3ZWExMQotLS0gL2Rldi9udWxsCisrKyB3L3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVz dHMvMDgzLmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5L1JFQURNRQpAQCAtMCwwICsxLDQzIEBA CitFeHRlcm5hbCBSZXBsaWNhdGlvbiBEZWxheSBDb21tYW5kIFRlcworPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIGV4dGVy bmFsIGNvbW1hbmQgcmVwbGljYXRpb24gZGVsYXkgc291cmNlIGZlYXR1cmUuCisKK1Rlc3QgQ292 ZXJhZ2U6CistIEJhc2ljIGV4dGVybmFsIGNvbW1hbmQgZXhlY3V0aW9uIHdpdGggaW50ZWdlciBt aWxsaXNlY29uZCB2YWx1ZXMKKy0gRmxvYXRpbmctcG9pbnQgbWlsbGlzZWNvbmQgdmFsdWUgcGFy c2luZworLSBEZWxheSB0aHJlc2hvbGQgZnVuY3Rpb25hbGl0eSB3aXRoIGV4dGVybmFsIGNvbW1h bmRzCistIENvbW1hbmQgZXhlY3V0aW9uIGFzIHBncG9vbCBwcm9jZXNzIHVzZXIgKG5vIHN1IHdy YXBwZXIpCistIEVycm9yIGhhbmRsaW5nIGZvciBtaXNzaW5nL2ludmFsaWQgY29tbWFuZHMKKy0g Q29tbWFuZCBleGVjdXRpb24gZmFpbHVyZSBzY2VuYXJpb3MKKy0gQ29tbWFuZCB0aW1lb3V0IGhh bmRsaW5nIHdpdGggY29uZmlndXJhYmxlIHRpbWVvdXQgdmFsdWVzCistIElucHV0IHZhbGlkYXRp b24gZm9yIGludmFsaWQsIG5lZ2F0aXZlLCBhbmQgZXh0cmVtZWx5IGxhcmdlIGRlbGF5IHZhbHVl cworLSBIYW5kbGluZyBvZiB3cm9uZyBudW1iZXIgb2Ygb3V0cHV0IHZhbHVlcworLSBQcmltYXJ5 IG5vZGUgZGVsYXkgY29ycmVjdGlvbgorLSBPdXRwdXQgdHJ1bmNhdGlvbiBkZXRlY3Rpb24KKy0g VGltZW91dCBiZWhhdmlvciB3aXRoIGJvdGggc2hvcnQgYW5kIGxvbmcgdGltZW91dCB2YWx1ZXMK KworRmlsZXM6CistIHRlc3Quc2g6IE1haW4gdGVzdCBzY3JpcAorLSB0ZXN0X3BhcnNpbmcuc2g6 IFVuaXQgdGVzdCBmb3IgcGFyc2luZyBsb2dpYworLSB0ZXN0X3ZhbGlkYXRpb24uc2g6IFZhbGlk YXRpb24gYW5kIGVkZ2UgY2FzZSB0ZXN0aW5nCistIFJFQURNRTogVGhpcyBkb2N1bWVudGF0aW9u CisKK1RoZSB0ZXN0IGNyZWF0ZXMgdGVtcG9yYXJ5IGNvbW1hbmQgc2NyaXB0cyB0aGF0IG91dHB1 dCBkZWxheSB2YWx1ZXMgaW4gdGhlIGZvcm1hdDoKKyJub2RlMF9kZWxheSBub2RlMV9kZWxheSBu b2RlMl9kZWxheSIKKworV2hlcmUgZGVsYXlzIGFyZSBpbiBtaWxsaXNlY29uZHMgYW5kIGNhbiBi ZSBpbnRlZ2VyIG9yIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKworVGVzdCBFbnZpcm9ubWVudDoK Ky0gVXNlcyBzdHJlYW1pbmcgcmVwbGljYXRpb24gbW9kZSB3aXRoIDMgbm9kZXMKKy0gQ29uZmln dXJlcyBzcl9jaGVja19wZXJpb2QgPSAxIHNlY29uZCBmb3IgZmFzdGVyIHRlc3RpbmcKKy0gVGVz dHMgdmFyaW91cyBkZWxheSBzY2VuYXJpb3MgYW5kIHRocmVzaG9sZCBiZWhhdmlvcnMKKworRXhw ZWN0ZWQgQmVoYXZpb3I6CistIEV4dGVybmFsIGNvbW1hbmRzIHNob3VsZCBiZSBleGVjdXRlZCBh cyBjb25maWd1cmVkCistIERlbGF5IHZhbHVlcyBzaG91bGQgYmUgcGFyc2VkIGNvcnJlY3RseSAo Ym90aCBpbnQgYW5kIGZsb2F0KQorLSBUaHJlc2hvbGQgY29tcGFyaXNvbnMgc2hvdWxkIHdvcmsg cHJvcGVybHkKKy0gRXJyb3IgY29uZGl0aW9ucyBzaG91bGQgYmUgaGFuZGxlZCBncmFjZWZ1bGx5 CistIENvbW1hbmRzIHNob3VsZCB0aW1lb3V0IGFwcHJvcHJpYXRlbHkgYmFzZWQgb24gY29uZmln dXJhdGlvbgorLSBUaW1lb3V0IGVycm9ycyBzaG91bGQgcHJvdmlkZSBoZWxwZnVsIG1lc3NhZ2Vz IGFuZCBoaW50cworLSBUZXN0cyBzaG91bGQgYmUgcmVsaWFibGUgd2l0aCBwcm9wZXIgd2FpdCBt ZWNoYW5pc21zIGluc3RlYWQgb2YgZml4ZWQgc2xlZXBzClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg ZmlsZQpkaWZmIC0tZ2l0IGMvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wODMuZXh0ZXJuYWxf cmVwbGljYXRpb25fZGVsYXkvdGVzdC5zaCB3L3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDgz LmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5L3Rlc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUK aW5kZXggMDAwMDAwMDAwLi41N2FiZGZjMDMKLS0tIC9kZXYvbnVsbAorKysgdy9zcmMvdGVzdC9y ZWdyZXNzaW9uL3Rlc3RzLzA4My5leHRlcm5hbF9yZXBsaWNhdGlvbl9kZWxheS90ZXN0LnNoCkBA IC0wLDAgKzEsMzA5IEBACisjIS91c3IvYmluL2VudiBiYXNoCisjLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyB0ZXN0 IHNjcmlwdCBmb3IgZXh0ZXJuYWwgY29tbWFuZCByZXBsaWNhdGlvbiBkZWxheSBzb3VyY2UKKyMK K3NvdXJjZSAkVEVTVExJQlMKK1RFU1RESVI9dGVzdGRpcgorUEdfQ1RMPSRQR0JJTi9wZ19jdGwK K1BTUUw9IiRQR0JJTi9wc3FsIC1YICIKKworcm0gLWZyICRURVNURElSCitta2RpciAkVEVTVERJ UgorY2QgJFRFU1RESVIKKworIyBjcmVhdGUgdGVzdCBlbnZpcm9ubWVuCitlY2hvIC1uICJjcmVh dGluZyB0ZXN0IGVudmlyb25tZW50Li4uIgorJFBHUE9PTF9TRVRVUCAtbSBzIC1uIDMgfHwgZXhp dCAxCitlY2hvICJkb25lLiIKK3NvdXJjZSAuL2Jhc2hyYy5wb3J0cworZXhwb3J0IFBHUE9SVD0k UEdQT09MX1BPUlQKKworIyBDcmVhdGUgZXh0ZXJuYWwgY29tbWFuZCBzY3JpcHRzIGZvciB0ZXN0 aW5nCitjYXQgPiBkZWxheV9jbWRfc3RhdGljLnNoIDw8ICdFT0YnCisjIS9iaW4vYmFzaAorIyBT dGF0aWMgZGVsYXkgdmFsdWVzOiBub2RlMD0wbXMsIG5vZGUxPTI1bXMsIG5vZGUyPTUwbXMKK2Vj aG8gIjAgMjUgNTAiCitFT0YKK2NobW9kICt4IGRlbGF5X2NtZF9zdGF0aWMuc2gKKworY2F0ID4g ZGVsYXlfY21kX2Zsb2F0LnNoIDw8ICdFT0YnCisjIS9iaW4vYmFzaAorIyBGbG9hdCBkZWxheSB2 YWx1ZXM6IG5vZGUwPTBtcywgbm9kZTE9MjUuNW1zLCBub2RlMj0xMDAuNzVtcworZWNobyAiMCAy NS41IDEwMC43NSIKK0VPRgorY2htb2QgK3ggZGVsYXlfY21kX2Zsb2F0LnNoCisKK2NhdCA+IGRl bGF5X2NtZF9oaWdoLnNoIDw8ICdFT0YnCisjIS9iaW4vYmFzaAorIyBIaWdoIGRlbGF5IHZhbHVl cyB0byB0ZXN0IHRocmVzaG9sZDogbm9kZTA9MG1zLCBub2RlMT0yMDAwbXMsIG5vZGUyPTMwMDBt cworZWNobyAiMCAyMDAwIDMwMDAiCitFT0YKK2NobW9kICt4IGRlbGF5X2NtZF9oaWdoLnNoCisK KyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNobyA9PT0gVGVzdDE6IEJhc2lj IGV4dGVybmFsIGNvbW1hbmQgd2l0aCBpbnRlZ2VyIG1pbGxpc2Vjb25kIHZhbHVlcyA9PT0KKyMg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNobyAicmVwbGljYXRpb25fZGVsYXlf c291cmNlID0gJ2NtZCciID4+IGV0Yy9wZ3Bvb2wuY29uZgorZWNobyAicmVwbGljYXRpb25fZGVs YXlfc291cmNlX2NtZCA9ICcuL2RlbGF5X2NtZF9zdGF0aWMuc2gnIiA+PiBldGMvcGdwb29sLmNv bmYKK2VjaG8gInNyX2NoZWNrX3BlcmlvZCA9IDEiID4+IGV0Yy9wZ3Bvb2wuY29uZgorZWNobyAi bG9nX3N0YW5kYnlfZGVsYXkgPSAnYWx3YXlzJyIgPj4gZXRjL3BncG9vbC5jb25mCitlY2hvICJs b2dfbWluX21lc3NhZ2VzID0gJ0RFQlVHMSciID4+IGV0Yy9wZ3Bvb2wuY29uZgorCisuL3N0YXJ0 YWxsCit3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCiskUFNRTCB0ZXN0IDw8RU9GCitDUkVBVEUg VEFCTEUgdDEoaSBJTlRFR0VSKTsKK0VPRgorCisjIFdhaXQgZm9yIHNyX2NoZWNrIHRvIHJ1biBh bmQgcG9wdWxhdGUgZGVsYXkgdmFsdWVzCisjIHNyX2NoZWNrX3BlcmlvZCBpcyAxIHNlY29uZCwg c28gd2FpdCBhIGJpdCBsb25nZXIgdG8gZW5zdXJlIGl0IHJ1bnMKK2VjaG8gIldhaXRpbmcgZm9y IHNyX2NoZWNrIHRvIHJ1bi4uLiIKK2ZvciBpIGluIHsxLi4xMH07IGRvCisgICAgaWYgZ3JlcCAt cSAiZXhlY3V0aW5nIHJlcGxpY2F0aW9uIGRlbGF5IGNvbW1hbmQiIGxvZy9wZ3Bvb2wubG9nIDI+ L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGVjaG8gIkNvbW1hbmQgZXhlY3V0ZWQgYWZ0ZXIgJHtp fSBzZWNvbmRzIgorICAgICAgICBicmVhaworICAgIGZpCisgICAgc2xlZXAgMQorZG9uZQorCisk UFNRTCB0ZXN0IDw8RU9GCitTSE9XIFBPT0xfTk9ERVM7CitFT0YKKworIyBDaGVjayB0aGF0IGRl bGF5IHZhbHVlcyBhcmUgcG9wdWxhdGVkIGluIHRoZSBsb2cKK2dyZXAgImV4ZWN1dGluZyByZXBs aWNhdGlvbiBkZWxheSBjb21tYW5kIiBsb2cvcGdwb29sLmxvZyA+L2Rldi9udWxsIDI+JjEKK2lm IFsgJD8gIT0gMCBdO3RoZW4KKyAgICBlY2hvIGZhaWw6IGV4dGVybmFsIGNvbW1hbmQgd2FzIG5v dCBleGVjdXRlZAorICAgIGVjaG8gIkxvZyBjb250ZW50czoiCisgICAgdGFpbCAtMjAgbG9nL3Bn cG9vbC5sb2cKKyAgICAuL3NodXRkb3duYWxsCisgICAgZXhpdCAxCitmaQorCisjIFZlcmlmeSBh Y3R1YWwgZGVsYXkgdmFsdWVzIHdlcmUgcGFyc2VkCitpZiAhICRQU1FMIC10IC1jICJTSE9XIFBP T0xfTk9ERVMiIHRlc3QgfCBncmVwIC1FICJbMC05XStcLlswLTldKyIgPi9kZXYvbnVsbDsgdGhl bgorICAgIGVjaG8gIldhcm5pbmc6IE5vIGRlbGF5IHZhbHVlcyBmb3VuZCBpbiBQT09MX05PREVT IG91dHB1dCIKK2ZpCisKKyMgQ2hlY2sgZm9yIGRlbGF5IGxvZyBtZXNzYWdlcworZ3JlcCAiUmVw bGljYXRpb24gb2Ygbm9kZS4qZXh0ZXJuYWwgY29tbWFuZCIgbG9nL3BncG9vbC5sb2cgPi9kZXYv bnVsbCAyPiYxCitpZiBbICQ/ICE9IDAgXTt0aGVuCisgICAgZWNobyBmYWlsOiBleHRlcm5hbCBj b21tYW5kIGRlbGF5IGxvZ2dpbmcgbm90IGZvdW5kCisgICAgLi9zaHV0ZG93bmFsbAorICAgIGV4 aXQgMQorZmkKKworZWNobyBvazogYmFzaWMgZXh0ZXJuYWwgY29tbWFuZCB0ZXN0IHN1Y2NlZWRl ZAorLi9zaHV0ZG93bmFsbAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Vj aG8gPT09IFRlc3QyOiBFeHRlcm5hbCBjb21tYW5kIHdpdGggZmxvYXRpbmctcG9pbnQgbWlsbGlz ZWNvbmQgdmFsdWVzID09PQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFVw ZGF0ZSBjb25maWd1cmF0aW9uIHRvIHVzZSBmbG9hdCBjb21tYW5kCitzZWQgLWkuYmFrICJzfGRl bGF5X2NtZF9zdGF0aWMuc2h8ZGVsYXlfY21kX2Zsb2F0LnNofCIgZXRjL3BncG9vbC5jb25mCisK Ky4vc3RhcnRhbGwKK3dhaXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyMgV2FpdCBmb3Igc3JfY2hl Y2sgdG8gcnVuIHdpdGggZmxvYXQgdmFsdWVzCitlY2hvICJXYWl0aW5nIGZvciBzcl9jaGVjayB3 aXRoIGZsb2F0IHZhbHVlcy4uLiIKK2ZvciBpIGluIHsxLi4xMH07IGRvCisgICAgaWYgZ3JlcCAt cSAiZXhlY3V0aW5nIHJlcGxpY2F0aW9uIGRlbGF5IGNvbW1hbmQuKmRlbGF5X2NtZF9mbG9hdC5z aCIgbG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAiRmxvYXQg Y29tbWFuZCBleGVjdXRlZCBhZnRlciAke2l9IHNlY29uZHMiCisgICAgICAgIGJyZWFrCisgICAg ZmkKKyAgICBzbGVlcCAxCitkb25lCisKKyRQU1FMIHRlc3QgPDxFT0YKK1NIT1cgUE9PTF9OT0RF UzsKK0VPRgorCisjIENoZWNrIHRoYXQgZmxvYXQgdmFsdWVzIGFyZSBoYW5kbGVkIGNvcnJlY3Rs eQorZ3JlcCAiZXhlY3V0aW5nIHJlcGxpY2F0aW9uIGRlbGF5IGNvbW1hbmQuKmRlbGF5X2NtZF9m bG9hdC5zaCIgbG9nL3BncG9vbC5sb2cgPi9kZXYvbnVsbCAyPiYxCitpZiBbICQ/ICE9IDAgXTt0 aGVuCisgICAgZWNobyBmYWlsOiBmbG9hdCBjb21tYW5kIHdhcyBub3QgZXhlY3V0ZWQKKyAgICAu L3NodXRkb3duYWxsCisgICAgZXhpdCAxCitmaQorCitlY2hvIG9rOiBmbG9hdGluZy1wb2ludCB2 YWx1ZXMgdGVzdCBzdWNjZWVkZWQKKy4vc2h1dGRvd25hbGwKKworIyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCitlY2hvID09PSBUZXN0MzogRXh0ZXJuYWwgY29tbWFuZCB3aXRoIGRl bGF5IHRocmVzaG9sZCA9PT0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBV cGRhdGUgY29uZmlndXJhdGlvbiB0byB1c2UgaGlnaCBkZWxheSBjb21tYW5kIGFuZCBzZXQgdGhy ZXNob2xkCitzZWQgLWkuYmFrICJzfGRlbGF5X2NtZF9mbG9hdC5zaHxkZWxheV9jbWRfaGlnaC5z aHwiIGV0Yy9wZ3Bvb2wuY29uZgorZWNobyAiZGVsYXlfdGhyZXNob2xkX2J5X3RpbWUgPSAxMDAw IiA+PiBldGMvcGdwb29sLmNvbmYKK2VjaG8gImJhY2tlbmRfd2VpZ2h0MCA9IDAiID4+IGV0Yy9w Z3Bvb2wuY29uZiAgIyBGb3JjZSBxdWVyaWVzIHRvIHN0YW5kYnkgbm9ybWFsbHkKK2VjaG8gImJh Y2tlbmRfd2VpZ2h0MiA9IDAiID4+IGV0Yy9wZ3Bvb2wuY29uZiAgIyBPbmx5IHVzZSBub2RlIDEg YXMgc3RhbmRieQorCisuL3N0YXJ0YWxsCit3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCisjIFdh aXQgZm9yIHNyX2NoZWNrIHRvIHJ1biBhbmQgZGV0ZWN0IGhpZ2ggZGVsYXlzCitlY2hvICJXYWl0 aW5nIGZvciBzcl9jaGVjayB3aXRoIGhpZ2ggZGVsYXkgdmFsdWVzLi4uIgorZm9yIGkgaW4gezEu LjEwfTsgZG8KKyAgICBpZiBncmVwIC1xICJleGVjdXRpbmcgcmVwbGljYXRpb24gZGVsYXkgY29t bWFuZC4qZGVsYXlfY21kX2hpZ2guc2giIGxvZy9wZ3Bvb2wubG9nIDI+L2Rldi9udWxsOyB0aGVu CisgICAgICAgIGVjaG8gIkhpZ2ggZGVsYXkgY29tbWFuZCBleGVjdXRlZCBhZnRlciAke2l9IHNl Y29uZHMiCisgICAgICAgIGJyZWFrCisgICAgZmkKKyAgICBzbGVlcCAxCitkb25lCisKKyRQU1FM IHRlc3QgPDxFT0YKK1NFTEVDVCAqIEZST00gdDEgTElNSVQgMTsKK0VPRgorCisjIFdpdGggaGln aCBkZWxheXMgKDIwMDBtcyA+IDEwMDBtcyB0aHJlc2hvbGQpLCBxdWVyeSBzaG91bGQgZ28gdG8g cHJpbWFyeSAobm9kZSAwKQorZ3JlcCAiU0VMRUNUIFwqIEZST00gdDEgTElNSVQgMS4qREIgbm9k ZSBpZDogMCIgbG9nL3BncG9vbC5sb2cgPi9kZXYvbnVsbCAyPiYxCitpZiBbICQ/ICE9IDAgXTt0 aGVuCisgICAgZWNobyBmYWlsOiBxdWVyeSB3YXMgbm90IHNlbnQgdG8gcHJpbWFyeSBub2RlIGRl c3BpdGUgaGlnaCBkZWxheQorICAgIC4vc2h1dGRvd25hbGwKKyAgICBleGl0IDEKK2ZpCisKK2Vj aG8gb2s6IGRlbGF5IHRocmVzaG9sZCB0ZXN0IHN1Y2NlZWRlZAorLi9zaHV0ZG93bmFsbAorCisj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjaG8gPT09IFRlc3Q0OiBFeHRlcm5h bCBjb21tYW5kIGV4ZWN1dGlvbiBhcyBwcm9jZXNzIHVzZXIgPT09CisjIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCB0aGF0IGNvbW1hbmQgcnVucyBhcyB0aGUgY3VycmVu dCBwZ3Bvb2wgcHJvY2VzcyB1c2VyCitzZWQgLWkuYmFrICJzfGRlbGF5X2NtZF9oaWdoLnNofGRl bGF5X2NtZF9zdGF0aWMuc2h8IiBldGMvcGdwb29sLmNvbmYKKworLi9zdGFydGFsbAord2FpdF9m b3JfcGdwb29sX3N0YXJ0dXAKKworIyBXYWl0IGZvciBzcl9jaGVjayB0byBydW4KK2VjaG8gIldh aXRpbmcgZm9yIHNyX2NoZWNrIHRvIHJ1biBhcyBwcm9jZXNzIHVzZXIuLi4iCitmb3IgaSBpbiB7 MS4uMTB9OyBkbworICAgIGlmIGdyZXAgLXEgImV4ZWN1dGluZyByZXBsaWNhdGlvbiBkZWxheSBj b21tYW5kLipkZWxheV9jbWRfc3RhdGljLnNoIiBsb2cvcGdwb29sLmxvZyAyPi9kZXYvbnVsbDsg dGhlbgorICAgICAgICBlY2hvICJDb21tYW5kIGV4ZWN1dGVkIGFzIHByb2Nlc3MgdXNlciBhZnRl ciAke2l9IHNlY29uZHMiCisgICAgICAgIGJyZWFrCisgICAgZmkKKyAgICBzbGVlcCAxCitkb25l CisKKyMgQ2hlY2sgdGhhdCBjb21tYW5kIHdhcyBleGVjdXRlZCAod2l0aG91dCBzdSB3cmFwcGVy KQorZ3JlcCAiZXhlY3V0aW5nIHJlcGxpY2F0aW9uIGRlbGF5IGNvbW1hbmQuKmRlbGF5X2NtZF9z dGF0aWMuc2giIGxvZy9wZ3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQoraWYgWyAkPyAhPSAwIF07 dGhlbgorICAgIGVjaG8gZmFpbDogY29tbWFuZCB3YXMgbm90IGV4ZWN1dGVkIGFzIHByb2Nlc3Mg dXNlcgorICAgIC4vc2h1dGRvd25hbGwKKyAgICBleGl0IDEKK2ZpCisKKyMgVmVyaWZ5IG5vIHN1 IGNvbW1hbmQgd2FzIHVzZWQKK2lmIGdyZXAgLXEgImV4ZWN1dGluZyByZXBsaWNhdGlvbiBkZWxh eSBjb21tYW5kLipzdS4qIiBsb2cvcGdwb29sLmxvZyAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGVj aG8gZmFpbDogY29tbWFuZCBzaG91bGQgbm90IHVzZSBzdSB3cmFwcGVyCisgICAgLi9zaHV0ZG93 bmFsbAorICAgIGV4aXQgMQorZmkKKworZWNobyBvazogcHJvY2VzcyB1c2VyIGV4ZWN1dGlvbiB0 ZXN0IHN1Y2NlZWRlZAorLi9zaHV0ZG93bmFsbAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KK2VjaG8gPT09IFRlc3Q1OiBFcnJvciBoYW5kbGluZyAtIG1pc3NpbmcgY29tbWFu ZCA9PT0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGVycm9yIGhh bmRsaW5nIHdoZW4gY29tbWFuZCBpcyBub3QgY29uZmlndXJlZAorc2VkIC1pLmJhayAic3xyZXBs aWNhdGlvbl9kZWxheV9zb3VyY2VfY21kID0gJy4vZGVsYXlfY21kX3N0YXRpYy5zaCd8cmVwbGlj YXRpb25fZGVsYXlfc291cmNlX2NtZCA9ICcnfCIgZXRjL3BncG9vbC5jb25mCisKKy4vc3RhcnRh bGwKK3dhaXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyMgV2FpdCBmb3Igc3JfY2hlY2sgdG8gcnVu IHdpdGggbWlzc2luZyBjb21tYW5kCitlY2hvICJXYWl0aW5nIGZvciBzcl9jaGVjayB3aXRoIG1p c3NpbmcgY29tbWFuZC4uLiIKK2ZvciBpIGluIHsxLi41fTsgZG8KKyAgICBpZiBncmVwIC1xICJy ZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfY21kIGlzIG5vdCBjb25maWd1cmVkIiBsb2cvcGdwb29s LmxvZyAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJNaXNzaW5nIGNvbW1hbmQgZXJy b3IgZGV0ZWN0ZWQgYWZ0ZXIgJHtpfSBzZWNvbmRzIgorICAgICAgICBicmVhaworICAgIGZpCisg ICAgc2xlZXAgMQorZG9uZQorCisjIENoZWNrIGZvciBlcnJvciBtZXNzYWdlIGFib3V0IG1pc3Np bmcgY29tbWFuZAorZ3JlcCAicmVwbGljYXRpb25fZGVsYXlfc291cmNlX2NtZCBpcyBub3QgY29u ZmlndXJlZCIgbG9nL3BncG9vbC5sb2cgPi9kZXYvbnVsbCAyPiYxCitpZiBbICQ/ICE9IDAgXTt0 aGVuCisgICAgZWNobyBmYWlsOiBtaXNzaW5nIGNvbW1hbmQgZXJyb3Igbm90IGRldGVjdGVkCisg ICAgLi9zaHV0ZG93bmFsbAorICAgIGV4aXQgMQorZmkKKworZWNobyBvazogZXJyb3IgaGFuZGxp bmcgdGVzdCBzdWNjZWVkZWQKKy4vc2h1dGRvd25hbGwKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCitlY2hvID09PSBUZXN0NjogRXJyb3IgaGFuZGxpbmcgLSBjb21tYW5kIGV4 ZWN1dGlvbiBmYWlsdXJlID09PQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisj IFRlc3QgZXJyb3IgaGFuZGxpbmcgd2hlbiBjb21tYW5kIGZhaWxzCitlY2hvICJyZXBsaWNhdGlv bl9kZWxheV9zb3VyY2VfY21kID0gJy4vbm9uZXhpc3RlbnRfY29tbWFuZC5zaCciID4+IGV0Yy9w Z3Bvb2wuY29uZgorCisuL3N0YXJ0YWxsCit3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCisjIFdh aXQgZm9yIHNyX2NoZWNrIHRvIHJ1biB3aXRoIGZhaWxpbmcgY29tbWFuZAorZWNobyAiV2FpdGlu ZyBmb3Igc3JfY2hlY2sgd2l0aCBmYWlsaW5nIGNvbW1hbmQuLi4iCitmb3IgaSBpbiB7MS4uNX07 IGRvCisgICAgaWYgZ3JlcCAtcSAiZmFpbGVkIHRvIGV4ZWN1dGUgcmVwbGljYXRpb24gZGVsYXkg Y29tbWFuZCIgbG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAi Q29tbWFuZCBmYWlsdXJlIGRldGVjdGVkIGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAgICAgYnJl YWsKKyAgICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKworIyBDaGVjayBmb3IgZXJyb3IgbWVzc2Fn ZSBhYm91dCBjb21tYW5kIGV4ZWN1dGlvbiBmYWlsdXJlCitncmVwICJmYWlsZWQgdG8gZXhlY3V0 ZSByZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kIiBsb2cvcGdwb29sLmxvZyA+L2Rldi9udWxsIDI+ JjEKK2lmIFsgJD8gIT0gMCBdO3RoZW4KKyAgICBlY2hvIGZhaWw6IGNvbW1hbmQgZXhlY3V0aW9u IGZhaWx1cmUgbm90IGRldGVjdGVkCisgICAgLi9zaHV0ZG93bmFsbAorICAgIGV4aXQgMQorZmkK KworZWNobyBvazogY29tbWFuZCBmYWlsdXJlIHRlc3Qgc3VjY2VlZGVkCisuL3NodXRkb3duYWxs CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNobyA9PT0gVGVzdDc6IENv bW1hbmQgdGltZW91dCBoYW5kbGluZyA9PT0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIyBDcmVhdGUgYSBjb21tYW5kIHRoYXQgdGFrZXMgbG9uZ2VyIHRoYW4gdGhlIHRpbWVv dQorY2F0ID4gZGVsYXlfY21kX3Nsb3cuc2ggPDwgJ0VPRicKKyMhL2Jpbi9iYXNoCisjIFNsb3cg Y29tbWFuZCB0aGF0IHRha2VzIDE1IHNlY29uZHMgKGxvbmdlciB0aGFuIGRlZmF1bHQgMTBzIHRp bWVvdXQpCitzbGVlcCAxNQorZWNobyAiMCAyNSA1MCIKK0VPRgorY2htb2QgK3ggZGVsYXlfY21k X3Nsb3cuc2gKKworIyBTZXQgYSBzaG9ydCB0aW1lb3V0IGFuZCB1c2UgdGhlIHNsb3cgY29tbWFu ZAorc2VkIC1pLmJhayAic3xyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfY21kID0gJy4vbm9uZXhp c3RlbnRfY29tbWFuZC5zaCd8cmVwbGljYXRpb25fZGVsYXlfc291cmNlX2NtZCA9ICcuL2RlbGF5 X2NtZF9zbG93LnNoJ3wiIGV0Yy9wZ3Bvb2wuY29uZgorZWNobyAicmVwbGljYXRpb25fZGVsYXlf c291cmNlX3RpbWVvdXQgPSAzIiA+PiBldGMvcGdwb29sLmNvbmYKKworLi9zdGFydGFsbAord2Fp dF9mb3JfcGdwb29sX3N0YXJ0dXAKKworIyBXYWl0IGZvciBzcl9jaGVjayB0byBydW4gYW5kIHRp bWVvdQorZWNobyAiV2FpdGluZyBmb3IgY29tbWFuZCB0aW1lb3V0Li4uIgorZm9yIGkgaW4gezEu LjE1fTsgZG8KKyAgICBpZiBncmVwIC1xICJyZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kIHRpbWVk IG91dCIgbG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAiQ29t bWFuZCB0aW1lb3V0IGRldGVjdGVkIGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAgICAgYnJlYWsK KyAgICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKworIyBDaGVjayBmb3IgdGltZW91dCBlcnJvciBt ZXNzYWdlCitncmVwICJyZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kIHRpbWVkIG91dCBhZnRlciAz IHNlY29uZHMiIGxvZy9wZ3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQoraWYgWyAkPyAhPSAwIF07 dGhlbgorICAgIGVjaG8gZmFpbDogY29tbWFuZCB0aW1lb3V0IG5vdCBkZXRlY3RlZAorICAgIC4v c2h1dGRvd25hbGwKKyAgICBleGl0IDEKK2ZpCisKK2VjaG8gb2s6IGNvbW1hbmQgdGltZW91dCB0 ZXN0IHN1Y2NlZWRlZAorLi9zaHV0ZG93bmFsbAorCitlY2hvICJBbGwgZXh0ZXJuYWwgcmVwbGlj YXRpb24gZGVsYXkgdGVzdHMgcGFzc2VkISIKK2V4aXQgMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUKZGlmZiAtLWdpdCBjL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDgzLmV4dGVybmFs X3JlcGxpY2F0aW9uX2RlbGF5L3Rlc3RfcGFyc2luZy5zaCB3L3NyYy90ZXN0L3JlZ3Jlc3Npb24v dGVzdHMvMDgzLmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5L3Rlc3RfcGFyc2luZy5zaApuZXcg ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAuLjdlZmRiMDdmYgotLS0gL2Rldi9udWxs CisrKyB3L3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDgzLmV4dGVybmFsX3JlcGxpY2F0aW9u X2RlbGF5L3Rlc3RfcGFyc2luZy5zaApAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vYmFzaAorIy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyMgVW5pdCB0ZXN0IGZvciBleHRlcm5hbCBjb21tYW5kIHBhcnNpbmcgbG9naWMK KyMgVGhpcyB0ZXN0cyB0aGUgcGFyc2luZyB3aXRob3V0IG5lZWRpbmcgYSBmdWxsIHBncG9vbCBz ZXR1cAorIworCitlY2hvICI9PT0gVGVzdGluZyBleHRlcm5hbCBjb21tYW5kIG91dHB1dCBwYXJz aW5nID09PSIKKworIyBUZXN0IDE6IEludGVnZXIgdmFsdWVzCitlY2hvICJUZXN0IDE6IEludGVn ZXIgbWlsbGlzZWNvbmQgdmFsdWVzIgorZWNobyAiMCAyNSA1MCIgPiB0ZXN0X291dHB1dC50eAor ZWNobyAiRXhwZWN0ZWQ6IDBtcywgMjVtcywgNTBtcyIKK2VjaG8gIk91dHB1dDogJChjYXQgdGVz dF9vdXRwdXQudHh0KSIKK2VjaG8gIiIKKworIyBUZXN0IDI6IEZsb2F0IHZhbHVlcworZWNobyAi VGVzdCAyOiBGbG9hdGluZy1wb2ludCBtaWxsaXNlY29uZCB2YWx1ZXMiCitlY2hvICIwIDI1LjUg MTAwLjc1IiA+IHRlc3Rfb3V0cHV0X2Zsb2F0LnR4CitlY2hvICJFeHBlY3RlZDogMG1zLCAyNS41 bXMsIDEwMC43NW1zIgorZWNobyAiT3V0cHV0OiAkKGNhdCB0ZXN0X291dHB1dF9mbG9hdC50eHQp IgorZWNobyAiIgorCisjIFRlc3QgMzogSGlnaCBwcmVjaXNpb24gZmxvYXQgdmFsdWVzCitlY2hv ICJUZXN0IDM6IEhpZ2ggcHJlY2lzaW9uIHZhbHVlcyIKK2VjaG8gIjAgMC4wMDEgOTk5Ljk5OSIg PiB0ZXN0X291dHB1dF9wcmVjaXNpb24udHgKK2VjaG8gIkV4cGVjdGVkOiAwbXMsIDAuMDAxbXMs IDk5OS45OTltcyIKK2VjaG8gIk91dHB1dDogJChjYXQgdGVzdF9vdXRwdXRfcHJlY2lzaW9uLnR4 dCkiCitlY2hvICIiCisKKyMgVGVzdCA0OiBFZGdlIGNhc2UgLSB6ZXJvIHZhbHVlcworZWNobyAi VGVzdCA0OiBBbGwgemVybyB2YWx1ZXMiCitlY2hvICIwIDAgMCIgPiB0ZXN0X291dHB1dF96ZXJv cy50eAorZWNobyAiRXhwZWN0ZWQ6IDBtcywgMG1zLCAwbXMiCitlY2hvICJPdXRwdXQ6ICQoY2F0 IHRlc3Rfb3V0cHV0X3plcm9zLnR4dCkiCitlY2hvICIiCisKKyMgVGVzdCA1OiBFZGdlIGNhc2Ug LSBsYXJnZSB2YWx1ZXMKK2VjaG8gIlRlc3QgNTogTGFyZ2UgZGVsYXkgdmFsdWVzIgorZWNobyAi MCA1MDAwIDEwMDAwIiA+IHRlc3Rfb3V0cHV0X2xhcmdlLnR4CitlY2hvICJFeHBlY3RlZDogMG1z LCA1MDAwbXMsIDEwMDAwbXMiCitlY2hvICJPdXRwdXQ6ICQoY2F0IHRlc3Rfb3V0cHV0X2xhcmdl LnR4dCkiCitlY2hvICIiCisKKyMgVGVzdCA2OiBNaXhlZCBpbnRlZ2VyIGFuZCBmbG9hCitlY2hv ICJUZXN0IDY6IE1peGVkIGludGVnZXIgYW5kIGZsb2F0IHZhbHVlcyIKK2VjaG8gIjAgMjUgNTAu NSIgPiB0ZXN0X291dHB1dF9taXhlZC50eAorZWNobyAiRXhwZWN0ZWQ6IDBtcywgMjVtcywgNTAu NW1zIgorZWNobyAiT3V0cHV0OiAkKGNhdCB0ZXN0X291dHB1dF9taXhlZC50eHQpIgorZWNobyAi IgorCisjIENsZWFudXAKK3JtIC1mIHRlc3Rfb3V0cHV0Ki50eAorCitlY2hvICJBbGwgcGFyc2lu ZyB0ZXN0cyBjb21wbGV0ZWQuIFRoZXNlIG91dHB1dHMgc2hvdWxkIGJlIHBhcnNlYWJsZSBieSB0 aGUgZXh0ZXJuYWwgY29tbWFuZCBmZWF0dXJlLiIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl CmRpZmYgLS1naXQgYy9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA4My5leHRlcm5hbF9yZXBs aWNhdGlvbl9kZWxheS90ZXN0X3ZhbGlkYXRpb24uc2ggdy9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rl c3RzLzA4My5leHRlcm5hbF9yZXBsaWNhdGlvbl9kZWxheS90ZXN0X3ZhbGlkYXRpb24uc2gKbmV3 IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwLi5lMTQ0MjJlZWQKLS0tIC9kZXYvbnVs bAorKysgdy9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA4My5leHRlcm5hbF9yZXBsaWNhdGlv bl9kZWxheS90ZXN0X3ZhbGlkYXRpb24uc2gKQEAgLTAsMCArMSwyODUgQEAKKyMhL3Vzci9iaW4v ZW52IGJhc2gKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRlc3Qgc2NyaXB0IGZvciBleHRlcm5hbCBjb21tYW5k IHZhbGlkYXRpb24gYW5kIGVkZ2UgY2FzZXMKKyMKK3NvdXJjZSAkVEVTVExJQlMKK1RFU1RESVI9 dGVzdGRpcl92YWxpZGF0aW9uCitQR19DVEw9JFBHQklOL3BnX2N0bAorUFNRTD0iJFBHQklOL3Bz cWwgLVggIgorCitybSAtZnIgJFRFU1RESVIKK21rZGlyICRURVNURElSCitjZCAkVEVTVERJUgor CisjIGNyZWF0ZSB0ZXN0IGVudmlyb25tZW4KK2VjaG8gLW4gImNyZWF0aW5nIHRlc3QgZW52aXJv bm1lbnQuLi4iCiskUEdQT09MX1NFVFVQIC1tIHMgLW4gMyB8fCBleGl0IDEKK2VjaG8gImRvbmUu Igorc291cmNlIC4vYmFzaHJjLnBvcnRzCitleHBvcnQgUEdQT1JUPSRQR1BPT0xfUE9SVAorCisj IENyZWF0ZSB0ZXN0IGNvbW1hbmQgc2NyaXB0cworY2F0ID4gZGVsYXlfY21kX3ZhbGlkYXRpb24u c2ggPDwgJ0VPRicKKyMhL2Jpbi9iYXNoCisjIFRlc3QgdmFsaWRhdGlvbjogb3V0cHV0IHdpdGgg aW52YWxpZCB2YWx1ZXMKK2VjaG8gIjAgaW52YWxpZF92YWx1ZSA1MC41IgorRU9GCitjaG1vZCAr eCBkZWxheV9jbWRfdmFsaWRhdGlvbi5zaAorCitjYXQgPiBkZWxheV9jbWRfbmVnYXRpdmUuc2gg PDwgJ0VPRicKKyMhL2Jpbi9iYXNoCisjIFRlc3QgbmVnYXRpdmUgdmFsdWVzCitlY2hvICIwIC0y NSA1MCIKK0VPRgorY2htb2QgK3ggZGVsYXlfY21kX25lZ2F0aXZlLnNoCisKK2NhdCA+IGRlbGF5 X2NtZF9sYXJnZS5zaCA8PCAnRU9GJworIyEvYmluL2Jhc2gKKyMgVGVzdCBleHRyZW1lbHkgbGFy Z2UgdmFsdWVzCitlY2hvICIwIDk5OTk5OTkgNTAiCitFT0YKK2NobW9kICt4IGRlbGF5X2NtZF9s YXJnZS5zaAorCitjYXQgPiBkZWxheV9jbWRfd3JvbmdfY291bnQuc2ggPDwgJ0VPRicKKyMhL2Jp bi9iYXNoCisjIFRlc3Qgd3JvbmcgbnVtYmVyIG9mIHZhbHVlcyAob25seSAyIGluc3RlYWQgb2Yg MykKK2VjaG8gIjAgMjUiCitFT0YKK2NobW9kICt4IGRlbGF5X2NtZF93cm9uZ19jb3VudC5zaAor CitjYXQgPiBkZWxheV9jbWRfdHJ1bmNhdGVkLnNoIDw8ICdFT0YnCisjIS9iaW4vYmFzaAorIyBU ZXN0IG91dHB1dCB0aGF0IG1pZ2h0IGJlIHRydW5jYXRlZCAodmVyeSBsb25nIGxpbmUpCitwcmlu dGYgIjAgMjUgIgorZm9yIGkgaW4gezEuLjEwMDB9OyBkbyBwcmludGYgInZlcnlfbG9uZ19vdXRw dXRfIjsgZG9uZQorZWNobyAiNTAiCitFT0YKK2NobW9kICt4IGRlbGF5X2NtZF90cnVuY2F0ZWQu c2gKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2hvID09PSBUZXN0MTog VmFsaWRhdGlvbiBvZiBpbnZhbGlkIGRlbGF5IHZhbHVlcyA9PT0KKyMgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorZWNobyAicmVwbGljYXRpb25fZGVsYXlfc291cmNlID0gJ2NtZCci ID4+IGV0Yy9wZ3Bvb2wuY29uZgorZWNobyAicmVwbGljYXRpb25fZGVsYXlfc291cmNlX2NtZCA9 ICcuL2RlbGF5X2NtZF92YWxpZGF0aW9uLnNoJyIgPj4gZXRjL3BncG9vbC5jb25mCitlY2hvICJz cl9jaGVja19wZXJpb2QgPSAxIiA+PiBldGMvcGdwb29sLmNvbmYKK2VjaG8gImxvZ19zdGFuZGJ5 X2RlbGF5ID0gJ2Fsd2F5cyciID4+IGV0Yy9wZ3Bvb2wuY29uZgorZWNobyAibG9nX21pbl9tZXNz YWdlcyA9ICdERUJVRzEnIiA+PiBldGMvcGdwb29sLmNvbmYKKworLi9zdGFydGFsbAord2FpdF9m b3JfcGdwb29sX3N0YXJ0dXAKKworJFBTUUwgdGVzdCA8PEVPRgorQ1JFQVRFIFRBQkxFIHQxKGkg SU5URUdFUik7CitFT0YKKworIyBXYWl0IGZvciBzcl9jaGVjayB0byBydW4KK2VjaG8gIldhaXRp bmcgZm9yIHZhbGlkYXRpb24gdGVzdC4uLiIKK2ZvciBpIGluIHsxLi4xMH07IGRvCisgICAgaWYg Z3JlcCAtcSAiaW52YWxpZCBkZWxheSB2YWx1ZSIgbG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7 IHRoZW4KKyAgICAgICAgZWNobyAiVmFsaWRhdGlvbiBlcnJvciBkZXRlY3RlZCBhZnRlciAke2l9 IHNlY29uZHMiCisgICAgICAgIGJyZWFrCisgICAgZmkKKyAgICBzbGVlcCAxCitkb25lCisKKyMg Q2hlY2sgZm9yIHZhbGlkYXRpb24gd2FybmluZworZ3JlcCAiaW52YWxpZCBkZWxheSB2YWx1ZSAn aW52YWxpZF92YWx1ZScgZm9yIG5vZGUiIGxvZy9wZ3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQor aWYgWyAkPyAhPSAwIF07dGhlbgorICAgIGVjaG8gZmFpbDogdmFsaWRhdGlvbiB3YXJuaW5nIG5v dCBmb3VuZAorICAgIC4vc2h1dGRvd25hbGwKKyAgICBleGl0IDEKK2ZpCisKK2VjaG8gb2s6IGlu dmFsaWQgdmFsdWUgdmFsaWRhdGlvbiB0ZXN0IHN1Y2NlZWRlZAorLi9zaHV0ZG93bmFsbAorCisj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjaG8gPT09IFRlc3QyOiBOZWdhdGl2 ZSBkZWxheSB2YWx1ZXMgPT09CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Nl ZCAtaS5iYWsgInN8ZGVsYXlfY21kX3ZhbGlkYXRpb24uc2h8ZGVsYXlfY21kX25lZ2F0aXZlLnNo fCIgZXRjL3BncG9vbC5jb25mCisKKy4vc3RhcnRhbGwKK3dhaXRfZm9yX3BncG9vbF9zdGFydHVw CisKKyMgV2FpdCBmb3Igc3JfY2hlY2sgdG8gcnVuCitlY2hvICJXYWl0aW5nIGZvciBuZWdhdGl2 ZSB2YWx1ZSB0ZXN0Li4uIgorZm9yIGkgaW4gezEuLjEwfTsgZG8KKyAgICBpZiBncmVwIC1xICJu ZWdhdGl2ZSBkZWxheSB2YWx1ZSIgbG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAg ICAgICAgZWNobyAiTmVnYXRpdmUgdmFsdWUgd2FybmluZyBkZXRlY3RlZCBhZnRlciAke2l9IHNl Y29uZHMiCisgICAgICAgIGJyZWFrCisgICAgZmkKKyAgICBzbGVlcCAxCitkb25lCisKKyMgQ2hl Y2sgZm9yIG5lZ2F0aXZlIHZhbHVlIHdhcm5pbmcKK2dyZXAgIm5lZ2F0aXZlIGRlbGF5IHZhbHVl Lipmb3Igbm9kZSIgbG9nL3BncG9vbC5sb2cgPi9kZXYvbnVsbCAyPiYxCitpZiBbICQ/ICE9IDAg XTt0aGVuCisgICAgZWNobyBmYWlsOiBuZWdhdGl2ZSB2YWx1ZSB3YXJuaW5nIG5vdCBmb3VuZAor ICAgIC4vc2h1dGRvd25hbGwKKyAgICBleGl0IDEKK2ZpCisKK2VjaG8gb2s6IG5lZ2F0aXZlIHZh bHVlIHZhbGlkYXRpb24gdGVzdCBzdWNjZWVkZWQKKy4vc2h1dGRvd25hbGwKKworIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2hvID09PSBUZXN0MzogRXh0cmVtZWx5IGxhcmdl IGRlbGF5IHZhbHVlcyA9PT0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2Vk IC1pLmJhayAic3xkZWxheV9jbWRfbmVnYXRpdmUuc2h8ZGVsYXlfY21kX2xhcmdlLnNofCIgZXRj L3BncG9vbC5jb25mCisKKy4vc3RhcnRhbGwKK3dhaXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyMg V2FpdCBmb3Igc3JfY2hlY2sgdG8gcnVuCitlY2hvICJXYWl0aW5nIGZvciBsYXJnZSB2YWx1ZSB0 ZXN0Li4uIgorZm9yIGkgaW4gezEuLjEwfTsgZG8KKyAgICBpZiBncmVwIC1xICJleHRyZW1lbHkg bGFyZ2UgZGVsYXkgdmFsdWUiIGxvZy9wZ3Bvb2wubG9nIDI+L2Rldi9udWxsOyB0aGVuCisgICAg ICAgIGVjaG8gIkxhcmdlIHZhbHVlIHdhcm5pbmcgZGV0ZWN0ZWQgYWZ0ZXIgJHtpfSBzZWNvbmRz IgorICAgICAgICBicmVhaworICAgIGZpCisgICAgc2xlZXAgMQorZG9uZQorCisjIENoZWNrIGZv ciBsYXJnZSB2YWx1ZSB3YXJuaW5nCitncmVwICJleHRyZW1lbHkgbGFyZ2UgZGVsYXkgdmFsdWUu KmZvciBub2RlIiBsb2cvcGdwb29sLmxvZyA+L2Rldi9udWxsIDI+JjEKK2lmIFsgJD8gIT0gMCBd O3RoZW4KKyAgICBlY2hvIGZhaWw6IGxhcmdlIHZhbHVlIHdhcm5pbmcgbm90IGZvdW5kCisgICAg Li9zaHV0ZG93bmFsbAorICAgIGV4aXQgMQorZmkKKworZWNobyBvazogbGFyZ2UgdmFsdWUgdmFs aWRhdGlvbiB0ZXN0IHN1Y2NlZWRlZAorLi9zaHV0ZG93bmFsbAorCisjIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KK2VjaG8gPT09IFRlc3Q0OiBXcm9uZyBudW1iZXIgb2Ygb3V0cHV0 IHZhbHVlcyA9PT0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2VkIC1pLmJh ayAic3xkZWxheV9jbWRfbGFyZ2Uuc2h8ZGVsYXlfY21kX3dyb25nX2NvdW50LnNofCIgZXRjL3Bn cG9vbC5jb25mCisKKy4vc3RhcnRhbGwKK3dhaXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyMgV2Fp dCBmb3Igc3JfY2hlY2sgdG8gcnVuCitlY2hvICJXYWl0aW5nIGZvciB3cm9uZyBjb3VudCB0ZXN0 Li4uIgorZm9yIGkgaW4gezEuLjEwfTsgZG8KKyAgICBpZiBncmVwIC1xICJyZXR1cm5lZC4qdmFs dWVzLCBleHBlY3RlZCIgbG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAg ZWNobyAiV3JvbmcgY291bnQgd2FybmluZyBkZXRlY3RlZCBhZnRlciAke2l9IHNlY29uZHMiCisg ICAgICAgIGJyZWFrCisgICAgZmkKKyAgICBzbGVlcCAxCitkb25lCisKKyMgQ2hlY2sgZm9yIHdy b25nIGNvdW50IHdhcm5pbmcKK2dyZXAgInJldHVybmVkLip2YWx1ZXMsIGV4cGVjdGVkLipDb21t YW5kIHNob3VsZCBvdXRwdXQgb25lIGRlbGF5IHZhbHVlIHBlciBiYWNrZW5kIG5vZGUiIGxvZy9w Z3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQoraWYgWyAkPyAhPSAwIF07dGhlbgorICAgIGVjaG8g ZmFpbDogd3JvbmcgY291bnQgd2FybmluZyBub3QgZm91bmQKKyAgICAuL3NodXRkb3duYWxsCisg ICAgZXhpdCAxCitmaQorCitlY2hvIG9rOiB3cm9uZyBjb3VudCB2YWxpZGF0aW9uIHRlc3Qgc3Vj Y2VlZGVkCisuL3NodXRkb3duYWxsCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorZWNobyA9PT0gVGVzdDU6IFByaW1hcnkgbm9kZSBub24temVybyBkZWxheSBoYW5kbGluZyA9 PT0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY2F0ID4gZGVsYXlfY21kX3By aW1hcnlfbm9uemVyby5zaCA8PCAnRU9GJworIyEvYmluL2Jhc2gKKyMgVGVzdCBwcmltYXJ5IG5v ZGUgd2l0aCBub24temVybyBkZWxheSAoc2hvdWxkIGJlIGNvcnJlY3RlZCB0byAwKQorZWNobyAi MTAwIDI1IDUwIgorRU9GCitjaG1vZCAreCBkZWxheV9jbWRfcHJpbWFyeV9ub256ZXJvLnNoCisK K3NlZCAtaS5iYWsgInN8ZGVsYXlfY21kX3dyb25nX2NvdW50LnNofGRlbGF5X2NtZF9wcmltYXJ5 X25vbnplcm8uc2h8IiBldGMvcGdwb29sLmNvbmYKKworLi9zdGFydGFsbAord2FpdF9mb3JfcGdw b29sX3N0YXJ0dXAKKworIyBXYWl0IGZvciBzcl9jaGVjayB0byBydW4KK2VjaG8gIldhaXRpbmcg Zm9yIHByaW1hcnkgbm9uLXplcm8gZGVsYXkgdGVzdC4uLiIKK2ZvciBpIGluIHsxLi4xMH07IGRv CisgICAgaWYgZ3JlcCAtcSAicHJpbWFyeSBub2RlLipyZXBvcnRlZCBub24temVybyBkZWxheSIg bG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAiUHJpbWFyeSBu b24temVybyBkZWxheSBkZXRlY3RlZCBhZnRlciAke2l9IHNlY29uZHMiCisgICAgICAgIGJyZWFr CisgICAgZmkKKyAgICBzbGVlcCAxCitkb25lCisKKyMgQ2hlY2sgZm9yIHByaW1hcnkgbm9kZSBj b3JyZWN0aW9uCitncmVwICJwcmltYXJ5IG5vZGUuKnJlcG9ydGVkIG5vbi16ZXJvIGRlbGF5Lipz ZXR0aW5nIHRvIDAiIGxvZy9wZ3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQoraWYgWyAkPyAhPSAw IF07dGhlbgorICAgIGVjaG8gZmFpbDogcHJpbWFyeSBub2RlIGRlbGF5IGNvcnJlY3Rpb24gbm90 IGZvdW5kCisgICAgLi9zaHV0ZG93bmFsbAorICAgIGV4aXQgMQorZmkKKworZWNobyBvazogcHJp bWFyeSBub2RlIGRlbGF5IGNvcnJlY3Rpb24gdGVzdCBzdWNjZWVkZWQKKy4vc2h1dGRvd25hbGwK KworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2hvID09PSBUZXN0NjogQ29t bWFuZCB0aW1lb3V0IHdpdGggZGlmZmVyZW50IHRpbWVvdXQgdmFsdWVzID09PQorIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjYXQgPiBkZWxheV9jbWRfdGltZW91dC5zaCA8PCAn RU9GJworIyEvYmluL2Jhc2gKKyMgQ29tbWFuZCB0aGF0IHRha2VzIDUgc2Vjb25kcworc2xlZXAg NQorZWNobyAiMCAyNSA1MCIKK0VPRgorY2htb2QgK3ggZGVsYXlfY21kX3RpbWVvdXQuc2gKKwor IyBUZXN0IHdpdGggdGltZW91dCBzaG9ydGVyIHRoYW4gY29tbWFuZCBkdXJhdGlvbgorc2VkIC1p LmJhayAic3xkZWxheV9jbWRfcHJpbWFyeV9ub256ZXJvLnNofGRlbGF5X2NtZF90aW1lb3V0LnNo fCIgZXRjL3BncG9vbC5jb25mCitlY2hvICJyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfdGltZW91 dCA9IDIiID4+IGV0Yy9wZ3Bvb2wuY29uZgorCisuL3N0YXJ0YWxsCit3YWl0X2Zvcl9wZ3Bvb2xf c3RhcnR1cAorCisjIFdhaXQgZm9yIHRpbWVvdQorZWNobyAiV2FpdGluZyBmb3IgdGltZW91dCB0 ZXN0ICgycyB0aW1lb3V0LCA1cyBjb21tYW5kKS4uLiIKK2ZvciBpIGluIHsxLi4xMH07IGRvCisg ICAgaWYgZ3JlcCAtcSAicmVwbGljYXRpb24gZGVsYXkgY29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIg MiBzZWNvbmRzIiBsb2cvcGdwb29sLmxvZyAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hv ICJUaW1lb3V0IGRldGVjdGVkIGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAgICAgYnJlYWsKKyAg ICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKworIyBDaGVjayBmb3IgdGltZW91dCBtZXNzYWdlCitn cmVwICJyZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kIHRpbWVkIG91dCBhZnRlciAyIHNlY29uZHMi IGxvZy9wZ3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQoraWYgWyAkPyAhPSAwIF07dGhlbgorICAg IGVjaG8gZmFpbDogdGltZW91dCBub3QgZGV0ZWN0ZWQKKyAgICAuL3NodXRkb3duYWxsCisgICAg ZXhpdCAxCitmaQorCitlY2hvIG9rOiB0aW1lb3V0IHRlc3Qgc3VjY2VlZGVkCisuL3NodXRkb3du YWxsCisKKyMgVGVzdCB3aXRoIHRpbWVvdXQgbG9uZ2VyIHRoYW4gY29tbWFuZCBkdXJhdGlvbgor c2VkIC1pLmJhayAic3xyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfdGltZW91dCA9IDJ8cmVwbGlj YXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQgPSAxMHwiIGV0Yy9wZ3Bvb2wuY29uZgorCisuL3N0 YXJ0YWxsCit3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCisjIFdhaXQgZm9yIHN1Y2Nlc3NmdWwg ZXhlY3V0aW9uCitlY2hvICJXYWl0aW5nIGZvciBzdWNjZXNzZnVsIGV4ZWN1dGlvbiAoMTBzIHRp bWVvdXQsIDVzIGNvbW1hbmQpLi4uIgorZm9yIGkgaW4gezEuLjE1fTsgZG8KKyAgICBpZiBncmVw IC1xICJleGVjdXRpbmcgcmVwbGljYXRpb24gZGVsYXkgY29tbWFuZC4qZGVsYXlfY21kX3RpbWVv dXQuc2giIGxvZy9wZ3Bvb2wubG9nIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGVjaG8gIkNv bW1hbmQgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5IGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAgICAg YnJlYWsKKyAgICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKworIyBTaG91bGQgbm90IHRpbWVvdXQg dGhpcyB0aW1lCitpZiBncmVwIC1xICJyZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kIHRpbWVkIG91 dCIgbG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAgICBlY2hvIGZhaWw6IGNvbW1h bmQgc2hvdWxkIG5vdCBoYXZlIHRpbWVkIG91dCB3aXRoIDEwcyB0aW1lb3UKKyAgICAuL3NodXRk b3duYWxsCisgICAgZXhpdCAxCitmaQorCitlY2hvIG9rOiBleHRlbmRlZCB0aW1lb3V0IHRlc3Qg c3VjY2VlZGVkCisuL3NodXRkb3duYWxsCisKK2VjaG8gIkFsbCB2YWxpZGF0aW9uIHRlc3RzIHBh c3NlZCEiCitleGl0IDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg== --0000000000008b0cc9063d30023e--