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 3AC355D5 for ; Tue, 22 Feb 2022 12:43:25 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.88,387,1635199200"; d="scan'208,217";a="22646625" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 22 Feb 2022 13:43:22 +0100 Received: by sympa.inria.fr (Postfix, from userid 20132) id E1E36E6E6C; Tue, 22 Feb 2022 13:43:21 +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 A9CAEE6E66 for ; Tue, 22 Feb 2022 13:43:17 +0100 (CET) Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=Pass smtp.pra=alan.schmitt@polytechnique.org; spf=Pass smtp.mailfrom=SRS0=JN+1=TF=polytechnique.org=alan.schmitt@bounces.m4x.org; spf=Pass smtp.helo=postmaster@mx1.polytechnique.org IronPort-SDR: 5ENZk4TkamVVCxWEivXA8HFDxFg4/8viAz9ilUYUI2c20Wn5SQyrdbsdYPg6UWYVWa8uzUJZOs qs7q8OhgaMNOFLE5YB4CjHj0CEqvEl0vDuC3g4zxYjyPdRvKW87HcMaV0VOJy9DhpeU/0VvLrN hhus5pKz/iaRj/+be42ZIvt0umek0qsSiwHrOI85G1MXLTkFIfhlRbFgleTlgH00Gc+h4EThVE 6QI9HBUlV00uSxtqExvppPiZcyf23qVTNnfISo8TWc7h6Cnt0eTdVqA7a+8RYqn8vVJXcB2L/y K2zMYJizkrI0pL+7HnE9odo+ X-IPAS-Result: =?us-ascii?q?A0DYAAD22RRimCIeaIFaFoJNgSFZBigZAWRXFhUHCEKEV?= =?us-ascii?q?IkGhUYBgkqJTIZziByEFoERA08QAQMBDSoBDAcBAgQBAYISgnUCFzoBBIMyA?= =?us-ascii?q?h4GAQUyBg4BAgQBAQEBAwIDAQEBAQEBAwEBBQEBAQIBAQIDBAETAQEBAQEBA?= =?us-ascii?q?QEJCwkHBgwFEA4FPGRkBIFLBIF0CzQNgiITDAwDA4N0AwEYAQgKZRQPAxQBB?= =?us-ascii?q?gMCBA0BFwEUCgMBEwESGQGCagGDFgUKj1icDIExgQGDTwEDAw0DAQ4JJoNzg?= =?us-ascii?q?WQNAhSBGYYRVUoBgwEJhAYpEIFVRIEVgTyBPm6CWAsBAQEBAYE0BwEBBgIJR?= =?us-ascii?q?YJigmUEk08fBw4fGQYCKQMsBwECDwIHBwwBBwMJCAgGAQEiDRcJAQgtCwsEF?= =?us-ascii?q?SYKBAIODg0fCwcELwOReAcRJpB3hxqCXJFQYTQHg0qBOQYLiB6BHIZ9hXWII?= =?us-ascii?q?INygU6KWJd9IZYtIIIphm4IgQcJgX9ElCkEDyWFAIFOKWxiHAIMBzMaMEOCa?= =?us-ascii?q?QkWLwEDAg0BAgIDAQIBAgkBAQKIHoYLFoEEAQKBdSwogT6BJoF1O4VLQDQCA?= =?us-ascii?q?QEBMwIGAQoBAQMJhWMBAQUTCwGJHAImgURaAQE?= IronPort-PHdr: A9a23:2Av8Xxb67gEDI6spL++8HLX/LTE93oqcDmcuAnoPtbtCf+yZ8oj4O wSHvLMx1gWPDdWQt6oMotGVmpioYXYH75eFvSJKW713fDhBt/8rmRc9CtWOE0zxIa2iRSU7G MNfSA0tpCnjYgBaF8nkelLdvGC54yIMFRXjLwp1Ifn+FpLPg8it2O2+5YPfbx9LiTe+br9/I wm6phjNu8cLhodvNrw/wQbTrHtSfORWy2JoJVaNkBv5+8y94p1t/TlOtvw478JPXrn0cKo+T bxDETQpKHs169HxtRnCVgSA+H0RWXgLnxVSAgjF6Bb6Xortsib/q+Fw1jWWMdHwQLspXjus8 rprSATwiCgZKzE57G/Zist1jK1BoRKhoQF0z4rbbYyRMfZzeKPRc9AcRWpfX8ZRTC1BDZi4b 4QREuEAM+FYr5PgqFsVsBCyAQehCP/qxjJOm3T437A10/45HA/GwgIuAtwAvnfbo9rpL6odS /y5wbPSwDnfc/9b2zHw45XIfBA7pvGMWKp9fNbVyUY1EQPOk0ieppDlPzOQ1+QNr3Sb5PdnW O21j24osQdxriK0xsgwionJg4MVykzY9Shi2IY1Itm4SU5nYdG6DJRQtyeaN4pvQsM/XW5ko iE6yqcJuZOieiUB1ZsoyQLFZfOdb4iI/gzsVPyXITpghH9pZayyiRmv/UWv1OHyWM253llOo ydZkdTCuX8D2RzN58SaRfVx40Ss1CuA2QzN5OxJJV44m6TGJpMvwbM8iJweulnNEC/xnUX5l q6WdkM89+iw9evnfrTmpoOCOI9sjQH+N6EuldKlDeQ+LAcOQ3CX+eOg27L5+E35RK9Gjvosk qnWqJzaPtgUpq+lAwBLzokj6wuwAC2n0NQcnXgLNk5KeBWCj4TxNFHOIez4Dfeig1u3ijtk2 /fGPrj5DpXNNHfDi7Thcqh5605Y0gYzyspf551MBr4cOv3zXlX9u8DCARMhKQO02enmCNRj1 o8EXmKPGKCZPLvdsV+J+uIvI/SMa5QPtDb8LPgp/+LhjX8jll8bcqmmw4AXZGq9Hvt7O0mWf 2Dsgs0bHmcWvwo+VfHqh0OYXTFPZ3a+R6U86S0hB4KjCYfPX5utgLKb0Ce8BJ1WaXhKCleQH njycoWEX+4AZzmVIs9mkTwIT6KtRJMm1RGrrAP6yb1nLurS+iwWtZLj1cR15+zVlRE96Tx0C MKd33uLT25qgmMEXzg207xlrkx4zleDybJ4g/tCGdNP4PNJVx82OJzdwuF5Cd3+QAXBfs2GS Fq+Q9WmBysxTtMrzNMUbUZ9Ac2ujhHe0CuqB78Vk6aHBJsu8qLT2XX6OsVzy27e2aU8kVUrR tFDOXC6iqNw7QTeCZLFn1+XmqulbagQwSDA+HqZwWaQvExVXxR8XbjZUXwFe0fbr8j160XfR LG0E7snKBFOycuaJ6tKdNLpiVJGSe/mONXRfm69gX+wBRGMxrKMcIrlZXkS3CXbCEgFigAT4 GiJORI5Bie7rGLSFD1uFVTxbEPw6eRytW23Q0suww2Xc0Fs2KC59xAJifCGRf4e0aoIuCI7p DV1GFa90cjWC92Fpwd5YatSfc4z7Etf2GzdrwJxOYGsIrh8iFAeawl3p0Tu1xF3C4Vcj8cls HMqzAxzKaKBzVNOaSmU3ZfqOr3YMmT95hSvZLTQ2l3Ey9aZ5qcP6PE5q1X/oAGkDVEt83J60 9lTz3ST+I7KABAXUZ/+XUc77R96p6vVYiUl4YPbzmVjMbOovT/ax9IpGOwlxw69c9tHKqOLC BfyE9EGB8ipMOElh0KmbhcAPOxL8K40Ptimd+ed1a6wPOdgmSqmgn5d7IB81EKM7St8RfTS0 5YL2fHLljeAAn34k1Hr+pTzhoZsYS4UWGyy1X6gTMRaeas4Nc5fAnioC8m23cllwZ/hSnpcs lm5CAVCkMSgfB7Xa13mwSVR014WqDqpg3iW1Ttxxhgtp6zX5yfOxuX+aFJTM2pCQi95hlfpI JSop8gdWFm0YgMpkhq8+Eu8wLJU8vcsZ1LPSFtFKnClZ1ppVbG94+XTCyYuwJYhsCEMFf+5f UjfUbnl5R0TzyLkGWJagjE9bTCj/JvjzFRhkGzIFH9otzLCfN1ogw/F7YnVQfdXmCENRCx5l SX/Hl+4LsWk9tWSlo7ev6a5TW3yHoZLf3zTxJib/DC++XUsBBS+m/6pndiyKjIBiXrZ8ZozA Bnm+Q77Zpj32q+6N+N+Y0QuA0XzvsN+E4c4iYAwgZAMxVAQgYiT9ncc12KvIZNcw62tJGEVS 2szysXOqBPgxFUlLn+NwNfhUW6Bx8J6e9SgSmYGg2Ql6MRbFKqf7LpFhDZ45F2iomo9eNBFl ywGgbsr4X8e2KQSvRY1iz6aGvYUFFVZOirlk1KJ6cq/peNZfjTnfb+13Ut41devadPK6ghYU XC/YZwiGC5s8u1nN1bdzHD46oflYcTdK9UJuVWYngzBgO5cNJ8q3qNQ1Gw+YT675iVjkLJzh AcLv9nypIWdLmRx4K+1SgVVMDH4fYJb+z3gi7pfgtfDx5qmTd1qHjQGWoetTOr9SWhD862/a 0DVSHtn9iT+e/KXBwKU5UZ4omiaFpmqMyrSP3wF1ZB5QwHbIkVDgQcSVTF8n5gjFwnsytayF SUxrj0X+FP8rQNBj+xyMByqGFzln1/9SBF3Ec2jAk9O6QVT+0reMcqf9/9+WSZC8cioqAWLb HeQZwFJEX0hUEuZAVvuJf+rucmG9PKXTLnbTbOGcfCVpOpSWu3dj5ur240g5D2MM8STIlF6C PkqxkdIXXZ4AtnU3TIVRGZE8kCFJ97erxC69Cptq8m5+/m+QwPj67yEDL5KOMlu8RS70u+Tc vSdjyFjJXNEx4sBkDXT0LZFmgZY2EQMP3G9VK4NvinXQOfMl79LWlQAcy0pcpMP97g1mgxDI 8newpD8hLto17gtDFNUSVHqmseofNEHZWanOzalTA7IPeaDNWeN28bzcL+xQr1WjfxJulu3o znTUEaxOyTY0SHuUwGzPOpMiiCCIREYv5uyF3QlQSviVIy0MEXjaY0r1DFuk+Rm1y/GODxOb mMifxES8uLIpWZRhvE1c4BYxkJsNvLM2yOQ7u2Db40TreMuGSNs0eRT/HU9zbJRqiBCXv183 iXI/JZipFSvk+/HzTQCMlIGkQxw3NepmwY7bJn3o4FHXWfY8RkN62SJFhlMoMFqX9TrsqYW0 dPPkaPvNB9I9M/S9sYHQc2IOISAKnVEU1KhFDPPDQQDRCKmLimG3R0byanOsCbN6MNm4pH30 IIDULpaSEA4GrsBB0JpEcZDRfU/FjIonLiHjdIZsH+3rR3fXsJf7djMUvOfB+mqKS7M1OMVI UJQnfWjdcJIat6euQQqcFRxkYXUFlCFWNlMpnYkdQoouABW92A4SGQv2kXjYwfr4XkJFPfyk ARl72k2Kekr6jro5E86Y1TQoy5l2nILoo2woxbSKWvNAvKoWoVHFyf/t04wK472BQFvYli7m UVicizPR7dQk6dIf2d2jgTRot1KRe4aSrdLKkx1p7nfd7Az3FJQpz/yj3R93rOQK70hzV4WX 8u0qHZRxw9obNg0PLHdYq1TwQ1ZgquI+DSj1uUw3BM2LUEQ9mifY2gN5FxOMaMpbXnNnKQk+ UmJnD1Nf3IJXvwhr6dx908zDO+Hyjrpz79JLk3if/zaNa6SvHLM0NKZWl5lnFgQmRMDpfIlt KVrO1rRTU0ky6GdUggEJdaXYxpNYZAUrD/LZy/KtOvXxpc9fIzvE/CxC/eJsLcIj0mkGgcwA olK6d4Oe/vkmALRf8L3dvgdzhE8+AngJFOEFelEPhWRn39EqpO63MQxxY5ZNy0QCmV7MDyq6 /DQvABP4rLLH9YuPCVABtNdZC5vVJXownwI43hNXmvoibwVmlfesGe04y3UCHOUg8NLXP6Pf lssDdi3/W566K2qkRvM9Y2YIWjmNNNks9uJ6OUApp/BBekGBbV6tk7dncFfSRnIGybXFsWpI pHrd4Q2RdnkUzCiVViulz8+T8HwJcugaK+SjknkSJ1Vv4+SwD04fZbnR3dHQ0s2/LlFv/40b BZmAdJzeRPysgUiK6GzaByV1NmjWSflKDdbSeVe0fTvZ7FTyHlkZeu7xX08C5AimrDtoAhUH M1M1UmYnqrwAusWGTL+EXFcZQjV8C8wlmw6c/033v962xTQ918VLzGMcuVtLm1CpdA1Q12Ic hAUQiI1QUGRiY3b70uixbcXqmFmpe0MhM9j8yGrgrGKeDWoSbCmopXTsjM9YJ4huaIkOIjqJ I2dv5PbnyDDZJPXrwuOXTX8EqZK3N9KL2gLJZsA0XFgIsEAtYdbvAApUdwiIrVUFKQ2jrW6M Hx8CioD0SISV4WBxSEPxOCm1PGJ83XYOIRnOxsCvpJYh9IbWCMjeSISqpioUIDOnnOFQGwGc 08DqB5B7wUamspsb/jotcDWGYRUxWcc8JcWGmPbU4Nl/FzhRiSKjEjkHb+/xvex01saxbqp2 90fEnaX5mBXwPtQnUYzbrQrO+8XpIGY61dglGv/rDur0OyiNUVcws3SdkTlAczCr2WuC0X0H FUMQote1HzUFZITihd0LqExqwcVSL0= IronPort-Data: A9a23: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 IronPort-HdrOrdr: A9a23:gvYfrqjcKcG+C0LZwWDfbSm3oXBQXt0ji2hC6mlwRA09TyX4ra CTdZsguiMc5Ax6ZJhCo7G90cu7L080nKQdieIs1NyZMDUO1lHEEKhSqaPchxfgFyf9+uM179 YCT4FOTPvqAxxfhcb+iTPIdurILeP3kpyVuQ== X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="5.88,387,1635199200"; d="scan'208,217";a="6652372" X-MGA-submission: =?us-ascii?q?MDE4zPV0AoB38SkKhdtLoXZFIz9ZyZceTBZkZh?= =?us-ascii?q?QJqG/Fkq3/1h2jt+9sSy3x1rYPc1TzmBub6rgRHLmZQEyRulzUCG050r?= =?us-ascii?q?bLsfq3sBsKcQBfh8+klTiSVvlJ/TyF6J6UVmAfvggbUA6hsNj58hDSHK?= =?us-ascii?q?h3qSh07kZ76CJJYZgq4mZb9g=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; 22 Feb 2022 13:43:16 +0100 Received: from set (set.irisa.fr [131.254.10.170]) (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 655CE566737; Tue, 22 Feb 2022 13:43:14 +0100 (CET) From: Alan Schmitt To: "lwn" , "cwn" , caml-list@inria.fr Date: Tue, 22 Feb 2022 13:43:14 +0100 Message-ID: <87o82z9in1.fsf@m4x.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Feb 22 13:43:14 2022 +0100 (CET)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.042300, queueID=A4A22566785 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: 18706 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 ZWsgb2YgRmVicnVhcnkgMTUgdG8gMjIsDQoyMDIyLg0KDQpUYWJsZSBvZiBDb250ZW50cw0K4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCk9DQU1M IGdvZXMgUXVhbnR1bSBjb21wdXRpbmcNCkxheW91dCBQYXJzaW5nIGFuZCBOaWNlbHkgRm9ybWF0 dGVkIEVycm9yIE1lc3NhZ2VzDQpwdGltZSAxLjAuMCBhbmQgbXRpbWUgMS40LjANClRpbWVkZXNj IDAuNi4wDQpPQ2FtbCBmcm9tIHRoZSBWZXJ5IEJlZ2lubmluZyBub3cgZnJlZSBpbiBQREYgYW5k IEhUTUwgZm9ybWF0cw0KRHVuZSAzLjAuMA0KQmxvZyBQb3N0ICIyMDIxIGF0IE9DYW1sUHJvIg0K UGFja3N0cmVhbSAwLjENCk9DYW1sIDQuMTQuMCwgZmlyc3QgYmV0YSByZWxlYXNlDQpPbGQgQ1dO DQoNCg0KT0NBTUwgZ29lcyBRdWFudHVtIGNvbXB1dGluZw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9vY2Ft bC1nb2VzLXF1YW50dW0tY29tcHV0aW5nLzkzMzMvMT4NCg0KDQpGbG9yaWFuIHNhaWQNCuKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEl0IHNlZW1zIHRoYXQgc2lsZW50 bHkgT0NBTUwgaXMgbm93IGVudGVyaW5nIHRoZSBRdWFudHVtIHdvcmxkLiAgSXQNCiAgbG9va3Mg dGhhdCB0aGUgSW50ZXJwcmV0ZXIgZm9yICJUd2lzdCIgW05ldyBwcm9ncmFtbWluZyBsYW5ndWFn ZSBmb3INCiAgUXVhbnR1bSBjb21wdXRpbmddIGlzIG1hZGUgd2l0aCBPQ0FNTDogW0dpdEh1YiBm b3IgVHdpc3RdDQoNCg0KW05ldyBwcm9ncmFtbWluZyBsYW5ndWFnZSBmb3IgUXVhbnR1bSBjb21w dXRpbmddDQo8aHR0cHM6Ly9zY2l0ZWNoZGFpbHkuY29tL3R3aXN0LW1pdHMtbmV3LXByb2dyYW1t aW5nLWxhbmd1YWdlLWZvci1xdWFudHVtLWNvbXB1dGluZy8+DQoNCltHaXRIdWIgZm9yIFR3aXN0 XSA8aHR0cHM6Ly9naXRodWIuY29tL3BzZy1taXQvdHdpc3QtcG9wbDIyPg0KDQoNCkFudG9uIEtv Y2hrb3YgdGhlbiBhZGRlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSGFza2VsbCBoYXMgYSBuaWNl IHBhY2thZ2UgZm9yIHF1YW50dW0gY29tcHV0aW5nIC0gUXVpcHBlci4gSQ0KICByZWNvbW1lbmQg dG8gdGFrZSBhIGxvb2sgdG8gaXQgZm9yIGluc3BpcmF0aW9uIGFzIHdlbGw6DQogIOKAoiA8aHR0 cHM6Ly9oYWNrYWdlLmhhc2tlbGwub3JnL3BhY2thZ2UvcXVpcHBlci1sYW5ndWFnZT4NCiAg4oCi IDxodHRwOi8vd3d3Lm1hdGhzdGF0LmRhbC5jYS9+c2VsaW5nZXIvcXVpcHBlci8+DQogIOKAoiA8 aHR0cHM6Ly9hcnhpdi5vcmcvcGRmLzEzMDQuMzM5MC5wZGY+DQogIOKAoiA8aHR0cHM6Ly9hcnhp di5vcmcvcGRmLzIxMDUuMDM1MjIucGRmPiAoYSBuZXcgbGFuZ3VhZ2UgdGhhdCByZXVzZXMNCiAg ICBsaW5lYXIgdHlwZXMgaW4gdGhlIEhhc2tlbGwgdG8gcmVwcmVzZW50IHF1YW50dW0gc3BlY2lm aWNzIGR1cmluZw0KICAgIHRoZSBRdWlwcGVyIHR5cGUgY2hlY2spDQoNCg0KTGF5b3V0IFBhcnNp bmcgYW5kIE5pY2VseSBGb3JtYXR0ZWQgRXJyb3IgTWVzc2FnZXMNCuKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2Nh bWwub3JnL3QvYW5uLWxheW91dC1wYXJzaW5nLWFuZC1uaWNlbHktZm9ybWF0dGVkLWVycm9yLW1l c3NhZ2VzLzkzNDMvMT4NCg0KDQpIYnIgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIANCg0KICBJbiBhIHByZXZpb3VzIFtwb3N0XSBJIGhhdmUgZGVzY3Jp YmVkIG15IHdheSBmcm9tIExBTFIgcGFyc2luZyB0bw0KICBjb21iaW5hdG9yIHBhcnNpbmcuIE5v dyBJIGFtIG1vcmUgYW5kIG1vcmUgY29udmluY2VkIHRoYXQgY29tYmluYXRvcg0KICBwYXJzaW5n IGlzIHJlYWxseSBhIGdvb2QgYW5kIGZsZXhpYmxlIHdheSB0byB3cml0ZSBwYXJzZXJzLiBUaGUg bmV3DQogIHJlbGVhc2UgMC41LjAgb2YgYEZtbGliYCBmb2N1c2VzIG9uIGxheW91dCBwYXJzaW5n IGFuZCBuaWNlbHkNCiAgZm9ybWF0dGVkIGVycm9yIG1lc3NhZ2VzIGJ5IHVzaW5nIGNvbWJpbmF0 b3IgcGFyc2luZy4NCg0KICBUaGUgbGlicmFyeSBjYW4gYmUgaW5zdGFsbGVkIHZpYSBvcGFtIGJ5 IGBvcGFtIGluc3RhbGwgZm1saWInLiBUaGVyZQ0KICBpcyBhIFtnaXRodWIgcmVwb3NpdG9yeV0g aG9zdGluZyB0aGUgc291cmNlIGNvZGUuIFRoZSBbQVBJXSBjYW4gYmUNCiAgZm91bmQgb25saW5l LiBTZWUgYWxzbyBhIFt0dXRvcmlhbF0gb24gY29tYmluYXRvciBwYXJzaW5nLg0KDQoNCltwb3N0 XQ0KPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9teS13YXktZnJvbS1sYWxyLXBhcnNpbmct dG8tY29tYmluYXRvci1wYXJzaW5nLzczNzc+DQoNCltnaXRodWIgcmVwb3NpdG9yeV0gPGh0dHBz Oi8vZ2l0aHViLmNvbS9oYnIvZm1saWI+DQoNCltBUEldIDxodHRwczovL2hici5naXRodWIuaW8v Zm1saWIvb2RvYy9pbmRleC5odG1sPg0KDQpbdHV0b3JpYWxdIDxodHRwczovL2hici5naXRodWIu aW8vZm1saWIvb2RvYy9mbWxpYl9wYXJzZS9wYXJzZS5odG1sPg0KDQpMYXlvdXQgUGFyc2luZw0K 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgTW9zdCBwcm9n cmFtbWluZyBsYW5ndWFnZXMgZXhwcmVzcyBoaWVyYXJjaGljYWwgc3RydWN0dXJlcyBieSBzb21l DQogIGtpbmQgb2YgcGFyZW50aGVzZXMuIEFsZ29sIGxpa2UgbGFuZ3VhZ2VzIHVzZSBgYmVnaW4n IGBlbmQnLCBDIGxpa2UNCiAgbGFuZ3VhZ2VzIHVzZSBjdXJseSBicmFjZXMgYHsnLCBgfScgdG8g ZW5jbG9zZSBibG9ja3Mgb2YgY29kZS4gU2luY2UNCiAgYmxvY2tzIGNhbiBiZSBuZXN0ZWQgaW5z aWRlIGJsb2NrcywgdGhlIGhpZXJhcmNoaWNhbCBvciB0cmVlIHN0cnVjdHVyZQ0KICBpcyB3ZWxs IGV4cHJlc3NlZCBieSB0aGUgc3ludGF4Lg0KDQogIEZvciB0aGUgaHVtYW4gcmVhZGVyIGJsb2Nr cyBhcmUgdXN1YWxseSBpbmRlbnRlZCB0byBtYWtlIHRoZQ0KICBoaWVyYXJjaGljYWwgc3RydWN0 dXJlIGdyYXBoaWNhbGx5IHZpc2libGUuIFByb2dyYW1taW5nIGxhbmd1YWdlcyBsaWtlDQogICpI YXNrZWxsKiBhbmQgKlB5dGhvbiogb21taXQgdGhlIHBhcmVudGhlc2VzIGFuZCBleHByZXNzIHRo ZQ0KICBoaWVyYXJjaGljYWwgc3RydWN0dXJlIGJ5IGluZGVudGF0aW9uLiBJLmUuIHRoZSBpbmRl bnRhdGlvbiBpcyBwYXJ0IG9mDQogIHRoZSBncmFtbWFyLiBUaGlzIGlzIHBsZWFzaW5nIHRvIHRo ZSBleWUsIGJlY2F1c2UgbWFueSBwYXJlbnRoZXNlcyBjYW4NCiAgYmUgb21taXR0ZWQuDQoNCiAg VGhlIGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmUgaW4gdGhlIGZvbGxvd2luZyBzY2hlbWF0aWNhbCBz b3VyY2UgZmlsZSBpcw0KICBpbW1lZGlhdGVseSB2aXNpYmxlIHdpdGhvdXQgdGhlIG5lZWQgb2Yg cGFyZW50aGVzZXMuDQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiB4eHh4eHh4eHh4eA0KICDi lIIgICAgIHh4eA0KICDilIIgICAgIHh4eA0KICDilIIgICAgICAgICB4eHh4eHh4DQogIOKUgiB4 eHh4eHh4eA0KICDilIIgICAgIHh4eA0KICDilJTilIDilIDilIDilIANCg0KICBMb3dlciBsZXZl bCBibG9ja3MgYXJlIGluZGVudGVkIHdpdGggcmVzcGVjdCB0byB0aGVpciBwYXJlbnQgYmxvY2sg YW5kDQogIHNpYmxpbmdzIGF0IHRoZSBzYW1lIGxldmVsIGFyZSB2ZXJ0aWNhbGx5IGFsaWduZWQu DQoNCiAgQmVjYXVzZSBvZiB0aGlzIGdvb2QgcmVhZGFiaWxpdHkgY29uZmlndXJhdGlvbiBsYW5n dWFnZXMgbGlrZSB5YW1sDQogIGhhdmUgYmVjb21lIHZlcnkgcG9wdWxhci4NCg0KICBVbmZvcnR1 bmF0ZWx5IHRoZXJlIGFyZSBub3QgbWFueSBwYXJzZXJzIGF2YWlsYWJsZSB3aGljaCBzdXBwb3J0 DQogIGluZGVudGF0aW9uIHNlbnNpdGl2aXR5LiBUaGUgbGlicmFyeSBbRm1saWJdIGhhcyBzdXBw b3J0IHRvIHBhcnNlDQogIGxhbmd1YWdlcyB3aG9zZSBncmFtbWFyIHVzZXMgaW5kZW50YXRpb24g dG8gc3RydWN0dXJlIGJsb2Nrcw0KICBoaWVyYXJjaGljYWxseS4NCg0KICBUaGVyZSBhcmUgb25s eSAzIGNvbWJpbmF0b3JzIG5lZWRlZCB0byBpbnRyb2R1Y2UgbGF5b3V0IHBhcnNpbmcgaW4NCiAg Y29tYmluYXRvciBwYXJzaW5nLiBTdXBwb3NlIHRoYXQgYHAnIGlzIGEgY29tYmluYXRvciBwYXJz aW5nIGEgY2VydGFpbg0KICBjb250cnVjdC4gVGhlbiB3ZSBoYXZlDQoNCiAg4oCiIGBpbmRlbnQg NCBwJzogUGFyc2UgdGhlIGNvbnN0cnVjdCBkZXNjcmliZWQgYnkgYHAnIGluZGVudGVkIGF0IGxl YXN0DQogICAgNCBjb2x1bW5zIHJlbGF0aXZlIHRvIGl0cyBlbnZpcm9ubWVudA0KDQogIOKAoiBg YWxpZ24gcCc6IFBhcnNlIHRoZSBjb25zdHJ1Y3QgZGVzcmliZWQgYnkgYHAnIGFsaWduZWQgdmVy dGljYWxseQ0KICAgIHdpdGggaXRzIHNpYmxpbmdzDQoNCiAg4oCiIGBkZXRhY2ggcCc6IFBhcnNl IHRoZSBjb25zdHJ1Y3QgZGVzY3JpYmVkIGJ5IGBwJyB3aXRob3V0IGFueQ0KICAgIGluZGVudGF0 aW9uIG9yIGFsaWdubWVudCByZXN0cmljdGlvbnMNCg0KICBJbiBvcmRlciB0byBwYXJzZSBhIGxp c3Qgb2YgfnB+cyB2ZXJ0aWNhbGx5IGFsaWduZWQgYW5kIGluZGVudGVkDQogIHJlbGF0aXZlIHRv IGl0cyBlbnZpcm9ubWVudCBieSBhdCBsZWFzdCBvbmUgY29sdW1uIHdlIGp1c3Qgd3JpdGUNCg0K ICDilIzilIDilIDilIDilIANCiAg4pSCIG9uZV9vcl9tb3JlIChhbGlnbiBwKSB8PiBpbmRlbnQg MQ0KICDilJTilIDilIDilIDilIANCg0KICBhbmQgcGFyc2UgYSBzdHJ1Y3R1cmUgd2l0aCB0aGUg c2NoZW1hdGljIGxheW91dA0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgeHh4eHh4eHgNCiAg 4pSCIA0KICDilIIgICAgIHBwcHBwcHBwDQogIOKUgiANCiAg4pSCICAgICBwcHBwcHANCiAg4pSC IA0KICDilIIgICAgIHBwcHANCiAg4pSCIA0KICDilIIgeHh4eHgNCiAg4pSU4pSA4pSA4pSA4pSA DQoNCg0KW0ZtbGliXQ0KPGh0dHBzOi8vaGJyLmdpdGh1Yi5pby9mbWxpYi9vZG9jL2ZtbGliX3Bh cnNlL0ZtbGliX3BhcnNlL2luZGV4Lmh0bWw+DQoNCg0KVXNlciBGcmllbmx5IEVycm9yIE1lc3Nh Z2VzDQrilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICBJdCBpcyBpbXBvcnRhbnQgdG8gZm9y IGEgcGFyc2VyIHdyaXRlciB0byBtYWtlIHN5bnRheCBlcnJvciBtZXNzYWdlcw0KICB1c2VyIGZy aWVuZGx5LiBbRm1saWJdIGhhcyBzb21lIHN1cHBvcnQgdG8gd3JpdGUgZnJpZW5kbHkgZXJyb3IN CiAgbWVzc2FnZXMuIFRoZXJlIGlzIHRoZSBvcGVyYXRvciBgPD8+JyBjb3BpZWQgZnJvbSB0aGUg SGFza2VsbCBsaWJyYXJ5DQogIGBwYXJzZWMnIHdoaWNoIGhlbHBzIHRvIGVxdWlwIGNvbWJpbmF0 b3JzIHdpdGggZGVzY3JpcHRpdmUgZXJyb3INCiAgbWVzc2FnZSBpbiBjYXNlIHRoZXkgZmFpbCB0 byBwYXJzZSB0aGUgY29uc3RydWN0IHN1Y2Nlc3NmdWxseS4NCg0KICBBdCB0aGUgZW5kIG9mIGEg ZmFpbGVkIHBhcnNpbmcsIHRoZSBzeW50YXggKG9yIHNlbWFudGljKSBlcnJvcnMgaGF2ZQ0KICB0 byBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuIFN1cHBvc2UgdGhlcmUgaXMgYSBjb21iaW5hdG9y IHBhcnNlciBmb3INCiAgYSB5YW1sIGxpa2Ugc3RydWN0dXJlLiBUaGUgbGlicmFyeSB3cml0ZXMg YnkgZGVmYXVsdCBmb3IgeW91IGVycm9yDQogIG1lc3NhZ2VzIGluIHRoZSBmb3JtDQoNCiAg4pSM 4pSA4pSA4pSA4pSADQogIOKUgiAxIHwNCiAg4pSCIDIgfCBuYW1lczoNCiAg4pSCIDMgfCAgICAg IC0gQWxpY2UNCiAg4pSCIDMgfCAgICAgIC0gQm9iDQogIOKUgiA0IHwNCiAg4pSCIDUgfCAgIGNh dGVnb3J5OiBlbmNyeXB0aW9uDQogIOKUgiAgICAgICBeDQogIOKUgiANCiAg4pSCIEkgaGF2ZSBl bmNvdW50ZXJlZCBzb21ldGhpbmcgdW5leHBlY3RlZC4gSSB3YXMNCiAg4pSCIGV4cGVjdGluZyBv bmUgb2YNCiAg4pSCIA0KICDilIIgICAgIC0gYXQgMyBjb2x1bW5zIGFmdGVyDQogIOKUgiANCiAg 4pSCICAgICAgICAgLSBzZXF1ZW5jZSBlbGVtZW50OiAiLSA8eWFtbCB2YWx1ZT4iDQogIOKUgiAN CiAg4pSCICAgICAtIGF0IDIgY29sdW1ucyBiZWZvcmUNCiAg4pSCIA0KICDilIIgICAgICAgICAt IGtleSB2YWx1ZSBwYWlyOiAiPGtleT46IDx5YW1sIHZhbHVlPiINCiAg4pSCIA0KICDilIIgICAg IC0gZW5kIG9mIGlucHV0DQogIOKUlOKUgOKUgOKUgOKUgA0KDQogIFRoZSByYXcgaW5mb3JtYXRp b24gKGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzLCBpbmRpdmlkdWFsIGV4cGVjdGF0aW9ucywNCiAg ZmFpbGVkIGluZGVudGF0aW9uIG9yIGFsaWdubWVudCBleHBlY3RhdGlvbikgaXMgYXZhaWxhYmxl IGFzIHdlbGwgc28NCiAgdGhhdCB5b3UgY2FuIHByZXNlbnQgdGhlIGVycm9yIG1lc3NhZ2VzIHRv IHRoZSB1c2VyIGluIGFueSBkaWZmZXJlbnQNCiAgZm9ybS4NCg0KICBUaGVyZSBpcyBhbHNvIGEg Y29tcG9uZW50IFtGbWxpYl9wcmV0dHldIGluIHRoZSBsaWJyYXJ5IGZvciBwcmV0dHkNCiAgcHJp bnRpbmcgYW55IGFzY2lpIHRleHQuDQoNCg0KW0ZtbGliXQ0KPGh0dHBzOi8vaGJyLmdpdGh1Yi5p by9mbWxpYi9vZG9jL2ZtbGliX3ByZXR0eS9GbWxpYl9wcmV0dHkvaW5kZXguaHRtbD4NCg0KW0Zt bGliX3ByZXR0eV0NCjxodHRwczovL2hici5naXRodWIuaW8vZm1saWIvb2RvYy9mbWxpYl9wcmV0 dHkvRm1saWJfcHJldHR5L2luZGV4Lmh0bWw+DQoNCg0KcHRpbWUgMS4wLjAgYW5kIG10aW1lIDEu NC4wDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9k aXNjdXNzLm9jYW1sLm9yZy90L2Fubi1wdGltZS0xLTAtMC1hbmQtbXRpbWUtMS00LTAvOTM0NC8x Pg0KDQoNCkRhbmllbCBCw7xuemxpIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSXQncyBt eSBwbGVhc3VyZSB0byBhbm5vdW5jZSBuZXcgcmVsZWFzZXMgb2YgcHRpbWUgYW5kIG10aW1lLiBQ dGltZQ0KICBhbmQgbXRpbWUgcHJvdmlkZSB0eXBlcyBhbmQgY2xvY2tzIGZvciBQT1NJWCBhbmQg bW9ub3RvbmljIHRpbWUuDQoNCiAgVGhlc2UgcmVsZWFzZXMgY2hhbmdlIHRoZSBKYXZhU2NyaXB0 IHN1cHBvcnQgc3RyYXRlZ3kgZm9yIGNsb2NrcyBieQ0KICBpbXBsZW1lbnRpbmcgdGhlIHByaW1p dGl2ZXMgaW4gcHVyZSBKYXZhU2NyaXB0IGFuZCBsaW5raW5nIHRoZW0gdmlhDQogIGBqc19vZl9v Y2FtbCcuDQoNCiAgVGhpcyBtZWFucyB0aGF0IGJvdGggdGhlIGBwdGltZS5jbG9jay5qc29vJyBh bmQgYG10aW1lLmNsb2NrLmpzb28nDQogIGxpYnJhcmllcyBubyBsb25nZXIgZXhpc3RbXjFdLiBJ bnN0ZWFkIHNpbXBseSB1c2UgdGhlIGBwdGltZS5jbG9jay5vcycNCiAgb3IgYG10aW1lLmNsb2Nr Lm9zJyBsaWJyYXJpZXMgbGlrZSB5b3Ugd291bGQgZG8gZm9yIHlvdXIgcmVndWxhcg0KICBwcm9n cmFtcy4NCg0KICBCeSBzaWRlIGVmZmVjdCwgdGhlIHBhY2thZ2VzIGFsc28gbm8gbG9uZ2VyIGRl cGVuZCBvbiBhbnkgb2YNCiAgYGpzX29mX29jYW1sJydzIHBhY2thZ2VzLg0KDQogIFRoYW5rcyB0 byBIdWdvIEhldXphcmQgKEBoaHVnbykgZm9yIHN1Z2dlc3RpbmcgYW5kIGltcGxlbWVudGluZyB0 aGVzZQ0KICBjaGFuZ2VzLiBUaGFua3MgYWxzbyB0byBKb25haCBCZWNrZm9yZCBmb3IgaGlzIFdp bmRvd3MgYnVpbGQgcGF0Y2hlcy4NCg0KICBPdGhlciBjaGFuZ2VzIGFyZSBkZXNjcmliZWQgaW4g dGhlIHJlbGVhc2Ugbm90ZXMgZm9yIFtgcHRpbWUnXSBhbmQNCiAgW2BtdGltZSddLg0KDQogIEhv bWUgcGFnZXM6IFtwdGltZV0sIFttdGltZV0NCg0KICBEb2NzICYgbWFudWFsczogW3B0aW1lXSwg W210aW1lXSBvciBgb2RpZyBkb2MgcHRpbWUgbXRpbWUnDQoNCiAgSW5zdGFsbDogYG9wYW0gaW5z dGFsbCBwdGltZSBtdGltZScNCg0KICBbXjFdOiBJIGhhZCBpbnRlbmRlZCB0byBvbmx5IGRlcHJl Y2F0ZSB0aGVzZSBsaWJyYXJpZXMgYnkgYHdhcm5pbmcnIGluDQogIHRoZSBgTUVUQScgZmlsZXMg YW5kIHJlcXVpcmluZyB0aGUgcmVwbGFjZW1lbnQgbGlicmFyeSBidXQgaXQgc2VlbXMNCiAgdGhl IHdhcm5pbmcgd29uJ3Qgc2hvdyB1cCBpbiBtYW55IGNvbnRleHRzIGluY2x1ZGluZyBgZHVuZScg YnVpbGRzLiBTbw0KICBhIGJyZWFraW5nIGNoYW5nZSBpdCBpcy4NCg0KDQpbYHB0aW1lJ10NCjxo dHRwczovL2dpdGh1Yi5jb20vZGJ1ZW56bGkvcHRpbWUvYmxvYi9tYXN0ZXIvQ0hBTkdFUy5tZCN2 MTAwLTIwMjItMDItMTYtbGEtZm9yY2xhej4NCg0KW2BtdGltZSddDQo8aHR0cHM6Ly9naXRodWIu Y29tL2RidWVuemxpL210aW1lL2Jsb2IvbWFzdGVyL0NIQU5HRVMubWQjdjE0MC0yMDIyLTAyLTE3 LWxhLWZvcmNsYXotdnM+DQoNCltwdGltZV0gPGh0dHBzOi8vZXJyYXRpcXVlLmNoL3NvZnR3YXJl L3B0aW1lPg0KDQpbbXRpbWVdIDxodHRwczovL2VycmF0aXF1ZS5jaC9zb2Z0d2FyZS9tdGltZT4N Cg0KW3B0aW1lXSA8aHR0cHM6Ly9lcnJhdGlxdWUuY2gvc29mdHdhcmUvcHRpbWUvZG9jPg0KDQpb bXRpbWVdIDxodHRwczovL2VycmF0aXF1ZS5jaC9zb2Z0d2FyZS9tdGltZS9kb2M+DQoNCg0KVGlt ZWRlc2MgMC42LjANCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0K DQogIEFyY2hpdmU6IDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLXRpbWVkZXNjLTAt Ni0wLzkzNDkvMT4NCg0KDQpEYXJyZW4gYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBJIGFtIHBsZWFzZWQgdG8gYW5ub3VuY2Ug dGhlIHJlbGVhc2Ugb2YgW1RpbWVkZXNjXSAwLjYuMC4NCg0KICBUaW1lZGVzYyBpcyBhIHZlcnkg Y29tcHJlaGVuc2l2ZSBkYXRlIHRpbWUgaGFuZGxpbmcgbGlicmFyeSB3aXRoIGdvb2QNCiAgc3Vw cG9ydCBvZiB0aW1lIHpvbmUuDQoNCg0KW1RpbWVkZXNjXSA8aHR0cHM6Ly9naXRodWIuY29tL2Rh eXBhY2stZGV2L3RpbWVyZT4NCg0KRmVhdHVyZXM6DQrilYzilYzilYzilYzilYzilYzilYzilYzi lYwNCg0KICDigKIgVGltZXN0YW1wIGFuZCBkYXRlIHRpbWUgaGFuZGxpbmcgd2l0aCBwbGF0Zm9y bSBpbmRlcGVuZGVudCB0aW1lIHpvbmUNCiAgICBzdXBwb3J0DQogICAg4oCiIFN1YnNldCBvZiB0 aGUgSUFOQSB0aW1lIHpvbmUgZGF0YWJhc2UgaXMgYnVpbHQgaW50byB0aGlzIGxpYnJhcnkNCiAg 4oCiIFN1cHBvcnRzIEdyZWdvcmlhbiBjYWxlbmRhciBkYXRlLCBJU08gd2VlayBkYXRlLCBhbmQg SVNPIG9yZGluYWwNCiAgICBkYXRlDQogIOKAoiBTdXBwb3J0cyBuYW5vc2Vjb25kIHByZWNpc2lv bg0KICDigKIgSVNPODYwMSBwYXJzaW5nIGFuZCBSRkMzMzM5IHByaW50aW5nDQoNCg0KQ2hhbmdl cw0K4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgVGhpcyByZWxlYXNlIGFkZHMgYSBmYWlyIG51 bWJlciBvZiBxdWFsaXR5IG9mIGxpZmUgaW1wcm92ZW1lbnRzIGFuZA0KICBhZGRpdGlvbmFsIGZl YXR1cmVzLiBNYW55IHRoYW5rcyB0byBAZ2xlbm5zbCBmb3IgdGhlIHN1Z2dlc3Rpb25zIGFuZA0K ICBmZWVkYmFjayENCg0KICBUaGUgbW9zdCBpbXBvcnRhbnQgc2VjdGlvbnMgb2YgdGhlIGNoYW5n ZWxvZyBhcmUgYXMgZm9sbG93czoNCg0KICDigKIgTWFpbiBicmVha2luZyBjaGFuZ2VzOg0KICAg IOKAoiBDaGFuZ2VzIGluIElTTyB3ZWVrIGRhdGUgZnVuY3Rpb25zIChzaG9ydGluZyBsYWJlbCBm b3IgYXJndW1lbnRzLA0KICAgICAgcXVhbGl0eSBvZiBsaWZlIGNoYW5nZXMpDQogICAg4oCiIFJl bW92ZWQgYF9kYXRlJyBzdWZmaXggaW4gbmFtZXMgb2YgYERhdGUuWW1kX2RhdGUnIGFuZA0KICAg ICAgYERhdGUuSVNPX29yZF9kYXRlJw0KICDigKIgQWRkZWQgInBhcnRpYWwgZGF0ZSIgbW9kdWxl cyB3aXRoIElTTzg2MDEgcGFyc2luZyBhbmQgcHJpbnRpbmcNCiAgICBmYWNpbGl0aWVzDQogICAg 4oCiIGBJU09fd2VlaycNCiAgICDigKIgYFltJw0KICDigKIgQWRkZWQgYWRkaXRpb25hbCBJU084 NjAxIHByaW50aW5nIGZhY2lsaXRpZXMgZm9yIGFsbCB0aHJlZSBjYWxlbmRhcg0KICAgIHN5c3Rl bXMNCiAgICDigKIgYERhdGUuWW1kLnBwL3RvX2lzbzg2MDEnICh0aGVzZSBhcmUganVzdCBhbGlh c2VzIHRvIHRoZSBSRkMzMzM5DQogICAgICBwcmludGVycykNCiAgICDigKIgYERhdGUuSVNPX3dl ZWtfZGF0ZS5wcC90b19pc284NjAxJw0KICAgIOKAoiBgRGF0ZS5JU09fb3JkLnBwL3RvX2lzbzg2 MDEnDQogIOKAoiBBZGRlZCBhZGRpdGlvbmFsIElTTzg2MDEgcGFyc2luZyBmYWNpbGl0aWVzIGZv ciBhbGwgdGhyZWUgY2FsZW5kYXINCiAgICBzeXN0ZW1zDQogICAg4oCiIGBEYXRlLlltZC5vZl9p c284NjAxW19leG5dJw0KICAgIOKAoiBgRGF0ZS5JU09fd2Vla19kYXRlLm9mX2lzbzg2MDFbX2V4 bl0nDQogICAg4oCiIGBEYXRlLklTT19vcmQub2ZfaXNvODYwMVtfZXhuXScNCiAg4oCiIEFkZGVk IGFkZGl0aW9uYWwgY29tcGFyaXNvbiBmdW5jdGlvbnMgdG8gYERhdGUnDQogICAg4oCiIGBsdCcs IGBsZScsIGBndCcsIGBnZScsIGBjb21wYXJlJw0KICDigKIgQWRkZWQgYXJpdGhlbXRpYyBmdW5j dGlvbnMgdG8gYERhdGUnDQogIOKAoiBBZGRlZCBgcHAvdG9faXNvODYwMScgZnVuY3Rpb25zIGFz IGFsaWFzZXMgdG8gdGhlIHJmYzMzMzkgZnVuY3Rpb25zDQogICAgdG8gYFRpbWVkZXNjJw0KICDi gKIgUGF0Y2hlZCBJU084NjAxIHBhcnNlcnMgYW5kIFJGQzMzMzkvSVNPODYwMSBwcmludGVycyB0 byBoYW5kbGUNCiAgICBzZWNvbmQgbGV2ZWwgdGltZSB6b25lIG9mZnNldA0KICAgIOKAoiBSYXJl IG9jY3VycmVuY2UgaW4gdHpkYiBidXQgcGlja2VkIHVwIGJ5IHNvbWUgbmV3IHRlc3RzDQoNCg0K T0NhbWwgZnJvbSB0aGUgVmVyeSBCZWdpbm5pbmcgbm93IGZyZWUgaW4gUERGIGFuZCBIVE1MIGZv cm1hdHMNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mu b2NhbWwub3JnL3Qvb2NhbWwtZnJvbS10aGUtdmVyeS1iZWdpbm5pbmctbm93LWZyZWUtaW4tcGRm LWFuZC1odG1sLWZvcm1hdHMvOTM2MS8xPg0KDQoNCkpvaG4gV2hpdGluZ3RvbiBhbm5vdW5jZWQN CuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFRoYW5rcyB0byBhIGdyYW50IGZyb20gdGhlIFtPQ2Ft bCBTb2Z0d2FyZSBGb3VuZGF0aW9uXSwgSSBhbSBhYmxlIHRvDQogIHJlbGVhc2UgbXkgYm9vayBb T0NhbWwgZnJvbSB0aGUgVmVyeSBCZWdpbm5pbmddIGF0IG5vIGNvc3QgaW4gaXRzDQogIGV4aXN0 aW5nIFBERiBmb3JtYXQsIGFuZCBpbiBhIG5ldyBIVE1MIGZvcm1hdCB0b28uDQoNCiAgWW91IGNh biBmaW5kIGl0IGhlcmU6DQogIFtodHRwczovL2pvaG53aGl0aW5ndG9uLm5ldC9vY2FtbGZyb210 aGV2ZXJ5YmVnaW5uaW5nL10uDQoNCiAgVGhlIHBhcGVyYmFjayBhbmQgS2luZGxlIHZlcnNpb25z IGNvbnRpbnVlIHRvIGJlIGF2YWlsYWJsZSBmcm9tIEFtYXpvbg0KICBhcyBiZWZvcmUuDQoNCiAg VGhlIGJvb2sgaGFzIHJlY2VudGx5IGJlZW4gdXBkYXRlZCB0byBtYWtlIGl0IHJlYWR5IGZvciBP Q2FtbCA0LjE0DQogIHdoaWNoIGludm9sdmVkIG9ubHkgbWlub3IgY2hhbmdlcyB0byBlcnJvciBo YW5kbGluZyBhbmQgd2FybmluZ3MuIEkNCiAgaGF2ZSBhbHNvIG9wZW5lZCB0aGUgW3NvdXJjZV0u DQoNCg0KW09DYW1sIFNvZnR3YXJlIEZvdW5kYXRpb25dIDxodHRwczovL29jYW1sLXNmLm9yZy8+ DQoNCltPQ2FtbCBmcm9tIHRoZSBWZXJ5IEJlZ2lubmluZ10gPGh0dHBzOi8vb2NhbWwtYm9vay5j b20+DQoNCltodHRwczovL2pvaG53aGl0aW5ndG9uLm5ldC9vY2FtbGZyb210aGV2ZXJ5YmVnaW5u aW5nL10NCjxodHRwczovL2pvaG53aGl0aW5ndG9uLm5ldC9vY2FtbGZyb210aGV2ZXJ5YmVnaW5u aW5nLz4NCg0KW3NvdXJjZV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9qb2hud2hpdGluZ3Rvbi9tbGJv b2s+DQoNCg0KRHVuZSAzLjAuMA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAg QXJjaGl2ZTogPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tZHVuZS0zLTAtMC85Mzc0 LzE+DQoNCg0KUnVkaSBHcmluYmVyZyBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIE9uIGJl aGFsZiBvZiB0aGUgZHVuZSB0ZWFtLCBJ4oCZbSBkZWxpZ2h0ZWQgdG8gYW5ub3VuY2UgdGhlIGF2 YWlsYWJpbGl0eQ0KICBvZiBkdW5lIDMuMC4NCg0KICBUaGUgdGVhbSBoYXMgYmVlbiB3b3JraW5n IG9uIHRoaXMgcmVsZWFzZSBmb3Igb3ZlciA2IG1vbnRocywgYW5kDQogIHRoZXJl4oCZcyBhIGJ1 bmNoIG9mIG5ldyB3b3JrIHRvIHJlcG9ydC4gSeKAmWxsIG9ubHkgaGlnaGxpZ2h0IHRoZSBzb21l IG9mDQogIHRoZSBpbnRlcmVzdGluZyBuZXcgZGV2ZWxvcG1lbnRzOg0KDQogIOKAoiBUaGUgd2F0 Y2ggbW9kZSBoYXMgYmVlbiByZXdyaXR0ZW4gZnJvbSBzY3JhdGNoIHRvIGJlIGZhc3RlciBhbmQg bW9yZQ0KICAgIHNjYWxhYmxlLiBXZSBhbHNvIG5vIGxvbmdlciByZWx5IG9uIGFueSAzcmQgcGFy dHkgdG9vbHMgc3VjaCBhcw0KICAgIGZzd2F0Y2guIElmIGFueSBvZiB5b3Ugc3RpbGwgaGF2ZSBh IGR1bmUgd29ya3NwYWNlIGR1bmUgaXMgc3RpbGwNCiAgICBzdHJ1Z2dsaW5nIHdpdGgsIHdlIGNh bm5vdCB3YWl0IHRvIGhlYXIgZnJvbSB5b3UuDQoNCiAg4oCiIFRoZSB3YXRjaCBtb2RlIG5vdyBh bHNvIHN0YXJ0cyBhbiBSUEMgc2VydmVyIGluIHRoZSBiYWNrZ3JvdW5kLiBUaGlzDQogICAgUlBD IHByb3RvY29sIGlzIGdvaW5nIHRvIGJlIHRoZSBiYXNpcyBmb3Igb3RoZXIgdG9vbHMgdG8gaW50 ZXJhY3QNCiAgICB3aXRoIGR1bmUuIFdhdGNoIG91dCBmb3IgYW5ub3VuY2VtZW50IG9uIHRoZSBM U1Agc2lkZSB0byBzZWUgaG93DQogICAgd2XigJlsbCBiZSBtYWtpbmcgdXNlIG9mIGl0IHRvIGlt cHJvdmUgdGhlIGVkaXRpbmcgZXhwZXJpZW5jZS4NCg0KICDigKIgVGhlIGR1bmUgY2FjaGUgaGFz IGJlZW4gcmV3cml0dGVuIGFzIHdlbGwuIEl0IGlzIG5vdyBzaW1wbGVyIGFuZA0KICAgIG1vcmUg cmVsaWFibGUuIFRoZXJlIGFyZSBzdGlsbCBzb21lIGNvbXBvbmVudHMgbWlzc2luZywgc3VjaCBh cw0KICAgIGRpc3RyaWJ1dGlvbiBvZiB0aGUgYXJ0aWZhY3RzIG9uIHRoZSBuZXR3b3JrLiBOZXZl cnRoZWxlc3MsIHdlDQogICAgd2VsY29tZSB5b3UgYWxsIHRvIGV4cGVyaW1lbnQgd2l0aCB0aGlz IGZlYXR1cmUgYW5kIGdpdmUgdXMNCiAgICBmZWVkYmFjay4NCg0KICDigKIgV2XigJl2ZSBhZGRy ZXNzZWQgb25lIG9mIG91ciBvbGRlc3QgZmVhdHVyZSByZXF1ZXN0czogaGlnaCBsZXZlbCBydWxl cw0KICAgIGZvciBjdHlwZXMgcHJvamVjdHMuIFRoaXMgZmVhdHVyZSBpcyBzdGlsbCBleHBlcmlt ZW50YWwsIHNvIHdlIG5lZWQNCiAgICBmZWVkYmFjayBmcm9tIHJlYWwgd29ybGQgcHJvamVjdHMg YmVmb3JlIGRlY2xhcmluZyBpdCBhcyBtYXR1cmUuDQoNCiAgT2YgY291cnNlLCB0aGVyZSBhcmUg bWFueSBvdGhlciBmaXhlcywgZW5oYW5jZW1lbnRzLCBhbmQgb25seSBhIGZldw0KICBicmVha2lu ZyBjaGFuZ2VzIGluIHRoaXMgcmVsZWFzZS4gV2UgaG9wZSB5b3UgaGF2ZSBhbiBlYXN5IHRpbWUN CiAgdXBncmFkaW5nLg0KDQogIEhhcHB5IEhhY2tpbmcuDQoNCiAgL0VkaXRvcuKAmXMgbm90ZTog Zm9yIHRoZSBmdWxsIGNoYW5nZWxvZywgcGxlYXNlIGZvbGxvdyB0aGUgYXJjaGl2ZSBsaW5rDQog IGFib3ZlLi8NCg0KDQpCbG9nIFBvc3QgIjIwMjEgYXQgT0NhbWxQcm8iDQrilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9y Zy90L2Jsb2ctcG9zdC0yMDIxLWF0LW9jYW1scHJvLzkzOTAvMT4NCg0KDQpGYWJyaWNlIExlIEZl c3NhbnQgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBXZSBqdXN0 IHB1Ymxpc2hlZCBhIHJldmlldyBvZiB3aGF0IE9DYW1sUHJvIGRpZCBpbiAyMDIxOg0KDQogIDxo dHRwczovL3d3dy5vY2FtbHByby5jb20vYmxvZy8yMDIyXzAxXzMxXzIwMjFfYXRfb2NhbWxwcm8+ DQoNCiAgQSBsb3Qgb2YgT0NhbWwsIGJ1dCBhbHNvIHNvbWUgUnVzdCwgQ29ib2wsIFNvbGlkaXR5 LCBhbmQgYSBsb3Qgb2YNCiAgRm9ybWFsIFZlcmlmaWNhdGlvbiEgT0NhbWxQcm8gaXMgYWx3YXlz IGxvb2tpbmcgZm9yIHNraWxsZWQgT0NhbWwNCiAgZGV2ZWxvcGVycyB0byBoaXJlLCBzbyBpZiB5 b3UgYXJlIGludGVyZXN0ZWQsIGNvbnRhY3QgdXMgYXQNCiAgY29udGFjdEBvY2FtbHByby5jb20N Cg0KDQpQYWNrc3RyZWFtIDAuMQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tcGFj a3N0cmVhbS0wLTEvOTM5Mi8xPg0KDQoNClRvbWFzeiBCYXJhxYRza2kgYW5ub3VuY2VkDQrilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIANCg0KICBJIGhhdmUgYSBwbGVhc3VyZSB0byBhbm5vdW5jZSB0aGUgcmVs ZWFzZSBvZiBbUGFja3N0cmVhbV0gMC4xLg0KDQogIFBhY2tzdHJlYW0gaXMgYSBsaWJyYXJ5IHRv IHBhcnNlL3NlcmlhbGl6ZSBbUGFja3N0cmVhbSBiaW5hcnkgZm9ybWF0XS4NCg0KICBUaGlzIGlz IHRoZSBpbml0aWFsIHJlbGVhc2UuIEl0IGlzIGZ1bmN0aW9uYWwgYnV0IHZlcnkgdmVyeSBsaW1p dGVkIGluDQogIHNjb3BlLiBJdCBhbGxvd3MgcGFyc2luZyBhIGJpbmFyeSBzdHJlYW0gaW50byBh IFBhY2tzdHJlYW0gZGF0YXR5cGUNCiAgYW5kIHNlcmlhbGl6aW5nIHRoZSBkYXRhdHlwZSBpbnRv IGEgYmluYXJ5IHN0cmVhbS4NCg0KDQpbUGFja3N0cmVhbV0gPGh0dHBzOi8vZ2l0aHViLmNvbS90 b21vYi9wYWNrc3RyZWFtPg0KDQpbUGFja3N0cmVhbSBiaW5hcnkgZm9ybWF0XQ0KPGh0dHBzOi8v NzY4Ny5vcmcvcGFja3N0cmVhbS9wYWNrc3RyZWFtLXNwZWNpZmljYXRpb24tMS5odG1sPg0KDQoN Ck9DYW1sIDQuMTQuMCwgZmlyc3QgYmV0YSByZWxlYXNlDQrilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1s Lm9yZy90L29jYW1sLTQtMTQtMC1maXJzdC1iZXRhLXJlbGVhc2UvOTM5Ni8xPg0KDQoNCm9jdGFj aHJvbiBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgA0KDQogIFRoZSByZWxlYXNlIG9mIE9DYW1sIDQuMTQuMCBpcyBjbG9z ZS4NCg0KICBUaGUgc2V0IG9mIG5ldyBmZWF0dXJlcyBoYXMgYmVlbiBzdGFiaWxpemVkLCBhbmQg bW9zdCBvcGFtIHBhY2thZ2VzDQogIGFscmVhZHkgd29yayB3aXRoIHRoaXMgcmVsZWFzZS4gQWZ0 ZXIgdHdvIGFscGhhIHJlbGVhc2VzLCB3ZSBoYXZlDQogIGNyZWF0ZWQgYSBmaXJzdCBiZXRhIHZl cnNpb24gdG8gaGVscCB5b3UgdXBkYXRlIHlvdXIgc29mdHdhcmVzIGFuZA0KICBsaWJyYXJpZXMg YWhlYWQgb2YgdGhlIHJlbGVhc2UuDQoNCiAgSWYgeW91IGZpbmQgYW55IGJ1Z3MsIHBsZWFzZSBy ZXBvcnQgdGhlbSBhdDoNCg0KICA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vl cz4NCg0KICBUaGUgZnVsbCByZWxlYXNlIG9mIE9DYW1sIDQuMTQuMCBpcyBjdXJyZW50bHkgZXhw ZWN0ZWQgZm9yIHRoZSBtaWRkbGUNCiAgb2YgTWFyY2guDQoNCiAgQ29tcGFyZWQgdG8gdGhlIGxh c3QgYWxwaGEsIHdlIGhhdmUgYSBsYXN0IG1pbnV0ZSBjb3JyZWN0aW9uIGZvciBvbmUNCiAgb2Yg dGhlIG5ldyBmdW5jdGlvbiBpbiB0aGUgU2VxIG1vZHVsZSwgc29tZSBkb2N1bWVudGF0aW9uDQog IGltcHJvdmVtZW50cywgZmV3IGNvbmZpZ3VyYXRpb24gYW5kIGludGVybmFsIHR3ZWFrcy4NCg0K DQpJbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zDQrilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICBUaGUg YmFzZSBjb21waWxlciBjYW4gYmUgaW5zdGFsbGVkIGFzIGFuIG9wYW0gc3dpdGNoIHdpdGggdGhl DQogIGZvbGxvd2luZyBjb21tYW5kcw0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgb3BhbSB1 cGRhdGUNCiAg4pSCIG9wYW0gc3dpdGNoIGNyZWF0ZSA0LjE0LjB+YmV0YTEgLS1yZXBvc2l0b3Jp ZXM9ZGVmYXVsdCxiZXRhPWdpdCtodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwtYmV0YS1y ZXBvc2l0b3J5LmdpdA0KICDilJTilIDilIDilIDilIANCiAgV2l0aCBvcGFtIDIuMSwgdGhlIHBy ZXZpb3VzIGNvbW1hbmQgbGluZSBjYW4gYmUgc2ltcGxpZmllZCB0bw0KICDilIzilIDilIDilIDi lIANCiAg4pSCIG9wYW0gdXBkYXRlDQogIOKUgiBvcGFtIHN3aXRjaCBjcmVhdGUgNC4xNC4wfmJl dGExDQogIOKUlOKUgOKUgOKUgOKUgA0KICBJZiB5b3Ugd2FudCB0byB0d2VhayB0aGUgY29uZmln dXJhdGlvbiBvZiB0aGUgY29tcGlsZXIsIHlvdSBjYW4gc3dpdGNoDQogIHRvIHRoZSBvcHRpb24g dmFyaWFudCB3aXRoOg0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgb3BhbSB1cGRhdGUNCiAg 4pSCIG9wYW0gc3dpdGNoIGNyZWF0ZSA8c3dpdGNoX25hbWU+IC0tcGFja2FnZXM9b2NhbWwtdmFy aWFudHMuNC4xNC4wfmJldGExK29wdGlvbnMsPG9wdGlvbl9saXN0Pg0KICDilIIgLS1yZXBvc2l0 b3JpZXM9ZGVmYXVsdCxiZXRhPWdpdCtodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwtYmV0 YS1yZXBvc2l0b3J5LmdpdA0KICDilJTilIDilIDilIDilIANCiAgb3Igd2l0aCBvcGFtIDIuMToN CiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBvcGFtIHVwZGF0ZQ0KICDilIIgb3BhbSBzd2l0Y2gg Y3JlYXRlIDxzd2l0Y2hfbmFtZT4gb2NhbWwtdmFyaWFudHMuNC4xNC4wfmJldGExK29wdGlvbnMg PG9wdGlvbl9saXN0Pg0KICDilJTilIDilIDilIDilIANCg0KICB3aGVyZSBgPG9wdGlvbl9saXN0 PicgaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBgb2NhbWwtb3B0aW9uLSonDQogIHBhY2th Z2VzLiBGb3IgaW5zdGFuY2UsIGZvciBhIGZsYW1iZGEgYW5kIG5vLWZsYXQtZmxvYXQtYXJyYXkg c3dpdGNoOg0KICDilIzilIDilIDilIDilIANCiAg4pSCIG9wYW0gc3dpdGNoIGNyZWF0ZSA0LjE0 LjB+YmV0YTErZmxhbWJkYStuZmZhIG9jYW1sLXZhcmlhbnRzLjQuMTQuMH5iZXRhMStvcHRpb25z IG9jYW1sLW9wdGlvbi1mbGFtYmRhDQogIOKUgiBvY2FtbC1vcHRpb24tbm8tZmxhdC1mbG9hdC1h cnJheQ0KICDilJTilIDilIDilIDilIANCiAgQWxsIGF2YWlsYWJsZSBvcHRpb25zIGNhbiBiZSBs aXN0ZWQgd2l0aCBgb3BhbSBzZWFyY2ggb2NhbWwtb3B0aW9uJy4NCg0KICBUaGUgc291cmNlIGNv ZGUgZm9yIHRoZSBiZXRhIGlzIGFsc28gYXZhaWxhYmxlIGF0IHRoZXNlIGFkZHJlc3NlczoNCg0K ICDigKIgPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9hcmNoaXZlLzQuMTQuMC1iZXRh MS50YXIuZ3o+DQogIOKAoiA8aHR0cHM6Ly9jYW1sLmlucmlhLmZyL3B1Yi9kaXN0cmliL29jYW1s LTQuMTQvb2NhbWwtNC4xNC4wfmJldGExLnRhci5nej4NCg0KDQpDaGFuZ2VzIGNvbXBhcmVkIHRv IHRoZSBsYXN0IGFscGhhDQrilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYwNCg0KICBUaGUgZnVsbCBsaXN0IG9mIGNoYW5nZXMgZm9yIE9DYW1sIDQuMTQgaXMgYXZh aWxhYmxlIGF0DQogIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvYmxvYi80LjE0L0No YW5nZXM+DQoNCg0KU3RhbmRhcmQgbGlicmFyeQ0K4pSE4pSE4pSE4pSE4pSE4pSE4pSE4pSE4pSE 4pSE4pSE4pSE4pSE4pSE4pSE4pSEDQoNCiAg4oCiICphZGRpdGlvbmFsIGZpeGVzKiBbMTA1ODNd LCArWzEwOTk4XTogQWRkIG92ZXIgNDAgbmV3IGZ1bmN0aW9ucyBpbg0KICAgICBTZXEuIChGcmFu w6dvaXMgUG90dGllciBhbmQgU2ltb24gQ3J1YW5lcywgcmV2aWV3IGJ5IE5pY29sw6FzIE9qZWRh DQogICAgIELDpHIsIERhbmllbCBCw7xuemxpLCBOYcOrbGEgQ291cmFudCwgQ3JhaWcgRmVyZ3Vz b24sIFdpa3RvciBLdWNodGEsDQogICAgIFhhdmllciBMZXJveSwgR3VpbGxhdW1lIE11bmNoLU1h Y2NhZ25vbmksIFJhcGhhw6tsIFByb3VzdCwgR2FicmllbA0KICAgICBTY2hlcmVyIGFuZCBUaGll cnJ5IE1hcnRpbmV6KQ0KDQoNClsxMDU4M10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2Ft bC9pc3N1ZXMvMTA1ODM+DQoNClsxMDk5OF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2Ft bC9pc3N1ZXMvMTA5OTg+DQoNCg0KRG9jdW1lbnRhdGlvbg0K4pSE4pSE4pSE4pSE4pSE4pSE4pSE 4pSE4pSE4pSE4pSE4pSE4pSEDQoNCiAg4oCiIFsxMDM5N106IERvY3VtZW50IGV4Y2VwdGlvbnMg cmFpc2VkIGJ5IFVuaXggbW9kdWxlIGZ1bmN0aW9ucyBvbg0KICAgIFdpbmRvd3MgKE1hcnRpbiBK YW1ib24sIHJldmlldyBieSBEYW5pZWwgQsO8bnpsaSwgRGF2aWQgQWxzb3BwLA0KICAgIERhbWll biBEb2xpZ2V6LCBYYXZpZXIgTGVyb3ksIGFuZCBGbG9yaWFuIEFuZ2VsZXR0aSkNCg0KICDigKIg WzEwNzk0XTogQ2xhcmlmeSB3YXJuaW5nIDU3IChBbWJpZ3VvdXMgb3ItcGF0dGVybiB2YXJpYWJs ZXMgdW5kZXINCiAgICBndWFyZCkgKFdpa3RvciBLdWNodGEsIHJldmlldyBieSBHYWJyaWVsIFNj aGVyZXIpDQoNCg0KWzEwMzk3XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vl cy8xMDM5Nz4NCg0KWzEwNzk0XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vl cy8xMDc5ND4NCg0KDQpCdWlsZCBzeXN0ZW0NCuKUhOKUhOKUhOKUhOKUhOKUhOKUhOKUhOKUhOKU hOKUhOKUhA0KDQogIOKAoiBbMTA4MjhdIEJ1aWxkIG5hdGl2ZS1jb2RlIGNvbXBpbGVycyBvbiBP cGVuQlNEL2FhcmNoNjQgKENocmlzdG9waGVyDQogICAgWmltbWVybWFubikNCg0KICDigKIgWzEw ODM1XSBEaXNhYmxlIERUX1RFWFRSRUwgd2FybmluZ3Mgb24geDg2IDMyIGJpdCBhcmNoaXRlY3R1 cmUgYnkNCiAgICBwYXNzaW5nIC1XbCwteixub3RleHQgaW4gbWtzaGFyZWRsaWIgYW5kIG1rbWFp bmRsbC4gRml4ZXMgcmVsb2NhdGlvbg0KICAgIGlzc3VlcywgcmVwb3J0ZWQgaW4gWzk4MDBdLCBt YWtpbmcgbG9jYWwgcGF0Y2hlcyBpbiBEZWJpYW4sIEFscGluZSwNCiAgICBhbmQgRnJlZUJTRCBz dXBlcmZsdW91cy4gKEhhbm5lcyBNZWhuZXJ0IHdpdGggS2F0ZSBEZXBsYWl4IGFuZA0KICAgIFN0 w6lwaGFuZSBHbG9uZHUsIHJldmlldyBieSBYYXZpZXIgTGVyb3kpDQoNCg0KWzEwODI4XSA8aHR0 cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vlcy8xMDgyOD4NCg0KWzEwODM1XSA8aHR0 cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vlcy8xMDgzNT4NCg0KWzk4MDBdIDxodHRw czovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzk4MDA+DQoNCg0KQ29kZSBnZW5lcmF0 aW9uDQrilITilITilITilITilITilITilITilITilITilITilITilITilITilITilIQNCg0KICDi gKIgWzEwNzE5XTogRW5zdXJlIHRoYXQgYnVpbGRfYXBwbHkgcmVzcGVjdHMgTGFtYmRhLm1heF9h cml0eSAoU3RlcGhlbg0KICAgIERvbGFuLCByZXZpZXcgYnkgWGF2aWVyIExlcm95KQ0KDQoNClsx MDcxOV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9pc3N1ZXMvMTA3MTk+DQoNCg0K SW50ZXJuYWwvY29tcGlsZXItbGlicw0K4pSE4pSE4pSE4pSE4pSE4pSE4pSE4pSE4pSE4pSE4pSE 4pSE4pSE4pSE4pSE4pSE4pSE4pSE4pSE4pSE4pSE4pSEDQoNCiAg4oCiICphZGRpdGlvbmFsIGZp eGVzKiBbMTA3MThdLCArWzExMDEyXTogQWRkICJTaGFwZSIgaW5mb3JtYXRpb24gdG8gdGhlDQog ICAgIGNtdCBmaWxlcy4gU2hhcGVzIGFyZSBhbiBhYnN0cmFjdGlvbiBvZiBtb2R1bGVzIHRoYXQg Y2FuIGJlIHVzZWQgYnkNCiAgICAgZXh0ZXJuYWwgdG9vbGluZyB0byBwZXJmb3JtIGRlZmluaXRp b24tYXdhcmUgb3BlcmF0aW9ucy4gKFVseXNzZQ0KICAgICBHw6lyYXJkLCBUaG9tYXMgUmVmaXMg YW5kIExlbyBXaGl0ZSwgcmV2aWV3IGJ5IEZsb3JpYW4gQW5nZWxldHRpKQ0KDQoNClsxMDcxOF0g PGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9pc3N1ZXMvMTA3MTg+DQoNClsxMTAxMl0g PGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9pc3N1ZXMvMTEwMTI+DQoNCg0KT2xkIENX Tg0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgSWYgeW91IGhhcHBlbiB0byBtaXNzIGEgQ1dO LCB5b3UgY2FuIFtzZW5kIG1lIGEgbWVzc2FnZV0gYW5kIEknbGwgbWFpbA0KICBpdCB0byB5b3Us IG9yIGdvIHRha2UgYSBsb29rIGF0IFt0aGUgYXJjaGl2ZV0gb3IgdGhlIFtSU1MgZmVlZCBvZiB0 aGUNCiAgYXJjaGl2ZXNdLg0KDQogIElmIHlvdSBhbHNvIHdpc2ggdG8gcmVjZWl2ZSBpdCBldmVy eSB3ZWVrIGJ5IG1haWwsIHlvdSBtYXkgc3Vic2NyaWJlDQogIFtvbmxpbmVdLg0KDQogIFtBbGFu IFNjaG1pdHRdDQoNCg0KW3NlbmQgbWUgYSBtZXNzYWdlXSA8bWFpbHRvOmFsYW4uc2NobWl0dEBw b2x5dGVjaG5pcXVlLm9yZz4NCg0KW3RoZSBhcmNoaXZlXSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBv bW1lLm5ldC9jd24vPg0KDQpbUlNTIGZlZWQgb2YgdGhlIGFyY2hpdmVzXSA8aHR0cHM6Ly9hbGFu LnBldGl0ZXBvbW1lLm5ldC9jd24vY3duLnJzcz4NCg0KW29ubGluZV0gPGh0dHA6Ly9saXN0cy5p ZHlsbC5vcmcvbGlzdGluZm8vY2FtbC1uZXdzLXdlZWtseS8+DQoNCltBbGFuIFNjaG1pdHRdIDxo dHRwczovL2FsYW4ucGV0aXRlcG9tbWUubmV0Lz4NCg0K --=-=-= 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 February 15 to 22, 20= 22.

OCAML goes Quantum computing

Anton Kochkov then added

Haskell has a nice package for quantum computing - Quipper. I recommend to = take a look to it for inspiration as well:

Layout Parsing and Nicely Formatted Error Messages

Hbr announced

In a previous post I have described my way from LALR parsing to combinator parsing. Now I am more and more convinced that combinator parsing is really= a good and flexible way to write parsers. The new release 0.5.0 of `Fmlib` fo= cuses on layout parsing and nicely formatted error messages by using combinator parsing.

The library can be installed via opam by opam install fmlib. T= here is a github repository hosting the source code. The API can be foun= d online. See also a tutor= ial on combinator parsing.

Layout Parsing

Most programming languages express hierarchical structures by some kind of parentheses. Algol like languages use begin end, = C like languages use curly braces {, } to enclose blocks of code. Since bloc= ks can be nested inside blocks, the hierarchical or tree structure is well expressed by the syntax.

For the human reader blocks are usually indented to make the hierarchical structure graphically visible. Programming languages like Haskell and Python ommit the parentheses and express the hierarchical structure = by indentation. I.e. the indentation is part of the grammar. This is pleasing = to the eye, because many parentheses can be ommitted.

The hierarchical structure in the following schematical source file is immediately visible without the need of parentheses.

xxxxxxxxxxx
    xxx
    xxx
        xxxxxxx
xxxxxxxx
    xxx

Lower level blocks are indented with respect to their parent block and sibl= ings at the same level are vertically aligned.

Because of this good readability configuration languages like yaml have become very popular.

Unfortunately there are not many parsers available which support indentation sensitivity. The library Fmlib has support to parse languages whose grammar uses indentation to structure blocks hierarch= ically.

There are only 3 combinators needed to introduce layout parsing in combinat= or parsing. Suppose that p is a combinator parsing a certain cont= ruct. Then we have

  • indent 4 p: Parse the construct described by p indented at least 4 columns relative to its environment
  • align p: Parse the construct desribed by p al= igned vertically with its siblings
  • detach p: Parse the construct described by p = without any indentation or alignment restrictions

In order to parse a list of ~p~s vertically aligned and indented relative t= o its environment by at least one column we just write

one_or_more (align p) |> indent 1

and parse a structure with the schematic layout

xxxxxxxx

    pppppppp

    pppppp

    pppp

xxxxx

User Frienly Error Messages

It is important to for a parser writer to make syntax error messages user friendly. Fmlib has some support to write friendly error messages. There is the operator <?> copie= d from the Haskell library parsec which helps to equip combinators with descriptive error message in case they fail to parse the c= onstruct successfully.

At the end of a failed parsing, the syntax (or semantic) errors have to be presented to the user. Suppose there is a combinator parser for a yaml like structure. The library writes by default for you error messages in the form

1 |
2 | names:
3 |      - Alice
3 |      - Bob
4 |
5 |   category: encryption
      ^

I have encountered something unexpected. I was
expecting one of

    - at 3 columns after

        - sequence element: "- <yaml value>"

    - at 2 columns before

        - key value pair: "<key>: <yaml value>"

    - end of input

The raw information (line and column numbers, individual expectations, fail= ed indentation or alignment expectation) is available as well so that you can present the error messages to the user in any different form.

There is also a component Fmlib_pretty in the library for pretty printing any ascii text.

ptime 1.0.0 and mtime 1.4.0

Daniel B=C3=BCnzli announced

It's my pleasure to announce new releases of ptime and mtime. Ptime and mti= me provide types and clocks for POSIX and monotonic time.

These releases change the JavaScript support strategy for clocks by impleme= nting the primitives in pure JavaScript and linking them via js_of_ocaml.

This means that both the ptime.clock.jsoo and mtime.cloc= k.jsoo libraries no longer exist[^1]. Instead simply use the ptime.clock.os or mtime.clock.os libraries li= ke you would do for your regular programs.

By side effect, the packages also no longer depend on any of js_of_o= caml's packages.

Thanks to Hugo Heuzard (@hhugo) for suggesting and implementing these chang= es. Thanks also to Jonah Beckford for his Windows build patches.

Other changes are described in the release notes for <= code>ptime and mtime.

Home pages: ptime, mtime

Docs & manuals: pti= me, mtime or odig doc ptime mtime

Install: opam install ptime mtime

[^1]: I had intended to only deprecate these libraries by warning in the META files and requiring the replacement library bu= t it seems the warning won't show up in many contexts including dune<= /code> builds. So a breaking change it is.

Timedesc 0.6.0

Darren announced

I am pleased to announce the release of Timedesc 0.6.0.

Timedesc is a very comprehensive date time handling library with good suppo= rt of time zone.

Features:

  • Timestamp and date time handling with platform independent time zone su= pport
    • Subset of the IANA time zone database is built into this library
  • Supports Gregorian calendar date, ISO week date, and ISO ordinal date
  • Supports nanosecond precision
  • ISO8601 parsing and RFC3339 printing

Changes

This release adds a fair number of quality of life improvements and additio= nal features. Many thanks to @glennsl for the suggestions and feedback!

The most important sections of the changelog are as follows:

  • Main breaking changes:
    • Changes in ISO week date functions (shorting label for arguments, quali= ty of life changes)
    • Removed _date suffix in names of Date.Ymd_date and Date.ISO_ord_date
  • Added "partial date" modules with ISO8601 parsing and printing faciliti= es
    • ISO_week
    • Ym
  • Added additional ISO8601 printing facilities for all three calendar sys= tems
    • Date.Ymd.pp/to_iso8601 (these are just aliases to the RFC3= 339 printers)
    • Date.ISO_week_date.pp/to_iso8601
    • Date.ISO_ord.pp/to_iso8601
  • Added additional ISO8601 parsing facilities for all three calendar syst= ems
    • Date.Ymd.of_iso8601[_exn]
    • Date.ISO_week_date.of_iso8601[_exn]
    • Date.ISO_ord.of_iso8601[_exn]
  • Added additional comparison functions to Date
    • lt, le, gt, ge, compare
  • Added arithemtic functions to Date
  • Added pp/to_iso8601 functions as aliases to the rfc3339 fu= nctions to Timedesc
  • Patched ISO8601 parsers and RFC3339/ISO8601 printers to handle second l= evel time zone offset
    • Rare occurrence in tzdb but picked up by some new tests

OCaml from the Very Beginning now free in PDF and HTML formats=

John Whitington announced

Thanks to a grant from the OCaml Software= Foundation, I am able to release my book OCaml from the Very Beginning at no cost in its existing PDF format, and in a= new HTML format too.

You can find it here: https://j= ohnwhitington.net/ocamlfromtheverybeginning/.

The paperback and Kindle versions continue to be available from Amazon as b= efore.

The book has recently been updated to make it ready for OCaml 4.14 which in= volved only minor changes to error handling and warnings. I have also opened the source.

Dune 3.0.0

Rudi Grinberg announced

On behalf of the dune team, I=E2=80=99m delighted to announce the availabil= ity of dune 3.0.

The team has been working on this release for over 6 months, and there=E2= =80=99s a bunch of new work to report. I=E2=80=99ll only highlight the some of the interesting new developments:

  • The watch mode has been rewritten from scratch to be faster and more sc= alable. We also no longer rely on any 3rd party tools such as fswatch. If a= ny of you still have a dune workspace dune is still struggling with, we can= not wait to hear from you.
  • The watch mode now also starts an RPC server in the background. This RP= C protocol is going to be the basis for other tools to interact with dune. = Watch out for announcement on the LSP side to see how we=E2=80=99ll be maki= ng use of it to improve the editing experience.
  • The dune cache has been rewritten as well. It is now simpler and more r= eliable. There are still some components missing, such as distribution of t= he artifacts on the network. Nevertheless, we welcome you all to experiment= with this feature and give us feedback.
  • We=E2=80=99ve addressed one of our oldest feature requests: high level = rules for ctypes projects. This feature is still experimental, so we need f= eedback from real world projects before declaring it as mature.

Of course, there are many other fixes, enhancements, and only a few breakin= g changes in this release. We hope you have an easy time upgrading.

Happy Hacking.

Editor=E2=80=99s note: for the full changelog, please follow the archive= link above.

Blog Post "2021 at OCamlPro"

Fabrice Le Fessant announced

We just published a review of what OCamlPro did in 2021:

https= ://www.ocamlpro.com/blog/2022_01_31_2021_at_ocamlpro

A lot of OCaml, but also some Rust, Cobol, Solidity, and a lot of Formal Ve= rification! OCamlPro is always looking for skilled OCaml developers to hire, so if you are interested, contact us at c= ontact@ocamlpro.com

Packstream 0.1

Tomasz Bara=C5=84ski announced

I have a pleasure to announce the release of Packstream 0.1.

Packstream is a library to parse/serialize Packstream binary format.

This is the initial release. It is functional but very very limited in scop= e. It allows parsing a binary stream into a Packstream datatype and serializing the datatype into a binary stream.

OCaml 4.14.0, first beta release

octachron announced

The release of OCaml 4.14.0 is close.

The set of new features has been stabilized, and most opam packages already work with this release. After two alpha releases, we have created a first beta version to help you update your softwares and libraries ahead of the release.

If you find any bugs, please report them at:

https://github.com/ocaml/= ocaml/issues

The full release of OCaml 4.14.0 is currently expected for the middle of Ma= rch.

Compared to the last alpha, we have a last minute correction for one of th= e new function in the Seq module, some documentation improvements, few configurat= ion and internal tweaks.

Installation instructions

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

opam update
opam switch create 4.14.0~beta1 --repositories=3Ddefault,beta=3Dgit+https:/=
/github.com/ocaml/ocaml-beta-repository.git

With opam 2.1, the previous command line can be simplified to

opam update
opam switch create 4.14.0~beta1

If you want to tweak the configuration of the compiler, you can switch to t= he option variant with:

opam update
opam switch create <switch_name> --packages=3Docaml-variants.4.14.0~b=
eta1+options,<option_list>
--repositories=3Ddefault,beta=3Dgit+https://github.com/ocaml/ocaml-beta-rep=
ository.git

or with opam 2.1:

opam update
opam switch create <switch_name> ocaml-variants.4.14.0~beta1+options =
<option_list>

where <option_list> is a comma separated list of o= caml-option-* packages. For instance, for a flambda and no-flat-float-array switch:

opam switch create 4.14.0~beta1+flambda+nffa ocaml-variants.4.14.0~beta1+op=
tions ocaml-option-flambda
ocaml-option-no-flat-float-array

All available options can be listed with opam search ocaml-option.

The source code for the beta is also available at these addresses:

Changes compared to the last alpha

The full list of changes for OCaml 4.14 is available at https://github.com/ocaml/ocaml/bl= ob/4.14/Changes

Standard library
  • additional fixes 10583, +10998: Add over 40 new functions in Seq. (Fran=C3=A7ois Pottier and S= imon Cruanes, review by Nicol=C3=A1s Ojeda B=C3=A4r, Daniel B=C3=BCnzli, Na= =C3=ABla Courant, Craig Ferguson, Wiktor Kuchta, Xavier Leroy, Guillaume Mu= nch-Maccagnoni, Rapha=C3=ABl Proust, Gabriel Scherer and Thierry Martinez)<= /li>
Documentation
  • 10397: Docu= ment exceptions raised by Unix module functions on Windows (Martin Jambon, = review by Daniel B=C3=BCnzli, David Alsopp, Damien Doligez, Xavier Leroy, a= nd Florian Angeletti)
  • 10794: Clar= ify warning 57 (Ambiguous or-pattern variables under guard) (Wiktor Kuchta,= review by Gabriel Scherer)
Build system
  • 10828 Build= native-code compilers on OpenBSD/aarch64 (Christopher Zimmermann)
  • 10835 Disab= le DT_TEXTREL warnings on x86 32 bit architecture by passing -Wl,-z,notext = in mksharedlib and mkmaindll. Fixes relocation issues, reported in 9800, making local patc= hes in Debian, Alpine, and FreeBSD superfluous. (Hannes Mehnert with Kate D= eplaix and St=C3=A9phane Glondu, review by Xavier Leroy)
Code generation
  • 10719: Ensu= re that build_apply respects Lambda.max_arity (Stephen Dolan, review by Xavier Leroy)
Internal/compiler-libs
  • additional fixes 10718, +11012: Add "Shape" information to the cmt files. Shapes are an abstra= ction of modules that can be used by external tooling to perform definition= -aware operations. (Ulysse G=C3=A9rard, Thomas Refis and Leo White, review = by Florian Angeletti)

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.

--=-=-=--