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 A97BD5D5 for ; Tue, 22 Jun 2021 09:05:41 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.83,291,1616454000"; d="scan'208,217";a="515983269" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 22 Jun 2021 11:05:28 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id EA8A5E0358; Tue, 22 Jun 2021 11:05:27 +0200 (CEST) Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id D34E3E034D for ; Tue, 22 Jun 2021 11:05:19 +0200 (CEST) IronPort-HdrOrdr: =?us-ascii?q?A9a23=3ANVMlh6AxoPm8uKrlHekK55DYdb4zR+YMi2TD?= =?us-ascii?q?GXoBKiC9Ffbo7/xG/c5rrCMc7Qx7ZJhOo7+90cW7L080sKQFhLX409+ZLXfbUS?= =?us-ascii?q?iTXf5fBbKL+UyQJ8SGzJ8s6U4DSdkdNDSANykdsS+g2njCLz9I+rDums3FuQ6d?= =?us-ascii?q?9QYIcegNUcBdBmxCe2Gm+yNNJDWuLKBJZ6a0145qoCehZGRSTunTPAhwY8Hz4/?= =?us-ascii?q?PKibP7alo8CxY87g7mt0LV1JfKVzaZwzYDWHd1zb0j6GjIlBGR3NTfj9iLjjHd?= =?us-ascii?q?yk7O5NBslNHg09tOA9HJosUZMTn3kG+TFfZccozHkjApgf2lrGwnl9TBuH4bTr?= =?us-ascii?q?5OAqrqDxSInSc=3D?= X-IronPort-AV: E=Sophos;i="5.83,291,1616454000"; d="scan'208,217";a="515983172" Received: from set.irisa.fr (HELO set) ([131.254.10.170]) by mail2-relais-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Jun 2021 11:05:00 +0200 From: Alan Schmitt To: "lwn" , "cwn" , caml-list@inria.fr Date: Tue, 22 Jun 2021 11:04:51 +0200 Message-ID: <877dimb77w.fsf@m4x.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News Reply-To: Alan Schmitt X-Loop: caml-list@inria.fr X-Sequence: 18530 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 ZWsgb2YgSnVuZSAxNSB0byAyMiwNCjIwMjEuDQoNClRhYmxlIG9mIENvbnRlbnRzDQrilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KRmlyc3QgcmVs ZWFzZXMgb2YgZGlyc3AtZXhjaGFuZ2U6IGF1ZGl0YWJsZSB2YXJpYW50IG9mIFNpZ25hbCBQcm90 b2NvbCBhbmQgUHJvU2NyaXB0LXRvLU9DYW1sIHRyYW5zbGF0b3INCkpvYiBvZmZlcjogMyB5ZWFy IHJlc2VhcmNoIGVuZ2luZWVyIGluIHN0YXRpYyBhbmFseXNpcyBvZiBPQ2FtbCBwcm9ncmFtcyBh dCBJbnJpYSBSZW5uZXMNCklSQyBjaGFubmVscyBhdmFpbGFibGUgb24gbGliZXJhLmNoYXQNClNl dCB1cCBPQ2FtbCAyLjAuMC1iZXRhDQpGaXJzdCByZWxlYXNlIG9mIEpzb254dCAtIGEgc2V0IG9m IEpTT04gcGFyc2VycyBhbmQgd3JpdGVycw0KbXVsYSAwLjEuMCwgTUwncyByYWRpc2hhbCBVbml2 ZXJzYWwgTGV2ZW5zaHRlaW4gQXV0b21hdGEgbGlicmFyeQ0KTmV3IHJlbGVhc2Ugb2YgbWxjdWRk aWRsLCB0aGUgT0NhbWwgaW50ZXJmYWNlIHRvIHRoZSBDVUREIEJERCBsaWJyYXJ5DQpmaXJzdCBy ZWxlYXNlIG9mIG9yZjogT0NhbWwgUmFuZG9tIEZvcmVzdHMNCk9sZCBDV04NCg0KDQpGaXJzdCBy ZWxlYXNlcyBvZiBkaXJzcC1leGNoYW5nZTogYXVkaXRhYmxlIHZhcmlhbnQgb2YgU2lnbmFsIFBy b3RvY29sIGFuZCBQcm9TY3JpcHQtdG8tT0NhbWwgdHJhbnNsYXRvcg0K4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcv dC9hbm4tZmlyc3QtcmVsZWFzZXMtb2YtZGlyc3AtZXhjaGFuZ2UtYXVkaXRhYmxlLXZhcmlhbnQt b2Ytc2lnbmFsLXByb3RvY29sLWFuZC1wcm9zY3JpcHQtdG8tb2NhbWwtdHJhbnNsYXRvci84MDA4 LzE+DQoNCg0KamJlY2tmb3JkIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSSdtIHBsZWFzZWQgdG8gYW5ub3Vu Y2UgdGhlIGZpcnN0IHJlbGVhc2Ugb2YgW2RpcnNwLWV4Y2hhbmdlXSwNCiAgYXZhaWxhYmxlIHRv ZGF5IGZyb20gdGhlIE9wYW0gcmVwb3NpdG9yaWVzLg0KDQogIFRoZSBpbnRlbnQgb2YgdGhlICpb ZGlyc3BdKiBsaWJyYXJpZXMgaXMgdG8gcHJvdmlkZSBzb2Z0d2FyZSBlbmdpbmVlcnMNCiAgd2l0 aCBhdWRpdGFibGUgc291cmNlIGNvZGUgdGhhdCBoYXMgc29tZSBsZXZlbCBvZiBzYWZldHkgYXNz dXJhbmNlDQogICh0eXBpY2FsbHkgcHJvb2ZzKSBmcm9tIHNlY3VyaXR5IHJlc2VhcmNoZXJzLg0K DQogIFRoZSBmaXJzdCBsaWJyYXJpZXMgYXJlOg0KDQogIOKAoiBkaXJzcC1leGNoYW5nZS1rYmIy MDE3IDAuMS4wIC0gVGhlIEtCQjIwMTcgcHJvdG9jb2wgZm9yIHNlY3VyaW5nIGENCiAgICB0d28t cGFydHkgY29udmVyc2F0aW9uLiBTaW1pbGFyIHRvIFNpZ25hbCBQcm90b2NvbCB2MyBhbmQgT2xt DQogICAgQ3J5cHRvZ3JhcGhpYyBSYXRjaGV0Lg0KICDigKIgZGlyc3AtcHMyb2NhbWwgMC4xLjAg LSBBIFByb1NjcmlwdCB0byBPQ2FtbCB0cmFuc2xhdG9yLiBQcm9TY3JpcHQgaXMNCiAgICBhbiBl eGVjdXRhYmxlIHN1YnNldCBvZiBKYXZhU2NyaXB0IHRoYXQgY2FuIGJlIGZvcm1hbGx5IHZlcmlm aWVkLg0KDQogIGFuZCBhIGNvdXBsZSBtb3JlIHN1cHBvcnRpbmcgbGlicmFyaWVzLg0KDQogIGBk aXJzcC1leGNoYW5nZS1rYmIyMDE3JyBoYXMgYSBidWlsZCBwcm9jZXNzIHRoYXQgZ2VuZXJhdGVz IGl0cyBvd24NCiAgT0NhbWwgY29kZSB1c2luZyBgZGlyc3AtcHMyb2NhbWwnIG9uIGZvcm1hbGx5 IHZlcmlmaWVkIFByb1NjcmlwdA0KICBzb3VyY2UgY29kZS4NCg0KICBUaGUgY2Fub25pY2FsIGV4 YW1wbGUgZm9yIGBkaXJzcC1leGNoYW5nZS1rYmIyMDE3JyBpczoNCg0KICDilIzilIDilIDilIDi lIANCiAg4pSCIG1vZHVsZSBQICAgICAgID0gRGlyc3BfcHJvc2NyaXB0X21pcmFnZS5NYWtlKCkN CiAg4pSCIG1vZHVsZSBFRDI1NTE5ID0gUC5DcnlwdG8uRUQyNTUxOQ0KICDilIIgbW9kdWxlIEsg ICAgICAgPSBEaXJzcF9leGNoYW5nZV9rYmIyMDE3Lk1ha2UoUCkNCiAg4pSCIG1vZHVsZSBVICAg ICAgID0gSy5VVElMDQogIOKUgiANCiAg4pSCICgqIEFsaWNlIHNlbmRzIGEgbWVzc2FnZSB0byBC b2IgKikNCiAg4pSCIGxldCBhbGljZVNlc3Npb25XaXRoQm9iID0gVC5uZXdTZXNzaW9uICgqIC4u LiBzdXBwbHkgc29tZSBrZXlzIHlvdSBjcmVhdGUgd2l0aCBFRDI1NTE5IGFuZCBVIC4uLiAqKSA7 Ow0KICDilIIgbGV0IGFsaWNlVG9Cb2JTZW5kT3V0cHV0ID0gVC5zZW5kDQogIOKUgiAgIGFsaWNl SWRlbnRpdHlLZXkNCiAg4pSCICAgYWxpY2VTZXNzaW9uV2l0aEJvYg0KICDilIIgICAoUC5vZl9z dHJpbmcgIkhpIEJvYiEiKQ0KICDilIIgDQogIOKUgiAoKiBOb3cgeW91IGNhbiBzZW5kIHRoZSBv dXRwdXQgImFsaWNlVG9Cb2JTZW5kT3V0cHV0IiBmcm9tIEFsaWNlIHRvIEJvYi4NCiAg4pSCICAg IExldCdzIHN3aXRjaCB0byBCb2IncyBjb21wdXRlci4gSGUgZ2V0cyBub3RpZmllZCBvZiBhIG5l dyBtZXNzYWdlIHVzaW5nIGEgbm90aWZpY2F0aW9uIGxpYnJhcnkgb2YNCiAg4pSCIHlvdXIgY2hv b3NpbmcsIGFuZCB0aGVuIGRvZXMgLi4uICAqKQ0KICDilIIgDQogIOKUgiBsZXQgYm9iU2Vzc2lv bldpdGhBbGljZSA9IFQubmV3U2Vzc2lvbiAoKiAuLi4gc3VwcGx5IHNvbWUga2V5cyAuLi4gKik7 Ow0KICDilIIgbGV0IGJvYkZyb21BbGljZVJlY2VpdmVPdXRwdXQgPSBULnJlY3YNCiAg4pSCICAg Ym9iSWRlbnRpdHlLZXkNCiAg4pSCICAgYm9iU2lnbmVkUHJlS2V5DQogIOKUgiAgIGJvYlNlc3Np b25XaXRoQWxpY2UNCiAg4pSCICAgdGhlRW5jcnlwdGVkTWVzc2FnZUJvYlJlY2VpdmVkRnJvbUFs aWNlDQogIOKUgiBhc3NlcnQgKGJvYkZyb21BbGljZVJlY2VpdmVPdXRwdXQub3V0cHV0LnZhbGlk KQ0KICDilIIgRm9ybWF0LnByaW50ZiAiQm9iIGp1c3QgcmVjZWl2ZWQgYSBuZXcgbWVzc2FnZTog JXNcbiINCiAg4pSCICAgKGJvYkZyb21BbGljZVJlY2VpdmVPdXRwdXQucGxhaW50ZXh0IHw+IFAu dG9fYnl0ZXMgfD4gQnl0ZXMudG9fc3RyaW5nKQ0KICDilJTilIDilIDilIDilIANCg0KICBUaGVz ZSBhcmUgZWFybHkgcmVsZWFzZXMsIGVzcGVjaWFsbHkgYGRpcnNwLXBzMm9jYW1sJy4NCg0KICBP bmxpbmUgZG9jcyBhcmUgYXQgPGh0dHBzOi8vZGlza3V2LmdpdGh1Yi5pby9kaXJzcC1leGNoYW5n ZT4NCg0KICBGZWVkYmFjaywgY29udHJpYnV0aW9ucyBhbmQgZG93bmxvYWRzIGFyZSB2ZXJ5IHdl bGNvbWUhDQoNCg0KW2RpcnNwLWV4Y2hhbmdlXSA8aHR0cHM6Ly9naXRodWIuY29tL2Rpc2t1di9k aXJzcC1leGNoYW5nZSNyZWFkbWU+DQoNCg0KSm9iIG9mZmVyOiAzIHllYXIgcmVzZWFyY2ggZW5n aW5lZXIgaW4gc3RhdGljIGFuYWx5c2lzIG9mIE9DYW1sIHByb2dyYW1zIGF0IElucmlhIFJlbm5l cw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAg PGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9qb2Itb2ZmZXItMy15ZWFyLXJlc2VhcmNoLWVu Z2luZWVyLWluLXN0YXRpYy1hbmFseXNpcy1vZi1vY2FtbC1wcm9ncmFtcy1hdC1pbnJpYS1yZW5u ZXMvODAxMi8xPg0KDQoNCkJlbm9pdCBNb250YWd1IGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA DQoNCiAgYXMgcGFydCBvZiBhIHByb2plY3QgYmV0d2VlbiBJbnJpYSBhbmQgTm9tYWRpYyBMYWJz LCB3ZSBhcmUgb2ZmZXJpbmcgYQ0KICAzIHllYXIgcmVzZWFyY2ggZW5naW5lZXIgcG9zaXRpb24s IHRvIHdvcmsgb24gc3RhdGljIGFuYWx5c2lzIGZvcg0KICBPQ2FtbCBwcm9ncmFtcy4gIFRoZSBw b3NpdGlvbiB3aWxsIHN0YXJ0IGluIE9jdG9iZXIgaW4gdGhlIENlbHRpcXVlDQogIElucmlhIHJl c2VhcmNoIHRlYW0sIGluIHRoZSB2aWJyYW50IGNpdHkgb2YgUmVubmVzLCBGcmFuY2UuICBJZiB5 b3UNCiAgYXJlIGEgdGFsZW50ZWQgT0NhbWwgcHJvZ3JhbW1lciwgaWYgeW91IGFyZSBpbnRlcmVz dGVkIGluIHN0YXRpYw0KICBhbmFseXNpcywgb3IgaWYgeW91IHNpbXBseSB3YW50IHRvIGtub3cg bW9yZSBhYm91dCB0aGlzIHByb2plY3QsDQogIHBsZWFzZSBjb250YWN0IG1lIQ0KDQogIFRoZSBk ZXRhaWxlZCBqb2IgZGVzY3JpcHRpb24gaXMgaGVyZToNCiAgPGh0dHBzOi8vam9icy5pbnJpYS5m ci9wdWJsaWMvY2xhc3NpYy9mci9vZmZyZXMvMjAyMS0wMzgyMT4NCg0KICBQbGVhc2UgZmVlbCBm cmVlIHRvIHRyYW5zZmVyIHRoaXMgYW5ub3VuY2UgdG8gcGVvcGxlIHRoYXQgeW91IHRoaW5rDQog IGNvdWxkIGJlIGludGVyZXN0ZWQuDQoNCg0KSVJDIGNoYW5uZWxzIGF2YWlsYWJsZSBvbiBsaWJl cmEuY2hhdA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vc3ltcGEuaW5yaWEuZnIvc3ltcGEvYXJj L2NhbWwtbGlzdC8yMDIxLTA2L21zZzAwMDE0Lmh0bWw+DQoNCg0KRGVlcCBpbiB0aGlzIHRocmVh ZCwgUm9tYWluIENhbGFzY2liZXR0YSBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgA0KDQogIEp1c3QgdG8gbGV0IHlvdSBrbm93IHRoYXQgSSBzcGVudCBhIHRp bWUgdG8gcmUtaW1wbGVtZW50IHRoZSBJUkMNCiAgcHJvdG9jb2wgaW4gT0NhbWwgYW5kIHRvIGRl cGxveSBhIHNpbXBsZSBNaXJhZ2VPUyBhcyBhIGxvZ2dlciB0byBzYXZlDQogIGRpc2N1c3Npb25z IGludG8gYSBHaXQgcmVwb3NpdG9yeS4gVGhlIGJvdCBpcyBjdXJyZW50bHkgZGVwbG95ZWQsIHRo ZQ0KICBleHBsYW5hdGlvbiBpcyBhdmFpbGFibGUgaGVyZToNCiAgPGh0dHBzOi8vZ2l0aHViLmNv bS9kaW5vc2F1cmUvY3JpL3RyZWUvbWFzdGVyL3VuaWtlcm5lbD4gQW5kIHVzZWQgZm9yDQogICNt aXJhZ2VAaXJjLmxpYmVyYS5jaGF0DQoNCiAgSXQncyBhIG5pY2UgZXhhbXBsZSBhYm91dCBNaXJh Z2VPUy91bmlrZXJuZWwgYW5kIEkgbWF5IGRlcGxveSBvbmUgdG8NCiAgc2F2ZSAjb2NhbWxAaXJj LmxpYmVyYS5jaGF0IGFzIHdoaXRlcXVhcmsgYWxyZWFkeSBkb2VzIHdpdGggaGVyIGJvdC4NCg0K DQpTZXQgdXAgT0NhbWwgMi4wLjAtYmV0YQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAg PGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tc2V0LXVwLW9jYW1sLTItMC0wLWJldGEv ODAxNi8xPg0KDQoNClNvcmEgTW9yaW1vdG8gYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBI b3BlZnVsbHksIHRoaXMgd2lsbCBiZSB0aGUgbGFzdCByZWxlYXNlIGJlZm9yZSBzdGFibGUgMi4w LjAuIFRoaXMNCiAgcmVsZWFzZSBhbGxvd3MgeW91IHRvIGFkZCBtdWx0aXBsZSBjdXN0b20gcmVw b3NpdG9yaWVzLCB3aGljaCBlbmFibGVzDQogIHRlc3Rpbmcgd2l0aCBtdWx0aWNvcmUgYW5kIGJl dGEgcmVwb3NpdG9yeS4NCg0KICDilIzilIDilIDilIDilIANCiAg4pSCIC0gbmFtZTogVXNlIE11 bHRpY29yZSBPQ2FtbA0KICDilIIgICB1c2VzOiBvY2FtbC9zZXR1cC1vY2FtbEB2Mg0KICDilIIg ICB3aXRoOg0KICDilIIgICAgIG9jYW1sLWNvbXBpbGVyOiBvY2FtbC12YXJpYW50cy40LjEyLjAr ZG9tYWlucytlZmZlY3RzDQogIOKUgiAgICAgb3BhbS1yZXBvc2l0b3JpZXM6IHwNCiAg4pSCICAg ICAgIG11bHRpY29yZTogaHR0cHM6Ly9naXRodWIuY29tL29jYW1sLW11bHRpY29yZS9tdWx0aWNv cmUtb3BhbS5naXQNCiAg4pSCICAgICAgIGRlZmF1bHQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9vY2Ft bC9vcGFtLXJlcG9zaXRvcnkuZ2l0DQogIOKUlOKUgOKUgOKUgOKUgA0KDQoNCkZpcnN0IHJlbGVh c2Ugb2YgSnNvbnh0IC0gYSBzZXQgb2YgSlNPTiBwYXJzZXJzIGFuZCB3cml0ZXJzDQrilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAN Cg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi1maXJzdC1y ZWxlYXNlLW9mLWpzb254dC1hLXNldC1vZi1qc29uLXBhcnNlcnMtYW5kLXdyaXRlcnMvODAxOC8x Pg0KDQoNClN0ZXBoZW4gQmxlYXphcmQgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAN Cg0KICBKc29ueHQgcHJvdmlkZXMgYSBudW1iZXIgb2YgSlNPTiBwYXJzZXJzIGFuZCB3cml0ZXJz IGZvciBSRkMgODI1OQ0KICBjb21wbGlhbnQgSlNPTiBhcyB3ZWxsIGFzIG5vbi1zdGFuZGFyZCBl eHRlbnNpb25zIHN1cHBvcnRlZCBieSBZb2pzb24uDQogIEZlYXR1cmVzIGluY2x1ZGUNCiAg4oCi IFJGQyA4MjU5IGNvbXBsaWFudCB3aGVuIGluIHN0cmljdCBhbmQgYmFzaWMgbW9kZQ0KICDigKIg UGVyZm9ybWFuY2UgZm9jdXNlZCBlc3BlY2lhbGx5IGZvciBmaWxlcyBhbmQgc3RyaW5ncw0KICDi gKIgU3VwcG9ydCBmb3Igc3RhbmRhcmQgYW5kIGV4dGVuZGVkIEpTT04gdHJlZSB0eXBlczoNCiAg ICDigKIgU3RyaWN0IGZvbGxvd3MgYSBzdHJpY3QgaW50ZXJwcmV0YXRpb24gb2YgUkZDIDgyNTkg d2l0aCBhbGwNCiAgICAgIG51bWJlcnMgcmVwcmVzZW50ZWQgYXMgZmxvYXRzLg0KICAgIOKAoiBC YXNpYyBleHRlbmRzIHRoZSBzdHJpY3QgdHlwZSB0byBpbmNsdWRlIGNvbnZlbmllbmNlIHR5cGVz IHdoaWxlDQogICAgICBtYWludGFpbmluZyBSRkMgY29tcGxpYW5jZS4gIFRoaXMgaXMgY29tcGF0 aWJsZSB3aXRoIFlvanNvbidzDQogICAgICBCYXNpYyB0eXBlDQogICAg4oCiIEV4dGVuZGVkIGFk ZHMgYWRkaXRpb25hbCBub24tc3RhbmRhcmQgdHlwZXMgaW5jbHVkaW5nIHR1cGxlcyBhbmQNCiAg ICAgIHZhcmlhbnRzIGFuZCBpcyBub3QgUkZDIGNvbXBsaWFudC4gVGhpcyBpcyBjb21wYXRpYmxl IHdpdGgNCiAgICAgIFlvanNvbidzIFNhZmUgdHlwZQ0KICDigKIgQSBudW1iZXIgb2YgZGlmZmVy ZW50IHBhcnNlcnMgaW5jbHVkaW5nDQogICAg4oCiIEEgc3RhbmRhcmQgSlNPTiB0cmVlIHBhcnNl ciBmb3IgdmFyaW91cyBzb3VyY2VzIGluY2x1ZGluZyBzdHJpbmcsDQogICAgICBmaWxlIGFuZCBj aGFubmVsDQogICAg4oCiIEEgU3RyZWFtIHBhcnNlciB0aGF0IHJldHVybnMgYSBzdHJlYW0gb2Yg cmF3IEpTT04gdG9rZW5zLg0KICAgIOKAoiBBIG1vbmFkIGJhc2VkIHBhcnNlciBjb21wYXRpYmxl IHdpdGggYXN5bmMNCiAg4oCiIFdyaXRlcnMgaW5jbHVkaW5nDQogICAg4oCiIEZpbGUgYW5kIHN0 cmluZyB3cml0ZXJzDQogICAg4oCiIEEgbW9uYWQgYmFzZWQgd3JpdGVyIHRoYXQgaXMgY29tcGF0 aWJsZSB3aXRoIGFzeW5jDQogICAg4oCiIEEgc3RyZWFtIHdyaXRlciB0aGF0IGNvbnZlcnRzIGEg c3RyZWFtIG9mIEpTT04gdG9rZW5zDQogIOKAoiBTdXBwb3J0IGZvciBzdHJlYW1pbmcgSlNPTiB2 aWEgdGhlIFtTdHJlYW1dIG1vZHVsZQ0KICDigKIgU3RhbmRhcmQgaW50ZXJmYWNlcyBpbmNsdWRp bmcgWW9qc29uIGNvbXBhdGliaWxpdHkNCiAg4oCiIFN1cHBvcnQgZm9yIGBwcHhfZGVyaXZpbmdf eW9qc29uJyBhbmQgYHBweF95b2pzb25fY29udicgdmlhIFlvanNvbg0KICAgIGNvbXBhdGliaWxp dHkNCg0KICBUaGUgcGFja2FnZSBpcyBhdmFpbGFibGUgdmlhIG9wYW0sIHdpdGggZG9jdW1lbnRh dGlvbiBvbiBbZ2l0aHViLmlvXS4NCiAgVGhlIHNvdXJjZSBjYW4gYmUgZm91bmQgYXQgW2dpdGh1 Yi9qc29ueHRdDQoNCg0KW1N0cmVhbV0gPGh0dHBzOi8vb2NhbWwub3JnL2FwaS9TdHJlYW0uaHRt bD4NCg0KW2dpdGh1Yi5pb10NCjxodHRwczovL3N0ZXZlYmxlYXphcmQuZ2l0aHViLmlvL29jYW1s LWpzb254dC9qc29ueHQvaW5kZXguaHRtbD4NCg0KW2dpdGh1Yi9qc29ueHRdIDxodHRwczovL2dp dGh1Yi5jb20vc3RldmVibGVhemFyZC9vY2FtbC1qc29ueHQ+DQoNCg0KbXVsYSAwLjEuMCwgTUwn cyByYWRpc2hhbCBVbml2ZXJzYWwgTGV2ZW5zaHRlaW4gQXV0b21hdGEgbGlicmFyeQ0K4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5v cmcvdC9hbm4tbXVsYS0wLTEtMC1tbHMtcmFkaXNoYWwtdW5pdmVyc2FsLWxldmVuc2h0ZWluLWF1 dG9tYXRhLWxpYnJhcnkvODAyMS8xPg0KDQoNCklmYXogS2FiaXIgYW5ub3VuY2VkDQrilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0K ICBJJ20gaGFwcHkgdG8gYW5ub3VuY2UgdGhlIHJlbGVhc2Ugb2YgbXkgbGlicmFyeSBgbXVsYScu IFRoZSBwYWNrYWdlDQogIHVzZXMgVW5pdmVyc2FsIExldmVuc2h0ZWluIEF1dG9tYXRhIChVTEEp IHRvIG5vdCBvbmx5IGNoZWNrIGlmIGEgd29yZA0KICBpcyB3aXRoaW4gYSBjZXJ0YWluIGVkaXQg ZGlzdGFuY2Ugb2YgYW5vdGhlciwgYnV0IHRvIGFsc28gb3V0cHV0IHdoYXQNCiAgdGhlIGVkaXQg ZGlzdGFuY2UgaXMhIEl0IHVzZXMgdGhlIGF1dG9tYXRhIHRoZW1zZWx2ZXMgdG8gY2FsY3VsYXRl DQogIGVkaXQgZGlzdGFuY2VzLiBBIGZ1biB1c2UgY2FzZSBmb3IgdGhpcyBpcyB0aGF0IHdlIGNh biBmZWVkIGEgc2V0IG9mDQogIHdvcmRzIHRvIHRoZSBhdXRvbWF0b24gYW5kIGltbWVkaWF0ZWx5 IHJhbmsgdGhlIHdvcmRzIGJ5IHRoZWlyIGVkaXQNCiAgZGlzdGFuY2UuDQoNCiAgYE11bGEnIHN1 cHBvcnRzIGJvdGggdGhlIHN0YW5kYXJkIExldmVuc2h0ZWluIGVkaXQgZGlzdGFuY2UgYXMgd2Vs bCBhcw0KICB0aGUgRGVtYXJhdS1MZXZlbnNodGVpbiBkaXN0YW5jZSB3aGljaCBjb3VudHMgdHJh bnNwb3NpdGlvbnMgb2YgdHdvDQogIGFkamFjZW50IGNoYXJhY3RlcnMgYXMgYSBzaW5nbGUgZWRp dC4gSSBhbHNvIHN1cHBvcnQgZ2V0dGluZyBsaXZlDQogIGVycm9yIGNvdW50cywgc28geW91IGNh biBmZWVkIHBhcnQgb2YgYSBzdHJpbmcgaW50byBhbiBhdXRvbWF0b24sIGFuZA0KICBnZXQgdGhl IG1pbmltdW0gbnVtYmVyIG9mIGVycm9ycyB0aGF0IGhhdmUgb2NjdXJyZWQgc28gZmFyLg0KDQog IEkgY3VycmVudGx5IGhhdmUgbWF0Y2hpbmcgd29ya2luZyB1c2luZyBub24tZGV0ZXJtaW5pc3Rp YyBVTEEsIGJ1dCBJDQogIGhhdmUgcGFydGlhbGx5IHN0YXJ0ZWQgdGhlIHdvcmsgdG93YXJkIHRo ZSBkZXRlcm1pbmlzdGljIHZlcnNpb25zLiBJdA0KICBzaG91bGQgYmUgcG9zc2libGUgdG8gcHJl LWNvbXB1dGUgdGhlIERGQXMgZm9yIHVwIHRvIGVkaXQgZGlzdGFuY2UgMw0KICBhbmQgcGFjayBp dCB3aXRoIHRoZSBsaWJyYXJ5LCBuZXZlciBuZWVkaW5nIHRvIGJlIHJlY29tcHV0ZWQgYmVjYXVz ZQ0KICB0aGUgVW5pdmVyc2FsIEF1dG9tYXRhIGFyZSBpbmRlcGVuZGVudCBvZiB0aGUgaW5wdXQg c3RyaW5ncy4gQnV0IHRoZQ0KICBub24tZGV0ZXJtaW5pc3RpYyBhdXRvbWF0YSBzdXBwb3J0IHZl cnkgbGFyZ2UgZWRpdCBkaXN0YW5jZXM6DQogIChTeXMuaW50X3NpemUgLSAxKS8yLCBzbyB0aGV5 IGhhdmUgdmFsdWUgb24gdGhlaXIgb3duLg0KDQogIFRoaXMgbGlicmFyeSBjYW1lIGFib3V0IGZy b20gYSBkZXNpcmUgdG8gYWRkIGEgImRpZCB5b3UgbWVhbiIgZmVhdHVyZQ0KICB0byBhIHRveSBj b21waWxlciwgYnV0IG5vdCB3YW50aW5nIHRvIHdyaXRlIHRoZSBraW5kIG9mIGR5bmFtaWMNCiAg cHJvZ3JhbW1pbmcgY29kZSB0aGF0IHlvdSBjYW4gZmluZCBpbiB0aGUgT0NhbWwgY29tcGlsZXIg WzFdIG9yDQogIG1lcmxpbi9zcGVsbGwgWzIsM10uDQoNCiAgWW91IGNhbiBmaW5kIHRoZSBsaWJy YXJ5IFtoZXJlXSBhbmQgdGhlIGRvY3VtZW50YXRpb24gW2hlcmVdLiAgSXQncw0KICBub3Qgb24g YG9wYW0nIHlldCwgYnV0IEkgaGF2ZSBzdWJtaXR0ZWQgYSBbcHVsbCByZXF1ZXN0XS4NCg0KICBI YXBweSBPQ2FtbGluZyENCg0KICBSZWZlcmVuY2VzOg0KICAxLiBFZGl0IGRpc3RhbmNlIGluIHRo ZSBPQ2FtbA0KICAgICBjb21waWxlci4gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9i bG9iL2U1ZTljNWZlZDU2ZWZkZDY3NjAxZTRkYmJhZWJlYjEzNGFlZTM2MWMvdXRpbHMvbWlzYy5t bCNMNTE2Pi4NCiAgMi4gRWRpdCBkaXN0YW5jZSBpbg0KICAgICBtZXJsaW4uIDxodHRwczovL2dp dGh1Yi5jb20vb2NhbWwvbWVybGluL2Jsb2IvNDQ0ZjZlMDAwZjZiN2RjNThkYWM0NGQ2YWMwOTZm YzBlMDk4OTRjYy9zcmMvdXRpbHMvbWlzYy5tbCNMNTI3Pg0KICAzLiBFZGl0IGRpc3RhbmNlIGlu DQogICAgIHNwZWxsbC4gPGh0dHBzOi8vZ2l0aHViLmNvbS9jLWN1YmUvc3BlbGxsL2Jsb2IvM2Rh MTE4MjI1NmZmMjUwN2EwYmU4MTJmOTQ1YTdmZTFhMTlhZGY5Yi9zcmMvU3BlbGxsLm1sI0wyNj4N Cg0KDQpbaGVyZV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9pZmF6ay9tdWxhLz4NCg0KW2hlcmVdIDxo dHRwczovL2lmYXprLmdpdGh1Yi5pby9tdWxhL211bGEvaW5kZXguaHRtbD4NCg0KW3B1bGwgcmVx dWVzdF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtLXJlcG9zaXRvcnkvcHVsbC8xODg5 NT4NCg0KDQpJZmF6IEthYmlyIHRoZW4gYWRkZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQpTb21lIGRldGFpbHM6DQri lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICBJIGZvbGxvd2VkIHRo ZSBwYXBlciBieSBUb3V6ZXQgWzFdIGFzIG11Y2ggYXMgcG9zc2libGUuIElmIHlvdSB0YWtlIGEN CiAgbG9vayBhdCB0aGUgY29kZSwgeW91J2xsIHNlZSBhIGEgbG90IG9mICsxJ3MgZm9yIDEtaW5k ZXhpbmcuIFRoaXMgd2FzDQogIHRvIGtlZXAgdGhlIGltcGxlbWVudGF0aW9uIGFzIGNsb3NlIHRv IHRoZSBwYXBlciBhcyBwb3NzaWJsZSEgKElmIHlvdQ0KICBkbyB3YW50IHRvIGNoZWNrIHRoZSBp bXBsZW1lbnRhdGlvbiBhZ2FpbnN0IHRoZSBwYXBlciwgbm90ZSB0aGF0IHRoZQ0KICBwYXBlciBo YXMgYSB0eXBvIGluIERlZmluaXRpb24gMikuIEZvciB0aGUgRGVtYXJhdS1MZXZlbnNodGVpbg0K ICBhdXRvbWF0b24sIEkgYWRhcHRlZCBGaWd1cmUgOSBmcm9tIE1pdGFua2luJ3MgdGhlc2lzIFsy XS4gSSdtDQogIGNvbnZpbmNlZCB0aGF0IG15IGFkYXB0YXRpb24gd29ya3MsIGJ1dCBteSBhZGFw dGF0aW9uIG9mIFRvdXpldCdzDQogIHN1YnN1bXB0aW9uIHJlbGF0aW9uIGZvciBEZW1hcmF1LUxl dmVuc2h0ZWluIG1pZ2h0IGJlIHNsaWdodGx5DQogIHN1Yi1vcHRpbWFsLiBJZiB5b3UgaGF2ZSBx dWVzdGlvbiBhYm91dCB0aGUgYWRhcHRhdGlvbiwgZmVlbCBmcmVlIHRvDQogIGFzayENCg0KICBg bXVsYScgZG9lcyBub3QgY29tcGxldGVseSByZXBsYWNlIGMtY3ViZSdzIGBzcGVsbGwnIHBhY2th Z2UuIEluDQogIHBhcnRpY3VsYXIgSSBkb24ndCBzdXBwb3J0IGFueSBpbmRleHMsIGV0Yy4gQnV0 IHRoZXJlIGFyZSBzb21lDQogIGludGVyZXN0aW5nIGRpZmZlcmVuY2VzIGluIHRoZSBhdXRvbWF0 YSB0aGV5IHVzZS4gKGB3JyBzdGFuZHMgZm9yIHRoZQ0KICBiYXNlIHdvcmQgaGVyZSkNCiAgMS4g VGhlIGBzcGVsbGwnIHBhY2thZ2UgY3JlYXRlcyB0aGUgTGV2ZW5zaHRlaW4gQXV0b21hdG9uIGZv ciBhIHNpbmdsZQ0KICAgICBzdHJpbmcvd29yZCAoTEFfdyksIGBtdWxhJyB1c2VzIFVuaXZlcnNh bCBMZXZlbnNodGVpbiBBdXRvbWF0YQ0KICAgICAoVUxBKS4NCiAgMi4gYFNwZWxsbCcgY29tcHV0 ZXMgYSBERkEgZnJvbSBhIG5vbi1kZXRlcm1pbmlzdGljIGF1dG9tYXRvbiB0aGF0DQogICAgIHVz ZXMgZXBsaXNvbiB0cmFuc2l0aW9ucy4gVUxBIGRvIG5vdCBoYXZlIGVwc2lsb24gdHJhbnNpdGlv bnMsIGJ1dA0KICAgICBmb3IgdHJhbnNpdGlvbnMgaXQgbG9va3MgYWhlYWQgaW50byB0aGUgYmFz ZSB3b3JkIGB3Jy4gQWRkaXRpb25hbGx5DQogICAgIHRoZSBORkEncyBzdGF0ZXMvdHJhbnNpdGlv bnMgYXJlIGNvbXB1dGFibGUgb24gdGhlIGZseSwgc28gdGhlcmUgaXMNCiAgICAgbm8gbmVlZCB0 byBzdG9yZSB0aGUgTkZBIGluIG1lbW9yeS4NCiAgMy4gYFNwZWxsbCcncyBhdXRvbWF0YSB0cmFu c2l0aW9ucyB1c2luZyBjaGFyYWN0ZXJzLiBgbXVsYScgY29tcHV0ZXMgYQ0KICAgICBiaXR2ZWN0 b3IgZnJvbSBhbiBpbnB1dCBjaGFyYWN0ZXIgdG8gdHJhbnNpdGlvbiBmcm9tIHN0YXRlcyB0bw0K ICAgICBzdGF0ZXMuIChDb21wdXRpbmcgdGhlIGJpdHZlY3RvciBpcyB3aGVyZSB0aGUgbG9vayBh aGVhZCBjb21lcyBpbikuDQogIDQuIGBTcGVsbGwnJ3MgYXV0b21hdGEgcmV0dXJuIGB0cnVlfi9+ ZmFsc2UnLCBhbmQgdXNlcyBhIHNlcGFyYXRlDQogICAgIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBl ZGl0IGRpc3RhbmNlcy4gYE11bGEnIHVzZXMgdGhlIGF1dG9tYXRvbg0KICAgICBpdHNlbGYgdG8g Y2FsY3VsYXRlIGVkaXQgZGlzdGFuY2VzLCB0aGUgb3V0cHV0cyBoYXZlIHR5cGUgYGludA0KICAg ICBvcHRpb24nLiAoTEFfdyBjYW4gYmUgbW9kaWZpZWQgdG8gc3VwcG9ydCB0aGlzIHRob3VnaCEp DQoNCiAgUmVmZXJlbmNlczoNCiAgMS4gT24gdGhlIExldmVuc2h0ZWluIEF1dG9tYXRvbiBhbmQg dGhlIFNpemUgb2YgdGhlIE5laWdoYm9yaG9vZCBvZiBhDQogICAgIFdvcmQuIEjDqWzDqG5lIFRv dXpldA0KICAgICA8aHR0cHM6Ly9oYWwuYXJjaGl2ZXMtb3V2ZXJ0ZXMuZnIvaGFsLTAxMzYwNDgy L2ZpbGUvTEFUQTIwMTYucGRmPg0KICAyLiBVbml2ZXJzYWwgTGV2ZW5zdGVpbiBBdXRvbWF0YTog QnVpbGRpbmcgYW5kIFByb3BlcnRpZXMuIFBldGFyDQogICAgIE5pa29sYWV2DQogICAgIE1pdGFu a2luLiA8aHR0cHM6Ly9zdG9yZS5mbWkudW5pLXNvZmlhLmJnL2ZtaS9sb2dpYy90aGVzZXMvbWl0 YW5raW4tZW4ucGRmPg0KDQoNCk5ldyByZWxlYXNlIG9mIG1sY3VkZGlkbCwgdGhlIE9DYW1sIGlu dGVyZmFjZSB0byB0aGUgQ1VERCBCREQgbGlicmFyeQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcv dC9hbm4tbmV3LXJlbGVhc2Utb2YtbWxjdWRkaWRsLXRoZS1vY2FtbC1pbnRlcmZhY2UtdG8tdGhl LWN1ZGQtYmRkLWxpYnJhcnkvODAyOC8xPg0KDQoNCm5iZXJ0aCBhbm5vdW5jZWQNCuKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEknbSBwbGVhc2Vk IHRvIHdyaXRlIHRoaXMgZmlyc3QgcmVsZWFzZSBhbm5vdW5jZW1lbnQgZm9yIHRoZQ0KICBbbWxj dWRkaWRsXSBwYWNrYWdlLg0KDQogIFRoZXNlIGJpbmRpbmdzIHRvIHRoZSBDVUREIEJERCBsaWJy YXJ5IHdlcmUgaW5pdGlhbGx5IHdyaXR0ZW4gYnkNCiAgQmVydHJhbmQgSmVhbm5ldCBhbmQgaGF2 ZSBiZWVuIGFyb3VuZCBhcyBhbiBPUEFNIHBhY2thZ2UgZm9yIHF1aXRlDQogIHNvbWUgdGltZSBu b3cuICBUaGUgc291cmNlIGNvZGUgaXMgbm93IGhvc3RlZCBvbiBbZnJhbWFnaXRdLg0KDQogIFRo aXMgcmVsZWFzZSBvZiB2ZXJzaW9uIDMuMC43IG1vc3RseSBwb3J0cyB0aGUgcGFja2FnZSB0byBP Q2FtbA0KICB2ZXJzaW9ucyDiiaUgNC4xMC4NCg0KDQpbbWxjdWRkaWRsXSA8aHR0cHM6Ly9vcGFt Lm9jYW1sLm9yZy9wYWNrYWdlcy9tbGN1ZGRpZGw+DQoNCltmcmFtYWdpdF0gPGh0dHBzOi8vZnJh bWFnaXQub3JnL25iZXJ0aC9tbGN1ZGRpZGw+DQoNCg0KZmlyc3QgcmVsZWFzZSBvZiBvcmY6IE9D YW1sIFJhbmRvbSBGb3Jlc3RzDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6 Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi1maXJzdC1yZWxlYXNlLW9mLW9yZi1vY2FtbC1yYW5k b20tZm9yZXN0cy84MDM0LzE+DQoNCg0KVW5peEp1bmtpZSBhbm5vdW5jZWQNCuKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEkg ZmluaXNoZWQgaW1wbGVtZW50aW5nIGEgY2xhc3NpZmllciBhbmQgcmVncmVzc29yIHVzaW5nIFJh bmRvbQ0KICBGb3Jlc3RzIChzZW1pbmFsIHBhcGVyOg0KICA8aHR0cHM6Ly9saW5rLnNwcmluZ2Vy LmNvbS9hcnRpY2xlLzEwLjEwMjMvQToxMDEwOTMzNDA0MzI0Pik6DQoNCiAgPGh0dHBzOi8vZ2l0 aHViLmNvbS9Vbml4SnVua2llL29yZj4NCg0KICBTb21lIGNhdmVhdHM6DQogIOKAoiB0aGlzIGlz IHNvbWV3aGF0IHNsb3c7IGVzcGVjaWFsbHkgdGhlIGNsYXNzaWZpZXIgKGFuZCBJIGRvbuKAmXQg a25vdw0KICAgIHNvIG11Y2ggaG93IHRvIGFjY2VsZXJhdGUgaXQ7IHByb2JhYmx5IHR3byBvcmRl cnMgb2YgbWFnbml0dWRlDQogICAgc2xvd2VyIHRoYW4gc2tsZWFybikuDQogIOKAoiB0aGlzIGlz IG5vdCBzdXBlciBnZW5lcmljIChpbnQgSW50TWFwIHNwYXJzZSBmZWF0dXJlcyBvbmx5OyBpLmUu IGENCiAgICBzcGFyc2UgdmVjdG9yIG9mIGludGVnZXJzIHJlcHJlc2VudHMgYSBzYW1wbGUpLg0K DQogIFRoZSBwYWNrYWdlIGlzIG5vdyBhdmFpbGFibGUgaW4gb3BhbSAob3BhbSBpbnN0YWxsIG9y ZikuDQoNCiAgVHdvIGludGVyZmFjZXMgYXJlIGV4cG9zZWQ6DQoNCiAgUkZDIChmb3IgY2xhc3Np ZmljYXRpb24pDQogIDxodHRwczovL2dpdGh1Yi5jb20vVW5peEp1bmtpZS9vcmYvYmxvYi9tYXN0 ZXIvc3JjL1JGQy5tbGk+DQoNCiAgUkZSIChmb3IgcmVncmVzc2lvbikNCiAgPGh0dHBzOi8vZ2l0 aHViLmNvbS9Vbml4SnVua2llL29yZi9ibG9iL21hc3Rlci9zcmMvUkZSLm1saT4NCg0KICBUaGUg dGVzdCBmaWxlIHNob3dzIHNvbWUgdXNhZ2UgZXhhbXBsZXM6DQogIDxodHRwczovL2dpdGh1Yi5j b20vVW5peEp1bmtpZS9vcmYvYmxvYi9tYXN0ZXIvc3JjL3Rlc3QubWw+DQoNCiAgSWYgeW91IHdh bnQgdG8gaGVscCwgSSB0cmllZCB0byBmbGFnIGEgZmV3IHRoaW5ncyBmb3IgdGhlIG5lYXIgZnV0 dXJlOg0KICA8aHR0cHM6Ly9naXRodWIuY29tL1VuaXhKdW5raWUvb3JmL2lzc3Vlcz4NCg0KICBJ ZiB5b3UgdXNlIGl0IGFuZCBpZiBpdCBpcyB1c2VmdWwgdG8geW91LCBJIHdvdWxkIGJlIGhhcHB5 IHRvIGtub3cuDQoNCg0KT2xkIENXTg0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgSWYgeW91 IGhhcHBlbiB0byBtaXNzIGEgQ1dOLCB5b3UgY2FuIFtzZW5kIG1lIGEgbWVzc2FnZV0gYW5kIEkn bGwgbWFpbA0KICBpdCB0byB5b3UsIG9yIGdvIHRha2UgYSBsb29rIGF0IFt0aGUgYXJjaGl2ZV0g b3IgdGhlIFtSU1MgZmVlZCBvZiB0aGUNCiAgYXJjaGl2ZXNdLg0KDQogIElmIHlvdSBhbHNvIHdp c2ggdG8gcmVjZWl2ZSBpdCBldmVyeSB3ZWVrIGJ5IG1haWwsIHlvdSBtYXkgc3Vic2NyaWJlDQog IFtvbmxpbmVdLg0KDQogIFtBbGFuIFNjaG1pdHRdDQoNCg0KW3NlbmQgbWUgYSBtZXNzYWdlXSA8 bWFpbHRvOmFsYW4uc2NobWl0dEBwb2x5dGVjaG5pcXVlLm9yZz4NCg0KW3RoZSBhcmNoaXZlXSA8 aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1lLm5ldC9jd24vPg0KDQpbUlNTIGZlZWQgb2YgdGhlIGFy Y2hpdmVzXSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1lLm5ldC9jd24vY3duLnJzcz4NCg0KW29u bGluZV0gPGh0dHA6Ly9saXN0cy5pZHlsbC5vcmcvbGlzdGluZm8vY2FtbC1uZXdzLXdlZWtseS8+ DQoNCltBbGFuIFNjaG1pdHRdIDxodHRwczovL2FsYW4ucGV0aXRlcG9tbWUubmV0Lz4NCg0K --=-=-= Content-Type: text/html; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable OCaml Weekly News

OCaml Weekly News

Previous Week<= /a> Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of June 15 to 22, 2021.

First releases of dirsp-exchange: auditable variant of Signal = Protocol and ProScript-to-OCaml translator

jbeckford announced

I'm pleased to announce the first release of dirsp-exchange<= /a>, available today from the Opam repositories.

The intent of the [dirsp] libraries is to provide software engineers= with auditable source code that has some level of safety assurance (typically proofs) from security re= searchers.

The first libraries are:

  • dirsp-exchange-kbb2017 0.1.0 - The KBB2017 protocol for securing a two-= party conversation. Similar to Signal Protocol v3 and Olm Cryptographic Rat= chet.
  • dirsp-ps2ocaml 0.1.0 - A ProScript to OCaml translator. ProScript is an= executable subset of JavaScript that can be formally verified.

and a couple more supporting libraries.

dirsp-exchange-kbb2017 has a build process that generates its = own OCaml code using dirsp-ps2ocaml on formally verified ProScript source code.

The canonical example for dirsp-exchange-kbb2017 is:

module P       =3D Dirsp_proscript_mirage.Make()
module ED25519 =3D P.=
Crypto.ED25519
module K       =3D Di=
rsp_exchange_kbb2017.Make(P)
module U       =3D K.=
UTIL

(* A=
lice sends a message to Bob *)
let aliceSessionWithBob =3D T.newSession (* ... supply some keys you create with ED25519 an=
d U ... *) ;;
let aliceToBobSendOutput =3D T.send
  aliceIdentityKey
  aliceSessionWithBob
  (P.of_string "Hi Bob!")

(* N=
ow you can send the output "aliceToBobSendOutput" from Alice to Bob.
   Let's switch to Bob's computer. He gets =
notified of a new message using a notification library of
your choosing, and then does ...  *)

let bobSessionWithAlice =3D T.newSession (* ... supply some keys ... *);;
let bobFromAliceReceiveOutput =3D T.recv
  bobIdentityKey
  bobSignedPreKey
  bobSessionWithAlice
  theEncryptedMessageBobReceivedFromAlice
assert (bobFromAliceReceiveOutput.ou=
tput.valid)
Format.printf "Bob just received a new message: %s\n"
  (bobFromAliceReceiveOutput.plaintext |>=
; P.to_bytes |> Bytes.t=
o_string)

These are early releases, especially dirsp-ps2ocaml.

Online docs are at http= s://diskuv.github.io/dirsp-exchange

Feedback, contributions and downloads are very welcome!

Job offer: 3 year research engineer in static analysis of OCam= l programs at Inria Rennes

Benoit Montagu announced

as part of a project between Inria and Nomadic Labs, we are offering a 3 ye= ar research engineer position, to work on static analysis for OCaml programs. The position will start in October in the Celtique Inria research team, in = the vibrant city of Rennes, France. If you are a talented OCaml programmer, if you are interested in static ana= lysis, or if you simply want to know more about this project, please contact me!

The detailed job description is here: https://jobs.inria.fr/public/classic/fr/of= fres/2021-03821

Please feel free to transfer this announce to people that you think could b= e interested.

IRC channels available on libera.chat

Deep in this thread, Romain Calascibetta announced

Just to let you know that I spent a time to re-implement the IRC protocol in OCaml and to deploy a simple MirageOS as a logger to save discussions into a Git repository. The bot is currently deployed, the explanation is available here: https://= github.com/dinosaure/cri/tree/master/unikernel And used for #mirage@irc.libera.chat

It's a nice example about MirageOS/unikernel and I may deploy one to save #ocaml@irc.libera.chat as whitequark already does with her bot.

Set up OCaml 2.0.0-beta

Sora Morimoto announced

Hopefully, this will be the last release before stable 2.0.0. This release = allows you to add multiple custom repositories, which enables testing with multicore and beta reposito= ry.

- name: Use Multicore OCaml
  uses: ocaml/setup-ocaml@v2
  with:
    ocaml-compiler: ocaml-variants.4.12.0+domains+effects
    opam-repositories: |
      multicore: https://github.com/ocaml-multicore/multicore-opam.git
      default: https://github.com/ocaml/opam-repository.git

First release of Jsonxt - a set of JSON parsers and writers

Stephen Bleazard announced

Jsonxt provides a number of JSON parsers and writers for RFC 8259 compliant= JSON as well as non-standard extensions supported by Yojson. Features include

  • RFC 8259 compliant when in strict and basic mode
  • Performance focused especially for files and strings
  • Support for standard and extended JSON tree types:
    • Strict follows a strict interpretation of RFC 8259 with all numbers rep= resented as floats.
    • Basic extends the strict type to include convenience types while mainta= ining RFC compliance. This is compatible with Yojson's Basic type
    • Extended adds additional non-standard types including tuples and varian= ts and is not RFC compliant. This is compatible with Yojson's Safe type
  • A number of different parsers including
    • A standard JSON tree parser for various sources including string, file = and channel
    • A Stream parser that returns a stream of raw JSON tokens.
    • A monad based parser compatible with async
  • Writers including
    • File and string writers
    • A monad based writer that is compatible with async
    • A stream writer that converts a stream of JSON tokens
  • Support for streaming JSON via the Stream module
  • Standard interfaces including Yojson compatibility
  • Support for ppx_deriving_yojson and ppx_yojson_conv<= /code> via Yojson compatibility

The package is available via opam, with documentation on = github.io. The source can be found at github/jsonxt<= /a>

mula 0.1.0, ML's radishal Universal Levenshtein Automata libra= ry

Ifaz Kabir announced

I'm happy to announce the release of my library mula. The pack= age uses Universal Levenshtein Automata (ULA) to not only check if a word is within a certain edit distance of anot= her, but to also output what the edit distance is! It uses the automata themselves to calculate edit dis= tances. A fun use case for this is that we can feed a set of words to the automaton and immediately ra= nk the words by their edit distance.

Mula supports both the standard Levenshtein edit distance as w= ell as the Demarau-Levenshtein distance which counts transpositions of two adjacent characters as a single edit. I = also support getting live error counts, so you can feed part of a string into an automaton, and get t= he minimum number of errors that have occurred so far.

I currently have matching working using non-deterministic ULA, but I have p= artially started the work toward the deterministic versions. It should be possible to pre-compute the= DFAs for up to edit distance 3 and pack it with the library, never needing to be recomputed bec= ause the Universal Automata are independent of the input strings. But the non-deterministic automata su= pport very large edit distances: (Sys.int_size - 1)/2, so they have value on their own.

This library came about from a desire to add a "did you mean" feature to a = toy compiler, but not wanting to write the kind of dynamic programming code that you can find in = the OCaml compiler [1] or merlin/spelll [2,3].

You can find the library here and the documentation here. It's not on opam yet, but I have submitted a pull request.

Happy OCamling!

References:

  1. Edit distance in the OCaml compiler. h= ttps://github.com/ocaml/ocaml/blob/e5e9c5fed56efdd67601e4dbbaebeb134aee361c= /utils/misc.ml#L516.
  2. Edit distance in merlin. https://= github.com/ocaml/merlin/blob/444f6e000f6b7dc58dac44d6ac096fc0e09894cc/src/u= tils/misc.ml#L527
  3. Edit distance in spelll. https://gith= ub.com/c-cube/spelll/blob/3da1182256ff2507a0be812f945a7fe1a19adf9b/src/Spel= ll.ml#L26

Ifaz Kabir then added

Some details:

I followed the paper by Touzet [1] as much as possible. If you take a look = at the code, you'll see a a lot of +1's for 1-indexing. This was to keep the implementation as close to= the paper as possible! (If you do want to check the implementation against the paper, note that the pa= per has a typo in Definition 2). For the Demarau-Levenshtein automaton, I a= dapted Figure 9 from Mitankin's thesis [2]. I'm convinced that my adaptation works, but my adaptation of Touzet's subsumption relatio= n for Demarau-Levenshtein might be slightly sub-optimal. If you have question about the adaptation, f= eel free to ask!

mula does not completely replace c-cube's spelll = package. In particular I don't support any indexs, etc. But there are some interesting differences in the automata they use. (= w stands for the base word here)

  1. The spelll package creates the Levenshtein Automaton for a= single string/word (LA_w), mula uses Universal Levenshtein Au= tomata (ULA).
  2. Spelll computes a DFA from a non-deterministic automaton t= hat uses eplison transitions. ULA do not have epsilon transitions, but for = transitions it looks ahead into the base word w. Additionally = the NFA's states/transitions are computable on the fly, so there is no need= to store the NFA in memory.
  3. Spelll's automata transitions using characters. mula= computes a bitvector from an input character to transition from sta= tes to states. (Computing the bitvector is where the look ahead comes in).<= /li>
  4. Spelll's automata return true~/~false, and us= es a separate function to calculate edit distances. Mula uses = the automaton itself to calculate edit distances, the outputs have type int option. (LA_w can be modified to support this though!)

References:

  1. On the Levenshtein Automaton and the Size of the Neighborhood of a Word= . H=C3=A9l=C3=A8ne Touzet https://hal.archives-ouvertes.fr/hal-01360482/fi= le/LATA2016.pdf
  2. Universal Levenstein Automata: Building and Properties. Petar Nikolaev = Mitankin. https://store.fmi.uni-sofia.bg/fmi/logic/theses/mitankin-en.pdf<= /a>

New release of mlcuddidl, the OCaml interface to the CUDD BDD = library

nberth announced

I'm pleased to write this first release announcement for the mlcuddidl package.

These bindings to the CUDD BDD library were initially written by Bertrand J= eannet and have been around as an OPAM package for quite some time now. The source code is now hosted = on framagit.

This release of version 3.0.7 mostly ports the package to OCaml versions = =E2=89=A5 4.10.

first release of orf: OCaml Random Forests

UnixJunkie announced

I finished implementing a classifier and regressor using Random Forests (seminal paper: https://link.springer.com/article/10.1023/A:1010933404324):

https://github.com/UnixJunkie= /orf

Some caveats:

  • this is somewhat slow; especially the classifier (and I don=E2=80=99t k= now so much how to accelerate it; probably two orders of magnitude slower t= han sklearn).
  • this is not super generic (int IntMap sparse features only; i.e. a spar= se vector of integers represents a sample).

The package is now available in opam (opam install orf).

Two interfaces are exposed:

RFC (for classification) https= ://github.com/UnixJunkie/orf/blob/master/src/RFC.mli

RFR (for regression) https= ://github.com/UnixJunkie/orf/blob/master/src/RFR.mli

The test file shows some usage examples: https= ://github.com/UnixJunkie/orf/blob/master/src/test.ml

If you want to help, I tried to flag a few things for the near future: https://github.com/Uni= xJunkie/orf/issues

If you use it and if it is useful to you, I would be happy to know.

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 <= a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive= s.

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

--=-=-=--