From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=192.134.164.83; helo=mail2-relais-roc.national.inria.fr; envelope-from=caml-list-owner@inria.fr; receiver= Authentication-Results: plum; dmarc=fail (p=none dis=none) header.from=polytechnique.org Authentication-Results: plum.tunbury.org; dkim=pass (1024-bit key; unprotected) header.d=inria.fr header.i=@inria.fr header.a=rsa-sha256 header.s=dc header.b=NSIPclam; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=polytechnique.org header.i=@polytechnique.org header.a=rsa-sha256 header.s=svoboda header.b=rr7oa9x+; dkim-atps=neutral Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by plum.tunbury.org (Postfix) with ESMTPS id 1A13FB80123 for ; Tue, 26 Nov 2024 08:30:13 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=from:to:date:message-id:mime-version:subject:reply-to: sender:list-id:list-help:list-subscribe:list-unsubscribe: list-post:list-owner:list-archive; bh=iGKId240KdP4Kd/42IDGwXdjNg0PYqJ5btHQ1V6uDuI=; b=NSIPclamNBR/9aLDD7NDFpMGk3CdquOwCjyjQG7YD/iSDHaEOHscWir+ K4/33bntr7xwPueCsOZvoDgXdTvyXFUuHa/Hi8+Jpm1WLA6MnOdUF2AxM Eus32p1zZyhW8+Ac02z2TH+2TAapNJ9r2sql+qvL/wscoPAlVae93rDPR U=; Received-SPF: Pass (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr designates 128.93.162.160 as permitted sender) identity=mailfrom; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="caml-list-owner@inria.fr"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 include:mailout.safebrands.com a:basic-mail.safebrands.com a:basic-mail01.safebrands.com a:basic-mail02.safebrands.com ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160 ip4:128.93.162.3 ip4:128.93.162.88 ip4:89.107.174.7 mx ~all" Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@sympa.inria.fr) identity=helo; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="postmaster@sympa.inria.fr"; x-conformance=spf_only Authentication-Results: mail2-relais-roc.national.inria.fr; spf=Pass smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@sympa.inria.fr; dkim=hardfail (signature did not verify [final]) header.i=@polytechnique.org X-IronPort-AV: E=Sophos;i="6.12,185,1728943200"; d="scan'208,217";a="195797004" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 26 Nov 2024 09:30:12 +0100 Received: by sympa.inria.fr (Postfix, from userid 20132) id EA89AE0D21; Tue, 26 Nov 2024 09:30:11 +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 1915CE00B6 for ; Tue, 26 Nov 2024 09:30:07 +0100 (CET) IronPort-SDR: 6745870c_u/ko2Ya7CJahaXs+POBkgOnPWP7n7hF4+z5cnpp06a4qEcw omsgQD10RJio65mL9qrAZpmf0NTSjzYP5BJwXWQ== X-IPAS-Result: =?us-ascii?q?A0EWDQAJhkVngSIeaIFagl6BP1soGQFjWjMHCEiEVoNPj?= =?us-ascii?q?h+BFQGQN4p3gnsDGBYjFAEDAQ0uAQUNAQIEAQEDAQIBggyCdAIWikUCHwYBB?= =?us-ascii?q?DQTAQIEAQEBAQMCAwEBAQEBARABAQUBAQECAQECBAYBAhABAT0FSYV7DUkBA?= =?us-ascii?q?QEBAQEBAQEEBIFrLSRxYQQDBgYBAQEBAQEBAQEnAQEBAQEBAQEBAQEBAQEBA?= =?us-ascii?q?QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIIBAEzBAtcAQgKEwEBJgUNG?= =?us-ascii?q?CMDFAEGAwIEDQE1FwEJCRQGgg9Zgh9FAwUMBj+TCJtLeoEygQGCDAEBBoEIP?= =?us-ascii?q?gIBAgkCBQ8v2gaBZAmBSIVqgkgaASpIagKERgmDOHsnD4FVRIEVNYFzSgdvg?= =?us-ascii?q?j8FBhcBAQEBGEICYAEBAksJgyWCaYIoChItTDgCB4EsgTNkEiMCdxyDc4IPX?= =?us-ascii?q?oENg35Hgm0QAlaBXIIagT+BMIEPghAEiTSBR0szMgFVExcLBwVggRYDgXmBT?= =?us-ascii?q?YE2gVFDgk5KhQyBAzmCEWlLOgINAjaCJCRZgk2DWIFBhGmEXIYYHUADC209N?= =?us-ascii?q?xQboD0BCTNpAUaCew4KARQQCQYBATwPCygFBQULCQgIAgQCBRsCDR8CBAMBB?= =?us-ascii?q?QkqAR8TDgkFBQQEGAcIDRIFAwECOgOSPAgMJQMjB3eSHoo9k1EdbTQHhB2BX?= =?us-ascii?q?QYMiEBDgSSSJINWhASBV4U6hXSHAJJIIphZIoI0hyWBJQlfgXiVJgIFHgcEB?= =?us-ascii?q?DqFFIF+IzxvARoBDgczGjBDDQaCVAkKPBwPji0WgUmCD4E+gSaBdTuCbcA7Q?= =?us-ascii?q?jUCAQE3AgcBCgEBAwmFYgEBgiGBF4EhOoE1hD4EMG5dAQE?= IronPort-PHdr: A9a23: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 42BrpyMxlTi IronPort-Data: A9a23:IMiipq6yR8lKetx6wyqpzgxRtJXDchMFZxGqfqrLsTDasY5as4F+v mtLCj/XP/3cZmDxfdt1PYzj9BtQupaGyNJkQQFsqHwzZn8b8sCt6faxfh6hZXvKRiHgZBs6t JtGMoGowOQcFCK0SsKFa+C5xZVE/fjUAOC6UoYoAwgpLSd8UiAtlBl/rOAwh49skLCRDhiE0 T/Ii5S31GSNhXgtaAr414rZ8Ekz5a2o5mtB1rADTakjUGH2xyF94K03fvnZw0vQGuF8AuO8T uDf+7C1lkuxE8AFV7tJOp6iGqE7aua60Tqm0hK6aID+6vR2nRHe545gXBYqhei7vB3S9zx54 I0lWZVd0m7FNIWU8AgWe0Ew/y2TocSqUVIISJSymZX78qHIT5fj6/VrKWsxOaQaxux+ID9T0 uUpGj0uNinW0opawJrjIgVtrsEzdY/zO4cOpnxrzTfYFOsrB5fZTM0m5/cBhmZ235gSW62GI ZFFAdZsREyojxlnAW0sUMcwnruS00LBJiVfrEOJqKE35WnK0QE316LiZdPRc9rMXs5Vm0eEu krM+Hn/CRwBctnD2XyC6H3EaurnxHuhBtlJSOzhnhJsqAOx314+IS0obHCqrOCH1mGkRPh/d VNBr0LCqoBpqRD1FYalN/Gim1aPtxsYHt5RCPES8xCI0qOS4gCDB2FCQCQpVTA9nMomHHoy0 VuYg97iBTpuqaCYD3WH+d94sA9eJwAVKEooYistTzcP6vi9vaYqvyDCbY5aRfvdYsLOJRn8x DWDrS4bjroVjNIW26jTwbwhq2n8znQuZlVljjg7Tl6YAhVFiJmNSbbA1LQ2xfNQdcCBSV2Qo HUPm86f9f0DS5aXm0Rhodnh/pn3vZ5p0xWF3zaD+qXNERz3qxZPmqgKsVlDyL9BaJpsRNMQS Ba7VfltzJFSJmC2SqR8fpi8Dc8npYC5So+/C62FM4IXPckpHONiwM2ITRLOt4wKuBR8+ZzTx b/AGSpRJShHVP85pNZIb7tGj+5DKt8CKZP7Hs2nkU/4idJylVaYQrABPROWaeQo8K6PoAPU6 stSf8aS0B5HONASkQGKmbP/2WsidCBhbbiv8pQ/XrfacmJb9JQJUa65LUUJId09x/w9eyah1 i3VZ3K0P3Kk2iabeV3UMiszAF4tNL4mxU8G0eUXFQ7A8xAejUyHts/zrrNmLOF1x/8p1vNuU fgOduOJB/kFGHyN+C0QYdO55MZufQiiz1DGdSe0QikNT7g5TSzw+/jgYlTO8gsKBXGJrscQm eCr+T7aZpshfD5cKvjqRsih9H6LhkhFqtlOBxPJBvJxZHTT9JNbLn2tr/0vfOAJBxbx5hqb8 Ae0Hh1CtbTBjLE3+faUnau0kYONFrpvLFt7BEje1669bgPBz1qgwKhBceeGRi/cX2XK45efZ f1Z4vX/Ef8flnNIjtZMKKlqxqcA+Nffnb9W4QB6FnHtbV7wKLdfDlSZ/MtI7Ith+6R4vFaoZ 0ex5dVqA7WFF8f7Glo3JgB+TOCi1+kRqwbC/8YOP0T2yy9mzoWpCXwIEUG3txVcC79pPKcO4 +Qr4pcW4jPirCsaCI+NiyQM+lmcKnAFbb4ciagbJ43WkSsu9EBJZM3NKy3x4azXUe52DGsRH ma2ipbB1pNm/WiTV1ooFHPI4/hRuoRWhjBO0205Bgqonvjru6YJ+SN/oBUNcxRt7xRY0uhMF HBhGG9rKI6voTp5pshxcFq9OgNGBRep9VzVzXEXnk3dF3uXcGvHKWktNdmw4UpC0WR9fydaz p6c2m3KQTbnR+Cv/yoQCGpOie3vcsx1zSLGwPuYJsWiG4IoRBbYmYqsWDY4kATmCsYPm0H3n +lm0+JuY6ndNyRLgakEJ6SF9LYXEjaoGXdjRKx/waY3Am3sQjG+9jyQIUSXeMkWBfjr81e9O vN+NPB0SBWy+yafnA81XZdWDedPo8cow94edpfAB20M6eKfpwU0lqPgzHH1gWtzTuh+lco4F JjqSAuDNW6tnlpRpX7GqZhVG2i/YORcXjbG4sKOzLwrGa4A4cZWSmNj9puvvn6QDhlrwALMg iPHeJ3t7rJDzaZCotLSN5ttViuILeH9buCqyDyIks9vaIrPOPjetglOpVjAOR9XDIQrWN92t Oqstfzp0HyYvoQGdn3Tp6PdM6wY9PejffF2N/jvJyJwhhqyW87L4joC9VunKJdPrshv28m/S ya8a+qybdQwWeoB9EZKaiNbLQkRO573Yojkuym5ifaGUToZ7iDqM/Kl8iXPQVxAVypVJaD7N BD4i8yu6v9cso5IIh0OXNNiIp1gJW7cSbkUTMLwuRaYH1uXrAu74JW6riUZ6BbPFnWgO+T56 8icRhHBKTKDiJuRx9Rd64FPrhkbCUhmutYJf2UfxsVXjg6rB2tXPMUfNpQ7UqtvqBLQ762hR j/xbzoFMx7fDAR0KUC2pJypWwqEHeUBN+voPjFjrQvedy6yA5jGG7d7sDtp53BtYDb40eW7M pck92btOgSqiIRcLQrJCidXXc88rh8b+p4Jxaw5u8niWlAGBrEbyHFqHAxMTDHKVcbXmy0n4 EArEHtcThjTpVHZSK5dl7x9QXn1fw8DCx0iajqJy9vE/YDH3KtH0vKX1yTbzOgYdMpTTFIRb SqfeoZOilx6HlQLvq84p98igal1EO+GWM+gI8cPgOHUc76YsgwaAi/JocbDoAzONuKS/5MxW wRAO0QDOXk= IronPort-HdrOrdr: A9a23:lzfQ4qiqbTmOQBaxHNX1Ccsu0nBQX5p13DAbv31ZSRFFG/Gwv9 ulnfQF2RKxoCt5YgBipTnhAsW9qKjnhNpICet4B8baYOCCggaVxe5ZnPffKlfbdREWyNQtop uIH5IOeeEZ4zBB/IbHCCfRKads/DCsytHjuQ9HpE0dDD2DUslbnklE4uzyKDw7eOA+P+t3KH P+3Ls5m9PDQwVrUi3hPAhyLqH+TrTw/fqMC39ndnxXjXjr/FTYjs+AYmKlN3ElIkFyKJgZgC D4emfCl9aeWp+Au2/hPiPonuprcOWK8Ko3OOW8zu4PKjvtjQ6sIKlCe5nHhjA6p+mz9E0n+e O84SvJ6a9ImjbslwyOzicE0GPboUITAqDZuDzo+UfLkIj/QnYzEMBBhZ1UGyGpoHYdgA== X-Talos-CUID: =?us-ascii?q?9a23=3AmzDKCGnbeOhnbvkAI8p4xJ0SlhjXOX3Y6V3XJ2a?= =?us-ascii?q?6NWxgaeOIbkahyq5Hy/M7zg=3D=3D?= X-Talos-MUID: =?us-ascii?q?9a23=3AcFxHFQwtz/dWch/8Zev62DhVuSGaqPqMEXIguKU?= =?us-ascii?q?4guKVODVOZxiHkx6XHJByfw=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="6.12,185,1728943200"; d="scan'208,217";a="102633491" X-MGA-submission: =?us-ascii?q?MDEBqIIiYph0zQ1/uCIoPoNiHn296vnfX9LppS?= =?us-ascii?q?armXxR8yjqyBp2GfjEyzVdWmCZHnx6NsG38vM5I0xAgGJsjClJ9mVzgs?= =?us-ascii?q?S3vh6h8LCmryDd6tylmbthWYMu9GIOBUfoNd6br7ApzijsUNUA41nwmD?= =?us-ascii?q?R4Y+TkrP9VKl7xxDZh8KE7Xg=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Nov 2024 09:30:05 +0100 Received: from mac-03220211.irisa.fr (mac-03220211.irisa.fr [131.254.21.249]) (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 09A215649E2; Tue, 26 Nov 2024 09:30:03 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=polytechnique.org; s=svoboda; t=1732609803; bh=GvXYH1Bg0n6xtBLVUFT/7m7wj/gI2PHB95KATyWiNU4=; h=From:To:Subject:Date:Message-ID; b=rr7oa9x++DS6FL+jKyboiqhVQOTTdJANe0ZgW/Tsmu6PvO/LjnqfNETREcObaEMA8 syrJjTcTHVodbRDBCdkSa/R8mA7B4y3NhBUlR+rfWxNa6VNLoC0o6cytBgWXDfbzCq pHjaGW2I7u+IwUV3TZEgvi37h7AkWvr3deay3l0g= From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 26 Nov 2024 09:30:02 +0100 Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Nov 26 09:30:03 2024 +0100 (CET)) X-Spam-Flag: Unsure, tests=bogofilter, spamicity=0.494532, queueID=433245649E3 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: 19214 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 ZWsgb2YgTm92ZW1iZXIgMTkgdG8gMjYsDQoyMDI0Lg0KDQpUYWJsZSBvZiBDb250ZW50cw0K4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCk9DYW1s IDUuMi4xIHJlbGVhc2VkDQpzbWF3cyBwcmV2aWV3IHJlbGVhc2UsIGFuIEFXUyBTREsgZm9yIE9D YW1sIHVzaW5nIGVpbw0KcHB4X2Rlcml2aW5nX2V6anNvbm0NCkZVTiBPQ2FtbCBub3cgaGFzIGEg WW91VHViZSBDaGFubmVsDQpUZXJyYXRlYW0ncyBvcGVuIHNvdXJjZSBPY2FtbCByZXBvc2l0b3J5 DQpPVVBTIGRlY2VtYmVyIDIwMjQNCkR1bmUgZGV2IG1lZXRpbmcNCk90aGVyIE9DYW1sIE5ld3MN Ck9sZCBDV04NCg0KDQpPQ2FtbCA1LjIuMSByZWxlYXNlZA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0 dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9vY2FtbC01LTItMS1yZWxlYXNlZC8xNTYzNC8xPg0K DQoNCm9jdGFjaHJvbiBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFdlIGhhdmUgdGhlIHBsZWFzdXJlIG9mIGFu bm91bmNpbmcgdGhlIHJlbGVhc2Ugb2YgT0NhbWwgNS4yLjEsDQogIGRlZGljYXRlZCB0byB0aGUg bWVtb3J5IG9mIE5pZWxzIEJvaHIgYW5kIFBhdWwgw4lsdWFyZCBvbiB0aGUNCiAgYW5uaXZlcnNh cnkgb2YgdGhlaXIgZGVhdGhzLg0KDQogIE9DYW1sIDUuMi4xIGlzIGEgY29sbGVjdGlvbiBvZiBz YWZlIGJ1dCBpbXBvcnQgcnVudGltZSB0aW1lIGJ1ZyBmaXhlcw0KICBiYWNrcG9ydGVkIGZyb20g dGhlIDUuMyBicmFuY2ggb2YgT0NhbWwgdG8gaW1wcm92ZSB0aGUgc3RhYmlsaXR5IG9mDQogIHRo ZSA1LjIgcnVudGltZSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdXBjb21pbmcgcmVsZWFzZSBvZiBP Q2FtbCA1LjMuMC4NCg0KICBUaGUgZnVsbCBsaXN0IG9mIGJ1ZyBmaXhlcyBpcyBhdmFpbGFibGUg YmVsb3cgZm9yIG1vcmUgZGV0YWlscy4NCg0KICBIYXBweSBoYWNraW5nLCBGbG9yaWFuIEFuZ2Vs ZXR0aSwgZm9yIHRoZSBPQ2FtbCB0ZWFtLg0KDQoNCkluc3RhbGxhdGlvbiBJbnN0cnVjdGlvbnMN CuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIFRoZSBiYXNlIGNvbXBpbGVyIGNhbiBiZSBpbnN0YWxs ZWQgYXMgYW4gb3BhbSBzd2l0Y2ggd2l0aCB0aGUNCiAgZm9sbG93aW5nIGNvbW1hbmRzOg0KDQog IOKUjOKUgOKUgOKUgOKUgA0KICDilIIgb3BhbSB1cGRhdGUNCiAg4pSCIG9wYW0gc3dpdGNoIGNy ZWF0ZSA1LjIuMQ0KICDilJTilIDilIDilIDilIANCg0KICBUaGUgc291cmNlIGNvZGUgZm9yIHRo ZSByZWxlYXNlIGlzIGFsc28gZGlyZWN0bHkgYXZhaWxhYmxlIG9uOg0KDQogIOKAoiBbR2l0SHVi XQ0KICDigKIgW0lucmlhIGFyY2hpdmVdDQoNCg0KW0dpdEh1Yl0gPGh0dHBzOi8vZ2l0aHViLmNv bS9vY2FtbC9vY2FtbC9hcmNoaXZlLzUuMi4xLnRhci5nej4NCg0KW0lucmlhIGFyY2hpdmVdDQo8 aHR0cHM6Ly9jYW1sLmlucmlhLmZyL3B1Yi9kaXN0cmliL29jYW1sLTUuMi9vY2FtbC01LjIuMS50 YXIuZ3o+DQoNCg0KQnVnIEZpeGVzIEluIE9DYW1sIDUuMi4xICgxOCBOb3ZlbWJlciAyMDI0KQ0K 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWMDQoNCuKXiiBSdW50aW1lIFN5c3RlbToNCg0KICDigKIgWyMxMzIwN106 IEJlIHN1cmUgdG8gcmVsb2FkIHRoZSByZWdpc3RlciBjYWNoaW5nIHRoZSBleGNlcHRpb24NCiAg ICBoYW5kbGVyIGluIGBjYW1sX2NfY2FsbCcgYW5kIGBjYW1sX2NfY2FsbF9zdGFja19hcmdzJywg YXMgaXRzIHZhbHVlDQogICAgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIGlmIHRoZSBPQ2FtbCBzdGFj ayBpcyBleHBhbmRlZCBkdXJpbmcgYQ0KICAgIGNhbGxiYWNrLiAgKE1pb2QgVmFsbGF0LCByZXBv cnQgYnkgVmVzYSBLYXJ2b25lbiwgcmV2aWV3IGJ5IEdhYnJpZWwNCiAgICBTY2hlcmVyIGFuZCBY YXZpZXIgTGVyb3kpDQogIOKAoiBbIzEzMjUyXTogUmV3b3JrIHJlZ2lzdGVyIGFzc2lnbm1lbnQg aW4gdGhlIGludGVycHJldGVyIGNvZGUgb24gbTY4aw0KICAgIG9uIExpbnV4LCBkdWUgdG8gdGhl ICVhNSByZWdpc3RlciBiZWluZyB1c2VkIGJ5IEdMSUJDLiAgKE1pb2QNCiAgICBWYWxsYXQsIHJl cG9ydCBieSBTdMOpcGhhbmUgR2xvbmR1LCByZXZpZXcgYnkgR2FicmllbCBTY2hlcmVyIGFuZA0K ICAgIFhhdmllciBMZXJveSkNCiAg4oCiIFsjMTMyNjhdOiBGaXggYSBjYWxsIHRvIHRlc3QgaW4g YGNvbmZpZ3VyZS5hYycgdGhhdCB3YXMgY2F1c2luZw0KICAgIGVycm9ycyB3aGVuIExERkxBR1Mg Y29udGFpbnMgc2V2ZXJhbCB3b3Jkcy4gIChTdMOpcGhhbmUgR2xvbmR1LA0KICAgIHJldmlldyBi eSBNaW9kIFZhbGxhdCkNCiAg4oCiIFsjMTMyMzRdLCBbIzEzMjY3XTogT3BlbiBydW50aW1lIGV2 ZW50cyBmaWxlIGluIHJlYWQtd3JpdGUgbW9kZSBvbg0KICAgIEFSTWVsIChBUk12NSkgc3lzdGVt cyBkdWUgdG8gYXRvbWljIG9wZXJhdGlvbnMgbGltaXRhdGlvbnMgb24gdGhhdA0KICAgIHBsYXRm b3JtLiAgKFN0w6lwaGFuZSBHbG9uZHUsIHJldmlldyBieSBNaW9kIFZhbGxhdCBhbmQgVmluY2Vu dA0KICAgIExhdmlyb24pDQogIOKAoiBbIzEzMTg4XTogZml4IHJhY2VzIGluIHRoZSBGRkkgY29k ZSBjb21pbmcgZnJvbSB0aGUgdXNlIG9mDQogICAgYEludF92YWwoLi4uKScgIG9uIHJvb3RlZCB2 YWx1ZXMgaW5zaWRlIGJsb2NraW5nIHF1ZXN0aW9ucyAvIHdpdGhvdXQNCiAgICB0aGUgcnVudGlt ZSBsb2NrLiAgKENhbGxpbmcgYEludF92YWwoLi4uKScgb24gbm9uLXJvb3RlZCBpbW1lZGlhdGVz DQogICAgaXMgZmluZSwgYnV0IGFueSBhY2Nlc3MgdG8gcm9vdGVkIHZhbHVlcyBtdXN0IGJlIGRv bmUgb3V0c2lkZQ0KICAgIGJsb2NraW5nIHNlY3Rpb25zIC8gd2l0aCB0aGUgcnVudGltZSBsb2Nr LikgIChFdGllbm5lIE1pbGxvbiwgcmV2aWV3DQogICAgYnkgR2FicmllbCBTY2hlcmVyLCBKYW4g TWlkdGdhYXJkLCBPbGl2aWVyIE5pY29sZSkNCiAg4oCiIFsjMTMzMThdOiBGaXggcmVncmVzc2lv biBpbiBHQyBhbGFybXMsIGFuZCBmaXggdGhlbSBmb3IgRmxhbWJkYS4NCiAgICAoR3VpbGxhdW1l IE11bmNoLU1hY2NhZ25vbmksIHJlcG9ydCBieSBCZW5qYW1pbiBNb25hdGUsIHJldmlldyBieQ0K ICAgIFZpbmNlbnQgTGF2aXJvbiBhbmQgR2FicmllbCBTY2hlcmVyKQ0KICDigKIgWyMxMzE0MF06 IFBPV0VSIGJhY2stZW5kOiBmaXggaXNzdWUgd2l0aCBjYWxsIHRvDQogICAgYGNhbWxfY2FsbF9y ZWFsbG9jX3N0YWNrJyBmcm9tIGEgRExMIChYYXZpZXIgTGVyb3ksIHJldmlldyBieSBNaW9kDQog ICAgVmFsbGF0KQ0KICDigKIgWyMxMzM3MF06IEZpeCBhIGxvdy1wcm9iYWJpbGl0eSBjcmFzaCB3 aGVuIGNhbGxpbmcgYEdjLmNvdW50ZXJzJy4NCiAgICAoRGVtaSBNYXJpZSBPYmVub3VyLCByZXZp ZXcgYnkgR2FicmllbCBTY2hlcmVyKQ0KICDigKIgWyMxMzQwMl0sIFsjMTM1MTJdLCBbIzEzNTQ5 XSwgWyMxMzU1M106IFJldmlzZSBieXRlY29kZQ0KICAgIGltcGxlbWVudGF0aW9uIG9mIGNhbGxi YWNrcyBzbyB0aGF0IGl0IG5vIGxvbmdlciBwcm9kdWNlcyBkYW5nbGluZw0KICAgIHJlZ2lzdGVy ZWQgYnl0ZWNvZGUgZnJhZ21lbnRzLiAgKFhhdmllciBMZXJveSwgcmVwb3J0IGJ5IEphbg0KICAg IE1pZHRnYWFyZCwgYW5hbHlzaXMgYnkgU3RlcGhlbiBEb2xhbiwgcmV2aWV3IGJ5IE1pb2QgVmFs bGF0KQ0KICDigKIgWyMxMzUwMl06IEZpeCBtaXNpbmRleGluZyByZWxhdGVkIHRvIGBHYy5maW5h bGlzZV9sYXN0JyB0aGF0IGNvdWxkDQogICAgcHJldmVudCBmaW5hbGlzZXJzIGZyb20gYmVpbmcg cnVuLiAgKE5pY2sgUm9iZXJ0cywgcmV2aWV3IGJ5IE1hcmsNCiAgICBTaGlud2VsbCkNCiAg4oCi IFsjMTM1MjBdOiBGaXggY29tcGlsYXRpb24gb2YgbmF0aXZlLWNvZGUgdmVyc2lvbiBvZg0KICAg IHN5c3RocmVhZHMuIEJ5dGVjb2RlIGZpZWxkcyB3ZXJlIGJlaW5nIGluY2x1ZGVkIGluIHRoZSB0 aHJlYWQNCiAgICBkZXNjcmlwdG9ycy4gIChEYXZpZCBBbGxzb3BwLCByZXZpZXcgYnkgU8OpYmFz dGllbiBIaW5kZXJlciBhbmQgTWlvZA0KICAgIFZhbGxhdCkNCg0KDQogIFsjMTMyMDddIDxodHRw czovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzEzMjA3Pg0KDQogIFsjMTMyNTJdIDxo dHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzEzMjUyPg0KDQogIFsjMTMyNjhd IDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzEzMjY4Pg0KDQogIFsjMTMy MzRdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzEzMjM0Pg0KDQogIFsj MTMyNjddIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzEzMjY3Pg0KDQog IFsjMTMxODhdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzEzMTg4Pg0K DQogIFsjMTMzMThdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzEzMzE4 Pg0KDQogIFsjMTMxNDBdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzEz MTQwPg0KDQogIFsjMTMzNzBdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVz LzEzMzcwPg0KDQogIFsjMTM0MDJdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNz dWVzLzEzNDAyPg0KDQogIFsjMTM1MTJdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwv aXNzdWVzLzEzNTEyPg0KDQogIFsjMTM1NDldIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2Nh bWwvaXNzdWVzLzEzNTQ5Pg0KDQogIFsjMTM1NTNdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwv b2NhbWwvaXNzdWVzLzEzNTUzPg0KDQogIFsjMTM1MDJdIDxodHRwczovL2dpdGh1Yi5jb20vb2Nh bWwvb2NhbWwvaXNzdWVzLzEzNTAyPg0KDQogIFsjMTM1MjBdIDxodHRwczovL2dpdGh1Yi5jb20v b2NhbWwvb2NhbWwvaXNzdWVzLzEzNTIwPg0KDQoNCnNtYXdzIHByZXZpZXcgcmVsZWFzZSwgYW4g QVdTIFNESyBmb3IgT0NhbWwgdXNpbmcgZWlvDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1s Lm9yZy90L2Fubi1zbWF3cy1wcmV2aWV3LXJlbGVhc2UtYW4tYXdzLXNkay1mb3Itb2NhbWwtdXNp bmctZWlvLzE1NjM1LzE+DQoNCg0KQ2hyaXMgQXJtc3Ryb25nIGFubm91bmNlZA0K4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSADQoNCiAgSSdtIHBsZWFzZWQgdG8gYW5ub3VuY2UgdGhlIGZpcnN0IHByZXZpZXcg cmVsZWFzZSBmb3IgdGhlIFtzbWF3c10NCiAgbGlicmFyeSAoYDAuMX5wcmV2aWV3MScpLg0KDQog ICpbc21hd3NdKiBwcm92aWRlcyBBV1MgYmluZGluZ3MgZm9yIE9DYW1sIHVzaW5nIHRoZSBtb2Rl cm4gW2Vpb10NCiAgIGxpYnJhcnkgZm9yIGVmZmVjdHMtYmFzZWQgY29uY3VycmVuY3kgaGFuZGxp bmcuDQoNCg0KW3NtYXdzXSA8aHR0cHM6Ly9naXRodWIuY29tL2NocmlzLWFybXN0cm9uZy9zbWF3 cz4NCg0KW2Vpb10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC1tdWx0aWNvcmUvZWlvPg0KDQpM aW5rcw0K4pWM4pWM4pWM4pWM4pWMDQoNCiAg4oCiIFtJbnN0YWxsYXRpb24gYW5kIFVzYWdlIGlu c3RydWN0aW9uc10NCiAg4oCiIFtFeGFtcGxlc10NCg0KDQpbSW5zdGFsbGF0aW9uIGFuZCBVc2Fn ZSBpbnN0cnVjdGlvbnNdDQo8aHR0cHM6Ly9jaHJpcy1hcm1zdHJvbmcuZ2l0aHViLmlvL3NtYXdz L3NtYXdzLWNsaWVudHMvPg0KDQpbRXhhbXBsZXNdDQo8aHR0cHM6Ly9naXRodWIuY29tL2Nocmlz LWFybXN0cm9uZy9zbWF3cy90cmVlL21haW4vYXdzc2RrbGliX2V4YW1wbGVzPg0KDQoNCldoYXRz IGluIHRoaXMgcmVsZWFzZQ0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgVGhpcyByZWxlYXNlIGluY2x1ZGVzIFNES3Mg Zm9yIHNvbWUgQVdTIHNlcnZpY2VzIGFuZCBpcyBpbnRlbmRlZCB0bw0KICBkZW1vbnN0cmF0ZSBp dHMgQVBJLg0KDQogIEl0IGlzIG5vdCBwcm9kdWN0aW9uIHJlYWR5LCBsYWNraW5nIGltcG9ydGFu dCBmZWF0dXJlcyBzdWNoIGFzIGZ1bGwNCiAgQVBJIGRvY3VtZW50YXRpb24gRUMyL0VDUyBpbnN0 YW5jZSBtZXRhZGF0YSBhdXRoZW50aWNhdGlvbiwgcmV0cnkgYW5kDQogIHRpbWVvdXQgaGFuZGxp bmcsIGV0Yy4gSXQgYWxzbyBuZWVkcyBzdXBwb3J0IGZvciB0aGUgb3RoZXIgaW50ZXJuYWwNCiAg QVdTIEFQSSB0eXBlcyB0byBleHRlbmQgY292ZXJhZ2UgYWNyb3NzIG1vc3QgQVdTIHNlcnZpY2Vz Lg0KDQoNCk1vdGl2YXRpb24NCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIEkg d2FudGVkIHRvIGJ1aWxkIGFuIEFXUyBTREsgdXNpbmcgbW9kZXJuIGVmZmVjdHMtYmFzZWQNCiAg Y29uY3VycmVuY3kuIEkndmUgYnVpbHQgc2ltaWxhciBiaW5kaW5ncyBmb3IgUmVTY3JpcHQgYW5k IFJlYXNvbk1MIGluDQogIHRoZSBwYXN0IChzb21lIG9mIHRoZSBjb2RlIGlzIGluIGZhY3QgcG9y dGVkIGFjcm9zcykgYnV0IHRoaXMgaXMgdGhlDQogIGZpcnN0IE9DYW1sLW5hdGl2ZSBiaW5kaW5n cyBJJ3ZlIGNyZWF0ZWQuDQoNCiAgVW5saWtlIHNpbWlsYXIgcHJvamVjdHMgaW4gdGhlIE9DYW1s IGVjb3N5c3RlbSwgaXQgdXNlcyB0aGUgbmV3ZXINCiAgU21pdGh5IGRlZmluaXRpb25zIHRvIGdl bmVyYXRlIGl0cyBiaW5kaW5ncyBpbnN0ZWFkIG9mIHRoZSBQeXRob24NCiAgYm90b2NvcmUgZGVm aW5pdGlvbnMuIFRoZXNlIHNob3VsZCBiZSBiZXR0ZXIgc3VwcG9ydGVkIGJ5IEFXUyBpbiB0aGUN CiAgZnV0dXJlIHdpdGggcmljaGVyIEFQSSBkZWZpbml0aW9ucy4NCg0KDQpXaGF0J3MgbmV4dA0K 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgTXkgbmV4dCB0YXNrIGlzIHRv IGZpbmlzaCBvZmYgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdGlvbiwgYW5kIHRoZW4NCiAgZXhw YW5kIHN1cHBvcnQgZm9yIGFsbCB0aGUgYXV0aGVudGljYXRpb24gbWV0aG9kcyBhbmQgb3RoZXIg QVBJIHR5cGVzDQogIHRoYXQgd2lsbCBhbGxvdyB0aGlzIHRvIGJlIHVzZWQgd2l0aCBtb3N0IEFX UyBzZXJ2aWNlcy4NCg0KDQpwcHhfZGVyaXZpbmdfZXpqc29ubQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToN CiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tcHB4LWRlcml2aW5nLWV6anNvbm0v MTU2MzcvMT4NCg0KDQpQYXRyaWNrIEZlcnJpcyBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0K DQogIEknbSBoYXBweSB0byBhbm5vdW5jZSB0aGUgcmVsZWFzZSBvZiBgcHB4X2Rlcml2aW5nX2V6 anNvbm0nIChiYXNlZCBvZmYNCiAgb2YgW3BweF9kZXJpdmluZ195YW1sXSkuIFRoZSB0d28gbGli cmFyaWVzIHNoYXJlIGEgY29tbW9uIGRlZmluaXRpb24NCiAgb2YgYSAiYHZhbHVlJyIgd2hpY2gg bWFkZSB0aGUgcmV1c2Ugb2YgdGhlIGV4aXN0aW5nIGRlcml2ZXIgcG9zc2libGUNCiAgZm9yIGEg c2ltcGxlIEpTT04gZGVyaXZlci4NCg0KICDilIzilIDilIDilIDilIANCiAg4pSCIG9wYW0gdXBk YXRlDQogIOKUgiBvcGFtIGluc3RhbGwgcHB4X2Rlcml2aW5nX2V6anNvbm0NCiAg4pSU4pSA4pSA 4pSA4pSADQoNCiAgVGhlIFtkb2N1bWVudGF0aW9uIGlzIG9ubGluZV0uDQoNCiAgVGhpcyBsaWJy YXJ5IG1heSBjb21lIGluIGhhbmR5IHdoZW4geW91ciBkZXBlbmRlbmN5IGNvbmUgYWxyZWFkeQ0K ICBpbmNsdWRlcyBgZXpqc29ubScuIElmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCB5b3Ugd291bGQg cHJvYmFibHkgaGF2ZQ0KICBiZXR0ZXIgbHVjayBpbiB0aGUgYHlvanNvbicgZWNvc3lzdGVtIG9m IHRvb2xzLg0KDQogIEhhcHB5IEpTT04taW5nIDpjYW1lbDoNCg0KDQpbcHB4X2Rlcml2aW5nX3lh bWxdDQo8aHR0cHM6Ly9naXRodWIuY29tL3BhdHJpY29mZXJyaXMvcHB4X2Rlcml2aW5nX3lhbWwv Pg0KDQpbZG9jdW1lbnRhdGlvbiBpcyBvbmxpbmVdDQo8aHR0cHM6Ly9wYXRyaWNvZmVycmlzLmdp dGh1Yi5pby9wcHhfZGVyaXZpbmdfeWFtbC9wcHhfZGVyaXZpbmdfZXpqc29ubS9pbmRleC5odG1s Pg0KDQoNCkZVTiBPQ2FtbCBub3cgaGFzIGEgWW91VHViZSBDaGFubmVsDQrilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0 cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Z1bi1vY2FtbC1ub3ctaGFzLWEteW91dHViZS1jaGFu bmVsLzE1NjM5LzE+DQoNCg0KU2FiaW5lIFNjaG1hbHR6IGFubm91bmNlZA0K4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSADQoNCiAgSSBqdXN0IGNyZWF0ZWQgYSBZb3VUdWJlIGNoYW5uZWwgZm9yIEZVTiBPQ2Ft bC4gOnNwYXJrbGVzOiA6Y2FtZWw6DQoNCiAgVGhlIHRhbGsgcmVjb3JkaW5ncyBmcm9tIHRoZSBj b25mZXJlbmNlIGluIEJlcmxpbiBvbiBTZXB0ZW1iZXIgMTYgKw0KICAxNywgMjAyNCBhcmUgbm93 IGF2YWlsYWJsZSBmb3Igdmlld2luZyENCg0KICA8aHR0cHM6Ly93d3cueW91dHViZS5jb20vQEZV Tk9DYW1sL2ZlYXR1cmVkPg0KDQogIElmIHlvdSBjYW4sIGNvbW1lbnRpbmcsIGxpa2luZywgb3Ig c3Vic2NyaWJpbmcgaGVscHMgdXMgdG8gbWFrZSB0aGVzZQ0KICB2aWRlb3MgbW9yZSB2aXNpYmxl IGFuZCBlYXNpZXIgdG8gZmluZCBvbiBZb3VUdWJlLCBzbyBiaWcgdGhhbmtzIGZvcg0KICBldmVy eW9uZSB3aG8gaGVscHMgdXMgd2l0aCB0aGlzISA6b3JhbmdlX2hlYXJ0OiA6Y2FtZWw6DQoNCiAg Rm9yIHBlb3BsZSB3aG8gYXZvaWQgWW91VHViZTogVGhlIHZpZGVvcyB3aWxsIGFsc28gYmUgbWFk ZSBhdmFpbGFibGUNCiAgb24gd2F0Y2gub2NhbWwub3JnLg0KDQoNClRlcnJhdGVhbSdzIG9wZW4g c291cmNlIE9jYW1sIHJlcG9zaXRvcnkNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczov L2Rpc2N1c3Mub2NhbWwub3JnL3QvdGVycmF0ZWFtcy1vcGVuLXNvdXJjZS1vY2FtbC1yZXBvc2l0 b3J5LzE1NjQ1LzE+DQoNCg0KTWFsY29sbSBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEEgZmV3IHllYXJzIGFnbyBteSBm cmllbmQgYW5kIEkgc3RhcnRlZCBhIGNvbXBhbnkgY2FsbGVkIFtUZXJyYXRlYW1dLA0KICB3aGlj aCBkb2VzIGluZnJhc3RydWN0dXJlIG9yY2hlc3RyYXRpb24gb24gR2l0SHViLiAgQmVpbmcgdGhh dCBJIGFtIGFuDQogIE9jYW1sZXIgYW5kIHdlIGFyZSBhIGxlYW4gY29tcGFueSwgd2UgY2hvc2Ug dG8gdXNlIE9jYW1sIGFzIG91cg0KICBwcmltYXJ5IGxhbmd1YWdlLiAgV2UgcmVjZW50bHkgd2Vu dCBvcGVuIHNvdXJjZSBhbmQgSSdtIHBvc3RpbmcgdGhlDQogIGxpbmsgaGVyZSB0byBjb250cmli dXRlIGFuIGV4YW1wbGUgb2YgYW4gYWN0dWFsIGNvbXBhbnkgdXNpbmcgT2NhbWwuDQogIEEgcmVh bCByZXBvc2l0b3J5Lg0KDQogIFRoZSBjb2RlIGNhbiBiZSBmb3VuZCBbaGVyZV0uDQoNCiAgVGhl cmUgYSBmZXcgdGhpbmdzIHRvIG5vdGUgYWJvdXQgdGhlIHJlcG86DQoNCiAgMS4gSXQncyBhIG1v bm8gcmVwbywgc28gd2hpbGUgbWFueSBvZiB0aGUgbGlicmFyaWVzIGluIHRoZXJlIGFyZQ0KICAg ICBnZW5lcmljLCB0aGV5IGFyZSBub3QgcmVhbGx5IGluZGl2aWR1YWxseSBjb25zdW1hYmxlIGFz IGlzLg0KICAyLiBXZSBoYXZlIG91ciBvd24gY29uY3VycmVuY3kgZnJhbWV3b3JrIChtb3JlIG9u IHRoYXQgYmVsb3cpLg0KICAzLiBXZSB1c2Ugb3VyIG93biBidWlsZCBsaWJyYXJ5IChwZHMsIHdo aWNoIGlzIGluIG9wYW0pLg0KICA0LiBUaGUgY29kZSBpcyBpbiBmbHV4IGFsbCB0aGUgdGltZSBz byB0aGluZ3MgY2hhbmdlIHJhcGlkbHkuDQoNCiAgV2h5IGRpZCB3ZSBidWlsZCBvdXIgb3duIGNv bmN1cnJlbmN5IGZyYW1ld29yaz8NCg0KICBEaXNjbGFpbWVyOiBZZXQgYW5vdGhlciBjb25jdXJy ZW5jeSBmcmFtZXdvcms/IFllcCEgIERvIEkgZXhwZWN0DQogIGFueW9uZSB0byB1c2UgaXQ/IE5v cGUsIGFuZCB0aGF0J3Mgb2suICBJdCBpcyBkZXNpZ25lZCBmb3Igb3VyIG5lZWRzLg0KICBJdCdz IG1lYW50IHRvIGJlIG1haW50YWluYWJsZSBieSBvbmUgcGVyc29uLiAgSXQncyBub3QgbWVhbnQg dG8NCiAgY29tcGV0ZSB3aXRoIEx3dCBvciBBc3luYyBmb3IgbWluZCBzaGFyZS4gIElmIGl0IGdy b3dzLCBncmVhdCwgaWYgaXQNCiAgZG9lc24ndCwgSSdtIGhhcHB5IHN0aWxsLg0KDQogIE91ciBj b25jdXJyZW5jeSBmcmFtZXdvcmsgaXMgY2FsbGVkICJBc3luY2hyb25vdXMgQnVpbGRpbmcgQmxv Y2tzIg0KICAoQWJiKS4gIEl0IHN0YXJ0ZWQgb3ZlciBhIGRlY2FkZSBhZ28gd2hlbiBJIHdhcyBm cnVzdHJhdGVkIHdpdGggYSBmZXcNCiAgdGhpbmdzOg0KDQogIDEuIEkgd2FudGVkIGtxdWV1ZSBz dXBwb3J0IGluIEFzeW5jLCBidXQgKGF0IHRoZSB0aW1lKSBBc3luYyByZXF1aXJlZA0KICAgICBt b2RpZnlpbmcgYSBoYW5kZnVsIG9mIHJlcG9zIHRvIHN1cHBvcnQgaXQgYW5kIGl0IGp1c3Qgd2Fz bid0DQogICAgIG9idmlvdXMgaG93Lg0KICAyLiBMd3Qgc3VwcG9ydGVkIGtxdWV1ZSwgYnV0IGZv ciBubyBnb29kIHJlYXNvbiwgSSBqdXN0IGRpZG4ndCBsaWtlDQogICAgIEx3dC4gIFBhcnQgb2Yg aXQgd2FzIGhvdyBmYWlsdXJlIHdvcmtlZCBpbiBMd3QgYW5kIG90aGVyIHBhcnQgaXMNCiAgICAg anVzdCBpdCBkaWRuJ3QgZml0IG15IGFlc3RoZXRpYy4gIFRoYXQgaXNuJ3QgYSBkaW5nIGFnYWlu c3QgTHd0LA0KICAgICBqdXN0IHBlcnNvbmFsIHByZWZlcmVuY2UuDQogIDMuIEkgd2FudGVkIGFz IG11Y2ggb2YgaXQgdG8gYmUgaW1wbGVtZW50ZWQgaW4gT2NhbWwgYXMgcG9zc2libGUuICBBcw0K ICAgICBpdCBzdGFuZHMgbm93LCB0aGUgb25seSBDIGNvZGUgaXMgYGxpYmtxdWV1ZScgd2hpY2gg aXMgYSBsaXR0bGUNCiAgICAgc2hpbSB0byB0byBhbGxvdyBrcXVldWUgY29kZSB0byBydW4gb24g TGludXgsIG90aGVyd2lzZSBldmVyeXRoaW5nDQogICAgIGlzIGluIE9jYW1sLg0KICA0LiBJIGRp ZG4ndCBsaWtlIGhvdyBuZWl0aGVyIEFzeW5jIG5vciBMd3QgcmVhbGx5IHN1cHBvcnRlZA0KICAg ICBjYW5jZWxsaW5nIG9wZXJhdGlvbnMuICBJIHdhbnRlZCB0aGF0IHRvIGJlIHBhcnQgb2YgdGhl IGZyYW1ld29yaywNCiAgICAgbm90IGFuIGFkLWhvYyBmZWF0dXJlIHBlciBsaWJyYXJ5LiAgQ29t aW5nIGZyb20gRXJsYW5nLCBjYW5jZWxsaW5nDQogICAgIGlzIHJlYWxseSBpbXBvcnRhbnQgdG8g bWUgYW5kIHBhcnQgb2YgaG93IEkgdGhpbmsgYWJvdXQgd3JpdGluZw0KICAgICBjb25jdXJyZW50 IHNvZnR3YXJlLiAgSSB3YXMgYnVtbWVkIHRoYXQgKGxhc3QgSSBsb29rZWQpIEVpbw0KICAgICBl eHBsaWNpdGx5IHJlamVjdGVkIGNhbmNlbGxpbmcuDQogIDUuIEkgYWxzbyB3YW50ZWQgYSBsaXR0 bGUgZXhwZXJpbWVudCBvZiAid2hhdCBpZiB0aGUgY29uY3VycmVuY3kNCiAgICAgbGlicmFyeSBl eHBvc2VkIGEgc3lzY2FsbCBpbnRlcmZhY2UgbGlrZSBhbiBPUz8iICBTbyBhIGxvdCBvZiB0aGUN CiAgICAgaW50ZXJmYWNlIGlzIG1lYW50IHRvIGxvb2sgbG93LWxldmVsIChJIGRvbid0IHRoaW5r IHRoaXMgaWRlYQ0KICAgICByZWFsbHkgcGFubmVkIG91dCBvciBtYWRlIEFiYiBtZWFuaW5nZnVs bHkgZGlmZmVyZW50KS4NCiAgNi4gSSBhbHNvIGp1c3QgbGlrZSBoYXZpbmcgbXkgb3duIGZyYW1l d29ya3MuDQoNCiAgQWRkIGEgZGFzaCBvZiBuYWl2ZXRlLCAiaG93IGhhcmQgY2FuIGl0IGJlIHRv IGJ1aWxkIGEgY29uY3VycmVuY3kNCiAgZnJhbWV3b3JrPyIsIEkgc3RhcnRlZCBteSBvd24uICBG aXJzdCBjb21taXQgd2FzIE1hciA5LCAyMDEzLg0KDQogIE11Y2ggb2YgdGhlIGNvbmN1cnJlbmN5 IG1vbmFkIGlzIGJhc2VkIG9uIGFuIHVucmVsZWFzZWQgbGlicmFyeSBjYWxsZWQNCiAgYEZ1dCcg YnkgQGRidWVuemxpDQoNCiAgT3ZlciB0aW1lLCBBYmIgbWF0dXJlZCB0byB3aGVyZSBJIGNvdWxk IHVzZSBpdCBpbiBteSBwZXJzb25hbA0KICBwcm9qZWN0cy4gIEFuZCBieSB0aGUgdGltZSB3ZSBk ZWNpZGVkIHRvIG1ha2UgVGVycmF0ZWFtLCBJIGZlbHQgaXQgd2FzDQogIGdvb2QgZW5vdWdoIGZv ciBwcm9kdWN0aW9uLiAgQW5kIGl0J3MgYmVlbiBydW5uaW5nIHByb2R1Y3Rpb24gdHJhZmZpYw0K ICBmb3IgYSBmZXcgeWVhcnMgbm93Lg0KDQogIE9uZSwgdW5leHBlY3RlZCwgYmVuZWZpdCBvZiBM d3QgYW5kIEFzeW5jIGV4aXN0aW5nIGluIHRoZSBjb21tdW5pdHkgaXMNCiAgdGhhdCBhZGRpbmcg YSB0aGlyZCBvbmUgaXNuJ3QgdGhhdCBoYXJkLiAgQWxtb3N0IGFsbCBsaWJyYXJpZXMgdGhhdA0K ICB3YW50IHRvIGJlIHVzZWQgc3VwcG9ydCBib3RoLCBhbmQgdGhhdCB1c3VhbGx5IG1lYW5zIHRo YXQgdGhleSBoYXZlIGENCiAgZ2VuZXJpYyBpbnRlcmZhY2UuICBDb2h0dHAgYW5kIERucyBhcmUg ZXhhbXBsZXMuICBTbyBJIGNvdWxkIHVzZQ0KICBleGlzdGluZyBsaWJyYXJpZXMgZm9yIHRoaW5n cyBJIGRpZG4ndCB3YW50IHRvIG9yIGRvbid0IGZlZWwgSSBjb3VsZA0KICByZWFzb25hYmx5IGlt cGxlbWVudCBteXNlbGYuDQoNCiAgSSd2ZSBhbHNvIHVzZWQgQWJiIGFzIGEgZm91bmRhdGlvbiBt eSB3ZWIgZnJhbWV3b3JrIGNhbGxlZCBCcnRsDQogIChwcm9ub3VuY2VkIEJydXRhbCkgd2hpY2gg aXMgYm90aCBhIGJhY2tlbmQgZnJhbWV3b3JrIGJ1aWxkIG9uIENvaHR0cA0KICBhbmQgYSBmcm9u dGVuZCBmcmFtZXdvcmsgYnVpbHQgb24gQnJyLiAgSXQgcmVhbGx5IGRvZXNuJ3QgZG8gYW55dGhp bmcNCiAgZmFuY3ksIGxpa2UgRHJlYW0sIGl0J3MgcHJldHR5IGxvdyBsZXZlbCBhbmQgZm9jdXNl ZCBvbiBiZWluZyBzaW1wbGUuDQoNCiAgVGhlIGdvb2Q6DQoNCiAgMS4gSXQgd29ya3MhICBBdCBs ZWFzdCwgZm9yIG1lLg0KICAyLiBHaXZlbiB0aGF0IEkgd3JvdGUgdmVyeSBzaW5nbGUgbGluZSBv ZiBjb2RlLCBkZWJ1Z2dpbmcgYW5kIGJ1Zw0KICAgICBmaXhpbmcgKHdoaWNoIGlzIGxlc3MgYW5k IGxlc3MpIGlzIHZlcnkgZWFzeS4gIEkgYWxzbyBoYXZlIGEgcmVhbGx5DQogICAgIGdyZWF0IG1l bnRhbCBtb2RlbCBvZiBob3cgaXQgd29ya3MuDQogIDMuIEkgbGlrZSB0aGF0IEkgY2FuIGp1c3Qg Y2FuY2VsIGEgd2hvbGUgZ3JhcGggb2YgYXN5bmMgd29yayBpZiBpdCdzDQogICAgIG5vIGxvbmdl ciBuZWVkZWQuDQogIDQuIFRoZSBmdXR1cmUncyBsaWJyYXJ5IHdvcmtzIGluIEZyZWVCU0QsIExp bnV4LCBhbmQgSmF2YVNjcmlwdC4NCiAgNS4gVGhlIHRlc3QgY292ZXJhZ2UgaXMgcHJldHR5IGRh cm4gaGlnaC4gIFRoaXMgaXMgYmVjYXVzZSBpdCdzIGENCiAgICAgcHJldHR5IGludHJpY2F0ZSB0 aGluZyB0byBpbXBsZW1lbnQgc28gSSBoYWQgdG8gaW1wbGVtZW50IGEgbG90IG9mDQogICAgIHRl c3RzIHRvIHN0YXkgc2FuZS4NCg0KICBUaGUgYmFkOg0KDQogIDEuIFBlcmZvcm1hbmNlIGlzIG5v dCBhbnl0aGluZyBzcGVjaWFsLiAgSSBkb24ndCB0aGluayB0aGlzIGlzIGENCiAgICAgZnVuZGFt ZW50YWwgZmxhdywgaXQncyBqdXN0IHRoYXQgaXQgaXMgYXMgZmFzdCBhcyBJIG5lZWQgaXQgdG8g YmUNCiAgICAgcmlnaHQgbm93Lg0KICAyLiBTb21lIG9mIHRoZSBBUEkgaXMgYSBhd2t3YXJkIGlm IHlvdSBkb24ndCBrbm93IHRoZSBzeXN0ZW0uICBPcg0KICAgICBuYW1lcyBhcmUgbG9uZywgbGlr ZSBgQWJiX2Z1dHVyZV9jb21iaW5hdG9ycycuDQogIDMuIFRoZSBtdWx0aS10YXJnZXQgYnVpbGQg c3Rvcnkga2luZCBvZiBzdWNrcy4gIEkgdGhpbmsgdGhhdCBtaWdodCBiZQ0KICAgICBhIGJpZ2dl ciBpc3N1ZSB3aXRoIHRoZSBwZHMgYnVpbGQgc3lzdGVtIGJ1dCBmb3Igbm93IGluIHRoZSB3ZWIN CiAgICAgZnJhbWV3b3JrIHlvdSBoYXZlIHRvIHVzZSBgQWJiX2pzJyByYXRoZXIgdGhhbiBgQWJi JyBmb3INCiAgICAgZXZlcnl0aGluZy4NCiAgNC4gVGhlcmUgYXJlIGRlZmluaXRlbHkgc29tZSBj b3JuZXJzIGN1dCBpbiwgZXNwZWNpYWxseSBhcm91bmQgZmlsZQ0KICAgICBJTywgYnV0IHRoYXQn cyBPSywgd2UgZG9uJ3QgZG8gbXVjaCBmaWxlIElPLg0KICA1LiBFeHBsaWNpdGx5IHRha2VzIGFk dmFudGFnZSBpbiB0aGF0IGV2ZXJ5dGhpbmcgcnVucyBpbiBhIHNpbmdsZQ0KICAgICB0aHJlYWQu ICBTbyBpbXBsaWNpdGx5IGdvaW5nIG11bHRpLXRocmVhZGVkIHdvdWxkIHByb2JhYmx5IGJyZWFr DQogICAgIHRoaW5ncy4NCg0KICBGdXR1cmUgd29yazoNCg0KICBUaGVyZSByZWFsbHkgaXNuJ3Qg YSBsb3Qgb2YgZnV0dXJlIHdvcmsuICBGb3IgdGhlIG1vc3QgcGFydDogQWJiIGlzDQogIGRvbmUu ICBPciBzaG91bGQgSSBzYXkgdGhlIGludGVyZmFjZSBpcyBkb25lLiAgWWVzLCBpdCB3aWxsIG5l ZWQNCiAgdXBkYXRlcyB0byBmaWdodCBiaXQgcm90LCBidXQgdGhlcmUgaXNuJ3QgbXVjaCBtb3Jl IGZvciBpdCB0byBkby4gIEl0DQogIHJ1bnMgeW91ciBjb2RlIGNvbmN1cnJlbnRseSwgdGhlIGVu ZC4NCg0KICBIb3dldmVyLCBhcyBPY2FtbDUgYmVjb21lcyBtb3JlIG9mIGEgdGhpbmcsIGl0IHdp bGwgbmVlZCB0byB0YWtlDQogIGFkdmFudGFnZSBvZiB0aGF0LiAgSSBoYXZlbid0IHJlYWxseSB0 aG91Z2h0IGFib3V0IGhvdyB0byBkbyBpdC4gIE9uZQ0KICBpdGVtIEkgaGF2ZSBpbiBteSB0by1k byBsaXN0IGlzIHRvIGV2YWx1YXRlIGlmIFBpY29zIGNvdWxkIGJlIGEgYmFzZQ0KICBsYXllciBm b3IgQWJiLiAgQWJiIGlzIGEgbGF5ZXJlZCBhcHByb2FjaCBzbyByZWFsbHkgeW91IG9ubHkgbmVl ZCB0bw0KICBpbXBsZW1lbnQgdGhlIGBBYmJfaW50Zi5TJyBpbnRlcmZhY2UgYW5kIGV2ZXJ5dGhp bmcgYWJvdmUgdGhhdCBzaG91bGQNCiAgSnVzdCBXb3JrIChnaXZlbiBzaW5nbGUgdGhyZWFkZWQg c2VtYW50aWNzKS4gIEkgdGhpbmsgYW55IGZ1dHVyZSB3b3JrDQogIHRvIHN1cHBvcnQgbXVsdGkg Y29yZSB3aWxsIHByb2JhYmx5IG5lZWQgYW4gZXhwbGljaXQgInRoaXMgY3Jvc3NlcyBhDQogIHRo cmVhZCBib3VuZGFyeSIgQVBJLiAgQWJiIHdpbGwgZ2V0IHRoZXJlLCBldmVudHVhbGx5LCBidXQg cmlnaHQgbm93DQogIGl0IGRvZXNuJ3QgbmVlZCB0by4NCg0KICBFZmZlY3RzIHdpbGwgb2J2aW91 c2x5IGhhdmUgYSBiaWcgaW1wYWN0LCBJIGhhdmUgbm8gaWRlYSB3aGF0IHRoYXQnbGwNCiAgZG8g Zm9yIEFiYi4gIEkgaG9wZSBJIGNhbiB0cmFuc2l0aW9uIGl0IHNsb3dseSB0byBzdXBwb3J0aW5n IGVmZmVjdHMNCiAgYnV0IEkgZG9uJ3Qgd2FudCB0byBsb29rIGF0IGVmZmVjdHMgdW50aWwgaXQn cyBpbiB0aGUgdHlwZSBzeXN0ZW0uDQoNCiAgU29tZSwgcGVyaGFwcywgbGlicmFyaWVzIG9mIGlu dGVyZXN0IGluIHRoZSByZXBvOg0KDQogIDEuIFtBYmJfc2NoZWR1bGVyX2txdWV1ZV0gLSBUaGUg bW9zdCB1c2VkIHNjaGVkdWxlci4gIEl0IGltcGxlbWVudHMNCiAgICAgdGhlIFtBYmJfaW50Zl0g aW50ZXJmYWNlLg0KICAyLiBbQWJiX3NjaGVkdWxlcl9zZWxlY3RdIC0gQSBzaW1wbGVyIHNlbGVj dC1iYXNlZCBzY2hlZHVsZXIuICBUaGlzIGlzDQogICAgIG1lYW50IHRvIGJlIHVzZWQgYW55IHBs YWNlIGtxdWV1ZSBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhbHNvIGFzDQogICAgIGRlbW8uDQogIDMu IFtQZ3NxbF9pb10gLSBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9zdGdyZVNRTCBwcm90b2Nv bC4NCiAgNC4gW0dpdGh1YmMyXSAtIEFuIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIEdpdEh1YiBS RVNUIGxpYnJhcnkNCiAgICAgZ2VuZXJhdGVkIGZyb20gdGhlaXIgSlNPTiBTY2hlbWEuICBUaGlz IGFjdHVhbGx5IGhhcyBubyBBYmINCiAgICAgZGVwZW5kZW5jeSwganVzdCBpbXBsZW1lbnRzIHRo ZSBBUEkgc2VyaWFsaXppbmcvZGVzZXJpYWxpemluZy4NCiAgNS4gW09wZW5BUEkgQ0xJXSAtIFRo aXMgZ2VuZXJhdGVzIGEgbGlicmFyeSAoc2VlIEdpdGh1YmMyKSBmcm9tIGFuDQogICAgIE9wZW5B UEkgc3BlYy4gIEl0IGlzLCBhYnNvbHV0ZWx5LCBhIGJpdCBvZiBhIHJhdHMgbmVzdCwgYnV0IGl0 DQogICAgIHdvcmtzLiAgV2UgY2hvc2UgdG8gZG8gY29kZS1nZW4gZm9yIHRoaXMgYmVjYXVzZSBJ IGRpZG4ndCB3YW50IHRvDQogICAgIGJlIGJsb2NrZWQgd2hlbiBjb21waWxpbmcgYmFzZWQgb24g ZGlmZmVyZW50IGNvbXBpbGVyIHZlcnNpb25zIGFzDQogICAgIHdlJ3JlIHVzaW5nIGBBc3RfaGVs cGVyJy4gIE9jYW1sLCB0aGUgY29kZSwgaXMgbW9yZSBzdGFibGUgdGhhbg0KICAgICBPY2FtbCwg dGhlIGNvbXBpbGVyIEFQSS4NCg0KICBUaGVyZSBpcyBhIGJ1bmNoIG9mIG90aGVyIHN0dWZmIGlu IHRoZXJlLiAgSWYgeW91IGRlY2lkZSB0byBwb2tlDQogIGFyb3VuZCBhbmQgaGF2ZSBhbnkgcXVl c3Rpb25zLCBmZWVsIGZyZWUgdG8gYXNrLiAgSSBjYW4gcHJvbWlzZTogbm90DQogIGV2ZXJ5IGRl Y2lzaW9uIGluIHRoZXJlIGlzIHdlbGwgdGhvdWdodCBvdXQgb3IgY29oZXJlbnQuDQoNCg0KW1Rl cnJhdGVhbV0gPGh0dHBzOi8vdGVycmF0ZWFtLmlvPg0KDQpbaGVyZV0gPGh0dHBzOi8vZ2l0aHVi LmNvbS90ZXJyYXRlYW1pby90ZXJyYXRlYW0+DQoNCltBYmJfc2NoZWR1bGVyX2txdWV1ZV0NCjxo dHRwczovL2dpdGh1Yi5jb20vdGVycmF0ZWFtaW8vdGVycmF0ZWFtL3RyZWUvbWFpbi9jb2RlL3Ny Yy9hYmJfc2NoZWR1bGVyX2txdWV1ZT4NCg0KW0FiYl9pbnRmXQ0KPGh0dHBzOi8vZ2l0aHViLmNv bS90ZXJyYXRlYW1pby90ZXJyYXRlYW0vdHJlZS9tYWluL2NvZGUvc3JjL2FiYl9pbnRmPg0KDQpb QWJiX3NjaGVkdWxlcl9zZWxlY3RdDQo8aHR0cHM6Ly9naXRodWIuY29tL3RlcnJhdGVhbWlvL3Rl cnJhdGVhbS90cmVlL21haW4vY29kZS9zcmMvYWJiX3NjaGVkdWxlcl9zZWxlY3Q+DQoNCltQZ3Nx bF9pb10NCjxodHRwczovL2dpdGh1Yi5jb20vdGVycmF0ZWFtaW8vdGVycmF0ZWFtL3RyZWUvbWFp bi9jb2RlL3NyYy9wZ3NxbF9pbz4NCg0KW0dpdGh1YmMyXQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS90 ZXJyYXRlYW1pby90ZXJyYXRlYW0vdHJlZS9tYWluL2NvZGUvc3JjL2dpdGh1YmMyPg0KDQpbT3Bl bkFQSSBDTEldDQo8aHR0cHM6Ly9naXRodWIuY29tL3RlcnJhdGVhbWlvL3RlcnJhdGVhbS90cmVl L21haW4vY29kZS9zcmMvb3BlbmFwaV9jbGk+DQoNCg0KT1VQUyBkZWNlbWJlciAyMDI0DQrilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBB cmNoaXZlOiA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L291cHMtZGVjZW1iZXItMjAyNC8x NTY1NC8xPg0KDQoNCnphcGFzaGNhbm9uIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgQ0FVVElPTjog dGhlIHRpbWUgaGFzIGJlZW4gY2hhbmdlZCBmcm9tIDdwbSB0byA2OjMwcG0NCg0KICBUaGUgbmV4 dCBPVVBTIG1lZXR1cCB3aWxsIHRha2UgcGxhY2Ugb24gKlRodXJzZGF5LCAxMnRoIG9mIERlY2Vt YmVyKg0KICAyMDI0LiBJdCB3aWxsIHN0YXJ0IGF0ICo2OjMwcG0qIGF0IHRoZSAqNCBwbGFjZSBK dXNzaWV1KiBpbiBQYXJpcy4gSXQNCiAgd2lsbCBiZSBpbiB0aGUgaW4gdGhlICpFc2NsYW5nb24g YnVpbGRpbmcqIChhbXBoaSBBc3RpZXIpLg0KDQogIFBsZWFzZSwgKltyZWdpc3RlciBvbiBtZWV0 dXAgXSogYXMgc29vbiBhcyBwb3NzaWJsZSB0byBsZXQgdXMga25vdyBob3cNCiAgbWFueSBwaXp6 YSB3ZSBzaG91bGQgb3JkZXIuDQoNCiAgRm9yIG1vcmUgZGV0YWlscywgeW91IG1heSBjaGVjayB0 aGUgW09VUFPigJkgd2Vic2l0ZSBdLg0KDQogIFRoaXMgdGltZSB3ZSdsbCBoYXZlIHRoZSBmb2xs b3dpbmcgdGFsa3M6DQoNCiAgKlNuYXBzaG90dGFibGUgU3RvcmVzIOKAkyBDbMOpbWVudCBBbGxh aW4gJiBHYWJyaWVsIFNjaGVyZXIgKEBnYXNjaGUpKg0KDQogIFdlIHNheSB0aGF0IGFuIGltcGVy YXRpdmUgZGF0YSBzdHJ1Y3R1cmUgaXMgKnNuYXBzaG90dGFibGUqIG9yDQogICpzdXBwb3J0cyBz bmFwc2hvdHMqIGlmIHdlIGNhbiBlZmZpY2llbnRseSBjYXB0dXJlIGl0cyBjdXJyZW50IHN0YXRl LA0KICBhbmQgcmVzdG9yZSBhIHByZXZpb3VzbHkgY2FwdHVyZWQgc3RhdGUgdG8gYmVjb21lIHRo ZSBjdXJyZW50IHN0YXRlDQogIGFnYWluLiBUaGlzIGlzIHVzZWZ1bCwgZm9yIGV4YW1wbGUsIHRv IGltcGxlbWVudCBiYWNrdHJhY2tpbmcgc2VhcmNoDQogIHByb2Nlc3NlcyB0aGF0IHVwZGF0ZSB0 aGUgZGF0YSBzdHJ1Y3R1cmUgZHVyaW5nIHNlYXJjaC4NCg0KICBJbnNwaXJlZCBieSBhIGRhdGEg c3RydWN0dXJlIHByb3Bvc2VkIGluIDE5NzggYnkgQmFrZXIsIHdlIHByZXNlbnQgYQ0KICAqc25h cHNob3R0YWJsZSBzdG9yZSosIGEgYmFnIG9mIG11dGFibGUgcmVmZXJlbmNlcyB0aGF0IHN1cHBv cnRzDQogIHNuYXBzaG90cy4gSW5zdGVhZCBvZiBjYXB0dXJpbmcgYW5kIHJlc3RvcmluZyBhbiBh cnJheSwgd2UgY2FuIGNhcHR1cmUNCiAgYW4gYXJiaXRyYXJ5IHNldCBvZiByZWZlcmVuY2VzIChv ZiBhbnkgdHlwZSkgYW5kIHJlc3RvcmUgYWxsIG9mIHRoZW0NCiAgYXQgb25jZS4gVGhpcyBzbmFw c2hvdHRhYmxlIHN0b3JlIGNhbiBiZSB1c2VkIGFzIGEgYnVpbGRpbmcgYmxvY2sgdG8NCiAgc3Vw cG9ydCBzbmFwc2hvdHMgZm9yIGFyYml0cmFyeSBkYXRhIHN0cnVjdHVyZXMsIGJ5IHNpbXBseSBy ZXBsYWNpbmcNCiAgYWxsIG11dGFibGUgcmVmZXJlbmNlcyBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUg Ynkgb3VyIHN0b3JlDQogIHJlZmVyZW5jZXMuIFdlIHByZXNlbnQgdXNlLWNhc2VzIG9mIGEgc25h cHNob3R0YWJsZSBzdG9yZSB3aGVuDQogIGltcGxlbWVudGluZyB0eXBlLWNoZWNrZXJzIGFuZCBh dXRvbWF0ZWQgdGhlb3JlbSBwcm92ZXJzLg0KDQogIE91ciBpbXBsZW1lbnRhdGlvbiBpcyBkZXNp Z25lZCB0byBwcm92aWRlIGEgdmVyeSBsb3cgb3ZlcmhlYWQgb3Zlcg0KICBub3JtYWwgcmVmZXJl bmNlcywgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBjYXB0dXJlL3Jlc3RvcmUNCiAgb3Bl cmF0aW9ucyBhcmUgaW5mcmVxdWVudC4gUmVhZCBhbmQgd3JpdGUgaW4gc3RvcmUgcmVmZXJlbmNl cyBhcmUNCiAgZXNzZW50aWFsbHkgYXMgZmFzdCBhcyBpbiBwbGFpbiByZWZlcmVuY2VzIGluIG1v c3Qgc2l0dWF0aW9ucywgdGhhbmtzDQogIHRvIGEga2V5IG9wdGltaXNhdGlvbiB3ZSBjYWxsICpy ZWNvcmQgZWxpc2lvbiouIEluIGNvbXBhcmlzb24sIHRoZQ0KICBjb21tb24gYXBwcm9hY2ggb2Yg cmVwbGFjaW5nIHJlZmVyZW5jZXMgYnkgaW50ZWdlciBpbmRpY2VzIGludG8gYQ0KICBwZXJzaXN0 ZW50IG1hcCBpbmN1cnMgYSBsb2dhcml0aG1pYyBvdmVyaGVhZCBvbiByZWFkcyBhbmQgd3JpdGVz LCBhbmQNCiAgc29waGlzdGljYXRlZCBhbGdvcml0aG1zIHR5cGljYWxseSBpbXBvc2UgbXVjaCBs YXJnZXIgY29uc3RhbnQNCiAgZmFjdG9ycy4NCg0KICBUaGUgaW1wbGVtZW50YXRpb24sIHdoaWNo IGlzIGluc3BpcmVkIGJ5IEJha2VyJ3MgYW5kIHRoZSBPQ2FtbA0KICBpbXBsZW1lbnRhdGlvbiBv ZiBwZXJzaXN0ZW50IGFycmF5cyBieSBDb25jaG9uIGFuZCBGaWxsacOidHJlLCBpcyBib3RoDQog IGZhaXJseSBzaG9ydCBhbmQgdmVyeSBoYXJkIHRvIHVuZGVyc3RhbmQ6IGl0IHJlbGllcyBvbiBz aGFyZWQgbXV0YWJsZQ0KICBzdGF0ZSBpbiBzdWJ0bGUgd2F5cy4gV2UgcHJvdmlkZSBhIG1lY2hh bml6ZWQgcHJvb2Ygb2YgY29ycmVjdG5lc3Mgb2YNCiAgaXRzIGNvcmUgdXNpbmcgdGhlIElyaXMg ZnJhbWV3b3JrIGZvciB0aGUgQ29xIHByb29mIGFzc2lzdGFudC4NCiAgWy9kZXRhaWxzXQ0KDQog ICpTYWZlLCBleHByZXNzaXZlIGFuZCBlZmZpY2llbnQgcHJvZ3JhbW1pbmcgb2YgRlBHQXMgY2ly Y3VpdHMg4oCTIExvw69jDQogICBTeWx2ZXN0cmUqDQoNCiAgRlBHQXMgKEZpZWxkLVByb2dyYW1t YWJsZSBHYXRlIEFycmF5cykgYXJlIHJlY29uZmlndXJhYmxlIGRpZ2l0YWwNCiAgY2lyY3VpdHM6 IHRoZWlyIGJlaGF2aW9yIGNhbiBiZSBjdXN0b21pemVkIGJ5IGxvZ2ljIHN5bnRoZXNpcyBvZg0K ICBzcGVjaWZpY2F0aW9uIGF0IHRoZSBzby1jYWxsZWQgcmVnaXN0ZXIgdHJhbnNmZXIgbGV2ZWwg KFJUIGxldmVsKSwgaW4NCiAgaGFyZHdhcmUgZGVzY3JpcHRpb24gbGFuZ3VhZ2VzIHN1Y2ggYXMg VkhETCBvciBWZXJpbG9nLiBGUEdBcyBhcmUgd2VsbA0KICBzdWl0ZWQgdG8gaW1wbGVtZW50IHJl YWN0aXZlIHN5c3RlbXMsIGRpcmVjdGx5IGFzIHN5bmNocm9ub3VzIGNpcmN1aXRzDQogIGludGVy YWN0aW5nIHdpdGggdGhlIGV4dGVybmFsIGVudmlyb25tZW50IHZpYSBJL08gcGlucyDigJMgdGhl IGxvZ2ljDQogIHN5bnRoZXNpemVyIGVuc3VyaW5nIHRoYXQgdGltaW5nIGNvbnN0cmFpbnRzIGFy ZSBtZXQsIGdpdmVuIHRoZSBGUEdBDQogIGNsb2NrIGZyZXF1ZW5jeS4gRlBHQXMgYXJlIGFsc28g dXNlZCB0byBpbXBsZW1lbnQgaGFyZHdhcmUNCiAgYWNjZWxlcmF0b3JzIDsgaG93ZXZlciwgUlQt bGV2ZWwgZGVzY3JpcHRpb25zIG9mIHRyYW5zZm9ybWF0aW9uYWwNCiAgc3lzdGVtcyAob3Ig4oCc Y29tcHV0YXRpb25z4oCdKSDigJMgd2l0aCBsYXRlbmNpZXMgb2Ygc2V2ZXJhbCBjbG9jayBjeWNs ZXMg4oCTDQogIGFyZSBkaWZmaWN1bHQgdG8gZGVidWcsIG1haW50YWluIGFuZCBtYW51YWxseSBv cHRpbWl6ZS4gSGlnaC1MZXZlbA0KICBTeW50aGVzaXMgKEhMUykgb2ZmZXJzIGEgc2ltcGxlciB3 YXkgb2YgZXhwcmVzc2luZyBjb21wdXRhdGlvbnMsIHVzaW5nDQogIGEgcHJvZ3JhbW1pbmcgbGFu Z3VhZ2UgY29tcGlsZWQgYXQgdGhlIFJUIGxldmVsLiBUaGUgYWR2YW50YWdlIG9mIHRoaXMNCiAg YXBwcm9hY2ggaXMgdG8ga2VlcCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBoaWRkZW4gZnJv bSB0aGUNCiAgcHJvZ3JhbW1lciwgbGVhdmluZyB0aGUgY29tcGlsZXIgcmVzcG9uc2libGUgZm9y IHNjaGVkdWxpbmcNCiAgY29tcHV0YXRpb25zIG92ZXIgdGltZS4gSG93ZXZlciwgdGhpcyBsZWFk cyB0byBhIGxvc3Mgb2YgY29udHJvbCBvdmVyDQogIHRlbXBvcmFsIGJlaGF2aW9yIGFuZCB0aGVy ZWZvcmUgc2FmZXR5IGFuZCBlZmZpY2llbmN5IGZvciB0aGUgY2lyY3VpdHMNCiAgZ2VuZXJhdGVk LiBBcyBlbWJlZGRlZCBzeXN0ZW1zLCBlc3BlY2lhbGx5IHRob3NlIGJhc2VkIG9uIEZQR0FzLCBu ZWVkDQogIHRvIHBlcmZvcm0gbW9yZSBhbmQgbW9yZSBjb21wdXRhdGlvbnMsIHdoaWxlIGludGVy YWN0aW5nIHdpdGggdGhlaXINCiAgZW52aXJvbm1lbnQsIHRoaXMgdGhlc2lzIHByb3Bvc2VzIGEg cHJvZ3JhbW1pbmcgbW9kZWwgdG8gY29tYmluZQ0KICBoYXJkd2FyZSBkZXNjcmlwdGlvbiAoZGF0 YS1mbG93IG9yaWVudGVkKSBhbmQgZ2VuZXJhbC1wdXJwb3NlIHBhcmFsbGVsDQogIGNvbXB1dGF0 aW9uIChjb250cm9sLWZsb3cgb3JpZW50ZWQpIHVzaW5nIGEgc3luY2hyb25vdXMgYXBwcm9hY2gu IFRoaXMNCiAgcHJvZ3JhbW1pbmcgbW9kZWwgZm9ybXMgdGhlIGJhc2lzIGZvciB0aGUgZGVzaWdu IGFuZCBpbXBsZW1lbnRhdGlvbiBvZg0KICBFY2xhdCwgYSBmdW5jdGlvbmFsLWltcGVyYXRpdmUs IHBhcmFsbGVsIGFuZCBzeW5jaHJvbm91cyBwcm9ncmFtbWluZw0KICBsYW5ndWFnZSwgY29tcGls ZWQgdG8gVkhETC4gRWNsYXQgaXMgc3VmZmljaWVudGx5IHByZWNpc2UgdG8gZGVzY3JpYmUNCiAg c3luY2hyb25vdXMgY2lyY3VpdHMgYXQgdGhlIFJUIGxldmVsLiBJdCBmYWNpbGl0YXRlcyB0aGUg cHJvZ3JhbW1pbmcNCiAgb2YgaGFyZHdhcmUgYWNjZWxlcmF0b3JzLCB3aXRoIGEgY2xlYXIgYW5k IHByZWRpY3RhYmxlIHRlbXBvcmFsDQogIHNlbWFudGljcyBieSB3aGljaCB0byBleHBsb2l0IHRp bWUtc3BhY2UgdHJhZGUtb2Zmcy4gQW55IEVjbGF0IHByb2dyYW0NCiAgaXMgcmVhY3RpdmUsIHdp dGggYSBtZWNoYW5pc20gZm9yIGVtYmVkZGluZyBjb21wdXRhdGlvbnMgd2l0aGluDQogIHByb2dy YW1zIGFuZCB0aGVyZWJ5IG1peCBjb21wdXRhdGlvbiBhbmQgaW50ZXJhY3Rpb24uIEVjbGF0IGFs c28NCiAgb2ZmZXJzIHNoYXJlZCBtZW1vcnkgKGluIHRoZSBmb3JtIG9mIFJBTSBibG9ja3MpLCB3 aXRoIGRldGVybWluaXN0aWMNCiAgY29uY3VycmVuY3kuIEl0IGlzIHVzZWQgdG8gZGV2ZWxvcCBw cm9ncmFtbWluZyBhYnN0cmFjdGlvbnMgc3VjaCBhcw0KICBhbGdvcml0aG1pYyBza2VsZXRvbnMg YW5kIHZpcnR1YWwgbWFjaGluZSBpbXBsZW1lbnRhdGlvbnMgZm9yDQogIGhpZ2gtbGV2ZWwgbGFu Z3VhZ2VzLiBUaGlzIGFkZHJlc3NlcywgYXQgdmFyaW91cyBsZXZlbHMsIHRoZSBuZWVkIHRvDQog IHJ1biBnZW5lcmFsLXB1cnBvc2UgYWxnb3JpdGhtcyB3aXRoaW4gRlBHQS1iYXNlZCByZWFjdGl2 ZSBlbWJlZGRlZA0KICBhcHBsaWNhdGlvbnMuDQoNCiAgQWZ0ZXIgdGhlIHRhbGtzIHRoZXJlIHdp bGwgYmUgc29tZSBwaXp6YXMgb2ZmZXJlZCBieSB0aGUgW09DYW1sDQogIFNvZnR3YXJlIEZvdW5k YXRpb25dIGFuZCBsYXRlciBvbiB3ZeKAmWxsIG1vdmUgdG8gYSBwdWIgbmVhcmJ5IGFzIHVzdWFs Lg0KDQoNCltyZWdpc3RlciBvbiBtZWV0dXAgXQ0KPGh0dHBzOi8vd3d3Lm1lZXR1cC5jb20vZnIt RlIvb2NhbWwtcGFyaXMvZXZlbnRzLzMwNDcyNjg4NT4NCg0KW09VUFPigJkgd2Vic2l0ZSBdIDxo dHRwczovL291cHMuZnJhbWEuaW8+DQoNCltPQ2FtbCBTb2Z0d2FyZSBGb3VuZGF0aW9uXSA8aHR0 cHM6Ly9vY2FtbC1zZi5vcmc+DQoNCg0KRHVuZSBkZXYgbWVldGluZw0K4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0dHBzOi8v ZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tZHVuZS1kZXYtbWVldGluZy8xNDk5NC8xNz4NCg0KDQpF dGllbm5lIE1hcmFpcyBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEhpIGNhbWVsZXJz ISA6Y2FtZWw6IFdlIHdpbGwgaG9sZCBvdXIgcmVndWxhciBEdW5lIGRldiBtZWV0aW5nIG9uDQog IFdlZG5lc2RheSwgTm92ZW1iZXIsIDI3dGggYXQgMTY6MDAgQ0VULiBBcyB1c3VhbCwgdGhlIHNl c3Npb24gd2lsbCBiZQ0KICBvbmUgaG91ciBsb25nLg0KDQogIFdoZXRoZXIgeW91IGFyZSBhIG1h aW50YWluZXIsIGEgcmVndWxhciBjb250cmlidXRvciwgYSBuZXcgam9pbmVyIG9yDQogIGp1c3Qg Y3VyaW91cywgeW91IGFyZSB3ZWxjb21lIHRvIGpvaW46IHRoZXNlIGRpc2N1c3Npb25zIGFyZSBv cGVuZWQhDQogIFRoZSBnb2FsIG9mIHRoZXNlIG1lZXRpbmdzIGlzIHRvIHByb3ZpZGUgYSBwbGFj ZSB0byBkaXNjdXNzIHRoZQ0KICBvbmdvaW5nIHdvcmsgdG9nZXRoZXIgYW5kIHN5bmNocm9uaXNl IGJldHdlZW4gdGhlIER1bmUgZGV2ZWxvcGVycw0KICA6b2tfaGFuZDoNCg0KDQo6Y2FsZW5kYXI6 ICpBZ2VuZGEqDQrilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYwNCg0KICBUaGUgYWdlbmRhIGlzIGF2YWlsYWJsZSBvbiB0aGUgW21lZXRpbmcg ZGVkaWNhdGVkIHBhZ2VdLiBGZWVsIGZyZWUgdG8NCiAgYXNrIGlmIHlvdSB3YW50IHRvIGFkZCBt b3JlIGl0ZW1zIGluIGl0Lg0KDQoNClttZWV0aW5nIGRlZGljYXRlZCBwYWdlXQ0KPGh0dHBzOi8v Z2l0aHViLmNvbS9vY2FtbC9kdW5lL3dpa2kvZGV2LW1lZXRpbmctMjAyNC0xMS0yNz4NCg0KDQo6 Y29tcHV0ZXI6ICpMaW5rcyoNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjA0KDQogIOKAoiBNZWV0aW5nIGxpbms6IFt6b29tXQ0KICDigKIgQ2Fs ZW5kYXIgZXZlbnQ6IFtnb29nbGUgY2FsZW5kYXJdDQogIOKAoiBXaWtpIHdpdGggaW5mb3JtYXRp b24gYW5kIHByZXZpb3VzIG5vdGVzOiBbR2l0SHViIFdpa2ldDQoNCg0KW3pvb21dDQo8aHR0cHM6 Ly91czA2d2ViLnpvb20udXMvai84NTA5Njg3Nzc3Nj9wd2Q9Y1dOaFUxZEhRMVpOU2padU9VWkNR MGgyYnk5VWR6MDk+DQoNCltnb29nbGUgY2FsZW5kYXJdDQo8aHR0cHM6Ly9jYWxlbmRhci5nb29n bGUuY29tL2NhbGVuZGFyL2VtYmVkP3NyYz1jXzVjZDY5OGRmNjc4NGUzODViMWNkY2RjMWRiY2Ex OGMwNjFmYWE5Njk1OWEwNDc4MTU2NmQzMDRkYzllYzczMTklNDBncm91cC5jYWxlbmRhci5nb29n bGUuY29tPg0KDQpbR2l0SHViIFdpa2ldIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvZHVuZS93 aWtpI2Rldi1tZWV0aW5ncz4NCg0KDQpPdGhlciBPQ2FtbCBOZXdzDQrilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KRnJvbSB0aGUgb2NhbWwub3JnIGJs b2cNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgA0KDQogIEhlcmUgYXJlIGxpbmtzIGZyb20gbWFueSBPQ2FtbCBibG9n cyBhZ2dyZWdhdGVkIGF0IFt0aGUgb2NhbWwub3JnDQogIGJsb2ddLg0KDQogIOKAoiBbVW5pdmVy c2FsIFJlYWN0IGluIE9DYW1sIC0gRGF2aWQgU2FuY2hvIE1vcmVubyAtIEZVTiBPQ2FtbCAyMDI0 XQ0KICDigKIgW1VzaW5nIG9kb2MgdG8gV3JpdGUgRG9jdW1lbnRhdGlvbiAtIFBhdWwtRWxsaW90 IEFuZ2zDqHMgZCdBdXJpYWMgLQ0KICAgIEZVTiBPQ2FtbCAyMDI0XQ0KICDigKIgW0hvdyB0aGUg TXVsdGljb3JlIEdhcmJhZ2UgQ29sbGVjdG9yIHdvcmtzIC0gU3VkaGEgUGFyaW1hbGEgLSBGVU4N CiAgICBPQ2FtbCAyMDI0XQ0KICDigKIgW01pcmFnZU9TIC0gRGV2ZWxvcGluZyBPcGVyYXRpbmcg U3lzdGVtcyBpbiBPQ2FtbCAtIEhhbm5lcyBNZWhuZXJ0IC0NCiAgICBGVU4gT0NhbWwgMjAyNF0N CiAg4oCiIFtUaGUgU3RvcnkgQmVoaW5kIHRoZSBGYXN0ZXN0IEltYWdlIENvbXBhcmlzb24gTGli cmFyeSAtIERtaXRyaXkNCiAgICBLb3ZhbGVua28gLSBGVU4gT0NhbWwgMjAyNF0NCiAg4oCiIFtF YXN5IEdBRFRzIGJ5IFJlcGVhdGluZyBZb3Vyc2VsZiAtIEVkdWFyZG8gUmFmYWVsIC0gRlVOIE9D YW1sIDIwMjRdDQogIOKAoiBbTWF5YmUgT0NhbWwgV2FzIHRoZSBGcmllbmRzIFdlIE1hZGUgQWxv bmcgdGhlIFdheSAtIERpbGxvbiBNdWxyb3kgLQ0KICAgIEZVTiBPQ2FtbCAyMDI0XQ0KICDigKIg W09DQU5OTCwgdGhlIGBuZXVyYWxfbmV0c19saWJgIC0gTHVrYXN6IFN0YWZpbmlhayAtIEZVTiBP Q2FtbCAyMDI0XQ0KICDigKIgW0xlYXJuaW5nIE9DYW1sIHdpdGggVGlueSBDb2RlIFhtYXMgLSBN aWNoYWVsIERhbGVzIC0gRlVOIE9DYW1sDQogICAgMjAyNF0NCiAg4oCiIFtMZXQgU2lnbmFscyBp biBPQ2FtbCAtIFJpem8gSXNyb2YgLSBGVU4gT0NhbWwgMjAyNF0NCiAg4oCiIFtBICdNZWxhbmdl JyBvZiBUb29saW5nIENvbWluZyBUb2dldGhlciAtIEFudG9uaW8gTW9udGVpcm8gLSBGVU4NCiAg ICBPQ2FtbCAyMDI0XQ0KICDigKIgW0J1aWxkaW5nIEluY3JlbWVudGFsIGFuZCBSZXByb2R1Y2li bGUgRGF0YSBQaXBlbGluZXMgLSBQYXRyaWNrDQogICAgRmVycmlzIC0gRlVOIE9DYW1sIDIwMjRd DQogIOKAoiBbVGhlIEZ1dHVyZSBvZiBEdW5lIC0gTGVhbmRybyBPc3RlcmEgLSBGVU4gT0NhbWwg MjAyNF0NCiAg4oCiIFtBZHZhbmNlZCBDb2RlIE5hdmlnYXRpb24gaW4gT0NhbWwtTFNQXQ0KICDi gKIgW29wYW0gMi4zLjAgcmVsZWFzZSFdDQoNCg0KW3RoZSBvY2FtbC5vcmcgYmxvZ10gPGh0dHBz Oi8vb2NhbWwub3JnL2Jsb2cvPg0KDQpbVW5pdmVyc2FsIFJlYWN0IGluIE9DYW1sIC0gRGF2aWQg U2FuY2hvIE1vcmVubyAtIEZVTiBPQ2FtbCAyMDI0XQ0KPGh0dHBzOi8vd3d3LnlvdXR1YmUuY29t L3dhdGNoL095M2xabDJrRS0wP3ZlcnNpb249Mz4NCg0KW1VzaW5nIG9kb2MgdG8gV3JpdGUgRG9j dW1lbnRhdGlvbiAtIFBhdWwtRWxsaW90IEFuZ2zDqHMgZCdBdXJpYWMgLSBGVU4NCk9DYW1sIDIw MjRdIDxodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaC9RemZfWkIxVEtMUT92ZXJzaW9uPTM+ DQoNCltIb3cgdGhlIE11bHRpY29yZSBHYXJiYWdlIENvbGxlY3RvciB3b3JrcyAtIFN1ZGhhIFBh cmltYWxhIC0gRlVOIE9DYW1sDQoyMDI0XSA8aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2gv ZmdkQl85RGNKajQ/dmVyc2lvbj0zPg0KDQpbTWlyYWdlT1MgLSBEZXZlbG9waW5nIE9wZXJhdGlu ZyBTeXN0ZW1zIGluIE9DYW1sIC0gSGFubmVzIE1laG5lcnQgLSBGVU4NCk9DYW1sIDIwMjRdIDxo dHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaC9nN0tsNW1SRENEbz92ZXJzaW9uPTM+DQoNCltU aGUgU3RvcnkgQmVoaW5kIHRoZSBGYXN0ZXN0IEltYWdlIENvbXBhcmlzb24gTGlicmFyeSAtIERt aXRyaXkNCktvdmFsZW5rbyAtIEZVTiBPQ2FtbCAyMDI0XQ0KPGh0dHBzOi8vd3d3LnlvdXR1YmUu Y29tL3dhdGNoL2hUQXZBS29sV2Q4P3ZlcnNpb249Mz4NCg0KW0Vhc3kgR0FEVHMgYnkgUmVwZWF0 aW5nIFlvdXJzZWxmIC0gRWR1YXJkbyBSYWZhZWwgLSBGVU4gT0NhbWwgMjAyNF0NCjxodHRwczov L3d3dy55b3V0dWJlLmNvbS93YXRjaC8tWFlPX0lMSkcyTT92ZXJzaW9uPTM+DQoNCltNYXliZSBP Q2FtbCBXYXMgdGhlIEZyaWVuZHMgV2UgTWFkZSBBbG9uZyB0aGUgV2F5IC0gRGlsbG9uIE11bHJv eSAtIEZVTg0KT0NhbWwgMjAyNF0gPGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoLzFIbElI UGEzOGdZP3ZlcnNpb249Mz4NCg0KW09DQU5OTCwgdGhlIGBuZXVyYWxfbmV0c19saWJgIC0gTHVr YXN6IFN0YWZpbmlhayAtIEZVTiBPQ2FtbCAyMDI0XQ0KPGh0dHBzOi8vd3d3LnlvdXR1YmUuY29t L3dhdGNoLzFKMlh5SExiMkowP3ZlcnNpb249Mz4NCg0KW0xlYXJuaW5nIE9DYW1sIHdpdGggVGlu eSBDb2RlIFhtYXMgLSBNaWNoYWVsIERhbGVzIC0gRlVOIE9DYW1sIDIwMjRdDQo8aHR0cHM6Ly93 d3cueW91dHViZS5jb20vd2F0Y2gvMlpzd3lONGFQMm8/dmVyc2lvbj0zPg0KDQpbTGV0IFNpZ25h bHMgaW4gT0NhbWwgLSBSaXpvIElzcm9mIC0gRlVOIE9DYW1sIDIwMjRdDQo8aHR0cHM6Ly93d3cu eW91dHViZS5jb20vd2F0Y2gvMzRiY2VBdVNSWEU/dmVyc2lvbj0zPg0KDQpbQSAnTWVsYW5nZScg b2YgVG9vbGluZyBDb21pbmcgVG9nZXRoZXIgLSBBbnRvbmlvIE1vbnRlaXJvIC0gRlVOIE9DYW1s DQoyMDI0XSA8aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2gvM29DWFQteWNISHM/dmVyc2lv bj0zPg0KDQpbQnVpbGRpbmcgSW5jcmVtZW50YWwgYW5kIFJlcHJvZHVjaWJsZSBEYXRhIFBpcGVs aW5lcyAtIFBhdHJpY2sgRmVycmlzIC0NCkZVTiBPQ2FtbCAyMDI0XSA8aHR0cHM6Ly93d3cueW91 dHViZS5jb20vd2F0Y2gvNm14eDJqMWptaEU/dmVyc2lvbj0zPg0KDQpbVGhlIEZ1dHVyZSBvZiBE dW5lIC0gTGVhbmRybyBPc3RlcmEgLSBGVU4gT0NhbWwgMjAyNF0NCjxodHRwczovL3d3dy55b3V0 dWJlLmNvbS93YXRjaC83X2J2M0V2UUFOWT92ZXJzaW9uPTM+DQoNCltBZHZhbmNlZCBDb2RlIE5h dmlnYXRpb24gaW4gT0NhbWwtTFNQXQ0KPGh0dHBzOi8vdGFyaWRlcy5jb20vYmxvZy8yMDI0LTEx LTIwLWFkdmFuY2VkLWNvZGUtbmF2aWdhdGlvbi1pbi1vY2FtbC1sc3A+DQoNCltvcGFtIDIuMy4w IHJlbGVhc2UhXQ0KPGh0dHBzOi8vb2NhbWxwcm8uY29tL2Jsb2cvMjAyNF8xMV8xM19vcGFtXzJf M18wX3JlbGVhc2VzPg0KDQoNCk9sZCBDV04NCuKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIElm IHlvdSBoYXBwZW4gdG8gbWlzcyBhIENXTiwgeW91IGNhbiBbc2VuZCBtZSBhIG1lc3NhZ2VdIGFu ZCBJJ2xsIG1haWwNCiAgaXQgdG8geW91LCBvciBnbyB0YWtlIGEgbG9vayBhdCBbdGhlIGFyY2hp dmVdIG9yIHRoZSBbUlNTIGZlZWQgb2YgdGhlDQogIGFyY2hpdmVzXS4NCg0KICBJZiB5b3UgYWxz byB3aXNoIHRvIHJlY2VpdmUgaXQgZXZlcnkgd2VlayBieSBtYWlsLCB5b3UgbWF5IHN1YnNjcmli ZQ0KICB0byB0aGUgW2NhbWwtbGlzdF0uDQoNCiAgW0FsYW4gU2NobWl0dF0NCg0KDQpbc2VuZCBt ZSBhIG1lc3NhZ2VdIDxtYWlsdG86YWxhbi5zY2htaXR0QHBvbHl0ZWNobmlxdWUub3JnPg0KDQpb dGhlIGFyY2hpdmVdIDxodHRwczovL2FsYW4ucGV0aXRlcG9tbWUubmV0L2N3bi8+DQoNCltSU1Mg ZmVlZCBvZiB0aGUgYXJjaGl2ZXNdIDxodHRwczovL2FsYW4ucGV0aXRlcG9tbWUubmV0L2N3bi9j d24ucnNzPg0KDQpbY2FtbC1saXN0XSA8aHR0cHM6Ly9zeW1wYS5pbnJpYS5mci9zeW1wYS9pbmZv L2NhbWwtbGlzdD4NCg0KW0FsYW4gU2NobWl0dF0gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5u ZXQvPg0KDQo= --=-=-= 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 November 19 to 26, 20= 24.

OCaml 5.2.1 released

octachron announced

We have the pleasure of announcing the release of OCaml 5.2.1, dedicated to= the memory of Niels Bohr and Paul =C3=89luard on the anniversary of their death= s.

OCaml 5.2.1 is a collection of safe but import runtime time bug fixes backp= orted from the 5.3 branch of OCaml to improve the stability of the 5.2 runtime wh= ile waiting for the upcoming release of OCaml 5.3.0.

The full list of bug fixes is available below for more details.

Happy hacking, Florian Angeletti, for the OCaml team.

Installation Instructions

The base compiler can be installed as an opam switch with the following com= mands:

opam update
opam switch create 5.2.1

The source code for the release is also directly available on:

Bug Fixes In OCaml 5.2.1 (18 November 2024)

  • Runtime System:
    • #13207: Be = sure to reload the register caching the exception handler in caml_c_call and caml_c_call_stack_args, as its va= lue may have been changed if the OCaml stack is expanded during a callback. (Miod Vallat, report by Vesa Karvonen, review by Gabriel Scherer and Xavier Leroy)
    • #13252: Rew= ork register assignment in the interpreter code on m68k on Linux, due to the %a5 register being used by GLIBC. (Miod Vallat, report by St=C3=A9phane Glondu, review by Gabriel Scherer and Xavier Leroy)
    • #13268: Fix= a call to test in configure.ac that was causing errors when LDFLAGS contains several words. (St=C3=A9phane Glondu, review by Miod Vallat)
    • #13234, #13267: Open runti= me events file in read-write mode on ARMel (ARMv5) systems due to atomic operations limitations on that platform. (St=C3=A9phane Glondu, review by Miod Vallat and Vincent Laviron)
    • #13188: fix= races in the FFI code coming from the use of Int_val(...) on rooted values inside blocking questions / without the runtime lock. (Calling Int_val(...) on non-rooted immediates is fine, but any access to rooted values must be done outside blocking sections / with the runtime lock.) (Etienne Millon, review by Gabriel Scherer, Jan Midtgaard, Olivier Nicole)<= /li>
    • #13318: Fix= regression in GC alarms, and fix them for Flambda. (Guillaume Munch-Maccagnoni, report by Benjamin Monate, review by Vincent Laviron and Gabriel Scherer)
    • #13140: POW= ER back-end: fix issue with call to caml_call_realloc_stack from a DLL (Xavier Leroy, review by Miod Vallat)
    • #13370: Fix= a low-probability crash when calling Gc.counters. (Demi Marie Obenour, review by Gabriel Scherer)
    • #13402, #13512, #13549, #13553: Revise bytecode implemen= tation of callbacks so that it no longer produces dangling registered bytecode fragments. (Xavier Leroy, report by Jan Midtgaard, analysis by Stephen Dolan, review by Miod Vallat)
    • #13502: Fix= misindexing related to Gc.finalise_last that could prevent finalisers from being run. (Nick Roberts, review by Mark Shinwell)
    • #13520: Fix= compilation of native-code version of systhreads. Bytecode fields were being included in the thread descriptors. (David Allsopp, review by S=C3=A9bastien Hinderer and Miod Vallat)

smaws preview release, an AWS SDK for OCaml using eio

Chris Armstrong announced

I'm pleased to announce the first preview release for the smaws library (0.1~preview1).

smaws provi= des AWS bindings for OCaml using the modern eio library for effects-based concurrency handling.

Whats in this release

This release includes SDKs for some AWS services and is intended to demonst= rate its API.=20

It is not production ready, lacking important features such as full API doc= umentation EC2/ECS instance metadata authentication, retry and timeout hand= ling, etc. It also needs support for the other internal AWS API types to ex= tend coverage across most AWS services.

Motivation

I wanted to build an AWS SDK using modern effects-based concurrency. I've b= uilt similar bindings for ReScript and ReasonML in the past (some of the co= de is in fact ported across) but this is the first OCaml-native bindings I'= ve created.=20

Unlike similar projects in the OCaml ecosystem, it uses the newer Smithy de= finitions to generate its bindings instead of the Python botocore definitio= ns. These should be better supported by AWS in the future with richer API d= efinitions.

What's next

My next task is to finish off API documentation generation, and then expand= support for all the authentication methods and other API types that will a= llow this to be used with most AWS services.

ppx_deriving_ezjsonm

Patrick Ferris announced

I'm happy to announce the release of ppx_deriving_ezjsonm (bas= ed off of p= px_deriving_yaml). The two libraries share a common definition of a "value" which made the reuse of the existing deriver possible for= a simple JSON deriver.

opam update
opam install ppx_deriving_ezjsonm

The documentation is online.

This library may come in handy when your dependency cone already includes <= code>ezjsonm. If that is not the case, you would probably have bette= r luck in the yojson ecosystem of tools.

Happy JSON-ing :camel:

FUN OCaml now has a YouTube Channel

Sabine Schmaltz announced

I just created a YouTube channel for FUN OCaml. :sparkles: :camel:

The talk recordings from the conference in Berlin on September 16 + 17, 202= 4 are now available for viewing!

https://www.youtube.= com/@FUNOCaml/featured

If you can, commenting, liking, or subscribing helps us to make these video= s more visible and easier to find on YouTube, so big thanks for everyone wh= o helps us with this! :orange_heart: :camel:

For people who avoid YouTube: The videos will also be made available on wat= ch.ocaml.org.

Terrateam's open source Ocaml repository

Malcolm announced

A few years ago my friend and I started a company called Terrateam, which does infrastructure orchestration on Gi= tHub. Being that I am an Ocamler and we are a lean company, we chose to us= e Ocaml as our primary language. We recently went open source and I'm post= ing the link here to contribute an example of an actual company using Ocaml= . A real repository.

The code can be found = here.

There a few things to note about the repo:

  1. It's a mono repo, so while many of the libraries in there are generic, = they are not really individually consumable as is.
  2. We have our own concurrency framework (more on that below).
  3. We use our own build library (pds, which is in opam).
  4. The code is in flux all the time so things change rapidly.

Why did we build our own concurrency framework?

Disclaimer: Yet another concurrency framework? Yep! Do I expect anyone to = use it? Nope, and that's ok. It is designed for our needs. It's meant to = be maintainable by one person. It's not meant to compete with Lwt or Async= for mind share. If it grows, great, if it doesn't, I'm happy still.

Our concurrency framework is called "Asynchronous Building Blocks" (Abb). = It started over a decade ago when I was frustrated with a few things:

  1. I wanted kqueue support in Async, but (at the time) Async required modi= fying a handful of repos to support it and it just wasn't obvious how.
  2. Lwt supported kqueue, but for no good reason, I just didn't like Lwt. = Part of it was how failure worked in Lwt and other part is just it didn't f= it my aesthetic. That isn't a ding against Lwt, just personal preference.<= /li>
  3. I wanted as much of it to be implemented in Ocaml as possible. As it s= tands now, the only C code is libkqueue which is a little shim= to to allow kqueue code to run on Linux, otherwise everything is in Ocaml.=
  4. I didn't like how neither Async nor Lwt really supported cancelling ope= rations. I wanted that to be part of the framework, not an ad-hoc feature = per library. Coming from Erlang, cancelling is really important to me and = part of how I think about writing concurrent software. I was bummed that (= last I looked) Eio explicitly rejected cancelling.
  5. I also wanted a little experiment of "what if the concurrency library e= xposed a syscall interface like an OS?" So a lot of the interface is meant= to look low-level (I don't think this idea really panned out or made Abb m= eaningfully different).
  6. I also just like having my own frameworks.

Add a dash of naivete, "how hard can it be to build a concurrency framework= ?", I started my own. First commit was Mar 9, 2013.

Much of the concurrency monad is based on an unreleased library called Fut by @dbuenzli=20

Over time, Abb matured to where I could use it in my personal projects. An= d by the time we decided to make Terrateam, I felt it was good enough for p= roduction. And it's been running production traffic for a few years now.

One, unexpected, benefit of Lwt and Async existing in the community is that= adding a third one isn't that hard. Almost all libraries that want to be = used support both, and that usually means that they have a generic interfac= e. Cohttp and Dns are examples. So I could use existing libraries for thi= ngs I didn't want to or don't feel I could reasonably implement myself.

I've also used Abb as a foundation my web framework called Brtl (pronounced= Brutal) which is both a backend framework build on Cohttp and a frontend f= ramework built on Brr. It really doesn't do anything fancy, like Dream, it= 's pretty low level and focused on being simple.

The good:

  1. It works! At least, for me.
  2. Given that I wrote very single line of code, debugging and bug fixing (= which is less and less) is very easy. I also have a really great mental mo= del of how it works.
  3. I like that I can just cancel a whole graph of async work if it's no lo= nger needed.
  4. The future's library works in FreeBSD, Linux, and JavaScript.
  5. The test coverage is pretty darn high. This is because it's a pretty i= ntricate thing to implement so I had to implement a lot of tests to stay sa= ne.

The bad:

  1. Performance is not anything special. I don't think this is a fundament= al flaw, it's just that it is as fast as I need it to be right now.
  2. Some of the API is a awkward if you don't know the system. Or names ar= e long, like Abb_future_combinators.
  3. The multi-target build story kind of sucks. I think that might be a bi= gger issue with the pds build system but for now in the web framework you h= ave to use Abb_js rather than Abb for everything.=
  4. There are definitely some corners cut in, especially around file IO, bu= t that's OK, we don't do much file IO.
  5. Explicitly takes advantage in that everything runs in a single thread. = So implicitly going multi-threaded would probably break things.

Future work:

There really isn't a lot of future work. For the most part: Abb is done. = Or should I say the interface is done. Yes, it will need updates to fight = bit rot, but there isn't much more for it to do. It runs your code concurr= ently, the end.

However, as Ocaml5 becomes more of a thing, it will need to take advantage = of that. I haven't really thought about how to do it. One item I have in = my to-do list is to evaluate if Picos could be a base layer for Abb. Abb i= s a layered approach so really you only need to implement the Abb_int= f.S interface and everything above that should Just Work (given sing= le threaded semantics). I think any future work to support multi core will= probably need an explicit "this crosses a thread boundary" API. Abb will = get there, eventually, but right now it doesn't need to.

Effects will obviously have a big impact, I have no idea what that'll do fo= r Abb. I hope I can transition it slowly to supporting effects but I don't= want to look at effects until it's in the type system.

Some, perhaps, libraries of interest in the repo:

  1. Abb_scheduler_kqueue - The most used scheduler. = It implements the Abb_intf interface.
  2. Abb_scheduler_select - A simpler select-based sch= eduler. This is meant to be used any place kqueue is not supported and als= o as demo.
  3. Pgsql_io - An implementation of the PostgreSQL protocol.
  4. Githubc2 - An automatically generated GitHub REST library gen= erated from their JSON Schema. This actually has no Abb dependency, just i= mplements the API serializing/deserializing.
  5. OpenAPI CLI - This generates a library (see Githubc2) from= an OpenAPI spec. It is, absolutely, a bit of a rats nest, but it works. = We chose to do code-gen for this because I didn't want to be blocked when c= ompiling based on different compiler versions as we're using Ast_help= er. Ocaml, the code, is more stable than Ocaml, the compiler API.

There is a bunch of other stuff in there. If you decide to poke around and= have any questions, feel free to ask. I can promise: not every decision i= n there is well thought out or coherent.

OUPS december 2024

zapashcanon announced

CAUTION: the time has been changed from 7pm to 6:30pm

The next OUPS meetup will take place on Thursday, 12th of December 2= 024. It will start at 6:30pm at the 4 place Jussieu in Paris.= It will be in the in the Esclangon building (amphi Astier).

Please, register on meetup as soon as possible to let us know how ma= ny pizza we should order.

For more details, you may check the OUPS= =E2=80=99 website .

This time we'll have the following talks:

Snapshottable Stores – Cl=C3=A9ment Allain & Gabriel Scherer = (@gasche)

We say that an imperative data structure is snapshottable or supp= orts snapshots if we can efficiently capture its current state, and res= tore a previously captured state to become the current state again. This is= useful, for example, to implement backtracking search processes that updat= e the data structure during search.

Inspired by a data structure proposed in 1978 by Baker, we present a sna= pshottable store, a bag of mutable references that supports snapshots. = Instead of capturing and restoring an array, we can capture an arbitrary se= t of references (of any type) and restore all of them at once. This snapsho= ttable store can be used as a building block to support snapshots for arbit= rary data structures, by simply replacing all mutable references in the dat= a structure by our store references. We present use-cases of a snapshottabl= e store when implementing type-checkers and automated theorem provers.

Our implementation is designed to provide a very low overhead over normal r= eferences, in the common case where the capture/restore operations are infr= equent. Read and write in store references are essentially as fast as in pl= ain references in most situations, thanks to a key optimisation we call = record elision. In comparison, the common approach of replacing referen= ces by integer indices into a persistent map incurs a logarithmic overhead = on reads and writes, and sophisticated algorithms typically impose much lar= ger constant factors.

The implementation, which is inspired by Baker's and the OCaml implementati= on of persistent arrays by Conchon and Filli=C3=A2tre, is both fairly short= and very hard to understand: it relies on shared mutable state in subtle w= ays. We provide a mechanized proof of correctness of its core using the Iri= s framework for the Coq proof assistant. [/details]

Safe, expressive and efficient programming of FPGAs circuits – Lo= =C3=AFc Sylvestre

FPGAs (Field-Programmable Gate Arrays) are reconfigurable digital circuits:= their behavior can be customized by logic synthesis of specification at th= e so-called register transfer level (RT level), in hardware description lan= guages such as VHDL or Verilog. FPGAs are well suited to implement reactive= systems, directly as synchronous circuits interacting with the external en= vironment via I/O pins =E2=80=93 the logic synthesizer ensuring that timing= constraints are met, given the FPGA clock frequency. FPGAs are also used t= o implement hardware accelerators ; however, RT-level descriptions of trans= formational systems (or =E2=80=9Ccomputations=E2=80=9D) =E2=80=93 with late= ncies of several clock cycles =E2=80=93 are difficult to debug, maintain an= d manually optimize. High-Level Synthesis (HLS) offers a simpler way of exp= ressing computations, using a programming language compiled at the RT level= . The advantage of this approach is to keep the implementation details hidd= en from the programmer, leaving the compiler responsible for scheduling com= putations over time. However, this leads to a loss of control over temporal= behavior and therefore safety and efficiency for the circuits generated. A= s embedded systems, especially those based on FPGAs, need to perform more a= nd more computations, while interacting with their environment, this thesis= proposes a programming model to combine hardware description (data-flow or= iented) and general-purpose parallel computation (control-flow oriented) us= ing a synchronous approach. This programming model forms the basis for the = design and implementation of Eclat, a functional-imperative, parallel and s= ynchronous programming language, compiled to VHDL. Eclat is sufficiently pr= ecise to describe synchronous circuits at the RT level. It facilitates the = programming of hardware accelerators, with a clear and predictable temporal= semantics by which to exploit time-space trade-offs. Any Eclat program is = reactive, with a mechanism for embedding computations within programs and t= hereby mix computation and interaction. Eclat also offers shared memory (in= the form of RAM blocks), with deterministic concurrency. It is used to dev= elop programming abstractions such as algorithmic skeletons and virtual mac= hine implementations for high-level languages. This addresses, at various l= evels, the need to run general-purpose algorithms within FPGA-based reactiv= e embedded applications.

After the talks there will be some pizzas offered by the OCaml Software Foundation and later on we=E2=80=99ll mov= e to a pub nearby as usual.

Dune dev meeting

Etienne Marais announced

Hi camelers! :camel:=20 We will hold our regular Dune dev meeting on Wednesday, November, 27th at 1= 6:00 CET. As usual, the session will be one hour long.

Whether you are a maintainer, a regular contributor, a new joiner or just c= urious, you are welcome to join: these discussions are opened! The goal of = these meetings is to provide a place to discuss the ongoing work together a= nd synchronise between the Dune developers :ok_hand:=20

:calendar: Agenda

The agenda is available on the meeting dedicated page. Feel free to ask if y= ou want to add more items in it.

:computer: Links

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 to the= caml-list.

--=-=-=--