From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by c5ff346549e7 (Postfix) with ESMTPS id BBACC5D5 for ; Tue, 27 Oct 2020 08:44:49 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.77,423,1596492000"; d="scan'208,217";a="474460932" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 27 Oct 2020 09:44:48 +0100 Received: by sympa.inria.fr (Postfix, from userid 20132) id 2F7E8E0279; Tue, 27 Oct 2020 09:44:48 +0100 (CET) Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id E3058E020B for ; Tue, 27 Oct 2020 09:44:42 +0100 (CET) Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=Pass smtp.pra=alan.schmitt@polytechnique.org; spf=Pass smtp.mailfrom=SRS0=3Ij9=EC=polytechnique.org=alan.schmitt@bounces.m4x.org; spf=Pass smtp.helo=postmaster@mx1.polytechnique.org IronPort-PHdr: =?us-ascii?q?9a23=3AtrF3UhZuoQzvGtWYZfC8hNv/LSx+4OfEezUN459i?= =?us-ascii?q?sYplN5qZps++Yh7h7PlgxGXEQZ/co6odzbaP7OawCSdZuMbJmUtBWaQEbwUCh8?= =?us-ascii?q?QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYdFRrlKAV6?= =?us-ascii?q?OPn+FJLMgMSrzeCy/IDYbxlViDanbr5+MRe7oR/Su8QVjoduN7s9xxjUqXZUZu?= =?us-ascii?q?pawn9lK0iOlBjm/Mew+5Bj8yVUu/0/8sNLTLv3caclQ7FGFToqK2866tHluhnF?= =?us-ascii?q?VguP+2ATUn4KnRpSAgjK9w/1U5HsuSbnrOV92S2aPcrrTbAoXDmp8qlmRAP0hC?= =?us-ascii?q?oBKjU293zZitFrjKJDvh2uuwB/zYDTYIGQLvV+f6Xdds4eSWdOWstdUipMDoO/?= =?us-ascii?q?YYsJEeoBPP1Yr4jmqFsKsxS1GAetBOT1yjBVnX/9wKk23uo9HQ3D2gErAtAAv2?= =?us-ascii?q?nOrNjtNKkcT/27wqfLwzrMc/xbwi3y5JTSfx07vf2AQbB9fMzMwkcvDQPFiVCQ?= =?us-ascii?q?pJT5MjORzOsNtXWQ4fd8WuKvjm4nqh1xoiSyzcorkIbJgpgaylbe+SVi3Ik1Jd?= =?us-ascii?q?i4SE9nYd64C5ZQryaaN492Q8M+XW5npCY6yrsHuZ6iYSgF1o4rxxnFa/yIaoWF?= =?us-ascii?q?5A/oW+mNLzlinn1lZK6/iAio8Uim0uDxWde53VJJoydYltTBuHAD2hjT58WJVv?= =?us-ascii?q?dw/kev1CqA2g3d5OxJIkM5mLTGJ5M/w7M9lJUevEDHEyH5lkv7gq+Ye0M58eam?= =?us-ascii?q?7OTnZ6/ppp6aN4JskgHxLLgums2jAesmKggOWG2b+eGi27H5+032XqlKguUxkq?= =?us-ascii?q?bFqp/aIMAbqrS+Aw9P3YYv8xm/Dza60NQYgHkIN0hJdw6Aj4jsI13OOu73Au2i?= =?us-ascii?q?jFSwkDdk2e3JPrr9DZXWNHTDkbDhca5y605d1Aozzc1f6IlOBrEAJ/L/Qk7xtN?= =?us-ascii?q?rCDh84KQO42ejnCM9l2oMZRW2AGKqZMKfKsV+S4eIjOfWDZIgQuDrlMPgl4OPu?= =?us-ascii?q?jWUlllADc6mp2oEXaH+mEfh8JUWWf2bsjs8fHmcQpAoxVvDqiFybUT5OeXm+Rb?= =?us-ascii?q?4z5jEjBIKnEIjCRoStgLib0Ce8BJ1WaWZLAU2PH3fwb4iIRukAZSaILsN8jjAJ?= =?us-ascii?q?WqKtRoE92R20ugL3xKJrIvfa9yAbr57u0Nl46/fcmBwx7zB4EsuQ33yLQmpphG?= =?us-ascii?q?0HXSU207p6oUFlyleMz6x4g/tAGNxW6PJFTx02NYbbz+x+C9HyRhzOccuJSFag?= =?us-ascii?q?Q9WmGCwxQcwrz98JeUZ9FM2ujhHF3yW0H78Yj6GHCIIw/67GwnT9O8lwx2zI2a?= =?us-ascii?q?U9lVUrTMRCOXWjhqFl9gjTA4DJk1+el6avbakSwTLD+nqfwWeWskxWUwxwXKHd?= =?us-ascii?q?UH4QeEbbtcz55kTGT76uFbQoLBdOyc6EKqtLc93pkEtJSO3kONTEbGK8g32/BR?= =?us-ascii?q?KSybOKdobqYHkS3CXYCEgFjwAT4W2LOhM5Bie8pWLRECJhFUn1b0Pp/uR/p2m3?= =?us-ascii?q?TkguzwGFd0Fhzaa6+gYJhfyATPMexq4Ltz0kqzVwBVq929PWC8Gcpwd6Z6VdYd?= =?us-ascii?q?Y94E9d2m7Dtgx9OIagL6F4iVIEfQR3pRCm6xIiQIFfl4Ji+Hc1yiJ2NqTe1l5d?= =?us-ascii?q?IXfQl5vvPPefYj354xaHb6/NxkqY0dqH/qNJ7+43/RGrtwisEg8m8m57+9hTyX?= =?us-ascii?q?qVoJvQSEIZVpfpekI27ARh4bbAaCgh7ofa0m0qPLTnnCXF3ocAAOIjgi2rf9Je?= =?us-ascii?q?LL/MQAb2GstcHMOuLe02h3CxaRYVIO1Z9Kg1Jt6rMfyc1/j4b65bgDu6gDEfs8?= =?us-ascii?q?hG2UWW+n8jG7eVjaZA+OmR2068bxm5jFqltZqsy4VUPHcKGW6u1SXvBIhQf7B/?= =?us-ascii?q?O4ERBjX3epHl9pBFn5foHkVg2hu7HVpfiZ2xfh6Dc1H23QtRzFka53u9lnnhlm?= =?us-ascii?q?0mo3QStqOamRf27aHnfRsDNHRMQTA9313rPI6/gstcWRS4KQ8zm0n86A=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0AkAwCw3ZdffSIeaIFgAR0BAQsSDIIRg?= =?us-ascii?q?SFSBkABXlYyLIQ8iQWLIIVEkWaBEQNQEAEDAQ0YAQ4FAQIEAQGBVYJ1AheBdQI?= =?us-ascii?q?eBgEFMxMCEAEBBQEBAQIBAwMEARMBAQsUCIYRDEMBEAGBYgwMAwODJQEYCQQGP?= =?us-ascii?q?gIlIwMUAQYDAgQNARcBFAoXARIaAoI/FTeCfAUKiiCcBX8zhD4BAwIOAwEOCSa?= =?us-ascii?q?BIoJagUINAhN/FwGFUU6BDoF4BoQND4FNP4ERgmJsgkUMCwEBAQEBARWBEQERA?= =?us-ascii?q?gEGFA8tgmEXgkgEkBELGQQlii6JN4IqkG4rB4JugRAEC4ZlgQKLF4N1gwyDF4E?= =?us-ascii?q?qhDGYbCGTHoF9hgt+CIFohgyLCIRXgUEqgQpwMxowQ4I1ATMJYA2RaCiBPoEmg?= =?us-ascii?q?XU7hRQtAkAzAgEBBy0CBgEJAQEDCXUBAQUTCwGCMIohXAEB?= X-IPAS-Result: =?us-ascii?q?A0AkAwCw3ZdffSIeaIFgAR0BAQsSDIIRgSFSBkABXlYyLIQ?= =?us-ascii?q?8iQWLIIVEkWaBEQNQEAEDAQ0YAQ4FAQIEAQGBVYJ1AheBdQIeBgEFMxMCEAEBB?= =?us-ascii?q?QEBAQIBAwMEARMBAQsUCIYRDEMBEAGBYgwMAwODJQEYCQQGPgIlIwMUAQYDAgQ?= =?us-ascii?q?NARcBFAoXARIaAoI/FTeCfAUKiiCcBX8zhD4BAwIOAwEOCSaBIoJagUINAhN/F?= =?us-ascii?q?wGFUU6BDoF4BoQND4FNP4ERgmJsgkUMCwEBAQEBARWBEQERAgEGFA8tgmEXgkg?= =?us-ascii?q?EkBELGQQlii6JN4IqkG4rB4JugRAEC4ZlgQKLF4N1gwyDF4EqhDGYbCGTHoF9h?= =?us-ascii?q?gt+CIFohgyLCIRXgUEqgQpwMxowQ4I1ATMJYA2RaCiBPoEmgXU7hRQtAkAzAgE?= =?us-ascii?q?BBy0CBgEJAQEDCXUBAQUTCwGCMIohXAEB?= X-IronPort-AV: E=Sophos;i="5.77,423,1596492000"; d="scan'208,217";a="362850419" X-MGA-submission: =?us-ascii?q?MDGCgCHXQbBg2If+LuX8Rfk0u2uHUjFvVe4Re3?= =?us-ascii?q?abSsQWWiDhY7zXur64IOVO4IUJuvaMR6azqTEV1VSTjOoTrZe2pH1oJI?= =?us-ascii?q?4sGwa0ut8pS/BJKS6k+UbIA/SYDnv/dNmdtgY9rH2wR+17p4uyWB9tgE?= =?us-ascii?q?Cm1bpnoqCbMDdDunuiae2XDw=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Oct 2020 09:43:52 +0100 Received: from set (eduroam-141b.sophia.inria.fr [138.96.48.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ssl.polytechnique.org (Postfix) with ESMTPSA id 5369D561236; Tue, 27 Oct 2020 09:43:51 +0100 (CET) From: Alan Schmitt To: "lwn" , "cwn" , caml-list@inria.fr, comp@lists.orbitalfox.eu Date: Tue, 27 Oct 2020 09:43:50 +0100 Message-ID: <87wnzchxdl.fsf@m4x.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Oct 27 09:43:52 2020 +0100 (CET)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.018736, queueID=CCE7F56123D X-Org-Mail: alan.schmitt.1995@polytechnique.org Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News Reply-To: Alan Schmitt X-Loop: caml-list@inria.fr X-Sequence: 18274 Errors-To: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdzLCBmb3IgdGhlIHdl ZWsgb2YgT2N0b2JlciAyMCB0byAyNywNCjIwMjAuDQoNClRhYmxlIG9mIENvbnRlbnRzDQrilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KQmlzZWN0 X3BweCwgdGhlIGNvdmVyYWdlIHRvb2wsIG5vdyBoYXMgZXhjZWxsZW50IGludGVncmF0aW9uIHdp dGggRHVuZQ0KSnNfb2Zfb2NhbWwgaW4gdGhlIFZTQ29kZSBPQ2FtbCBQbGF0Zm9ybQ0KVHJhaW5p bmcgU2Vzc2lvbnMgZm9yICJGYXN0IFRyYWNrIHRvIE9DYW1sIiBhbmQgIkV4cGVydCBPQ2FtbCIg aW4gUGFyaXMgKDIzLTI2IE5vdmVtYmVyIDIwMjApDQpTZXQgdXAgT0NhbWwgMS4xLjINClNldCB1 cCBPQ2FtbCAxLjEuMw0KRmlyc3QgcmVsZWFzZSBvZiBGU01MDQpRcmMgMC4xLjAsIGEgUVIgY29k ZSBlbmNvZGVyDQpjdW11bHVzIDAuMC4xDQpCcnIgMC4wLjEsIGEgdG9vbGtpdCBmb3IgcHJvZ3Jh bW1pbmcgYnJvd3NlcnMNCk9sZCBDV04NCg0KDQpCaXNlY3RfcHB4LCB0aGUgY292ZXJhZ2UgdG9v bCwgbm93IGhhcyBleGNlbGxlbnQgaW50ZWdyYXRpb24gd2l0aCBEdW5lDQrilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNj dXNzLm9jYW1sLm9yZy90L2Jpc2VjdC1wcHgtdGhlLWNvdmVyYWdlLXRvb2wtbm93LWhhcy1leGNl bGxlbnQtaW50ZWdyYXRpb24td2l0aC1kdW5lLzY2MzQvMT4NCg0KDQpBbnRvbiBCYWNoaW4gYW5u b3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIANCg0KICBbKkJpc2VjdF9wcHgqXSwgdGhlIGNvdmVyYWdlIHRvb2ws IGhhcyBqdXN0IGhhZCBpdHMgWzIuNS4wXSByZWxlYXNlLA0KICBpbiB3aGljaCB0aGUgbWFpbiBh ZGRpdGlvbiBpcyBhIHZlcnkgbmVhdCBpbnRlZ3JhdGlvbiB3aXRoIER1bmU6DQoNCiAg4pSM4pSA 4pSA4pSA4pSADQogIOKUgiBkdW5lIHJ1bnRlc3QgLS1pbnN0cnVtZW50LXdpdGggYmlzZWN0X3Bw eCAtLWZvcmNlDQogIOKUlOKUgOKUgOKUgOKUgA0KDQogIFRoaXMgdXNlcyB0aGUgbmV3IFtpbnN0 cnVtZW50YXRpb24gc3VwcG9ydF0gYWRkZWQgaW4gRHVuZSAyLjcuMCwgYW5kDQogIGlzIGEgY29u c2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgdGhlIGR1YmlvdXMgbWV0aG9kcyBCaXNlY3QgYW5k IGl0cw0KICB1c2VycyB3ZXJlIHByZXZpb3VzbHkgZm9yY2VkIHRvIHJlbHkgb24gOikNCg0KICBJ dCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIGVkaXQgYGR1bmUnIGZpbGVzIGZvciBhIHJlbGVh c2UsIGFzDQogIEJpc2VjdCBvbmx5IGJlY29tZXMgYSBkZXBlbmRlbmN5IG9mIHlvdXIgcHJvamVj dCB3aGVuDQogIGAtLWluc3RydW1lbnQtd2l0aCBiaXNlY3RfcHB4JyBpcyBzdXBwbGllZCBvbiB0 aGUgRHVuZSBjb21tYW5kIGxpbmUsDQogIHdoaWNoIGlzIG9ubHkgZHVyaW5nIGRldmVsb3BtZW50 IGFuZCBpbiBDSS4gVGhpcyBtYWtlcyBwcm9qZWN0cyByZWFkeQ0KICBmb3IgcmVsZWFzZSBmcm9t IGFueSBjb21taXQuIER1bmUgYWxzbyBub3cga25vd3MgdG8gcmVidWlsZCBhZmZlY3RlZA0KICBm aWxlcyB3aGVuIGluc3RydW1lbnRhdGlvbiBpcyB0dXJuZWQgb24gb3Igb2ZmLCBzbyB5b3UgZG9u J3QgaGF2ZSB0bw0KICBtYW51YWxseSBydW4gYGR1bmUgY2xlYW4nIGluIGJldHdlZW4uIEV2ZXJ5 dGhpbmcganVzdCB3b3JrcyB0aGUgd2F5IGl0DQogIHNob3VsZC4NCg0KICBTZWUgdGhlIHVwZGF0 ZWQgW2luc3RydWN0aW9uc10gZm9yIGFsbCB0aGUgZGV0YWlscyBvbiBob3cgdG8gdXNlIHRoaXMN CiAgaW50ZWdyYXRpb24uDQoNCiAgSSd2ZSBhbHNvIGFkYXB0ZWQgW0xhbWJkYSBTb3VwXSBhcyBh IHNpbXBsZSBmdWxsLXByb2plY3QgZXhhbXBsZS4gU2VlDQogIGl0cyBbYG9wYW0nXSwgW2BkdW5l LXByb2plY3QnXSwgW2BkdW5lJ10sIGFuZCBbYE1ha2VmaWxlJ10uDQoNCiAgQmlzZWN0X3BweCBz dGlsbCBzdXBwb3J0cyBhbGwgdGhlIG9sZGVyIGludGVncmF0aW9ucywgc28gaWYgeW91IGhhdmUN CiAgYW4gZXhpc3Rpbmcgc2V0dXAsIHlvdSBkb24ndCBoYXZlIHRvIGVkaXQgaXQuIFN1cHBvcnQg bWF5IGV2ZW50dWFsbHkNCiAgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLCBob3dldmVyLCBzbyBJ IGVuY291cmFnZSB1c2VycyB0byBncmFkdWFsbHkNCiAgdXBkYXRlLg0KDQogIFNlZSB0aGUgZnVs bCBbY2hhbmdlbG9nXSBmb3IgaW5mb3JtYXRpb24gb24gYnVncyBmaXhlZCBieSB0aGUgcmVsZWFz ZS4NCg0KICBUaGFua3MgdG8gdGhlIER1bmUgdGVhbSBmb3IgYWRkaW5nIGAtLWluc3RydW1lbnQt d2l0aCcsIHRvIEB1bmR1IGZvcg0KICBzdXBwb3J0aW5nIGl0IG9uIHRoZSBCaXNlY3Qgc2lkZSwg YW5kIHRvIGFsbCB0aGUgQmlzZWN0X3BweCB1c2VycyBhbmQNCiAgY29udHJpYnV0b3JzIQ0KDQog IEhhcHB5IHRlc3RpbmchDQoNCiAgPGh0dHBzOi8vYXdzMS5kaXNjb3Vyc2UtY2RuLmNvbS9zdGFu ZGFyZDExL3VwbG9hZHMvb2NhbWwvb3JpZ2luYWwvMlgvMS8xOTExYWRjNmFmODk4YjZmNGVmZDdk YzY5ZDJjMWY5MDY5OTAzMWJhLmdpZj4NCg0KICA8aHR0cHM6Ly9naXRodWIuY29tL2FhbnRyb24v YmlzZWN0X3BweD4NCg0KDQpbKkJpc2VjdF9wcHgqXSA8aHR0cHM6Ly9naXRodWIuY29tL2FhbnRy b24vYmlzZWN0X3BweD4NCg0KWzIuNS4wXSA8aHR0cHM6Ly9naXRodWIuY29tL2FhbnRyb24vYmlz ZWN0X3BweC9yZWxlYXNlcy90YWcvMi41LjA+DQoNCltpbnN0cnVtZW50YXRpb24gc3VwcG9ydF0N CjxodHRwczovL2R1bmUucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2luc3RydW1lbnRhdGlvbi5o dG1sP2hpZ2hsaWdodD1pbnN0cnVtZW50LXdpdGg+DQoNCltpbnN0cnVjdGlvbnNdIDxodHRwczov L2dpdGh1Yi5jb20vYWFudHJvbi9iaXNlY3RfcHB4I0R1bmU+DQoNCltMYW1iZGEgU291cF0gPGh0 dHBzOi8vZ2l0aHViLmNvbS9hYW50cm9uL2xhbWJkYXNvdXA+DQoNCltgb3BhbSddDQo8aHR0cHM6 Ly9naXRodWIuY29tL2FhbnRyb24vbGFtYmRhc291cC9ibG9iL2EwY2JmNTRiZjlhZmZkYTAwNDU1 YzU0MzY5ZTQ3M2I5MDU0NTgxMTQvbGFtYmRhc291cC5vcGFtI0wxNy1MMjI+DQoNCltgZHVuZS1w cm9qZWN0J10NCjxodHRwczovL2dpdGh1Yi5jb20vYWFudHJvbi9sYW1iZGFzb3VwL2Jsb2IvbWFz dGVyL2R1bmUtcHJvamVjdCNMMT4NCg0KW2BkdW5lJ10NCjxodHRwczovL2dpdGh1Yi5jb20vYWFu dHJvbi9sYW1iZGFzb3VwL2Jsb2IvYTBjYmY1NGJmOWFmZmRhMDA0NTVjNTQzNjllNDczYjkwNTQ1 ODExNC9zcmMvZHVuZSNMNz4NCg0KW2BNYWtlZmlsZSddDQo8aHR0cHM6Ly9naXRodWIuY29tL2Fh bnRyb24vbGFtYmRhc291cC9ibG9iL2EwY2JmNTRiZjlhZmZkYTAwNDU1YzU0MzY5ZTQ3M2I5MDU0 NTgxMTQvTWFrZWZpbGUjTDE1Pg0KDQpbY2hhbmdlbG9nXSA8aHR0cHM6Ly9naXRodWIuY29tL2Fh bnRyb24vYmlzZWN0X3BweC9yZWxlYXNlcy90YWcvMi41LjA+DQoNCg0KSnNfb2Zfb2NhbWwgaW4g dGhlIFZTQ29kZSBPQ2FtbCBQbGF0Zm9ybQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBz Oi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9qcy1vZi1vY2FtbC1pbi10aGUtdnNjb2RlLW9jYW1sLXBs YXRmb3JtLzY2MzUvMT4NCg0KDQpNYXggTEFOVEFTIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSSBqdXN0 IGZpbmlzaGVkIGEgd3JpdGUtdXAgYWJvdXQgW3ZzY29kZS1vY2FtbC1wbGF0Zm9ybV0ncyByZWNl bnQNCiAgdHJhbnNpdGlvbiB0byBKc19vZl9vY2FtbDoNCiAgPGh0dHBzOi8vbW54bi5naXRodWIu aW8vYmxvZy9vY2FtbC92c2NvZGUtanNvby8+DQoNCiAgSSBjYW4gYW5zd2VyIGFueSBxdWVzdGlv bnMgaGVyZS4NCg0KICBUaGlzIGlzIGFsc28gbXkgZmlyc3QgdGVjaG5pY2FsIGJsb2cgcG9zdCwg c28gYW55IGNvbnN0cnVjdGl2ZQ0KICBjcml0aWNpc20gb3IgY29tbWVudHMgYWJvdXQgbXkgd3Jp dGluZyB3b3VsZCBiZSB2ZXJ5IGhlbHBmdWwuDQoNCg0KW3ZzY29kZS1vY2FtbC1wbGF0Zm9ybV0N CjxodHRwczovL2dpdGh1Yi5jb20vb2NhbWxsYWJzL3ZzY29kZS1vY2FtbC1wbGF0Zm9ybS8+DQoN Cg0KVHJhaW5pbmcgU2Vzc2lvbnMgZm9yICJGYXN0IFRyYWNrIHRvIE9DYW1sIiBhbmQgIkV4cGVy dCBPQ2FtbCIgaW4gUGFyaXMgKDIzLTI2IE5vdmVtYmVyIDIwMjApDQrilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0 cHM6Ly9zeW1wYS5pbnJpYS5mci9zeW1wYS9hcmMvY2FtbC1saXN0LzIwMjAtMTAvbXNnMDAwMTgu aHRtbD4NCg0KDQpMYXVyw6huZSBHaWJhdWQgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0K ICBBdCBPQ2FtbFBybywgd2Ugd2lsbCBiZSBvcmdhbml6aW5nIDIgY3Jvc3MtY29tcGFueSB0cmFp bmluZyBzZXNzaW9ucw0KICBpbiBGcmVuY2guIEJvdGggc2Vzc2lvbnMgaW50ZXJsZWF2ZSB0aGVv cnkgYW5kIHByYWN0aWNlLiBZb3UnbGwgaGF2ZQ0KICB0aW1lIHRvIGFzayB5b3VyIHNwZWNpZmlj IHF1ZXN0aW9ucyBhbmQgZ2V0IHBlcnNvbmFsaXplZCBmZWVkYmFjayBvbg0KICB5b3VyIHByb2dy YW1zLg0KDQogIOKAoiBPdXIgQmVnaW5uZXIgc2Vzc2lvbiB3aWxsIGFsbG93IGRldmVsb3BlcnMg dG8gYnVpbGQgdXBvbiB0aGVpcg0KICAgIGV4cGVyaWVuY2Ugb2Ygb3RoZXIgcHJvZ3JhbW1pbmcg bGFuZ3VhZ2VzIChzdWNoIGFzIEMsIEMrKywgUHl0aG9uLA0KICAgIEMjIG9yIEphdmEpIHRvIHBy b2dyYW0gY29uZmlkZW50bHkgaW4gT0NhbWwuIEZlZWwgZnJlZSB0byBzaGFyZSB0aGUNCiAgICBp bmZvIHdpdGggeW91ciBjb3dvcmtlcnMgb3IgeW91ciBuZXR3b3JrIQ0KICDigKIgT3VyIOKAnEV4 cGVydCBPQ2FtbOKAnSB0cmFpbmluZyB3aWxsIGFsbG93IHlvdSB0byBtYXN0ZXIgT0NhbWzigJlz DQogICAgYWR2YW5jZWQgZmVhdHVyZXMgc3VjaCBhcyBpdHMgdHlwZS1zeXN0ZW0sIE9DYW1s4oCZ cyBvcGVuIHNvdXJjZSB0b29scw0KICAgIGFuZCBsaWJyYXJpZXMsIGFuZCBob3cgdG8gd3JpdGUg Y29tcGFjdCBhbmQgZWZmaWNpZW50IGNvZGUuDQoNCiAgTW9yZSBpbmZvIG9uIHRoZSBwcm9ncmFt IGFuZCBwcmVyZXF1aXNpdGVzIG9uDQogIDxodHRwOi8vd3d3Lm9jYW1scHJvLmNvbS90cmFpbmlu Zy1vY2FtbHByby8+IG9yIGFzayBhd2F5IChhbnN3ZXIgdGhpcw0KICBlbWFpbCBvciB3cml0ZSBh dCBjb250YWN0QG9jYW1scHJvLmNvbSkuDQoNCiAgV2hlbj8gVGhlIEJlZ2lubmVyIHNlc3Npb24g aXMgc2NoZWR1bGVkIGZvciBOb3ZlbWJlciAyMy0yNCwgMjAyMC4gVGhlDQogIEV4cGVydCBzZXNz aW9uIHdpbGwgYmUgb24gTm92ZW1iZXIgMjUtMjYsIDIwMjAuDQoNCiAgV2hlcmU/IFBhcmlzIDE0 LCBpbiBPQ2FtbFBybydzIG9mZmljZS4NCg0KICBIb3c/IFJlZ2lzdGVyIG9uOg0KICA8aHR0cHM6 Ly93d3cub2NhbWxwcm8uY29tL3ByZS1pbnNjcmlwdGlvbi1hLXVuZS1zZXNzaW9uLWRlLWZvcm1h dGlvbi1pbnRlci1lbnRyZXByaXNlcy8+DQoNCiAgV2UgY2FuIGFsc28gb3JnYW5pemUgY3VzdG9t IGFuZCBvbi1zaXRlIHNlc3Npb25zIHVwb24gcmVxdWVzdC4NCg0KDQpTZXQgdXAgT0NhbWwgMS4x LjINCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kA0KDQogIEFyY2hpdmU6IDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLXNldC11cC1v Y2FtbC0xLTEtMi82NjQzLzE+DQoNCg0KU29yYSBNb3JpbW90byBhbm5vdW5jZWQNCuKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgA0KDQogIFRoaXMgcmVsZWFzZSBjb250YWlucyB0aGVzZSBjaGFuZ2VzOg0KDQogIOKAoiBB ZGQgdGhlIEN5Z3dpbiBzZXR1cCB0byBhIGtub3duIGxvY2F0aW9uIGZvciBsYXRlciBzdGVwcw0K ICDigKIgQ2hlY2sgaWYgdGhlIHN3aXRjaCBleGlzdHMgYmVmb3JlIGNyZWF0aW5nIHRoZSBzd2l0 Y2gNCg0KICA8aHR0cHM6Ly9naXRodWIuY29tL2F2c20vc2V0dXAtb2NhbWwvcmVsZWFzZXMvdGFn L3YxLjEuMj4NCg0KDQpTZXQgdXAgT0NhbWwgMS4xLjMNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6IDxodHRwczovL2Rp c2N1c3Mub2NhbWwub3JnL3QvYW5uLXNldC11cC1vY2FtbC0xLTEtMy82NjQ0LzE+DQoNCg0KU29y YSBNb3JpbW90byBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFRoaXMgcmVsZWFzZSBjb250 YWlucyB0aGVzZSBjaGFuZ2VzOg0KDQogIOKAoiBVcGRhdGUgdGhlIGBAYWN0aW9ucy9jb3JlJyBw YWNrYWdlIHRvIGFkZHJlc3MgW0NWRS0yMDIwLTE1MjI4XQ0KDQogIDxodHRwczovL2dpdGh1Yi5j b20vYXZzbS9zZXR1cC1vY2FtbC9yZWxlYXNlcy90YWcvdjEuMS4zPg0KDQoNCltDVkUtMjAyMC0x NTIyOF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9hZHZpc29yaWVzL0dIU0EtbWZ3aC01bTIzLWo0Nnc+ DQoNCg0KRmlyc3QgcmVsZWFzZSBvZiBGU01MDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0 cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi1maXJzdC1yZWxlYXNlLW9mLWZzbWwvNjY0NS8x Pg0KDQoNCmpzZXJvdCBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgA0KDQogIFRoaXMgaXMgdG8gYW5ub3VuY2UgdGhlIGZpcnN0IHB1Ymxp YyByZWxlYXNlIG9mIEZTTUwsIGFuIE9DYW1sIGxpYnJhcnkNCiAgZm9yIGRlc2NyaWJpbmcgYW5k IGRlc2NyaWJpbmcgc3luY2hyb25vdXMgZmluaXRlIHN0YXRlIG1hY2hpbmVzLg0KDQogIEZTTUwg aXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgcHJvdmlkZWQgaW4gdGhlIFtS ZnNtXQ0KICBwYWNrYWdlIGZvciB3aGljaA0KDQogIOKAoiB0aGUgc3lzdGVtIGlzIGNvbXBvc2Vk IG9mIGEgc2luZ2xlIEZTTQ0KDQogIOKAoiB0aGlzIEZTTSBoYXMgYSBzaW5nbGUsIGltcGxpY2l0 LCB0cmlnZ2VyaW5nIGV2ZW50ICh0eXBpY2FsbHkgY2FsbGVkDQogICAgdGhlICpjbG9jayogLCBo ZW5jZSB0aGUgdGVybSAqc3luY2hyb25vdXMqIHVzZWQgaW4gdGhlIGRlc2NyaXB0aW9uKQ0KDQog IFRoZSBGU01MIGxpYnJhcnkgcHJvdmlkZXMNCg0KICDigKIgYSB0eXBlIGBGc20udCcgZm9yIGRl c2NyaWJpbmcgRlNNcw0KICAgIOKAoiBwb3NzaWJseSBoYXZpbmcgKmxvY2FsIHZhcmlhYmxlcyoN CiAgICDigKIgZm9yIHdoaWNoICp0cmFuc2l0aW9ucyogLCBpbXBsaWNpdGVseSB0cmlnZ2VyZWQg YnkgYSBjbG9jaywgYXJlDQogICAgICBkZWZpbmVkIGJ5IGEgc2V0IG9mICpib29sZWFuIGd1YXJk cyogYW5kIGEgc2V0IG9mICphY3Rpb25zKg0KDQogIOKAoiBhIHNldCBvZiBQUFggZXh0ZW5zaW9u cyBmb3IgYnVpbGRpbmcgdmFsdWVzIG9mIHR5cGUgYEZzbS50Jw0KDQogIOKAoiBmdW5jdGlvbnMg Zm9yIHByb2R1Y2luZyBhbmQgdmlld2luZyBncmFwaGljYWwgcmVwcmVzZW50YXRpb25zIG9mDQog ICAgRlNNcyBpbiB0aGUgYC5kb3QnIGZvcm1hdA0KDQogIOKAoiBmdW5jdGlvbnMgZm9yIHNhdmlu ZyBhbmQgcmVhZGluZyBGU00gcmVwcmVzZW50YXRpb25zIGluIGZpbGVzIHVzaW5nDQogICAgdGhl IEpTT04gZm9ybWF0DQoNCiAg4oCiIGZ1bmN0aW9ucyBmb3IgcGVyZm9ybWluZyBzaW5nbGUgb3Ig bXVsdGktc3RlcCBzaW11bGF0aW9ucyBvZiBGU01zDQogICAgYW5kIGdlbmVyYXRpbmcgdHJhY2Ug ZmlsZXMgaW4gdGhlIGAudmNkJyBmb3JtYXQgdG8gYmUgdmlld2VkIGJ5IFZDRA0KICAgIHZpZXdl cnMgc3VjaCBhcyBbZ3Rrd2F2ZV0NCg0KICDigKIgZnVuY3Rpb25zIGZvciBnZW5lcmF0aW5nIEMg b3IgVkhETCBjb2RlIGZyb20gYSBGU00gcmVwcmVzZW50YXRpb24NCiAgICAoZm9yIGludGVncmF0 aW9uIGludG8gZXhpc3RpbmcNCiAgY29kZSBhbmQvb3Igc2ltdWxhdGlvbikNCg0KICBGU01MIGlz IGF2YWlsYWJsZSBmcm9tIFtHaXRodWJdIG9yIGFzIGFuIFtPUEFNIHBhY2thZ2VdLg0KDQoNCltS ZnNtXSA8aHR0cDovL2dpdGh1Yi5jb20vanNlcm90L3Jmc20+DQoNCltndGt3YXZlXSA8aHR0cDov L2d0a3dhdmUuc291cmNlZm9yZ2UubmV0Lz4NCg0KW0dpdGh1Yl0gPGh0dHBzOi8vZ2l0aHViLmNv bS9qc2Vyb3QvZnNtbD4NCg0KW09QQU0gcGFja2FnZV0gPGh0dHBzOi8vb3BhbS5vY2FtbC5vcmcv cGFja2FnZXMvZnNtbD4NCg0KDQpRcmMgMC4xLjAsIGEgUVIgY29kZSBlbmNvZGVyDQrilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9j YW1sLm9yZy90L2Fubi1xcmMtMC0xLTAtYS1xci1jb2RlLWVuY29kZXIvNjY0Ny8xPg0KDQoNCkRh bmllbCBCw7xuemxpIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgUVIgY29kZXMgYXJlIHVu c2lnaHRseSDigJMgYSBtaXJyb3Igb2YgdGhlaXIgc3BlY2lmaWNhdGlvbi4gQnV0IHRoZXkNCiAg ZW5hYmxlIGFsbCBzb3J0cyBvZiBuZWF0IHRyaWNrcyBub3cgdGhhdCBzY2FubmVycyBmb3IgdGhl bSBhcmUgaW4gbWFueQ0KICBwb2NrZXRzLg0KDQogIFFyYyBnZW5lcmF0ZSB0aGVtOg0KDQogICAg ICAgIFFyYyBlbmNvZGVzIHlvdXIgZGF0YSBpbnRvIFFSIGNvZGVzLiBJdCBoYXMgYnVpbHQtaW4g UVINCiAgICAgICAgbWF0cml4IHJlbmRlcmVycyBmb3IgU1ZHLCBBTlNJIHRlcm1pbmFsIGFuZCB0 ZXh0Lg0KDQogICAgICAgIFFyYyBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2Uu IEl0IGhhcyBubw0KICAgICAgICBkZXBlbmRlbmNpZXMuDQoNCiAgSG9tZXBhZ2U6IDxodHRwczov L2VycmF0aXF1ZS5jaC9zb2Z0d2FyZS9xcmM+DQogIEFQSSBkb2NzOiA8aHR0cHM6Ly9lcnJhdGlx dWUuY2gvc29mdHdhcmUvcXJjL2RvYy8+IG9yIGBvZGlnIGRvYyBxcmMnDQogIEluc3RhbGw6IGBv cGFtIGluc3RhbGwgcXJjJw0KDQoNCmN1bXVsdXMgMC4wLjENCuKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6IDxodHRwczovL2Rpc2N1c3Mub2NhbWwu b3JnL3QvYW5uLWN1bXVsdXMtMC0wLTEvNjY1NS8xPg0KDQoNClBldHRlciBBLiBVcmtlZGFsIGFu bm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSSB3b3VsZCBsaWtlIHRvIGFu bm91bmNlIGEgbmV3IEZSUCBsaWJyYXJ5IGJ1aWx0IG9uIHRoZSBSZWFjdCBsaWJyYXJ5Lg0KICBU aGUgcHVycG9zZSBvZiBbY3VtdWx1c10gaXMgdG8gaGVscCBvcmdhbml6ZSBjb2RlIHdoaWNoIHdv cmsgb24NCiAgZGlmZmVyZW50aWFsIHVwZGF0ZXMuICBUaGUgbWFpbiB0eXBlIGlzIHRoZSAqY3Vt dWx1cyBzaWduYWwqLCB3aGljaCBpcw0KICBhbmFsb2dvdXMgdG8gYSByZWFjdCBzaWduYWwsIGV4 Y2VwdCB0aGF0IGluZm9ybWF0aW9uIGFib3V0IHRoZQ0KICBkaWZmZXJlbmNlIGZyb20gdGhlIHBy ZXZpb3VzIHZhbHVlIGlzIHByb3ZpZGVkIHRvIGNvbnN1bWVycyBhbG9uZyB3aXRoDQogIHRoZSBu ZXcgdmFsdWUsIHdoZW4gdGhlIGN1bXVsdXMgc2lnbmFsIGNoYW5nZXMuDQoNCiAgU28sIHdoeSBk b2VzIGEgY3VtdWx1cyBzaWduYWwgcHJvdmlkZSBib3RoIHRoZSBzdGF0ZSBhbmQgdGhlDQogIGRp ZmZlcmVuY2UgdG8gZG93bnN0cmVhbSBzaWduYWxzPyAgVGhhdCBpcywgd2hhdCBpcyB0aGUgZGlm ZmVyZW5jZQ0KICBiZXR3ZWVuIHRoZSBmb2xsb3dpbmc6Pw0KICDilIzilIDilIDilIDilIANCiAg 4pSCIHR5cGUgdDEgPSBzdGF0ZSAqIGNoYW5nZSBSZWFjdC5FICAgICAoKiBpbml0aWFsIHZhbHVl IGFuZCBldmVuIG9mIGNoYW5nZXMgKikNCiAg4pSCIHR5cGUgdDIgPSAoc3RhdGUsIGNoYW5nZSkg Q3VtdWx1cy50ICAoKiB0aGUgY3VtdWx1cyBzaWduYWwgKikNCiAg4pSU4pSA4pSA4pSA4pSADQog IFRoZSBmb3JtZXIgdHlwZSBwcmVzdW1lcyB0aGF0IGFmdGVyIHRoZSBjb25zdW1lciBoYXMgcmVj ZWl2ZWQgdGhlDQogIGluaXRpYWwgc3RhdGUsIGl0IHdpbGwgb25seSBuZWVkIHRvIGtub3cgd2hh dCBjaGFuZ2VzIG9uIHN1Y2Nlc3NpdmUNCiAgdXBkYXRlcy4gIFRoaXMgc2VlbXMgcXVpdGUgbmF0 dXJhbC4gIEl0IHdvcmtzIHdlbGwgaWYsIGZvciBpbnN0YW5jZSwNCiAgd2Ugd2FudCB0byByZWNv bnN0cnVjdCBhIHNpZ25hbCBob2xkaW5nIGEgc2V0IG9mIHN0cmluZ3MsIGdpdmVuIGFuDQogIGlu aXRpYWwgc2V0IGFuZCBhIHNlcmllcyBvZiBhZGRpdGlvbnMgYW5kIHJlbW92YWxzOg0KICDilIzi lIDilIDilIDilIANCiAg4pSCIG1vZHVsZSBTdHJpbmdfc2V0ID0gU2V0Lk1ha2UgKFN0cmluZykN CiAg4pSCIA0KICDilIIgdHlwZSAnYSBzZXRfcGF0Y2ggPSBbYEFkZCBvZiBzdHJpbmcgfCBgUmVt b3ZlIG9mIHN0cmluZ10NCiAg4pSCIHR5cGUgJ2EgdXBkYXRlID0gJ2EgLT4gJ2ENCiAg4pSCIA0K ICDilIIgbGV0IHBhdGNoX3N0cmluZ19zZXQgOiBzdHJpbmcgc2V0X3BhdGNoIC0+IFN0cmluZ19z ZXQudCB1cGRhdGUgPSBmdW5jdGlvbg0KICDilIIgIHwgYEFkZCB4IC0+IFN0cmluZ19zZXQuYWRk IHgNCiAg4pSCICB8IGBSZW1vdmUgeCAtPiBTdHJpbmdfc2V0LnJlbW92ZSB4DQogIOKUgiANCiAg 4pSCIGxldCBpbnRlZ3JhdGVfc3RyaW5ncyAoaW5pdCwgY2hhbmdlcykgPQ0KICDilIIgICBSZWFj dC5FLmZvbGQgKGZ1biBsIHAgLT4gcGF0Y2hfc3RyaW5nX3NldCBwIGwpIGluaXQgY2hhbmdlcw0K ICDilJTilIDilIDilIDilIANCiAgQnV0IHdoYXQgaWYgd2Ugd2FudCB0byBtYWludGFpbiBhIHNp Z25hbCBob2xkaW5nIHRoZSBpbnRlcnNlY3Rpb24gb2YNCiAgdHdvIHNldHMgb2Ygc3RyaW5ncz8g IElmIHdlIHRyeSB0byBsaWZ0IHRoZSBpbnRlcnNlY3Rpb24gb3BlcmF0aW9uIHRvDQogIHdvcmsg b24gcGF0Y2hlcywgd2UgZGlzY292ZXIgdGhhdCBsZWFybmluZyBhYm91dCB0aGUgYWRkaXRpb24g b2YgYW4NCiAgZWxlbWVudCB0byBsZWZ0LWhhbmQgc2V0IGlzIG5vdCBzdWZmaWNpZW50IHRvIGRl dGVybWluZSB3aGV0aGVyIHRoZQ0KICBlbGVtZW50IHNoYWxsIHRoZSBhZGRlZCB0byB0aGUgcmVz dWx0aW5nIHNldDsgd2UgYWxzbyBuZWVkIHRvIGtub3cNCiAgd2hldGhlciB0aGUgZWxlbWVudCBp cyBhIG1lbWJlciBvZiB0aGUgcmlnaHQtaGFuZCBzZXQuICBTbywgaW4gdGhpcw0KICBjYXNlIHdl IHdvdWxkIGluc3RlYWQgdXNlIGN1bXVsdXMgc2lnbmFsczoNCiAg4pSM4pSA4pSA4pSA4pSADQog IOKUgiBsZXQgY3UgOiAoU3RyaW5nX3NldC50LCBzdHJpbmcgc2V0X3BhdGNoKSBDdW11bHVzLnQg PSAuLi4NCiAg4pSCIGxldCBjdiA6IChTdHJpbmdfc2V0LnQsIHN0cmluZyBzZXRfcGF0Y2gpIEN1 bXVsdXMudCA9IC4uLg0KICDilIIgbGV0IGN1diA9DQogIOKUgiAgIGxldCBpbml0IHUgdiA9IFN0 cmluZ19zZXQuaW50ZXIgdSB2IGluDQogIOKUgiAgIGxldCBwYXRjaCAodSwgZHUpICh2LCBkdikg cicgPQ0KICDilIIgICAgIChtYXRjaCBkdSwgZHYgd2l0aA0KICDilIIgICAgICB8IE5vbmUsIFNv bWUgeCB3aGVuIFN0cmluZ19zZXQubWVtIHggdSAtPg0KICDilIIgCUN1bXVsdXMuUGF0Y2ggKFN0 cmluZ19zZXQuYWRkIHggcicsIGBBZGQxIHgpDQogIOKUgiAgICAgIC4uLikNCiAg4pSCICAgaW4N CiAg4pSCICAgQ3VtdWx1cy5sMiB+aW5pdCB+cGF0Y2ggY3UgY3YNCiAg4pSU4pSA4pSA4pSA4pSA DQogIEZvciB0aGUgY29tcGxldGUgZXhhbXBsZSwgdXNpbmcgaW50ZWdlcnMgaW5zdGVhZCBvZiBz dHJpbmdzLCBzZWUNCiAgW2B0ZXN0X2lzZWNuLm1sJ10gZnJvbSB0aGUgdGVzdHN1aXRlLg0KDQog IChGb290bm90ZTogSWYgY29uc3VtZXJzIGtub3cgaG93IHRvIGludGVncmF0ZSB0aGUgc3RhdGVz IHRoZXkgZGVwZW5kDQogIG9uLCB0aGV5IGNvdWxkIGluIHByaW5jaXBsZSBrZWVwIHRoZWlyIG93 biByZWNvcmQgb2YgdGhlIGZ1bGwgc3RhdGVzDQogIG9mIHRoZSBhcmd1bWVudHMuICBCdXQgdGhp cyB3b3VsZCBiZSBpbmVmZmljaWVudCBpZiB0aGVyZSBhcmUgbWFueQ0KICBjb25zdW1lcnMsIGFu ZCB0aGVyZSBpcyBhbHNvIGEgc2ltcGxpZmljYXRpb24gb2YgY29kZSBhbmQgcG9zc2libHkNCiAg aW1wcm92ZWQgYWJzdHJhY3Rpb24gaW4gbGV0dGluZyB0aGUgcHJvZHVjZXIgbWFpbnRhaW4gaXRz IG93biBzdGF0ZS4pDQoNCiAgRm9ybWFsbHksIHdlIGNhbiB1bmRlcnN0YW5kIHRoZSBkaWZmZXJl bmNlIGJldHdlZW4gYHQxJyBhbmQgYHQyJyBpbg0KICB0ZXJtcyBvZiBjYWxjdWx1cy4gIEZvciBp bnN0YW5jZSwgdGhlIGRpZmZlcmVudGlhbCBvZiBhIHByb2R1Y3QNCiAgYGQoeMK3eSkgPSBkeMK3 eSArIHjCt2R5JyBjb250YWlucyBhIG1peCBvZiBib3RoIHRoZSBkaWZmZXJlbnRpYWxzIGFuZA0K ICB2YWx1ZXMgb2YgdGhlIHR3byB2YXJpYWJsZXMuICBCdXQgaWYgdGhlIGV4cHJlc3Npb24gaXMg bGluZWFyLCBvbmx5DQogIGRpZmZlcmVudGlhbHMgd2lsbCB3aWxsIG9jY3VyOiBgZChhwrd4ICsg YsK3eSArIGMpID0gYcK3ZHggKyBiwrdkeScuICBTbywNCiAgd2hlbiBgdDEnIGlzIHN1ZmZpY2ll bnQsIHdlIGFyZSBkZWFsaW5nIHdpdGggdGhlIGFuYWxvZ3VlIG9mIGEgbGluZWFyDQogIGZ1bmN0 aW9uLiAgVGhlIGFib3ZlIGV4YW1wbGUgY291bGQgYmUgdHVybmVkIGludG8gYSBsaW5lYXIgb25l IGJ5DQogIG1ha2luZyBgTGFiZWxzLnQnIGEgbXVsdGlzZXQgdHlwZSBhbmQgY29uc2lkZXJpbmcg dGhlIG11bHRpc2V0IHVuaW9uDQogIG9wZXJhdGlvbi4NCg0KICBUaHVzIGZhciB3ZSBvbmx5IGNv bnNpZGVyZWQgcHVyZWx5IGZ1bmN0aW9uYWwgY29kZSwgYnV0IGEgY3VtdWx1cw0KICBzaWduYWwg bWF5IGNob3NlIHRvIG1vZGlmeSBhbmQgcmV0dXJuIHRoZSBzYW1lIHBoeXNpY2FsIHN0YXRlIGR1 cmluZw0KICBhbiB1cGRhdGUuICBBbHNvIG5vdGUgd2hlbiBkZXNpZ25pbmcgdGhlIGRpZmZlcmVu dGlhbCBjb21wb25lbnQgb2YgdGhlDQogIGN1bXVsdXMgc2lnbmFsLCB0aGF0IHdlIG1heSBleHBs b2l0IHRoZSBmYWN0IHRoZSBjb25zdW1lcnMgYWxzbyBtYXkNCiAgaW5zcGVjdCB0aGUgY29ycmVz cG9uZGluZyBuZXcgc3RhdGUuICBDb21iaW5pbmcgdGhlc2UgdHdvIHBvaW50cywgYQ0KICBjdW11 bHVzIHNpZ25hbCBob2xkaW5nIGFuIGFycmF5IG1pZ2h0IGhhdmUgdGhlIHR5cGUgYCgnYSBhcnJh eSwgW2BTZXQNCiAgb2YgaW50IHwgYFJlc2l6ZSBvZiBpbnRdKScuIEhlcmUgdGhlIHN0YXRlIG1h eSBiZSByZXVzZWQgZm9yIGBgU2V0Jw0KICBhbmQgcmVwbGFjZWQgZm9yIGBgUmVzaXplJy4NCg0K ICBPbiBhIHJlbGF0ZWQgbm90LCB0aGVyZSBpcyBhbHNvIHRoZSBbcmVhY3RpdmVEYXRhXSBsaWJy YXJ5IHdoaWNoIGRlYWxzDQogIHdpdGggKGxpbmVhcikgcGF0Y2hpbmcgb2YgY29udGFpbmVycy4N Cg0KICBJIG11c3QgYWxzbyBtZW50aW9uIHRoYXQgdGhlcmUgdGhlcmUgaXMgYW4gW09DYW1sIHBy b2plY3Qgd2l0aCB0aGUNCiAgc2FtZSBuYW1lXSAoZXhjZXB0IGNhc2luZykuIFNvcnJ5IGZvciBu b3QgY2hlY2tpbmcgdGhvcm91Z2hseSBpbg0KICBhZHZhbmNlLiBJIGhvcGUgaXQgaXMgbm90IGFu IGlzc3VlIGluIHByYWN0aXNlLCBvdGhlcndpc2UgdGhlcmUgaXMNCiAgc3RpbGwgdGltZSB0byBy ZW5hbWUgd2hpbGUgdGhlIGxpYnJhcnkgaXMgZnJlc2guDQoNCg0KW2N1bXVsdXNdIDxodHRwczov L2dpdGh1Yi5jb20vcGF1cmtlZGFsL29jYW1sLWN1bXVsdXMvPg0KDQpbYHRlc3RfaXNlY24ubWwn XQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVya2VkYWwvb2NhbWwtY3VtdWx1cy9ibG9iL21hc3Rl ci90ZXN0cy90ZXN0X2lzZWNuLm1sPg0KDQpbcmVhY3RpdmVEYXRhXSA8aHR0cHM6Ly9naXRodWIu Y29tL29jc2lnZW4vcmVhY3RpdmVEYXRhPg0KDQpbT0NhbWwgcHJvamVjdCB3aXRoIHRoZSBzYW1l IG5hbWVdIDxodHRwczovL2dpdGh1Yi5jb20vQ3VtdWx1cy9DdW11bHVzPg0KDQoNCkJyciAwLjAu MSwgYSB0b29sa2l0IGZvciBwcm9ncmFtbWluZyBicm93c2Vycw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tYnJy LTAtMC0xLWEtdG9vbGtpdC1mb3ItcHJvZ3JhbW1pbmctYnJvd3NlcnMvNjYwOC81Pg0KDQoNCkNv bnRpbnVpbmcgdGhpcyB0aHJlYWQsIFlvYW5uIFBhZGlvbGVhdSBhc2tlZCBEYW5pZWwgQsO8bnps aSByZXBsaWVkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICAgICAgICBXaGF0 IGFyZSB0aGUgZGlmZmVyZW5jZXMgd2l0aCB0aGUgZGVmYXVsdCBiaW5kaW5ncw0KICAgICAgICBw cm92aWRlZCBpbiBqc19vZl9vY2FtbCB0byB0aGUgYnJvd3NlciBBUElzIChlLmcuLCBqcy5tbGks DQogICAgICAgIGRvbS5tbGksIGV0Yy4pPw0KDQogIEknbSBub3Qgc3VyZSBleGFjdGx5IHdoYXQg eW91IGFyZSBhc2tpbmcgYnV0Og0KDQogIDEuIElmIHlvdSBhcmUgYXNraW5nIGFib3V0IHRoZSB3 YXkgQVBJIGFyZSBleHBvc2VkOiBgYnJyJyBkb2VzIG5vdA0KICAgICB0eXBlIEphdmFTY3JpcHQn cyBvYmplY3RzIGFzIHBoYW50b20gdHlwZXMuIEl0IHNpbXBseSByZWxpZXMgb24NCiAgICAgT0Nh bWwncyBhYnN0cmFjdCBkYXRhIHR5cGVzIGFuZCBwbGFpbiBmdW5jdGlvbnMuIE1vcmUgYWJvdXQg dGhpcw0KICAgICBjYW4gYmUgZm91bmQgaW4gYnJyJ3MgW0ZGSSBtYW51YWxdIGFuZCBbRkZJIGNv b2tib29rXS4NCiAgMi4gSWYgeW91IGFyZSBhc2tpbmcgYWJvdXQgYmluZGluZyBjb3ZlcmFnZSwg eW91IHNob3VsZCBiZSBhYmxlIHRvIGdldA0KICAgICBhIHNlbnNlIG9mIHdoYXQgaXMgYm91bmQg aW4gYGJycicgW2hlcmVdLg0KDQogIFJlZ2FyZGluZyAyLiBgYnJyJydzIGNvdmVyYWdlIG9mIG1v cmUgcmVjZW50IGJyb3dzZXIgQVBJcyBpcyBicm9hZGVyDQogIGFuZCBtb3JlIGNvbnNpc3RlbnQg dGhhbiBpbiBganNfb2Zfb2NhbWwnIOKAkyBQcm9taXNlIHN1cHBvcnQsIEZldGNoLA0KICBTZXJ2 aWNlIHdvcmtlcnMsIE1lZGlhIGNhcHR1cmUgQVBJcywgV2ViR0wyLCBXZWJjcnlwdG8sIFdlYkF1 ZGlvLA0KICBldGMuIENvbnZlcnNseSBvbGRlciBBUElzIHN1cHBvcnRlZCBpbiBganNfb2Zfb2Nh bWwnIG1heSBub3Qgc3VwcG9ydGVkDQogIGluIGBicnInIChlLmcuICBYTUxIVFRQUmVxdWVzdCku IEJlc2lkZXMgYGJycicncyBjb3ZlcmFnZSBvZiBzb21lIG9mDQogIHRoZSBET00gKmVsZW1lbnQt c3BlY2lmaWMqIGludGVyZmFjZXMgbWF5IGJlIHNoYWxsb3dlciB0aGFuIGluDQogIGBqc19vZl9v Y2FtbCcuIFRoZXJlIGlzIGhvd2V2ZXIgZ29vZCBjb3ZlcmFnZSBmb3IgdGhlDQogIFtgSFRNTE1l ZGlhRWxlbWVudCddLCBbYEhUTUxDYW52YXNFbGVtZW50J10sIFtgSFRNTEZvcm1FbGVtZW50J10g YW5kDQogIFtgSFRNTElucHV0RWxlbWVudCddIGludGVyZmFjZXMuIEZvciB0aGUgcmVzdCB0aGUg W2F0dHJpYnV0ZSBhbmQNCiAgcHJvcGVydHkgQVBJXSBhbmQgdGhlIG9jY2FzaW9uYWwgdHJpdmlh bCBGRkkgbWV0aG9kIGJpbmRpbmcgc2hvdWxkIGJlDQogIGFibGUgdG8gZ2V0IHlvdSBhIGxvbmcg d2F5Lg0KDQoNCltGRkkgbWFudWFsXSA8aHR0cHM6Ly9lcnJhdGlxdWUuY2gvc29mdHdhcmUvYnJy L2RvYy9mZmlfbWFudWFsLmh0bWw+DQoNCltGRkkgY29va2Jvb2tdIDxodHRwczovL2VycmF0aXF1 ZS5jaC9zb2Z0d2FyZS9icnIvZG9jL2ZmaV9jb29rYm9vay5odG1sPg0KDQpbaGVyZV0gPGh0dHBz Oi8vZXJyYXRpcXVlLmNoL3NvZnR3YXJlL2Jyci9kb2MvaW5kZXguaHRtbCNzdXBwb3J0ZWRfYXBp cz4NCg0KW2BIVE1MTWVkaWFFbGVtZW50J10NCjxodHRwczovL2VycmF0aXF1ZS5jaC9zb2Z0d2Fy ZS9icnIvZG9jL0Jycl9pby9NZWRpYS9pbmRleC5odG1sI2VsPg0KDQpbYEhUTUxDYW52YXNFbGVt ZW50J10NCjxodHRwczovL2VycmF0aXF1ZS5jaC9zb2Z0d2FyZS9icnIvZG9jL0Jycl9jYW52YXMv Q2FudmFzL2luZGV4Lmh0bWw+DQoNCltgSFRNTEZvcm1FbGVtZW50J10NCjxodHRwczovL2VycmF0 aXF1ZS5jaC9zb2Z0d2FyZS9icnIvZG9jL0Jycl9pby9Gb3JtL2luZGV4Lmh0bWw+DQoNCltgSFRN TElucHV0RWxlbWVudCddDQo8aHR0cHM6Ly9lcnJhdGlxdWUuY2gvc29mdHdhcmUvYnJyL2RvYy9C cnIvRWwvaW5kZXguaHRtbCNpZmFjZXM+DQoNClthdHRyaWJ1dGUgYW5kIHByb3BlcnR5IEFQSV0N CjxodHRwczovL2VycmF0aXF1ZS5jaC9zb2Z0d2FyZS9icnIvZG9jL0Jyci9FbC9pbmRleC5odG1s I2F0c19hbmRfcHJvcHM+DQoNCg0KT2xkIENXTg0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAg SWYgeW91IGhhcHBlbiB0byBtaXNzIGEgQ1dOLCB5b3UgY2FuIFtzZW5kIG1lIGEgbWVzc2FnZV0g YW5kIEknbGwgbWFpbA0KICBpdCB0byB5b3UsIG9yIGdvIHRha2UgYSBsb29rIGF0IFt0aGUgYXJj aGl2ZV0gb3IgdGhlIFtSU1MgZmVlZCBvZiB0aGUNCiAgYXJjaGl2ZXNdLg0KDQogIElmIHlvdSBh bHNvIHdpc2ggdG8gcmVjZWl2ZSBpdCBldmVyeSB3ZWVrIGJ5IG1haWwsIHlvdSBtYXkgc3Vic2Ny aWJlDQogIFtvbmxpbmVdLg0KDQogIFtBbGFuIFNjaG1pdHRdDQoNCg0KW3NlbmQgbWUgYSBtZXNz YWdlXSA8bWFpbHRvOmFsYW4uc2NobWl0dEBwb2x5dGVjaG5pcXVlLm9yZz4NCg0KW3RoZSBhcmNo aXZlXSA8aHR0cDovL2FsYW4ucGV0aXRlcG9tbWUubmV0L2N3bi8+DQoNCltSU1MgZmVlZCBvZiB0 aGUgYXJjaGl2ZXNdIDxodHRwOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvY3duL2N3bi5yc3M+DQoN CltvbmxpbmVdIDxodHRwOi8vbGlzdHMuaWR5bGwub3JnL2xpc3RpbmZvL2NhbWwtbmV3cy13ZWVr bHkvPg0KDQpbQWxhbiBTY2htaXR0XSA8aHR0cDovL2FsYW4ucGV0aXRlcG9tbWUubmV0Lz4NCg0K --=-=-= Content-Type: text/html; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable OCaml Weekly News

OCaml Weekly News

Previous Week Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of October 20 to 27, 202= 0.

Bisect_ppx, the coverage tool, now has excellent integration w= ith Dune

Anton Bachin announced

Bisect_ppx, th= e coverage tool, has just had its 2.5.0 release, in which the main addition is a very neat integration with Dune:

dune runtest --instrument-with bisect_ppx --fo=
rce

This uses the new instrumentation support added= in Dune 2.7.0, and is a considerable improvement over the dubious methods Bisect and its users were previously f= orced to rely on :)

It is no longer necessary to edit dune files for a release, as= Bisect only becomes a dependency of your project when --instrument-with bisect_ppx is supplied on = the Dune command line, which is only during development and in CI. This makes projects ready for release from an= y commit. Dune also now knows to rebuild affected files when instrumentation is turned on or off, s= o you don't have to manually run dune clean in between. Everything just works the way it sh= ould.

See the updated inst= ructions for all the details on how to use this integration.

I've also adapted Lambda = Soup as a simple full-project example. See its opam, dune-project, dune, and Makefile.

Bisect_ppx still supports all the older integrations, so if you have an exi= sting setup, you don't have to edit it. Support may eventually be removed in the future, however, so I = encourage users to gradually update.

See the full changelog for information on bugs fixed by the release.

Thanks to the Dune team for adding --instrument-with, to @undu= for supporting it on the Bisect side, and to all the Bisect_ppx users and contributors!

Happy testing!

3D"1911adc6af89=

https://github.com/aantro= n/bisect_ppx

Js_of_ocaml in the VSCode OCaml Platform

Max LANTAS announced

I just finished a write-up about vscode-ocam= l-platform's recent transition to Js_of_ocaml: https://mnxn.git= hub.io/blog/ocaml/vscode-jsoo/

I can answer any questions here.

This is also my first technical blog post, so any constructive criticism or= comments about my writing would be very helpful.

Training Sessions for "Fast Track to OCaml" and "Expert OCaml"= in Paris (23-26 November 2020)

Laur=C3=A8ne Gibaud announced

At OCamlPro, we will be organizing 2 cross-company training sessions in Fre= nch. Both sessions interleave theory and practice. You'll have time to ask your specific quest= ions and get personalized feedback on your programs.

  • Our Beginner session will allow developers to build upon their experien= ce of other programming languages (such as C, C++, Python, C# or Java) to p= rogram confidently in OCaml. Feel free to share the info with your coworker= s or your network!
  • Our =E2=80=9CExpert OCaml=E2=80=9D training will allow you to master OC= aml=E2=80=99s advanced features such as its type-system, OCaml=E2=80=99s op= en source tools and libraries, and how to write compact and efficient code.=

More info on the program and prerequisites on http://www.ocamlpro.com/training-ocamlpro/ or= ask away (answer this email or write at contact@ocamlpro.com).

When? The Beginner session is scheduled for November 23-24, 2020. The Exper= t session will be on November 25-26, 2020.

Where? Paris 14, in OCamlPro's office.

How? Register on: https://www.ocamlpro.com/pre-inscription-a-une-sess= ion-de-formation-inter-entreprises/

We can also organize custom and on-site sessions upon request.

Set up OCaml 1.1.2

Sora Morimoto announced

This release contains these changes:

  • Add the Cygwin setup to a known location for later steps
  • Check if the switch exists before creating the switch

https:/= /github.com/avsm/setup-ocaml/releases/tag/v1.1.2

Set up OCaml 1.1.3

Sora Morimoto announced

This release contains these changes:

https:/= /github.com/avsm/setup-ocaml/releases/tag/v1.1.3

First release of FSML

jserot announced

This is to announce the first public release of FSML, an OCaml library for = describing and describing synchronous finite state machines.

FSML is a simplified version of the library provided in the Rfsm package for which

  • the system is composed of a single FSM
  • this FSM has a single, implicit, triggering event (typically called the= clock , hence the term synchronous used in the description= )

The FSML library provides

  • a type Fsm.t for describing FSMs
    • possibly having local variables
    • for which transitions , implicitely triggered by a clock, are d= efined by a set of boolean guards and a set of actions
  • a set of PPX extensions for building values of type Fsm.t=
  • functions for producing and viewing graphical representations of FSMs i= n the .dot format
  • functions for saving and reading FSM representations in files using the= JSON format
  • functions for performing single or multi-step simulations of FSMs and g= enerating trace files in the .vcd format to be viewed by VCD = viewers such as gtkwave
  • functions for generating C or VHDL code from a FSM representation (for = integration into existing

code and/or simulation)

FSML is available from Github or as an OPAM package.

Qrc 0.1.0, a QR code encoder

Daniel B=C3=BCnzli announced

QR codes are unsightly =E2=80=93 a mirror of their specification. But they = enable all sorts of neat tricks now that scanners for them are in many pockets.

Qrc generate them:

Qrc encodes your data into QR codes. It has built-in QR matrix renderers for SVG, ANSI terminal and text.

Qrc is distributed under the ISC license. It has no dependencies.

Homepage: https://erratique.c= h/software/qrc
API docs: https://errati= que.ch/software/qrc/doc/ or odig doc qrc
Install: opam install qrc

cumulus 0.0.1

Petter A. Urkedal announced

I would like to announce a new FRP library built on the React library. The= purpose of cumulus is to h= elp organize code which work on differential updates. The main type is the cumulus signal, which is= analogous to a react signal, except that information about the difference from the previous value is pro= vided to consumers along with the new value, when the cumulus signal changes.

So, why does a cumulus signal provide both the state and the difference to = downstream signals? That is, what is the difference between the following:?

type t1 =3D state * chan=
ge React.E     initial value and even of chang=
es *)
type t2 =3D (state, change) Cumulus.t  (* the cumulus signal *)

The former type presumes that after the consumer has received the initial s= tate, it will only need to know what changes on successive updates. This seems quite natural. It wor= ks well if, for instance, we want to reconstruct a signal holding a set of strings, given an initial set= and a series of additions and removals:

module String_set =3D Set.Make (String)

type 'a set_patch =3D [`Add o=
f string | of string]
type 'a update =3D 'a -> 'a

let patch_string_set : string set_patch -> String_se=
t.t update =3D function
 | `Add x=
 -> String_set.add x
 | `Remove x -> String_set.remove x

let integrate_strings (init, changes) =3D
  React.E.fold (fun l p -> patch_string_set p l) init changes

But what if we want to maintain a signal holding the intersection of two se= ts of strings? If we try to lift the intersection operation to work on patches, we discover that learni= ng about the addition of an element to left-hand set is not sufficient to determine whether the element= shall the added to the resulting set; we also need to know whether the element is a member of the = right-hand set. So, in this case we would instead use cumulus signals:

let cu : (String_set.=
t, string set_patch) Cumulus.t =
=3D ...
let cv : (String_set.t, string set_patch) Cumulus.t =3D ...
let cuv =3D
  let init u <=
span style=3D"color: #a0522d;">v =3D String_set.inter u v in
  let patch (u=
, du) (v, dv) r' =3D
    (match du, dv with
     | None, Some =
x when String_set.mem x u ->
        Cumulus.Patch (String_set.add x r', `Add1 x)
     ...)
  in
  Cumulus.l2 ~init ~patch cu cv

For the complete example, using integers instead of strings, see reactiveData library which deals with (linear) patching of containers.

I must also mention that there there is an OCaml project with the same name (except casing). Sorry for not checking thoroughly in advance. I hope it is not an issue in practi= se, otherwise there is still time to rename while the library is fresh.

Brr 0.0.1, a toolkit for programming browsers

Continuing this thread, Yoann Padioleau asked Daniel = B=C3=BCnzli replied

What are the differences with the default bindings provided in js_of_ocaml = to the browser APIs (e.g., js.mli, dom.mli, etc.)?

I'm not sure exactly what you are asking but:

  1. If you are asking about the way API are exposed: brr does = not type JavaScript's objects as phantom types. It simply relies on OCaml's= abstract data types and plain functions. More about this can be found in b= rr's FFI = manual and FFI cookbook.
  2. If you are asking about binding coverage, you should be able to get a s= ense of what is bound in brr here.

Regarding 2. brr's coverage of more recent browser APIs is bro= ader and more consistent than in js_of_ocaml =E2=80=93 Promise support, Fetch, Service workers,= Media capture APIs, WebGL2, Webcrypto, WebAudio, etc. Conversly older APIs supported in js_of_ocaml m= ay not supported in brr (e.g. XMLHTTPRequest). Besides brr's coverage of some of the DOM = element-specific interfaces may be shallower than in js_of_ocaml. There is however good coverage = for the HTMLMediaElement, HTMLCanvasElement, HTMLFormElement and = HTMLInputElement interfaces. For the rest the attribute and property API and the occasional trivial FFI method binding should be able to get you a long way.

Old CWN

If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a loo= k at the archive or the RSS feed of the archives<= /a>.

If you also wish to receive it every week by mail, you may subscribe online.

--=-=-=--