From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Maxime Devos Newsgroups: gmane.lisp.guile.user Subject: [WIP PATCH] (for fibers): wait-until-port-readable-operation / wait-until-port-writable-operation Date: Sun, 14 Feb 2021 17:20:22 +0100 Message-ID: <92c5306a988b9af3eab466258e4db81fe89e1daf.camel@telenet.be> Mime-Version: 1.0 Content-Type: multipart/signed; micalg="pgp-sha256"; protocol="application/pgp-signature"; boundary="=-vqwUSW17K9K7+toozacg" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="25619"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Evolution 3.34.2 Cc: guile-user@gnu.org To: Andy Wingo Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Sun Feb 14 18:57:12 2021 Return-path: Envelope-to: guile-user@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lBLdw-0006YW-0D for guile-user@m.gmane-mx.org; Sun, 14 Feb 2021 18:57:12 +0100 Original-Received: from localhost ([::1]:32868 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lBLdv-0004wB-2W for guile-user@m.gmane-mx.org; Sun, 14 Feb 2021 12:57:11 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:46714) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lBK8U-0001Ci-V6 for guile-user@gnu.org; Sun, 14 Feb 2021 11:20:39 -0500 Original-Received: from laurent.telenet-ops.be ([2a02:1800:110:4::f00:19]:48178) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lBK8P-0008LA-E1 for guile-user@gnu.org; Sun, 14 Feb 2021 11:20:37 -0500 Original-Received: from ptr-bvsjgyjmffd7q9timvx.18120a2.ip6.access.telenet.be ([IPv6:2a02:1811:8c09:9d00:aaf1:9810:a0b8:a55d]) by laurent.telenet-ops.be with bizsmtp id V4LW2400A0mfAB4014LWhL; Sun, 14 Feb 2021 17:20:30 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r21; t=1613319630; bh=yGbDzyDn3lJ7wigdsvWj1hYL9aztMlCRHF9sb265ChU=; h=Subject:From:To:Cc:Date; b=Quw8mZQRO9h78BH1Q497uFk48181FzfohCbctb17cci2D1lxfii6TjRW1o6Uf4zBv IK4LcXxaLTuxgFiKLBtegQnl/eb9wTQwpYgN2SB044M6j+Pdu7TkQqlGyFyDcrkwh0 y8nnzh/lUtDpQ6MO+PvX4uiVM7ghVZmBDXz5kfbUL0A3qLwsLNxufDDSPCgH58Er7H NJrpguJDTNw2yipsu+gWUhTQVWc+Wyw2/AcebyvGM9WoHcP3/JcpzAq07vBuAjtQKD RbrHZEQhEaU1YODZlyfQAiEj4HBC5ekXsPBgNSy/jcH4NaE0/YaHly9TiZwlTHEPwy pYxMS66H2jSHg== Received-SPF: pass client-ip=2a02:1800:110:4::f00:19; envelope-from=maximedevos@telenet.be; helo=laurent.telenet-ops.be X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Sun, 14 Feb 2021 12:56:06 -0500 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Original-Sender: "guile-user" Xref: news.gmane.io gmane.lisp.guile.user:17248 Archived-At: --=-vqwUSW17K9K7+toozacg Content-Type: multipart/mixed; boundary="=-+lgKUNvdLeiiMQTpEfMu" --=-+lgKUNvdLeiiMQTpEfMu Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Guilers, This is a (buggy) patch to guile-fibers that adds a =E2=80=98wait-until-port-readable-operation=E2=80=99 and =E2=80=98wait-un= til-port-writable=E2=80=99 that can be used to wait until a port (backed by a fd) becomes readable or writable respectively. Now I seem to have hit a problem: the first few tests (more to be written later) pass just fine, but the following test never completes: ;; XXX why does this hang? Shouldn't there ;; be a time-out? (assert-run-fibers-returns (#f) (writable/timeout A)) (writable/timeout is a combination of wait-until-port-writable and sleep-operation, that also retries a few times to allow for spurious wakeups.) Oddly, the same test but with readable/timeout completes just fine. Any thoughts? (Warning: I don't know what I'm doing; I'm not familiar with relevant literature on operations, I'm just trying to complete wingo's proposal). Wild guess: maybe schedule-task-when-fd-writable prevents the fiber from being resumed by other causes? Greetings, Maxime. --=-+lgKUNvdLeiiMQTpEfMu Content-Disposition: attachment; filename*0=0001-WIP-Implement-operations-for-waiting-for-readability.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0001-WIP-Implement-operations-for-waiting-for-readability.patch"; charset="UTF-8" RnJvbSBiOGFjNzMyNTQzNjYxYjVlZTdlMmYzODQ4MmY4MjRiNjM4NjY0YmQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+ CkRhdGU6IFN1biwgMTQgRmViIDIwMjEgMTc6MDQ6MDIgKzAxMDAKU3ViamVjdDogW1BBVENIXSAo V0lQKSBJbXBsZW1lbnQgb3BlcmF0aW9ucyBmb3Igd2FpdGluZyBmb3IgcmVhZGFiaWxpdHkgLwog d3JpdGFiaWxpdHkKCiogZmliZXJzL2lvLXdha2V1cC5zY20KICAod2FpdC11bnRpbC1wb3J0LXJl YWRhYmxlLW9wZXJhdGlvbikKICAod2FpdC11bnRpbC1wb3J0LXdyaXRhYmxlLW9wZXJhdGlvbik6 IG5ldyBvcGVyYXRpb25zLgogICh3cml0YWJsZT8pOiBoZWxwZXIgcHJvY2VkdXJlIGZvcgogICd3 YWl0LXVudGlsLXBvcnQtd3JpdGFibGUtb3BlcmF0aW9uJwoqIHRlc3RzL2lvLXdha2V1cC5zY206 IHRlc3QgJ2ZpYmVycy9pby13YWtldXAuc2NtJwoqIE1ha2VmaWxlLmFtCiAgKFNPVVJDRVMpOiBj b21waWxlICdmaWJlcnMvaW8td2FrZXVwLnNjbScuCiAgKFRFU1RTKTogcnVuICd0ZXN0cy9pby13 YWtldXAuc2NtJy4KLS0tCiBNYWtlZmlsZS5hbSAgICAgICAgICB8ICAgMiArCiBmaWJlcnMvaW8t d2FrZXVwLnNjbSB8ICA5NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL2lv LXdha2V1cC5zY20gIHwgMTM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMjM4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBmaWJlcnMvaW8td2FrZXVwLnNjbQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2lvLXdh a2V1cC5zY20KCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCmluZGV4IGUy ZGI1N2UuLjAxMzQyNTUgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmFtCisrKyBiL01ha2VmaWxlLmFt CkBAIC0zMyw2ICszMyw3IEBAIFNPVVJDRVMgPSBcCiAJZmliZXJzL2RlcXVlLnNjbSBcCiAJZmli ZXJzL2Vwb2xsLnNjbSBcCiAJZmliZXJzL2ludGVycnVwdHMuc2NtIFwKKwlmaWJlcnMvaW8td2Fr ZXVwLnNjbSBcCiAJZmliZXJzL25hbWVzZXQuc2NtIFwKIAlmaWJlcnMvb3BlcmF0aW9ucy5zY20g XAogCWZpYmVycy9wb3NpeC1jbG9ja3Muc2NtIFwKQEAgLTY3LDYgKzY4LDcgQEAgVEVTVFMgPSBc CiAJdGVzdHMvY29uZGl0aW9ucy5zY20gXAogCXRlc3RzL2NoYW5uZWxzLnNjbSBcCiAJdGVzdHMv Zm9yZWlnbi5zY20gXAorCXRlc3RzL2lvLXdha2V1cC5zY20gXAogCXRlc3RzL3BhcmFtZXRlcnMu c2NtIFwKIAl0ZXN0cy9wcmVlbXB0aW9uLnNjbSBcCiAJdGVzdHMvc3BlZWR1cC5zY20KZGlmZiAt LWdpdCBhL2ZpYmVycy9pby13YWtldXAuc2NtIGIvZmliZXJzL2lvLXdha2V1cC5zY20KbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5MWFiZQotLS0gL2Rldi9udWxsCisrKyBi L2ZpYmVycy9pby13YWtldXAuc2NtCkBAIC0wLDAgKzEsOTcgQEAKKzs7IEZpYmVyczogY29vcGVy YXRpdmUsIGV2ZW50LWRyaXZlbiB1c2VyLXNwYWNlIHRocmVhZHMuCisKKzs7OzsgQ29weXJpZ2h0 IChDKSAyMDE2LDIwMjEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis7Ozs7IENvcHly aWdodCAoQykgMjAyMSBNYXhpbWUgRGV2b3MKKzs7OzsgCis7Ozs7IFRoaXMgbGlicmFyeSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKzs7OzsgbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworOzs7 OyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIKKzs7OzsgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorOzs7OyAKKzs7OzsgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7Ozs7IGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7Ozs7 IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VCis7Ozs7IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCis7Ozs7IAorOzs7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCis7Ozs7IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKzs7OzsgRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQQorOzs7OyAKKworKGRlZmluZS1tb2R1bGUgKGZpYmVycyBpby13YWtldXAp CisgICM6dXNlLW1vZHVsZSAoZmliZXJzIHNjaGVkdWxlcikKKyAgIzp1c2UtbW9kdWxlIChmaWJl cnMgb3BlcmF0aW9ucykKKyAgIzp1c2UtbW9kdWxlIChpY2UtOSBhdG9taWMpCisgICM6dXNlLW1v ZHVsZSAoaWNlLTkgbWF0Y2gpCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgdGhyZWFkcykKKyAgIzpl eHBvcnQgKHdhaXQtdW50aWwtcG9ydC1yZWFkYWJsZS1vcGVyYXRpb24KKwkgICAgd2FpdC11bnRp bC1wb3J0LXdyaXRhYmxlLW9wZXJhdGlvbikpCis7OyBNYWtlIHN1cmUgKGljZS05IHBvcnQpIGlz IGxvYWRlZCBiZWZvcmUKKzs7IHRyeWluZyB0byBsb2FkIChpY2UtOSBwb3J0IGludGVybmFsKS4K Kyh1c2UtbW9kdWxlcyAoaWNlLTkgcG9ydHMpKQorKHVzZS1tb2R1bGVzIChpY2UtOSBwb3J0cyBp bnRlcm5hbCkpCisKKyhkZWZpbmUgKnBvbGwtc2NoZWQqIChtYWtlLWF0b21pYy1ib3ggI2YpKQor CisoZGVmaW5lIChwb2xsLXNjaGVkKQorICAob3IgKGF0b21pYy1ib3gtcmVmICpwb2xsLXNjaGVk KikKKyAgICAgIChsZXQgKChzY2hlZCAobWFrZS1zY2hlZHVsZXIpKSkKKyAgICAgICAgKGNvbmQK KyAgICAgICAgICgoYXRvbWljLWJveC1jb21wYXJlLWFuZC1zd2FwISAqcG9sbC1zY2hlZCogI2Yg c2NoZWQpKQorICAgICAgICAgKGVsc2UKKyAgICAgICAgICA7OyBGSVhNRTogV291bGQgYmUgbmlj ZSB0byBjbGVhbiB1cCB0aGlzIHRocmVhZCBhdCBzb21lIHBvaW50LgorICAgICAgICAgIChjYWxs LXdpdGgtbmV3LXRocmVhZAorICAgICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAgKGRl ZmluZSAoZmluaXNoZWQ/KSAjZikKKyAgICAgICAgICAgICAocnVuLXNjaGVkdWxlciBzY2hlZCBm aW5pc2hlZD8pKSkKKyAgICAgICAgICBzY2hlZCkpKSkpCisKKzs7IFRoZXNlIHByb2NlZHVyZSBh cmUgc3ViamVjdCB0byBzcHVyaW91cyB3YWtldXBzLgorCisoZGVmaW5lICh3YWl0LXVudGlsLXBv cnQtcmVhZGFibGUtb3BlcmF0aW9uIHBvcnQpCisgICJNYWtlIGFuIG9wZXJhdGlvbiB0aGF0IHdp bGwgc3VjY2VlZCB3aGVuIFBPUlQgaXMgcmVhZGFibGUuIgorICAobWFrZS1iYXNlLW9wZXJhdGlv biAjZgorICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAgICAg ICAgICAgICAgKGFuZCAoY2hhci1yZWFkeT8gcG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZhbHVlcykpCisgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGZsYWcgc2No ZWQgcmVzdW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZpbmUgKGNvbW1pdCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaCAoYXRvbWljLWJveC1jb21wYXJlLWFuZC1z d2FwISBmbGFnICdXICdTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1cgKHJlc3Vt ZSB2YWx1ZXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0MgKGNvbW1pdCkpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnUyAjZikpKQorICAgICAgICAgICAgICAgICAg ICAgICAgIChpZiBzY2hlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2NoZWR1bGUt dGFzay13aGVuLWZkLXJlYWRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hl ZCAocG9ydC1yZWFkLXdhaXQtZmQgcG9ydCkgY29tbWl0KQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoc2NoZWR1bGUtdGFzaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBv bGwtc2NoZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhICgpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwZXJmb3JtLW9wZXJhdGlvbiAod2FpdC11bnRp bC1wb3J0LXJlYWRhYmxlLW9wZXJhdGlvbiBwb3J0KSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNvbW1pdCkpKSkpKSkKKworKGRlZmluZSAod3JpdGFibGU/IHBvcnQpCisgICJU ZXN0IGlmIFBPUlQgaXMgd3JpdGFibGUuIgorICAobWF0Y2ggKHNlbGVjdCAjKCkgKHZlY3RvciBw b3J0KSAjKCkgMCkKKyAgICAoKCMoKSAjKCkgIygpKSAjZikKKyAgICAoKCMoKSAjKF8pICMoKSkg I3QpKSkKKworKGRlZmluZSAod2FpdC11bnRpbC1wb3J0LXdyaXRhYmxlLW9wZXJhdGlvbiBwb3J0 KQorICAiTWFrZSBhbiBvcGVyYXRpb24gdGhhdCB3aWxsIHN1Y2NlZWQgd2hlbiBQT1JUIGlzIHdy aXRhYmxlLiIKKyAgKG1ha2UtYmFzZS1vcGVyYXRpb24gI2YKKyAgICAgICAgICAgICAgICAgICAg ICAgKGxhbWJkYSAoKQorICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgKHdyaXRhYmxlPyBw b3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgKGxhbWJkYSAoZmxhZyBzY2hlZCByZXN1bWUpCisgICAgICAgICAgICAgICAg ICAgICAgICAgKGRlZmluZSAoY29tbWl0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1h dGNoIChhdG9taWMtYm94LWNvbXBhcmUtYW5kLXN3YXAhIGZsYWcgJ1cgJ1MpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgnVyAocmVzdW1lIHZhbHVlcykpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgnQyAoY29tbWl0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KCdTICNmKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHNjaGVkCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChzY2hlZHVsZS10YXNrLXdoZW4tZmQtd3JpdGFibGUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkIChwb3J0LXdyaXRlLXdhaXQtZmQgcG9ydCkg Y29tbWl0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2NoZWR1bGUtdGFzaworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvbGwtc2NoZWQpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChwZXJmb3JtLW9wZXJhdGlvbiAod2FpdC11bnRpbC1wb3J0LXdyaXRhYmxlLW9wZXJhdGlvbiBw b3J0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1pdCkpKSkpKSkKZGlm ZiAtLWdpdCBhL3Rlc3RzL2lvLXdha2V1cC5zY20gYi90ZXN0cy9pby13YWtldXAuc2NtCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOGJhYmUKLS0tIC9kZXYvbnVsbAorKysg Yi90ZXN0cy9pby13YWtldXAuc2NtCkBAIC0wLDAgKzEsMTM5IEBACis7OyBGaWJlcnM6IGNvb3Bl cmF0aXZlLCBldmVudC1kcml2ZW4gdXNlci1zcGFjZSB0aHJlYWRzLgorCis7Ozs7IENvcHlyaWdo dCAoQykgMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzs7OzsgQ29weXJpZ2h0 IChDKSAyMDIxIE1heGltZSBEZXZvcworOzs7OworOzs7OyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7Ozs7IG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKzs7OzsgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy Cis7Ozs7IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKzs7OzsKKzs7OzsgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7Ozs7IGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7Ozs7IE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VCis7Ozs7IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Cis7Ozs7Cis7Ozs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKzs7OzsgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorOzs7OyBGb3VuZGF0aW9uLCBJ bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEz MDEgVVNBCis7Ozs7CisKKyhkZWZpbmUtbW9kdWxlICh0ZXN0cyBpby13YWtldXApCisgICM6dXNl LW1vZHVsZSAoZmliZXJzKQorICAjOnVzZS1tb2R1bGUgKGZpYmVycyBpby13YWtldXApCisgICM6 dXNlLW1vZHVsZSAoZmliZXJzIG9wZXJhdGlvbnMpCisgICM6dXNlLW1vZHVsZSAoZmliZXJzIHRp bWVycykpCisKKyhkZWZpbmUgZmFpbGVkPyAjZikKKworKGRlZmluZS1zeW50YXgtcnVsZSAoYXNz ZXJ0LWVxdWFsIGV4cGVjdGVkIGFjdHVhbCkKKyAgKGxldCAoKHggZXhwZWN0ZWQpKQorICAgIChm b3JtYXQgI3QgImFzc2VydCB+cyBlcXVhbCB0byB+czogIiAnYWN0dWFsIHgpCisgICAgKGZvcmNl LW91dHB1dCkKKyAgICAobGV0ICgoeSBhY3R1YWwpKQorICAgICAgKGNvbmQKKyAgICAgICAoKGVx dWFsPyB4IHkpIChmb3JtYXQgI3QgIm9rXG4iKSkKKyAgICAgICAoZWxzZQorICAgICAgICAoZm9y bWF0ICN0ICJubyAoZ290IH5zKVxuIiB5KQorICAgICAgICAoc2V0ISBmYWlsZWQ/ICN0KSkpKSkp CisKKyhkZWZpbmUtc3ludGF4LXJ1bGUgKGFzc2VydC1ydW4tZmliZXJzLXRlcm1pbmF0ZXMgZXhw KQorICAoYmVnaW4KKyAgICAoZm9ybWF0ICN0ICJhc3NlcnQgcnVuLWZpYmVycyBvbiB+cyB0ZXJt aW5hdGVzOiAiICdleHApCisgICAgKGZvcmNlLW91dHB1dCkKKyAgICAobGV0ICgoc3RhcnQgKGdl dC1pbnRlcm5hbC1yZWFsLXRpbWUpKSkKKyAgICAgIChjYWxsLXdpdGgtdmFsdWVzIChsYW1iZGEg KCkgKHJ1bi1maWJlcnMgKGxhbWJkYSAoKSBleHApKSkKKyAgICAgICAgKGxhbWJkYSB2YWxzCisg ICAgICAgICAgKGZvcm1hdCAjdCAib2sgKH5hIHMpXG4iICgvICgtIChnZXQtaW50ZXJuYWwtcmVh bC10aW1lKSBzdGFydCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4w IGludGVybmFsLXRpbWUtdW5pdHMtcGVyLXNlY29uZCkpCisgICAgICAgICAgKGFwcGx5IHZhbHVl cyB2YWxzKSkpKSkpCisKKyhkZWZpbmUtc3ludGF4LXJ1bGUgKGFzc2VydC1ydW4tZmliZXJzLXJl dHVybnMgKGV4cGVjdGVkIC4uLikgZXhwKQorICAoYmVnaW4KKyAgICAoY2FsbC13aXRoLXZhbHVl cyAobGFtYmRhICgpIChhc3NlcnQtcnVuLWZpYmVycy10ZXJtaW5hdGVzIGV4cCkpCisgICAgICAo bGFtYmRhIHJ1bi1maWJlci1yZXR1cm4tdmFscworICAgICAgICAoYXNzZXJ0LWVxdWFsICcoZXhw ZWN0ZWQgLi4uKSBydW4tZmliZXItcmV0dXJuLXZhbHMpKSkpKQorCisoZGVmaW5lKiAod2l0aC10 aW1lb3V0IG9wICM6a2V5IChzZWNvbmRzIDAuMDUpICh3cmFwIHZhbHVlcykpCisgIChjaG9pY2Ut b3BlcmF0aW9uIG9wCisgICAgICAgICAgICAgICAgICAgICh3cmFwLW9wZXJhdGlvbiAoc2xlZXAt b3BlcmF0aW9uIHNlY29uZHMpIHdyYXApKSkKKworKGRlZmluZSogKHJlYWRhYmxlL3RpbWVvdXQg cG9ydCAjOmtleSAoYWxsb3dlZC1zcHVyaW91cyA1KSkKKyAgIkRvZXMgd2FpdGluZyBmb3IgcmVh ZGFiaWxpdHkgbm90IHRpbWUtb3V0PworQWxsb3cgQHZhcnthbGxvd2VkLXNwdXJpb3VzfSBzcHVy aW91cyB3YWtldXBzLiIKKyAgKGFuZCAocGVyZm9ybS1vcGVyYXRpb24KKwkod2l0aC10aW1lb3V0 CisJICh3cmFwLW9wZXJhdGlvbiAod2FpdC11bnRpbC1wb3J0LXJlYWRhYmxlLW9wZXJhdGlvbiBw b3J0KQorCQkJIChsYW1iZGEgKCkgI3QpKQorCSAjOndyYXAgKGxhbWJkYSAoKSAjZikpKQorICAg ICAgIChvciAoPD0gKHBrICdzcHVyaW91cy9yZWFkYWJsZSBhbGxvd2VkLXNwdXJpb3VzKSAwKQor CSAgIChyZWFkYWJsZS90aW1lb3V0IHBvcnQgIzphbGxvd2VkLXNwdXJpb3VzCisJCQkgICAgICgt IGFsbG93ZWQtc3B1cmlvdXMgMSkpKSkpCisKKyhkZWZpbmUqICh3cml0YWJsZS90aW1lb3V0IHBv cnQgIzprZXkgKGFsbG93ZWQtc3B1cmlvdXMgNSkpCisgICJEb2VzIHdhaXRpbmcgZm9yIHJlYWRh YmlsaXR5IG5vdCB0aW1lLW91dD8KK0FsbG93IEB2YXJ7YWxsb3dlZC1zcHVyaW91c30gc3B1cmlv dXMgd2FrZXVwcy4iCisgIChhbmQgKHBlcmZvcm0tb3BlcmF0aW9uCisgICAgICAgKHdpdGgtdGlt ZW91dAorCSh3cmFwLW9wZXJhdGlvbiAod2FpdC11bnRpbC1wb3J0LXdyaXRhYmxlLW9wZXJhdGlv biBwb3J0KQorCQkJKGxhbWJkYSAoKSAjdCkpCisJIzp3cmFwIChsYW1iZGEgKCkgI2YpKSkKKyAg ICAgICAob3IgKDw9IChwayAnc3B1cmlvdXMvd3JpdGFibGUgYWxsb3dlZC1zcHVyaW91cykgMCkK KwkgICAod3JpdGFibGUvdGltZW91dCBwb3J0ICM6YWxsb3dlZC1zcHVyaW91cworCQkJICAgICAo LSBhbGxvd2VkLXNwdXJpb3VzIDEpKSkpKQorCis7OyBUZXN0czoKKzs7ICAqIHdhaXQtdW50aWwt cG9ydC1yZWFkYWJsZS1vcGVyYXRvbiAvIHdhaXQtdW50aWwtcG9ydC13cml0YWJsZS1vcGVyYXRp b24KKzs7ICAgIGJsb2NrcyBpZiB0aGUgcG9ydCBpc24ndCByZWFkeSBmb3IgaW5wdXQgLyBvdXRw dXQuCis7OworOzsgICAgVGhpcyBpcyB0ZXN0ZWQgd2l0aCBhIHBpcGUgKHJlYWQgJiB3cml0ZSkK Kzs7ICAgIGFuZCBhIGxpc3RlbmluZyBzb2NrZXQgKHJlYWQsIG9yIGFjY2VwdCBpbiB0aGlzIGNh c2UpLgorOzsKKzs7ICAgIER1ZSB0byB0aGUgcG9zc2liaWxpdHkgb2Ygc3B1cmlvdXMgd2FrZXVw cywKKzs7ICAgIGEgbGltaXRlZCBmZXcgc3B1cmlvdXMgd2FrZXVwcyBhcmUgdG9sZXJhdGVkLgor OzsKKzs7ICAqIHRoZXNlIG9wZXJhdGlvbnMgc3VjY2VlZCBpZiB0aGUgcG9ydCBpcyByZWFkeSBm b3IgaW5wdXQgLyBvdXRwdXQuCis7OworOzsgICAgVGhlc2UgYXJlIGFnYWluIHRlc3RlZCB3aXRo IGEgcGlwZSBhbmQgYSBsaXN0ZW5pbmcgc29ja2V0Cis7OworOzsgQmxvY2tpbmcgaXMgZGV0ZWN0 ZWQgd2l0aCBhIHNtYWxsIHRpbWUtb3V0LgorCisoZGVmaW5lIChtYWtlLWxpc3RlbmluZy1zb2Nr ZXQpCisgIChsZXQgKChzZXJ2ZXIgKHNvY2tldCBQRl9JTkVUIFNPQ0tfREdSQU0gMCkpKQorICAg IChiaW5kIHNlcnZlciBBRl9JTkVUIElOQUREUl9MT09QQkFDSyAwKQorICAgIHNlcnZlcikpCisK KyhsZXQgKChzIChtYWtlLWxpc3RlbmluZy1zb2NrZXQpKSkKKyAgKGFzc2VydC1ydW4tZmliZXJz LXJldHVybnMgKCNmKQorCQkJICAgICAocmVhZGFibGUvdGltZW91dCBzKSkKKyAgKGFzc2VydC1l cXVhbCAjZiAocmVhZGFibGUvdGltZW91dCBzKSkKKyAgKGNsb3NlIHMpKQorCisoZGVmaW5lLXN5 bnRheC1ydWxlICh3aXRoLXBpcGVzIChBIEIpIGV4cCBleHAqIC4uLikKKyAgKGxldCogKChwaXBl cyAocGlwZSkpCisJIChBIChjYXIgcGlwZXMpKQorCSAoQiAoY2RyIHBpcGVzKSkpCisgICAgZXhw IGV4cCogLi4uCisgICAgKGNsb3NlIEEpCisgICAgKGNsb3NlIEIpKSkKKworKHdpdGgtcGlwZXMg KEEgQikKKyAgKHNldHZidWYgQSAnbm9uZSkKKyAgKHNldHZidWYgQiAnbm9uZSkKKyAgKGFzc2Vy dC1ydW4tZmliZXJzLXJldHVybnMgKCNmKQorCQkJICAgICAocmVhZGFibGUvdGltZW91dCBBKSkK KyAgKGFzc2VydC1lcXVhbCAjZiAocmVhZGFibGUvdGltZW91dCBBKSkKKworICA7OyBYWFggd2h5 IGRvZXMgdGhpcyBoYW5nPyAgU2hvdWxkbid0IHRoZXJlCisgIDs7IGJlIGEgdGltZS1vdXQ/Cisg IChhc3NlcnQtcnVuLWZpYmVycy1yZXR1cm5zICgjZikKKwkJCSAgICAgKHdyaXRhYmxlL3RpbWVv dXQgQSkpCisgIChhc3NlcnQtZXF1YWwgI2YgKHdyaXRhYmxlL3RpbWVvdXQgQSkpCisgIAorICAp CisKKyhleGl0IChpZiBmYWlsZWQ/IDEgMCkpCisKKzs7IExvY2FsIFZhcmlhYmxlczoKKzs7IGV2 YWw6IChwdXQgJ3dpdGgtcGlwZXMgJ3NjaGVtZS1pbmRlbnQtZnVuY3Rpb24gMSkKKzs7IEVuZDoK LS0gCjIuMzAuMAoK --=-+lgKUNvdLeiiMQTpEfMu-- --=-vqwUSW17K9K7+toozacg Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iI0EABYIADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYClNxxccbWF4aW1lZGV2 b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7shDAP4r2y8/Cc75H1O8kaR//FWXern1 IIPaspcZr9AMx+ml7wEAwRIJ2ryMlhhwnsmOEEig4zARkOlJMcpPziz1prwHCw4= =mjui -----END PGP SIGNATURE----- --=-vqwUSW17K9K7+toozacg--