From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 EE6647EC77 for ; Tue, 31 Mar 2020 11:54:51 +0200 (CEST) Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=Pass smtp.pra=alan.schmitt@polytechnique.org; spf=Pass smtp.mailfrom=SRS0=o1kQ=5Q=polytechnique.org=alan.schmitt@bounces.m4x.org; spf=Pass smtp.helo=postmaster@mx1.polytechnique.org Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of alan.schmitt@polytechnique.org designates 129.104.30.34 as permitted sender) identity=pra; client-ip=129.104.30.34; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="SRS0=o1kQ=5Q=polytechnique.org=alan.schmitt@bounces.m4x.org"; x-sender="alan.schmitt@polytechnique.org"; x-conformance=sidf_compatible; x-record-type="spf2.0" Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of SRS0=o1kQ=5Q=polytechnique.org=alan.schmitt@bounces.m4x.org designates 129.104.30.34 as permitted sender) identity=mailfrom; client-ip=129.104.30.34; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="SRS0=o1kQ=5Q=polytechnique.org=alan.schmitt@bounces.m4x.org"; x-sender="SRS0=o1kQ=5Q=polytechnique.org=alan.schmitt@bounces.m4x.org"; x-conformance=sidf_compatible; x-record-type="spf2.0" Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of postmaster@mx1.polytechnique.org designates 129.104.30.34 as permitted sender) identity=helo; client-ip=129.104.30.34; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="SRS0=o1kQ=5Q=polytechnique.org=alan.schmitt@bounces.m4x.org"; x-sender="postmaster@mx1.polytechnique.org"; x-conformance=sidf_compatible; x-record-type="v=spf1" IronPort-PHdr: =?us-ascii?q?9a23=3ATCTjiRWlm65MAiYs9kMvgaLdth/V8LGtZVwlr6E/?= =?us-ascii?q?grcLSJyIuqrYZhKBt8tkgFKBZ4jH8fUM07OQ6P+wHzFYqb+681k8M7V0Hycfjs?= =?us-ascii?q?sXmwFySOWkMmbcaMDQUiohAc5ZX0Vk9XzoeWJcGcL5ekGA6ibqtW1aVjT5Kwtu?= =?us-ascii?q?J+7xF8bNiN67zKjyoMWSME10g2/3Zax0Zl3iqRrXns0Jh81kJ7pnjlODqWROMa?= =?us-ascii?q?wekWh3I3qXng3g/YGx8I9n92JXof13s4ZLWKD+OqA5VqBwDTI8Mmlz6tev/RLE?= =?us-ascii?q?SBOn4noHTn5QlQBCAhTM6B/9TtH8r3jUrO14jQCeNMu+drs0XDW+8+8/QRvhjm?= =?us-ascii?q?EcPD488X3LotR3iLNHrRmhoR1m3oOSZ5uaYqktNpjBdM8XEDISFv1aUDZMV9jk?= =?us-ascii?q?NtddP686Je9d6rLFiR4WtxLnVFu0A+f+1jJDhnn3xLA3leM7HlOfhVFyL5c1qH?= =?us-ascii?q?3R6e7NGuISXOSylvKayCWaKetR3Sbh5YPIdBE4vPzKWqh/I5OImBsfUjjdh1DV?= =?us-ascii?q?krTLejac1+ADqW+etrUyX+WyjWUqsEd0/ijpwd0j2NDE?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0AdBQALEoNehyIeaIFcCh0BAQEJAREFB?= =?us-ascii?q?QGBe4ElUwWBGFUyKoNaQIFehySFf4Eog3eFJAONKYQBgRADUA4BAwEMGAEOBQE?= =?us-ascii?q?CBAEBgw6BNgIXgh0dBgEFMxMCEAEBBQEBAQIBAgMEARMBAQEKCwkIKYVdDII7B?= =?us-ascii?q?QMEGQuDCgMBCg4BCAo7BQceIwMJCwEGAwIEDQEXARQKAxQBEhQGgkFLAYJ8BAE?= =?us-ascii?q?KkVSbeYEyhDUBAwcJAQIPLgFBg0CBPg0CE38XgiWCfYMWg1MmD4FMP4MnSQdsg?= =?us-ascii?q?k4OCwEBAQEBAYEaGgsBAQgyHAmCUxeCRwSNZQsOAQkDJGeIBId6gV2PBXcHgkB?= =?us-ascii?q?7BIVzb4Vag3CDH4JqgkyBAocvhFmMGCGOeoFRhTcGaYEhhTyNWYE/KoFIAQEZA?= =?us-ascii?q?wwIMxowQw0HAwaCGwEBMgkJVg1Ygz6JYy8BARaBBAEJgWReM4ELgSaBPDk7hUM?= =?us-ascii?q?/MwIBAQ6BEAEBBRMLAYtegWcBAQ?= X-IPAS-Result: =?us-ascii?q?A0AdBQALEoNehyIeaIFcCh0BAQEJAREFBQGBe4ElUwWBGFU?= =?us-ascii?q?yKoNaQIFehySFf4Eog3eFJAONKYQBgRADUA4BAwEMGAEOBQECBAEBgw6BNgIXg?= =?us-ascii?q?h0dBgEFMxMCEAEBBQEBAQIBAgMEARMBAQEKCwkIKYVdDII7BQMEGQuDCgMBCg4?= =?us-ascii?q?BCAo7BQceIwMJCwEGAwIEDQEXARQKAxQBEhQGgkFLAYJ8BAEKkVSbeYEyhDUBA?= =?us-ascii?q?wcJAQIPLgFBg0CBPg0CE38XgiWCfYMWg1MmD4FMP4MnSQdsgk4OCwEBAQEBAYE?= =?us-ascii?q?aGgsBAQgyHAmCUxeCRwSNZQsOAQkDJGeIBId6gV2PBXcHgkB7BIVzb4Vag3CDH?= =?us-ascii?q?4JqgkyBAocvhFmMGCGOeoFRhTcGaYEhhTyNWYE/KoFIAQEZAwwIMxowQw0HAwa?= =?us-ascii?q?CGwEBMgkJVg1Ygz6JYy8BARaBBAEJgWReM4ELgSaBPDk7hUM/MwIBAQ6BEAEBB?= =?us-ascii?q?RMLAYtegWcBAQ?= X-IronPort-AV: E=Sophos;i="5.72,327,1580770800"; d="scan'208,217";a="344435787" X-MGA-submission: =?us-ascii?q?MDEqaMqiq+VPMdE41KFxovZrIUdNa6k94It2e9?= =?us-ascii?q?pIOgB0vGym7LUy6lfwo5SqE0LVSer3t6iFB8hTxyfLNT6hu4cHg29efo?= =?us-ascii?q?bT8qKMaTItERJ0UqG9bczJyJ9KY5bHRLZ8yfQrgdmEQyWdD+Zwzwz247?= =?us-ascii?q?xuh06c/rwmSVAFxt3qKH2WDA=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 31 Mar 2020 11:54:49 +0200 Received: from set (cbg35-2-78-242-14-140.fbx.proxad.net [78.242.14.140]) (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 C9BD256129C; Tue, 31 Mar 2020 11:54:45 +0200 (CEST) From: Alan Schmitt To: "lwn" , "cwn" , caml-list@inria.fr, comp@lists.orbitalfox.eu Date: Tue, 31 Mar 2020 11:54:45 +0200 Message-ID: <87blocyhlm.fsf@polytechnique.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Mar 31 11:54:46 2020 +0200 (CEST)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.000034, queueID=6AACD5612A0 X-Org-Mail: alan.schmitt.1995@polytechnique.org Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdz LCBmb3IgdGhlIHdlZWsgb2YgTWFyY2ggMjQgdG8gMzEsDQoyMDIwLg0KDQpU YWJsZSBvZiBDb250ZW50cw0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCkFuIEluLURlcHRoIExvb2sg YXQgT0NhbWzigJlzIE5ldyDigJxCZXN0LUZpdOKAnSBHYXJiYWdlIENvbGxl Y3RvciBTdHJhdGVneQ0KRmlyc3QgcmVsZWFzZSBvZiBQcCwgYSBwcmV0dHkt cHJpbnRpbmcgbGlicmFyeQ0Kc291cGF1bHQ6IGEgc3RhdGljIHdlYnNpdGUg Z2VuZXJhdG9yIGJhc2VkIG9uIEhUTUwgcmV3cml0aW5nDQpyb3V0ZXM6IHBh dGggYmFzZWQgcm91dGluZyBmb3Igd2ViIGFwcGxpY2F0aW9ucw0KQ29tcGls ZXIgRW5naW5lZXIgYXQgTWl4dGlvbmFsIENvZGUgaW4gRGFybXN0YWR0IG9y IGFueXdoZXJlIGVsc2UgaW4gR2VybWFueQ0KdGlueS1odHRwZCAwLjUNClZp c3VhbCBTdHVkaW8gQ29kZSBwbHVnaW4gZm9yIE9DYW1sDQpEaXNtYXM6IGEg dG9vbCBmb3IgYXV0b21hdGljYWxseSBtYWtpbmcgY3Jvc3MtdmVyc2lvbnMg b2Ygb3BhbSBwYWNrYWdlcw0KTXVsdGljb3JlIE9DYW1sOiBNYXJjaCAyMDIw IHVwZGF0ZQ0KT2xkIENXTg0KDQoNCkFuIEluLURlcHRoIExvb2sgYXQgT0Nh bWzigJlzIE5ldyDigJxCZXN0LUZpdOKAnSBHYXJiYWdlIENvbGxlY3RvciBT dHJhdGVneQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJj aGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbi1pbi1k ZXB0aC1sb29rLWF0LW9jYW1sLXMtbmV3LWJlc3QtZml0LWdhcmJhZ2UtY29s bGVjdG9yLXN0cmF0ZWd5LzUzNzAvMT4NCg0KDQpPQ2FtbFBybyBhbm5vdW5j ZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgA0KDQogIFRoZSBHYXJiYWdlIENvbGxlY3RvciBpcyBw cm9iYWJseSBPQ2FtbOKAmXMgZ3JlYXRlc3QgdW5zdW5nIGhlcm8uIEl0cw0K ICBwcmFnbWF0aWMgYXBwcm9hY2ggYWxsb3dzIHVzIHRvIGFsbG9jYXRlIHdp dGhvdXQgbXVjaCBmZWFyIG9mDQogIGVmZmljaWVuY3kgbG9zcy4gV2UgbG9v a2VkIGludG8gaXRzIG5ldyAiQmVzdC1maXQiIHN0cmF0ZWd5IGFuZCBoZXJl DQogIGlzIHdoYXQgd2UgbGVhcm5lZCENCiAgW2h0dHA6Ly93d3cub2NhbWxw cm8uY29tLzIwMjAvMDMvMjMvb2NhbWwtbmV3LWJlc3QtZml0LWdhcmJhZ2Ut Y29sbGVjdG9yL10NCg0KDQpbaHR0cDovL3d3dy5vY2FtbHByby5jb20vMjAy MC8wMy8yMy9vY2FtbC1uZXctYmVzdC1maXQtZ2FyYmFnZS1jb2xsZWN0b3Iv XQ0KPGh0dHA6Ly93d3cub2NhbWxwcm8uY29tLzIwMjAvMDMvMjMvb2NhbWwt bmV3LWJlc3QtZml0LWdhcmJhZ2UtY29sbGVjdG9yLz4NCg0KDQpGaXJzdCBy ZWxlYXNlIG9mIFBwLCBhIHByZXR0eS1wcmludGluZyBsaWJyYXJ5DQrilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAN Cg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90 L2Fubi1maXJzdC1yZWxlYXNlLW9mLXBwLWEtcHJldHR5LXByaW50aW5nLWxp YnJhcnkvNTM3MS8xPg0KDQoNCkrDqXLDqW1pZSBEaW1pbm8gYW5ub3VuY2Vk DQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBJJ20gaGFwcHkg dG8gYW5ub3VuY2UgdGhlIGZpcnN0IHJlbGVhc2Ugb2YgdGhlIFtwcCBsaWJy YXJ5XSEgVGhpcw0KICBsaWJyYXJ5IHByb3ZpZGVzIGEgbGVhbiBhbHRlcm5h dGl2ZSB0byB0aGUgW0Zvcm1hdCBtb2R1bGVdIG9mIHRoZQ0KICBzdGFuZGFy ZCBsaWJyYXJ5LiBJdCB1c2VzIHRoZSBzYW1lIGNvbWNlcHRzIG9mIGJveGVz IGFuZCBicmVhayBoaW50cywNCiAgaG93ZXZlciBpdCBkZWZpbmVzIGl0cyBv d24gYWxnZWJyYSB3aGljaCBzb21lIG1pZ2h0IGZpbmQgZWFzaWVyIHRvDQog IHdvcmsgd2l0aCBhbmQgcmVhc29uIGFib3V0LiAgSSBwZXJzb25hbGx5IGRv IDopIFRoZSBmaW5hbCByZW5kZXJpbmcgaXMNCiAgc3RpbGwgZG9uZSB2aWEg YSBmb3JtYXR0ZXIgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBpbnRlZ3JhdGUg YFBwJyBpbg0KICBleGlzdGluZyBwcm9ncmFtcyB1c2luZyBgRm9ybWF0Jy4N Cg0KICBXZSBpbnRyb2R1Y2VkIHRoaXMgbW9kdWxlIGluIFtEdW5lXSB0byBo ZWxwIGltcHJvdmUgdGhlIGZvcm1hdHRpbmcgb2YNCiAgbWVzc2FnZXMgcHJp bnRlZCBpbiB0aGUgdGVybWluYWwgYW5kIGl0IGhhcyBiZWVuIGEgc3VjY2Vz cy4gVGhlIG5ldw0KICBBUEkgaXMgc21hbGxlciwgc2ltcGxlciBhbmQgbWFr ZXMgaXQgZWFzeSBmb3IgZGV2ZWxvcGVycyB0byBkbyB0aGUNCiAgcmlnaHQg dGhpbmcuIE9uY2UgdGhlIGBQcCcgbW9kdWxlIG9mIER1bmUgd2FzIG1hdHVy ZSBlbm91Z2gsIHdlDQogIGRlY2lkZWQgdG8gZXh0cmFjdCBpdCBpbnRvIGEg c2VwYXJhdGUgbGlicmFyeSBzbyB0aGF0IGl0IGNvdWxkIGJlbmVmaXQNCiAg b3RoZXJzLg0KDQogIFRoZSBsaWJyYXJ5IGl0c2VsZiBpcyBjb21wb3NlZCBv ZiBhIHNpbmdsZSBgUHAnIG1vZHVsZSBhbmQgaGFzIG5vDQogIGRlcGVuZGVu Y2llcy4gIEl0cyBkb2N1bWVudGF0aW9uIGlzIHNlbGYtY29udGFpbmVkIGFu ZCBubyBwcmV2aW91cw0KICBrbm93bGVkZ2UgaXMgcmVxdWlyZWQgdG8gc3Rh cnQgdXNpbmcgaXQsIGhvd2V2ZXIgdGhlIHZhcmlvdXMgZ3VpZGVzDQogIGZv ciB0aGUgYEZvcm1hdCcgbW9kdWxlIHN1Y2ggYXMgW3RoaXMgb25lXSBzaG91 bGQgYmUgYXBwbGljYWJsZSB0bw0KICBgUHAnIGFzIHdlbGwuDQoNCiAgSWYg eW91IGhhdmUgdXNlZCBgRm9ybWF0JyBiZWZvcmUgYW5kIGxpa2UgbWUgZm91 bmQgaXRzIEFQSSBjb21wbGljYXRlZA0KICBhbmQgZGlmZmljdWx0IHRvIHVz ZSwgSSBob3BlIHRoYXQgeW91IHdpbGwgZmluZCBgUHAnIG5pY2VyIHRvIHdv cmsNCiAgd2l0aCENCg0KDQpbcHAgbGlicmFyeV0gPGh0dHBzOi8vZ2l0aHVi LmNvbS9kaW1sL3BwPg0KDQpbRm9ybWF0IG1vZHVsZV0NCjxodHRwczovL2Nh bWwuaW5yaWEuZnIvcHViL2RvY3MvbWFudWFsLW9jYW1sL2xpYnJlZi9Gb3Jt YXQuaHRtbD4NCg0KW0R1bmVdIDxodHRwczovL2R1bmUuYnVpbGQ+DQoNClt0 aGlzIG9uZV0gPGh0dHA6Ly9jYW1sLmlucmlhLmZyL3Jlc291cmNlcy9kb2Mv Z3VpZGVzL2Zvcm1hdC5lbi5odG1sPg0KDQoNCkpvc2ggQmVyZGluZSB0aGVu IHNhaWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEFub3RoZXIgZ3Jl YXQgcmVzb3VyY2UgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgbWVudGFs IG1vZGVsIG9mDQogIEZvcm1hdCBpcyBbRm9ybWF0IFVucmF2ZWxlZF0sIGFs dGhvdWdoIGlmIEkgdW5kZXJzdGFuZCBwcCBjb3JyZWN0bHkNCiAgdGhlIGRp c2N1c3Npb24gYWJvdXQgRm9ybWF0IG5vdCBiZWluZyBkb2N1bWVudC1iYXNl ZCB3b24ndCBhcHBseSB0bw0KICBwcC4NCg0KDQpbRm9ybWF0IFVucmF2ZWxl ZF0NCjxodHRwczovL2hhbC5hcmNoaXZlcy1vdXZlcnRlcy5mci9oYWwtMDE1 MDMwODEvZmlsZS9mb3JtYXQtdW5yYXZlbGVkLnBkZj4NCg0KDQpzb3VwYXVs dDogYSBzdGF0aWMgd2Vic2l0ZSBnZW5lcmF0b3IgYmFzZWQgb24gSFRNTCBy ZXdyaXRpbmcNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mu b2NhbWwub3JnL3QvYW5uLXNvdXBhdWx0LWEtc3RhdGljLXdlYnNpdGUtZ2Vu ZXJhdG9yLWJhc2VkLW9uLWh0bWwtcmV3cml0aW5nLzQxMjYvMTM+DQoNCg0K RGFuaWlsIEJhdHVyaW4gYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIANCg0KICBbMS4xMC4wXSByZWxlYXNlIGlzIGF2YWlsYWJsZS4N Cg0KICBCdWcgZml4ZXM6DQogIOKAoiBGaWxlcyB3aXRob3V0IGV4dGVuc2lv bnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5Lg0KDQogIE5ldyBmZWF0dXJlczoN CiAg4oCiIFBsdWdpbiBkaXNjb3Zlcnk6IGlmIHlvdSBzYXZlIGEgcGx1Z2lu IHRvIGBwbHVnaW5zL215LXBsdWdpbi5sdWEnLA0KICAgIGl0J3MgYXV0b21h dGljYWxseSBsb2FkZWQgYXMgYSB3aWRnZXQgbmFtZWQNCiAgYG15LXBsdWdp bicuIExpc3Qgb2YgcGx1Z2luIGRpcmVjdG9yaWVzIGlzIGNvbmZpZ3VyYWJs ZS4NCiAg4oCiIE5ldyBwbHVnaW4gQVBJIGZ1bmN0aW9uczogYEhUTUxnZXRf dGFnX25hbWUnLCBgSFRNTC5zZWxlY3RfYW55X29mJywNCiAgICBgSFRNTC5z ZWxlY3RfYWxsX29mJy4NCiAg4oCiIFRoZSBgSFRNTCcgbW9kdWxlIGlzIG5v dyAibW9uYWRpYyI6IGdpdmluZyBhIG5pbCB0byBhIGZ1bmN0aW9uIHRoYXQN CiAgICBleHBlY3RzIGFuIGVsZW1lbnQgZ2l2ZXMgeW91IGEgbmlsIGJhY2ss IHJhdGhlciB0aGFuIGNhdXNlIGEgcnVudGltZQ0KICAgIGVycm9yLg0KDQoN ClsxLjEwLjBdIDxodHRwczovL3NvdXBhdWx0Lm5lb2NpdGllcy5vcmcvYmxv Zy9zb3VwYXVsdC0xLjEwLXJlbGVhc2U+DQoNCg0Kcm91dGVzOiBwYXRoIGJh c2VkIHJvdXRpbmcgZm9yIHdlYiBhcHBsaWNhdGlvbnMNCuKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQog IEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5u LXJvdXRlcy1wYXRoLWJhc2VkLXJvdXRpbmctZm9yLXdlYi1hcHBsaWNhdGlv bnMvMzYyNC82Pg0KDQoNCkFudXJhZyBTb25pIGFubm91bmNlZA0K4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSADQoNCiAgWzAuNy4yXSByZWxlYXNlIGlzIG5vdyBhdmFp bGFibGUgb24gb3BhbS4gVGhlcmUgaGF2ZSBiZWVuIHF1aXRlIGEgZmV3DQog IGNoYW5nZXMgc2luY2UgdGhlIHByZXZpb3VzIHZlcnNpb25zLg0KDQogIOKA oiBSb3V0ZXMgZG9lc24ndCBkZWFsIHdpdGggSFRUUCBtZXRob2RzIGFueW1v cmUNCiAg4oCiIFRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyBub3cg YmFzZWQgYXJvdW5kIGEgdHJpZSBsaWtlIGRhdGENCiAgICBzdHJ1Y3R1cmUN CiAg4oCiIFJvdXRlcyBoYXZlIHByZXR0eSBwcmludGVycw0KICDigKIgc3By aW50ZiBzdHlsZSByb3V0ZSBwcmludGluZyBpcyBzdXBwb3J0ZWQgYWdhaW4N CiAg4oCiIE1pbmltdW0gc3VwcG9ydGVkIE9DYW1sIHZlcnNpb24gaXMgbm93 IDQuMDUgKGl0IHVzZWQgdG8gYmUgNC4wNikNCiAg4oCiIFRoZXJlIGlzIGEg cmVsZWFzZSBhdmFpbGFibGUgZm9yIGJ1Y2tsZXNjcmlwdCBhcyB3ZWxsIGFu ZCBpdCBpcw0KICAgIGF2YWlsYWJsZSB0byBpbnN0YWxsIHZpYSBbbnBtXS4N Cg0KDQpbMC43LjJdIDxodHRwOi8vb3BhbS5vY2FtbC5vcmcvcGFja2FnZXMv cm91dGVzLz4NCg0KW25wbV0gPGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNr YWdlL0BhbnVyYWdzb25pL3JvdXRlcz4NCg0KDQpDb21waWxlciBFbmdpbmVl ciBhdCBNaXh0aW9uYWwgQ29kZSBpbiBEYXJtc3RhZHQgb3IgYW55d2hlcmUg ZWxzZSBpbiBHZXJtYW55DQrilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6 Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2NvbXBpbGVyLWVuZ2luZWVyLWF0LW1p eHRpb25hbC1jb2RlLWluLWRhcm1zdGFkdC1vci1hbnl3aGVyZS1lbHNlLWlu LWdlcm1hbnkvNTM3Ny8xPg0KDQoNCkdlcmQgU3RvbHBtYW5uIGFubm91bmNl ZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgVHlwZSBvZiBw b3NpdGlvbjoNCg0KICDigKIgcmVndWxhciBoaXJlIChubyBmcmVlbGFuY2Vy cykNCiAg4oCiIGZ1bGwgdGltZQ0KICDigKIgd29yayBmcm9tIGhvbWUgYW55 d2hlcmUgaW4gR2VybWFueSwgb3IgaW4gdGhlIG9mZmljZSBpbiBEYXJtc3Rh ZHQNCiAg4oCiIHdvcmsgZm9yIGEgc21hbGwgYW5kIGhpZ2hseSBza2lsbGVk IGludGVybmF0aW9uYWwgdGVhbSwgbG9jYXRlZCBpbg0KICAgIHRoZSBVUyBh bmQgRXVyb3BlDQogIOKAoiB0aGUgdGVhbSBsYW5ndWFnZSBpcyBFbmdsaXNo DQoNCiAgV2UgYXJlIGRldmVsb3BpbmcgYSBjb21waWxlciBmb3IgYSBuby1j b2RlIHBsYXRmb3JtIHRoYXQgdHJhbnNsYXRlcw0KICBvdXIgRFNMIHRvIGJ5 dGVjb2RlIGFuZC9vciBXZWJBc3NlbWJseS4gVGhlIGxhbmd1YWdlIGlzIGxh cmdlbHkgb2YNCiAgZnVuY3Rpb25hbCB0eXBlIGJ1dCBpcyBhbHNvIGFibGUg dG8gbWFuYWdlIHN0YXRlIHdpdGggYSBzcHJlYWRzaGVldA0KICBtb2RlbCwg YWxsb3dpbmcgcmVhY3RpdmUgcHJvZ3JhbW1pbmcgd2l0aG91dCBoYXZpbmcg dG8gcmVzb3J0IHRvDQogIGxpYnJhcmllcy4gVGhlIGxhbmd1YWdlIGlzIHN0 YXRpY2FsbHkgdHlwZWQgdXNpbmcgYSBIaW5kbGV5LU1pbG5lcg0KICB0eXBl IGNoZWNrZXIuIFRoZSBjb21waWxlciBpcyBwcmltYXJpbHkgd3JpdHRlbiBp biBPQ2FtbC4gT3RoZXINCiAgbGFuZ3VhZ2VzIG9mIG91ciBwbGF0Zm9ybSBh cmUgR28sIEVsbSwgYW5kIEphdmFzY3JpcHQuDQoNCiAgV2UgYXJlIGxvb2tp bmcgZm9yIGEgY29tcGlsZXIgZW5naW5lZXIgd2l0aCBzdHJvbmcgc2tpbGxz IGluIGFsbA0KICByZWxldmFudCBhcmVhczoNCg0KICDigKIgZmx1ZW50IGlu IE9DYW1sIG9yIGEgc2ltaWxhciBsYW5ndWFnZSBzdWNoIGFzIEhhc2tlbGwN CiAg4oCiIFVuZGVyc3RhbmRpbmcgb2YgdGhlIHN0cnVjdHVyZSBvZiB0aGUg RFNMLCBpbmNsdWRpbmcgc3ludGF4IGFuZA0KICAgIHNlbWFudGljcw0KICDi gKIgVHJhbnNsYXRpb24gb2YgRlAgbGFuZ3VhZ2VzIHRvIGV4ZWN1dGFibGUg Y29kZQ0KICDigKIgQ29kZSBvcHRpbWl6YXRpb24NCiAg4oCiIEdyYXBoIGFs Z29yaXRobXMNCiAg4oCiIFR5cGUgY2hlY2tpbmcNCg0KICBXZSBhcmUgb3Bl biB0byBib3RoIGp1bmlvcnMgYW5kIHNlbmlvcnMsIGFuZCBwYXltZW50IHdp bGwgYmUNCiAgYWNjb3JkaW5nbHkuIFdlIGFyZSBub3Qgc28gbXVjaCBpbnRl cmVzdGVkIGluIGZvcm1hbCBjZXJ0aWZpY2F0aW9ucw0KICBidXQgcmF0aGVy IGluIHJlYWwgcHJhY3RpY2UsIGVpdGhlciBmcm9tIHByZXZpb3VzIGpvYnMs IHJlc2VhcmNoDQogIHByb2plY3RzLCBvciBjb250cmlidXRpb25zIHRvIG9w ZW4gc291cmNlIHByb2plY3RzLg0KDQogIFRoZSBuby1jb2RlIHBsYXRmb3Jt IGlzIGJlaW5nIGRldmVsb3BlZCBieSBlbmdpbmVlcnMgaW4gRXVyb3BlIGFu ZCB0aGUNCiAgVVMgYXQgdmFyaW91cyBwbGFjZXMsIGFuZCB3ZSB1c3VhbGx5 IGRvIG5vdCBtZWV0IHBoeXNpY2FsbHkgYnV0IGluDQogIHZpZGVvIGNvbmZl cmVuY2VzLiBXb3JraW5nIGZyb20gaG9tZSBpcyB2ZXJ5IHVzdWFsLiBXZSBh bHNvIGdldCB5b3UgYQ0KICBkZXNrIGluIHlvdXIgaG9tZSB0b3duIGlmIHlv dSBwcmVmZXIgdGhpcy4gVGhlIGNvbXBpbGVyIGRldmVsb3BtZW50IGlzDQog IGxlYWQgYnkgR2VyZCBTdG9scG1hbm4gZnJvbSBEYXJtc3RhZHQuDQoNCiAg RHVlIHRvIHRoZSBzdHJvbmcgY29ubmVjdGlvbnMgdG8gdGhlIFVTLCB2aWRl byBjb25mZXJlbmNlcyB3aWxsIG9mdGVuDQogIGhhdmUgdG8gdGFrZSBwbGFj ZSBpbiBldmVuaW5nIGhvdXJzLCB1bnRpbCBhcm91bmQgN3BtIG9yIDhwbS4N Cg0KICBBcHBsaWNhdGlvbnM6IHBsZWFzZSBmb2xsb3cgdGhlICJBcHBseSIg bGluayBhdCB0aGUgb2ZmaWNpYWwgd2ViIHBhZ2UNCiAgZGVzY3JpYmluZyB0 aGUgcG9zaXRpb246IDxodHRwczovL3JteC5taXh0aW9uYWwuZGUvc3RhdGlj LzU0NjU3Y2RhLz4NCg0KICBHZXJkIFN0b2xwbWFubg0KICBDRU8gb2YgTWl4 dGlvbmFsIENvZGUgR21iSCAoYW5kIE9DYW1sIGhhY2tlciBvZiB0aGUgZmly c3QgaG91cikNCiAgQ29udGFjdCBhbmQgY29tcGFueSBkZXRhaWxzOiA8aHR0 cHM6Ly93d3cubWl4dGlvbmFsLmRlL2NvbnRhY3QuaHRtbD4NCg0KDQpTw6li YXN0aWVuIEJlc25pZXIgYXNrZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gA0KDQogIEknbSBsaXZpbmcgaW4gRnJhbmNlLCBjYW4gSSBhcHBseSB0byB0 aGUgcG9zaXRpb24gKHdlIGFyZSBuZWlnaGJvcnMhKT8NCg0KDQpHZXJkIFN0 b2xwbWFubiByZXBsaWVkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBX ZWxsLCBJIGNhbiAoYXQgdGhlIG1vbWVudCkgb25seSBtYWtlIGNvbnRyYWN0 cyB1c2luZyBHZXJtYW4gbGF3IGFuZA0KICBmb3IgdGhlIHNvY2lhbCBzZWN1 cml0eSBzeXN0ZW0gaGVyZS4gU28sIGlmIHlvdSBuZWVkIGEgZG9jdG9yIHlv dSdkDQogIGhhdmUgdG8gdHJhdmVs4oCmIElmIG15IGNvbXBhbnkgd2FzIGEg Yml0IGJpZ2dlciB0aGVyZSB3b3VsZCBiZSB0aGUNCiAgb3B0aW9uIG9mIG9w ZW5pbmcgYSBzZWNvbmQgc2l0ZSBpbiBGcmFuY2UgKGV2ZW4gYSB2ZXJ5IG1p bmltYWwgb25lKSwNCiAgYnV0IHRoZSBzZXR1cCBjb3N0cyBhcmUgc28gZmFy IHRvbyBoaWdoIChsYXd5ZXJzIGFuZCBhY2NvdW50YW50cyksIGFuZA0KICBp dCBpcyB0b28gZGlzdHJhY3RpbmcgZm9yIG1lIHRvIGtlZXAgdXAgd2l0aCB0 aGUgZmluZSBwb2ludHMgb2YgdGhlDQogIHN5c3RlbSBpbiBGcmFuY2UuIFVu Zm9ydHVuYXRlbHksIHRoZSBFVSBpcyBub3QgdGhhdCBmYXIgdGhhdCBpdCBp cw0KICBzdXBlciBzaW1wbGUgZm9yIGFuIGVtcGxveWVyIHRvIGhpcmUgYW55 d2hlcmUgaW4gRXVyb3BlLiAtIFRoYW5rcyBmb3INCiAgYXNraW5nLg0KDQoN CnRpbnktaHR0cGQgMC41DQrilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOiA8aHR0cHM6Ly9kaXNjdXNz Lm9jYW1sLm9yZy90L2Fubi10aW55LWh0dHBkLTAtNS81MzgxLzE+DQoNCg0K U2ltb24gQ3J1YW5lcyBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgA0KDQogIEkganVzdCByZWxlYXNlZCB0aW55LWh0dHBkIDAuNSBhbmQg dGhlIG5ldyB0aW55LWh0dHBkLWNhbWx6aXAsIHdoaWNoDQogIG1ha2VzIGl0 IHBvc3NpYmxlIHRvIHVzZSBgZGVmbGF0ZScgdHJhbnNwYXJlbnRseSBmb3Ig cXVlcmllcyBhbmQNCiAgcmVzcG9uc2VzLiBUaGUgc2VydmVyIGhhcyBldm9s dmVkIHF1aWV0bHkgYW5kIGlzIGdldHRpbmcgc29tZXdoYXQgbW9yZQ0KICBy b2J1c3Q6IEknbSB1c2luZyBpdCBmb3IgYW4gaW50ZXJuYWwgdG9vbCB3aXRo IGJpZyBodG1sIHBhZ2VzICh1cCB0bw0KICBzZXZlcmFsIE1CKSBhbmQgaXQn cyByZWFzb25hYmx5IGZhc3QgYW5kIGRvZXNuJ3Qgc2VlbSB0bw0KICBtZW1s ZWFrLiBUaGVyZSdzIGFsc28gYW4gaW1wcm92ZWQgYGh0dHBfb2ZfZGlyJyB0 byBxdWlja2x5IGFuZCBzaW1wbHkNCiAgc2VydmUgYSBkaXJlY3Rvcnkgb24g YW4gYXJiaXRyYXJ5IHBvcnQuDQoNCiAgUHJldmlvdXMgYW5ub3VuY2VtZW50 IFtoZXJlXQ0KDQoNCltoZXJlXSA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9y Zy90L2Fubi10aW55LWh0dHBkLTAtMS80NzI3Pg0KDQoNClZpc3VhbCBTdHVk aW8gQ29kZSBwbHVnaW4gZm9yIE9DYW1sDQrilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0K ICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fu bi1wcmV2aWV3LXZpc3VhbC1zdHVkaW8tY29kZS1wbHVnaW4tZm9yLW9jYW1s LzUzOTUvMT4NCg0KDQpSdWRpIEdyaW5iZXJnIGFubm91bmNlZA0K4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSSdtIHByb3VkIHRvIGFubm91bmNl IGEgcHJldmlldyByZWxlYXNlIG9mIGFuIFtWU0MgZXh0ZW5zaW9uIGZvcg0K ICBPQ2FtbF0uIFlvdSBjYW4gZmV0Y2ggYW5kIGluc3RhbGwgdGhpcyBwbHVn aW4gZGlyZWN0bHkgZnJvbSB0aGUNCiAgZXh0ZW5zaW9uIG1hcmtldHBsYWNl IGlmIHlvdSBzZWFyY2ggZm9yICJPQ2FtbCBMYWJzIi4gVGhlIGV4dGVuc2lv bg0KICBpc24ndCB5ZXQgbWF0dXJlLCBidXQgSSBiZWxpZXZlIHRoYXQgaXQg b2ZmZXJzIGEgdXNlciBleHBlcmllbmNlDQogIGNvbXBhcmFibGUgdG8gb3Ro ZXIgVlNDIGV4dGVuc2lvbnMgZm9yIE9DYW1sIGFscmVhZHkuIFRoZSBwbHVn aW4NCiAgc2hvdWxkIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBbb2Nh bWwtbHNwXQ0KDQogIFRoZSBleHRlbnNpb24gaXMgZm9yIHRoZSBPQ2FtbCAi cGxhdGZvcm0iLCB3aGljaCBtZWFucyB0aGF0IGl0cyBzY29wZQ0KICBpbmNs dWRlcyBzdXBwb3J0IGZvciB2YXJpb3VzIHRvb2xzIHVzZWQgaW4gT0NhbWwg ZGV2ZWxvcG1lbnQgc3VjaCBhcw0KICBkdW5lLCBvcGFtLg0KDQogIEJ1ZyBy ZXBvcnRzICYgY29udHJpYnV0aW9ucyBhcmUgd2VsY29tZS4gSGFwcHkgaGFj a2luZy4NCg0KDQpbVlNDIGV4dGVuc2lvbiBmb3IgT0NhbWxdDQo8aHR0cHM6 Ly9naXRodWIuY29tL29jYW1sbGFicy92c2NvZGUtb2NhbWwtcGxhdGZvcm0+ DQoNCltvY2FtbC1sc3BdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2Nh bWwtbHNwPg0KDQoNCkRpc21hczogYSB0b29sIGZvciBhdXRvbWF0aWNhbGx5 IG1ha2luZyBjcm9zcy12ZXJzaW9ucyBvZiBvcGFtIHBhY2thZ2VzDQrilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0K ICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi1wcm90b3R5cGUt ZGlzbWFzLWEtdG9vbC1mb3ItYXV0b21hdGljYWxseS1tYWtpbmctY3Jvc3Mt dmVyc2lvbnMtb2Ytb3BhbS1wYWNrYWdlcy81NDA0LzE+DQoNCg0KRGFuaWls IEJhdHVyaW4gYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIANCg0KICBvcGFtLWNyb3NzLSogYXJlIHNlcmlvdXNseSBsYWdnaW5nIGJl aGluZCB0aGUgb2ZmaWNpYWwgb3BhbSByZXBvc2l0b3J5DQogIGFuZCBmZG9w ZW4ncyBvcGFtLXdpbmRvd3MsIG5vdCBsZWFzdCBiZWNhdXNlIGltcG9ydGlu ZyBwYWNrYWdlcyBieQ0KICBoYW5kIGlzIGEgbG90IG9mIHdvcmsuICBJIHN1 cHBvc2UgYXQgbGVhc3QgYSBzZW1pLWF1dG9tYXRlZCBwcm9jZXNzDQogIGNv dWxkIGhlbHAgdGhvc2UgcmVwb3MgZ3JvdyBhbmQgc3RheSBpbiBzeW5jIHdp dGggdGhlIHVwc3RyZWFtIG11Y2gNCiAgZmFzdGVyLg0KDQogIEkndmUgbWFk ZSBhIHByb3RvdHlwZSBvZiBhIHRvb2wgZm9yICJzdGVhbGluZyIgcGFja2Fn ZXMgaW50bw0KICBjcm9zcy1yZXBvcy4gRm9yIG9idmlvdXMgcmVhc29ucyBp dCdzIGNhbGxlZCBEaXNtYXMuICBZb3UgY2FuIGZpbmQgaXQNCiAgaGVyZTog PGh0dHBzOi8vZ2l0aHViLmNvbS9kbWJhdHVyaW4vc2NyaXB0cy9ibG9iL21h c3Rlci9kaXNtYXMubWw+DQoNCiAgTGltaXRhdGlvbnM6DQoNCiAg4oCiIHRo ZSBjb2RlIGlzIGEgcmVhbCBtZXNzIGZvciBub3cNCiAg4oCiIG9ubHkgZHVu ZSBpcyBzdXBwb3J0ZWQgYnkgYXV0b21hdGljIGJ1aWxkIGNvbW1hbmQgYWRq dXN0bWVudA0KICDigKIgaXQgY2Fubm90IGhhbmRsZSBjYXNlcyB3aGVuIGJv dGggbmF0aXZlIGFuZCBjcm9zcy12ZXJzaW9uIG9mIGENCiAgICBkZXBlbmRl bmN5IGFyZSBuZWVkZWQNCg0KICBIb3dldmVyOg0KDQogIOKAoiBGb3Igc2lt cGxlIHBhY2thZ2VzIHRoYXQgdXNlIGR1bmUgZXhjbHVzaXZlbHksIGl0J3Mg Y29tcGxldGVseQ0KICAgIGF1dG9tYXRlZC4gSSd2ZSBwb3J0ZWQgYmlnc3Ry ZWFtYWYgYW5kIGFuZ3N0cm9tIHRvIHRlc3QgaXQsIGFuZA0KICAgIGNyb3Nz LXZlcnNpb25zIGJ1aWx0IGp1c3QgZmluZSBmcm9tIGl0cyBvdXRwdXQsIG5v IGVkaXRpbmcgd2FzDQogICAgbmVlZGVkLg0KICDigKIgSXQgYXV0b21hdGlj YWxseSBjb252ZXJ0cyBkZXBlbmRlbmNpZXMgZnJvbSBmb28gdG8gdG9vLSR0 b29sY2hhaW4NCiAgICBhbmQgcmVtb3ZlcyBkZXBlbmRlbmNpZXMgYW5kIGJ1 aWxkIHN0ZXBzIG9ubHkNCiAgbmVlZGVkIGZvciBgd2l0aC10ZXN0JyBhbmQg YHdpdGgtZG9jJy4NCg0KICDilIzilIDilIDilIDilIANCiAg4pSCICQgLi9k aXNtYXMubWwgd2luZG93cyBjb250YWluZXJzIH4vZGV2ZWwvb3BhbS1yZXBv c2l0b3J5L3BhY2thZ2VzL2NvbnRhaW5lcnMvY29udGFpbmVycy4yLjguMS9v cGFtDQogIOKUgiBvcGFtLXZlcnNpb246ICIyLjAiDQogIOKUgiBtYWludGFp bmVyOiAic2ltb24uY3J1YW5lcy4yMDA3QG00eC5vcmciDQogIOKUgiBzeW5v cHNpczoNCiAg4pSCICAgIkEgbW9kdWxhciwgY2xlYW4gYW5kIHBvd2VyZnVs IGV4dGVuc2lvbiBvZiB0aGUgT0NhbWwgc3RhbmRhcmQgbGlicmFyeSINCiAg 4pSCIGJ1aWxkOiBbDQogIOKUgiAgIFsiZHVuZSIgImJ1aWxkIiAiLXAiICJj b250YWluZXJzIiAiLWoiIGpvYnMgIi14IiAid2luZG93cyJdDQogIOKUgiBd DQogIOKUgiBkZXBlbmRzOiBbDQogIOKUgiAgICJvY2FtbC13aW5kb3dzIiB7 Pj0gIjQuMDMuMCJ9DQogIOKUgiAgICJkdW5lIiB7Pj0gIjEuMSJ9DQogIOKU giAgICJkdW5lLWNvbmZpZ3VyYXRvciINCiAg4pSCICAgInNlcS13aW5kb3dz Ig0KICDilIIgXQ0KICDilIIgZGVwb3B0czogWyJiYXNlLXVuaXgiICJiYXNl LXRocmVhZHMiXQ0KICDilIIgdGFnczogWyJzdGRsaWIiICJjb250YWluZXJz IiAiaXRlcmF0b3JzIiAibGlzdCIgImhlYXAiICJxdWV1ZSJdDQogIOKUgiBo b21lcGFnZTogImh0dHBzOi8vZ2l0aHViLmNvbS9jLWN1YmUvb2NhbWwtY29u dGFpbmVycy8iDQogIOKUgiBkb2M6ICJodHRwczovL2MtY3ViZS5naXRodWIu aW8vb2NhbWwtY29udGFpbmVycyINCiAg4pSCIGRldi1yZXBvOiAiZ2l0K2h0 dHBzOi8vZ2l0aHViLmNvbS9jLWN1YmUvb2NhbWwtY29udGFpbmVycy5naXQi DQogIOKUgiBidWctcmVwb3J0czogImh0dHBzOi8vZ2l0aHViLmNvbS9jLWN1 YmUvb2NhbWwtY29udGFpbmVycy9pc3N1ZXMvIg0KICDilIIgYXV0aG9yczog IlNpbW9uIENydWFuZXMiDQogIOKUgiB1cmwgew0KICDilIIgICBzcmM6ICJo dHRwczovL2dpdGh1Yi5jb20vYy1jdWJlL29jYW1sLWNvbnRhaW5lcnMvYXJj aGl2ZS92Mi44LjEudGFyLmd6Ig0KICDilIIgICBjaGVja3N1bTogWw0KICDi lIIgICAgICJtZDU9ZDg0ZTA5YzVkMGFiYzUwMWFhMTdjZDUwMmUzMWEwMzgi DQogIOKUgiAgICAgInNoYTUxMj04YjgzMmY0YWRhNjAzNWU4MGQ4MWJlMGNm YjdiZGZmYjY5NWVjNjdkNDY1ZWQ2MDk3YTE0NDAxOWUyYjhhOGY5MDkwOTVl NzgwMTljM2RhMmQ4MTgxY2MzY2Q3MzBjZDQ4Zjc1MTllODdkMzE2MjQ0MjU2 MjEwM2I3ZjM2YWFiYiINCiAg4pSCICAgXQ0KICDilIIgfQ0KICDilIINCiAg 4pSCICQgLi9kaXNtYXMubWwgd2luZG93cyBjb250YWluZXJzIH4vZGV2ZWwv b3BhbS1yZXBvc2l0b3J5L3BhY2thZ2VzL2NvbnRhaW5lcnMvY29udGFpbmVy cy4yLjguMS9vcGFtIHwgZGlmZg0KICDilIIgfi9kZXZlbC9vcGFtLXJlcG9z aXRvcnkvcGFja2FnZXMvY29udGFpbmVycy9jb250YWluZXJzLjIuOC4xL29w YW0gLQ0KICDilIIgM2MzLDQNCiAg4pSCIDwgc3lub3BzaXM6ICJBIG1vZHVs YXIsIGNsZWFuIGFuZCBwb3dlcmZ1bCBleHRlbnNpb24gb2YgdGhlIE9DYW1s IHN0YW5kYXJkIGxpYnJhcnkiDQogIOKUgiAtLS0NCiAg4pSCID4gc3lub3Bz aXM6DQogIOKUgiA+ICAgIkEgbW9kdWxhciwgY2xlYW4gYW5kIHBvd2VyZnVs IGV4dGVuc2lvbiBvZiB0aGUgT0NhbWwgc3RhbmRhcmQgbGlicmFyeSINCiAg 4pSCIDUsN2M2DQogIOKUgiA8ICAgWyJkdW5lIiAiYnVpbGQiICItcCIgbmFt ZSAiLWoiIGpvYnNdDQogIOKUgiA8ICAgWyJkdW5lIiAiYnVpbGQiICJAZG9j IiAiLXAiIG5hbWUgXSB7d2l0aC1kb2N9DQogIOKUgiA8ICAgWyJkdW5lIiAi cnVudGVzdCIgIi1wIiBuYW1lICItaiIgam9ic10ge3dpdGgtdGVzdH0NCiAg 4pSCIC0tLQ0KICDilIIgPiAgIFsiZHVuZSIgImJ1aWxkIiAiLXAiICJjb250 YWluZXJzIiAiLWoiIGpvYnMgIi14IiAid2luZG93cyJdDQogIOKUgiAxMCwx MWM5LDEwDQogIOKUgiA8ICAgIm9jYW1sIiB7ID49ICI0LjAzLjAiIH0NCiAg 4pSCIDwgICAiZHVuZSIgeyA+PSAiMS4xIiB9DQogIOKUgiAtLS0NCiAg4pSC ID4gICAib2NhbWwtd2luZG93cyIgez49ICI0LjAzLjAifQ0KICDilIIgPiAg ICJkdW5lIiB7Pj0gIjEuMSJ9DQogIOKUgiAxMywyMWMxMg0KICDilIIgPCAg ICJzZXEiDQogIOKUgiA8ICAgInF0ZXN0IiB7IHdpdGgtdGVzdCB9DQogIOKU giA8ICAgInFjaGVjayIgeyB3aXRoLXRlc3QgfQ0KICDilIIgPCAgICJvdW5p dCIgeyB3aXRoLXRlc3QgfQ0KICDilIIgPCAgICJpdGVyIiB7IHdpdGgtdGVz dCB9DQogIOKUgiA8ICAgImdlbiIgeyB3aXRoLXRlc3QgfQ0KICDilIIgPCAg ICJ1dXRmIiB7IHdpdGgtdGVzdCB9DQogIOKUgiA8ICAgIm1keCIgeyB3aXRo LXRlc3QgJiA+PSAiMS41LjAiICYgPCAiMi4wLjAiIH0NCiAg4pSCIDwgICAi b2RvYyIgeyB3aXRoLWRvYyB9DQogIOKUgiAtLS0NCiAg4pSCID4gICAic2Vx LXdpbmRvd3MiDQogIOKUgiAyMywyN2MxNCwxNQ0KICDilIIgPCBkZXBvcHRz OiBbDQogIOKUgiA8ICAgImJhc2UtdW5peCINCiAg4pSCIDwgICAiYmFzZS10 aHJlYWRzIg0KICDilIIgPCBdDQogIOKUgiA8IHRhZ3M6IFsgInN0ZGxpYiIg ImNvbnRhaW5lcnMiICJpdGVyYXRvcnMiICJsaXN0IiAiaGVhcCIgInF1ZXVl IiBdDQogIOKUgiAtLS0NCiAg4pSCID4gZGVwb3B0czogWyJiYXNlLXVuaXgi ICJiYXNlLXRocmVhZHMiXQ0KICDilIIgPiB0YWdzOiBbInN0ZGxpYiIgImNv bnRhaW5lcnMiICJpdGVyYXRvcnMiICJsaXN0IiAiaGVhcCIgInF1ZXVlIl0N CiAg4pSU4pSA4pSA4pSA4pSADQoNCiAgVGhpbmdzIHRvIGRvOg0KDQogIOKA oiBpZGVudGlmeSBhbGwgcGFja2FnZXMgdGhhdCBkb24ndCBuZWVkIGNyb3Nz LXZlcnNpb25zLiBJcyBjcHBvIG9uZSBvZg0KICAgIHRoZW0sIGZvciBleGFt cGxlPw0KICDigKIgYWRkIHN1cHBvcnQgZm9yIGNhc2VzIHdoZW4gYm90aCBu YXRpdmUgYW5kIGNyb3NzIHZlcnNpb25zIGFyZQ0KICAgIG5lZWRlZC4gSWYg bWVuaGlyIHRoZSBvbmx5IG9uZT8NCiAg4oCiIGFkZCBzdXBwb3J0IGZvciBv dGhlciBidWlsZCBzeXN0ZW1zLiBEbyBhbGwgb2YgdGhlbSB3b3JrIHdlbGwg d2l0aA0KICAgIGBPQ0FNTEZJTkRfVE9PTENIQUlOPXdpbmRvd3NgIGlmIHRo ZSBidWlsZCBzZXR1cCBpcyB3cml0dGVuDQogICAgY29ycmVjdGx5Pw0KDQog IElucHV0IGZyb20gQHRvb3RzIGFuZCBAcGlyYm8gaXMgd2VsY29tZS4NCg0K DQpSb21haW4gQmVhdXhpcyB0aGVuIHNhaWQNCuKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgA0KDQogIFRoYXQncyBhIGdyZWF0IGluaXRpYXRpdmUhIEhl cmUgYXJlIGEgY291cGxlIG9mIHRob3VnaHRzOg0KICDigKIgRm9yIGR1bmUt YmFzZWQgcGFja2FnZXMsIHRoaW5ncyBhcmUgaW5kZWVkIHByZXR0eQ0KICAg IHN0cmFpZ2h0LWZvcndhcmQuIEZpbmRpbmcgb3V0IHdoaWNoIGRlcGVuZGVu Y2llcyBuZWVkIHRvIGJlIHBvcnRlZA0KICAgIGFzIGNyb3NzLWRlcGVuZGVu Y3kgaXMgaW5kZWVkIHRoZSBwYXJ0IHRoYXQncyBoYXJkIHRvIGF1dG9tYXRp emUNCiAg4oCiIEZvciBvdGhlciBidWlsZCBzeXN0ZW1zLCBpdCdzIGxlc3Mg Y2xlYXIgdG8gbWUgaG93IHRvDQogICAgYXV0b21hdGl6ZS4gTWF5YmUgb3Ro ZXJzIGhhdmUgc29tZSB0aG91Z2h0cyBhYm91dCBpdC4NCiAg4oCiIFRoZSBD SSBzeXN0ZW0gb24gb3BhbS1jcm9zcy13aW5kb3dzIGlzIHByZXR0eSBnb29k IGF0IGJ1aWxkaW5nIGZyb20NCiAgICBzY3JhdGNoIGFuZCBmYWlsaW5nIGlm IHNvbWUgZGVwcyBhcmUgbWlzc2luZyBzbyB0cmlhbCBhbmQgZXJyb3INCiAg ICB0aGVyZSBjYW4gYmUgYSBncmVhdCB0b29sLg0KICDigKIgT25jZSBzb2x2 ZWQgZm9yIG9uZSBjcm9zcyBzaXR1YXRpb24sIHRoZSBwcm9ibGVtIG9mDQog ICAgY3Jvc3MtZGVwZW5kZW5jaWVzIHNob3VsZCBiZSBleGFjdGx5IHRoZSBz YW1lIGZvciBhbGwgb3RoZXIgY3Jvc3MNCiAgICBlbnZpcm9ubWVudCAoYW5k cm9pZCwgaU9TKQ0KDQogIEkgaGF2ZW4ndCBsb29rZWQgYXQgdGhlIHRvb2wg dmVyeSBjbG9zZWx5IHlldCBidXQgSSdkIHNheSBhIGZpcnN0DQogIGltcHJv dmVtZW50IHdvdWxkIGJlIHRvIGJlIGFibGUgdG8gdHJhY2sgY3Jvc3MtZGVw ZW5kZW5jaWVzIHJlc29sdXRpb24NCiAgYW5kIGdlbmVyYXRlIG5ldyB2ZXJz aW9uIG9mIHRoZSBwYWNrYWdlIHVzaW5nIHRoZW0gYW5kL29yIGdlbmVyYXRl DQogIG90aGVyIGNyb3NzLWNvbXBpbGVkIHBhY2thZ2VzIHVzaW5nIHRoZW0u DQoNCg0KQW50b24gS29jaGtvdiBzYWlkDQrilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBGb3Ig YXV0b21hdGVkIHB1bGwgcmVxdWVzdHMsIHlvdSBtaWdodCBiZSBpbnRlcmVz dGVkIGluDQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvZGVwZW5k YWJvdC1hbmQtb2NhbWwvNDI4Mj4NCg0KDQpEYW5paWwgQmF0dXJpbiB0aGVu IGFza2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBJ J20gbm90IHN1cmUgaWYgSSB1bmRlcnN0YW5kIHRoZSBwcmVtaXNlIG9mIGRl cGVuZGFib3QuIFdoeSB3b3VsZA0KICBhbnlvbmUgaGFyZGNvZGUgc3BlY2lm aWMgZGVwZW5kZW5jeSB2ZXJzaW9ucz8gTWF5YmUgaXQgbWFrZXMgc2Vuc2Ug aW4NCiAgY2VydGFpbiBlY29zeXN0ZW1zIHRoYXQgc3VmZmVyIGZyb20gbmV2 ZXItZW5kaW5nIGVjb2xvZ2ljYWwgZGlzYXN0ZXJz4oCmDQogIDspDQoNCiAg SW4gYW55IGNhc2UsIG1vc3Qgb3BhbSBwYWNrYWdlcyBkb24ndCBoYXZlIGEg Y29uc3RyYWludCBvbiB0aGUgdXBwZXINCiAgdmVyc2lvbnMgb2YgdGhlaXIg ZGVwZW5kZW5jaWVzLiBDYW4gZGVwZW5kYWJvdCB1c2UgY3VzdG9tIHRyYWNr aW5nDQogIHJ1bGVzIHRvIGNoZWNrIGZvciBwcmVzZW5zZSBvZiBhIG5ld2Vy IHZlcnNpb24gaW4gdGhlIHJlcG8/ICBNeQ0KICB0aG91Z2h0IHdhcyBtdWNo IHNpbXBsZXIgYWN0dWFsbHk6IHRyYWNrIHRoZSBjb21taXRzIGluDQogIG9w YW0tcmVwb3NpdG9yeSwgcnVuIHJlY2VudGx5IGNoYW5nZWQgZmlsZXMgdGhy b3VnaCBEaXNtYXMgYW5kIHNlbmQNCiAgcHVsbCByZXF1ZXN0cyB0byBvcGFt LWNyb3NzLSoNCg0KDQpZYXdhciBBbWluIHJlcGxpZWQNCuKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0K DQogIEl0J3MgY29tbW9uIHByYWN0aWNlIG5vd2FkYXlzIHRvIHVzZSBzZW1h bnRpYyB2ZXJzaW9uaW5nIGFuZCBoYXZlDQogIGxvY2tmaWxlcyBmb3IgcmVw cm9kdWNpYmxlIGJ1aWxkcy4gRGVwZW5kYWJvdCB1cGRhdGVzIHNlbWFudGlj IHZlcnNpb24NCiAgcmFuZ2VzIGFuZCBsb2NrZmlsZXMuIFNlZSBlLmcuDQoN CiAg4oCiIDxodHRwczovL2dpdGh1Yi5jb20vdGhvdWdodGJvdC92ZWx2ZXRl ZW4vcHVsbC8zMS9maWxlcz4NCiAg4oCiIDxodHRwczovL2dpdGh1Yi5jb20v bW96aWxsYS9hZHIvcHVsbC83Ny9maWxlcz4NCg0KDQpNdWx0aWNvcmUgT0Nh bWw6IE1hcmNoIDIwMjAgdXBkYXRlDQrilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNo aXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L211bHRpY29y ZS1vY2FtbC1tYXJjaC0yMDIwLXVwZGF0ZS81NDA2LzE+DQoNCg0KQW5pbCBN YWRoYXZhcGVkZHkgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIANCg0KICBXZWxjb21lIHRvIHRoZSBNYXJjaCAyMDIw IG5ld3MgdXBkYXRlIGZyb20gdGhlIE11bHRpY29yZSBPQ2FtbCB0ZWFtIQ0K ICBUaGlzIHVwZGF0ZSBoYXMgYmVlbiBhc3NlbWJsZWQgd2l0aCBAc2hha3Ro aW1hYW4gYW5kIEBrYXljZWVzcmssIGFzDQogIHdpdGggdGhlIFtGZWJydWFy eV0gYW5kIFtKYW51YXJ5XSBvbmVzLg0KDQogIE91ciB3b3JrIHRoaXMgbW9u dGggd2FzIHByaW1hcmlseSBmb2N1c2VkIG9uIHBlcmZvcm1hbmNlIGltcHJv dmVtZW50cw0KICB0byB0aGUgTXVsdGljb3JlIE9DYW1sIGNvbXBpbGVyIGFu ZCBydW50aW1lLCBhcyBwYXJ0IG9mIGENCiAgY29tcHJlaGVuc2l2ZSBldmFs dWF0aW9uIGV4ZXJjaXNlLiBXZSBjb250aW51ZSB0byBhZGQgYWRkaXRpb25h bA0KICBiZW5jaG1hcmtzIHRvIHRoZSBTYW5kbWFyayB0ZXN0IHN1aXRlLiBU aGUgZXZlbnRsb2cgdHJhY2luZyBzeXN0ZW0gYW5kDQogIHRoZSB1c2Ugb2Yg aGFzaCB0YWJsZXMgZm9yIG1hcnNoYWxpbmcgaW4gdXBzdHJlYW0gT0NhbWwg YXJlIGluDQogIHByb2dyZXNzLCBhbmQgbW9yZSBQUnMgYXJlIGJlaW5nIHF1 ZXVlZCB1cCBmb3IgT0NhbWwgNC4xMS4wLWRldiBhcw0KICB3ZWxsLg0KDQog IFRoZSBiaWdnZXN0IG9ic2VydmFibGUgY2hhbmdlIGZvciB1c2VycyB0cnlp bmcgdGhlIGJyYW5jaCBpcyB0aGF0IGENCiAgbmV3IEdDICh0aGUgInBhcmFs bGVsIG1pbm9yIGdjIikgaGFzIGJlZW4gbWVyZ2VkIGluIHByZWZlcmVuY2Ug dG8gdGhlDQogIHByZXZpb3VzIG9uZSAoInRoZSBjb25jdXJyZW50IG1pbm9y IGdjIikuICBXZSB3aWxsIGhhdmUgdGhlIGRldGFpbHMgaW4NCiAgbG9uZ2Vy IGZvcm0gYXQgYSBsYXRlciBzdGFnZSwgYnV0IHRoZSBlc3NlbnRpYWwgZ2lz dCBpcyB0aGF0ICp0aGUNCiAgcGFyYWxsZWwgbWlub3IgR0Mgbm8gbG9uZ2Vy IHJlcXVpcmVzIGEgcmVhZCBiYXJyaWVyIG9yIGNoYW5nZXMgdG8gdGhlDQog IEMgQVBJKi4gIEl0IG1heSBoYXZlIHNsaWdodGx5IHdvcnNlIHNjYWxhYmls aXR5IHByb3BlcnRpZXMgYXQgYSB2ZXJ5DQogIGhpZ2ggbnVtYmVyIG9mIGNv cmVzLCBidXQgaXMgcm91Z2hseSBlcXVpdmFsZW50IGF0IHVwIHRvIDI0IGNv cmVzIGluDQogIG91ciBldmFsdWF0aW9ucy4gIEdpdmVuIHRoZSB2YXN0IHVz YWJpbGl0eSBpbXByb3ZlbWVudCBmcm9tIG5vdCBoYXZpbmcNCiAgdG8gcG9y dCBleGlzdGluZyBDIEZGSSB1c2VzLCB3ZSBoYXZlIGRlY2lkZWQgdG8gbWFr ZSB0aGUgcGFyYWxsZWwNCiAgbWlub3IgR0MgdGhlIGRlZmF1bHQgb25lIGZv ciBvdXIgZmlyc3QgdXBzdHJlYW0gcnVudGltZSBwYXRjaGVzLiBUaGUNCiAg Y29uY3VycmVudCBtaW5vciBHQyBmb2xsb3cgYXQgYSBsYXRlciBzdGFnZSB3 aGVuIHdlIHJhbXAgdXAgdGVzdGluZyB0bw0KICA2NC1jb3JlKyBtYWNoaW5l cy4gIFRoZSBbbXVsdGljb3JlIG9wYW0gcmVtb3RlXSBoYXMgYmVlbiB1cGRh dGVkIHRvDQogIHJlZmxlY3QgdGhlc2UgY2hhbmdlcywgZm9yIHRob3NlIHdo byB3aXNoIHRvIHRyeSBpdCBvdXQgYXQgaG9tZS4NCg0KICBXZSBhcmUgbm93 IGF0IGEgc3RhZ2Ugd2hlcmUgd2UgYXJlIHBvcnRpbmcgbGFyZ2VyIGFwcGxp Y2F0aW9ucyB0bw0KICBtdWx0aWNvcmUuICBUaGFua3MgZ28gdG86DQogIOKA oiBAVW5peEp1bmtpZSB3aG8gaGVscGVkIHVzIGludGVncmF0ZSB0aGUgR3Jh bSBNYXRyaXggYmVuY2htYXJrIGluDQogICAgPGh0dHBzOi8vZ2l0aHViLmNv bS9vY2FtbC1iZW5jaC9zYW5kbWFyay9pc3N1ZXMvOTk+DQogIOKAoiBAamh3 IGhhcyBkb25lIGV4dGVuc2l2ZSB3b3JrIHRvd2FyZHMgc3VwcG9ydGluZyBT eXN0aHJlYWRzIGluDQogICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC1t dWx0aWNvcmUvb2NhbWwtbXVsdGljb3JlL3B1bGwvMjQwPi4gU3lzdGhyZWFk cw0KICAgIGlzIGN1cnJlbnRseSBkaXNhYmxlZCBpbiBtdWx0aWNvcmUsIGxl YWRpbmcgdG8gc29tZSBwb3B1bGFyIHBhY2thZ2VzDQogICAgbm90IGNvbXBp bGluZy4NCiAg4oCiIEBhbnRyb24gaGFzIGJlZW4gYWR2aXNpbmcgdXMgb24g aG93IGJlc3QgdG8gcG9ydCBgTHd0X3ByZWVtcHRpdmVgDQogICAgYW5kIHRo ZSBgTHd0X3VuaXhgIG1vZHVsZXMgdG8gbXVsdGljb3JlLCBnaXZpbmcgdXMg YSB3aWRlbHkgdXNlZCBJTw0KICAgIHN0YWNrIHRvIHRlc3QgbW9yZSBhcHBs aWNhdGlvbnMgYWdhaW5zdC4NCg0KICBJZiB5b3UgZG8gaGF2ZSBvdGhlciBz dWdnZXN0aW9ucyBmb3IgYXBwbGljYXRpb24gdGhhdCB5b3UgdGhpbmsgbWln aHQNCiAgcHJvdmlkZSB1c2VmdWwgYmVuY2htYXJrcywgdGhlbiBwbGVhc2Ug ZG8gZ2V0IGluIHRvdWNoIHdpdGggbXlzZWxmIG9yDQogIEBrYXljZWVzcmsu DQoNCiAgT250byB0aGUgZGV0YWlscyEgVGhlIHZhcmlvdXMgb25nb2luZyBh bmQgY29tcGxldGVkIHRhc2tzIGZvcg0KICBNdWx0aWNvcmUgT0NhbWwgYXJl IGxpc3RlZCBmaXJzdCwgd2hpY2ggaXMgZm9sbG93ZWQgYnkgdGhlIGNoYW5n ZXMgdG8NCiAgdGhlIFNhbmRtYXJrIGJlbmNobWFya2luZyBpbmZyYXN0cnVj dHVyZSBhbmQgb25nb2luZyBQUnMgdG8gdXBzdHJlYW0NCiAgT0NhbWwuDQoN Cg0KW0ZlYnJ1YXJ5XQ0KPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9t dWx0aWNvcmUtb2NhbWwtZmViLTIwMjAtdXBkYXRlLzUyMjc+DQoNCltKYW51 YXJ5XQ0KPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9tdWx0aWNvcmUt b2NhbWwtamFudWFyeS0yMDIwLXVwZGF0ZS81MDkwPg0KDQpbbXVsdGljb3Jl IG9wYW0gcmVtb3RlXQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC1tdWx0 aWNvcmUvbXVsdGljb3JlLW9wYW0+DQoNCk11bHRpY29yZSBPQ2FtbA0K4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoN CuKXiiBPbmdvaW5nDQoNCiAg4oCiIFtvY2FtbC1tdWx0aWNvcmUvb2NhbWwt bXVsdGljb3JlIzI0MF0gUHJvcG9zZWQgaW1wbGVtZW50YXRpb24gb2YNCiAg ICB0aHJlYWRzIGluIHRlcm1zIG9mIERvbWFpbiBhbmQgQXRvbWljDQoNCiAg ICBBIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYFRocmVhZHNgIGxpYnJh cnkgZm9yIHVzZSB3aXRoIHRoZSBuZXcNCiAgICBgRG9tYWluYCBhbmQgYEF0 b21pY2AgbW9kdWxlcyBpbiBNdWx0aWNvcmUgT0NhbWwgaGFzIGJlZW4NCiAg ICBwcm9wb3NlZC4gVGhpcyBidWlsZHMgRHVuZSAyLjQuMCB3aGljaCBpbiB0 dXJuIG1ha2VzIGl0IHVzZWZ1bCB0bw0KICAgIGJ1aWxkIG90aGVyIHBhY2th Z2VzLiBUaGlzIFBSIGlzIG9wZW4gZm9yIHJldmlldy4NCg0KICDigKIgW29j YW1sLW11bHRpY29yZS9zYWZlcG9pbnRzLWNtbS1tYWNoXSBCZXR0ZXIgc2Fm ZSBwb2ludHMgZm9yIE9DYW1sDQoNCiAgICBBIG5ld2VyIGltcGxlbWVudGF0 aW9uIHRvIGluc2VydCBzYWZlIHBvaW50cyBhdCB0aGUgQ21tIGxldmVsIGlz DQogICAgYmVpbmcgd29ya2VkIHVwb24gaW4gdGhpcyBicmFuY2guDQoNCg0K ICBbb2NhbWwtbXVsdGljb3JlL29jYW1sLW11bHRpY29yZSMyNDBdDQogIDxo dHRwczovL2dpdGh1Yi5jb20vb2NhbWwtbXVsdGljb3JlL29jYW1sLW11bHRp Y29yZS9wdWxsLzI0MD4NCg0KICBbb2NhbWwtbXVsdGljb3JlL3NhZmVwb2lu dHMtY21tLW1hY2hdDQogIDxodHRwczovL2dpdGh1Yi5jb20vYW5tb2xzYWhv bzI1L29jYW1sLW11bHRpY29yZS90cmVlL3NhZmVwb2ludHMtY21tLW1hY2g+ DQoNCg0K4peKIENvbXBsZXRlZA0KDQogIFRoZSBmb2xsb3dpbmcgUFJzIGhh dmUgYmVlbiBtZXJnZWQgaW50byBNdWx0aWNvcmUgT0NhbWw6DQoNCiAg4oCi IFtvY2FtbC1tdWx0aWNvcmUvb2NhbWwtbXVsdGljb3JlIzMwM10gQWNjb3Vu dCBjb3JyZWN0bHkgZm9yDQogICAgaW5jcmVtZW50YWwgbWFyayBidWRnZXQN Cg0KICAgIFRoZSBwYXRjaCBjb3JyZWN0bHkgbWVhc3VyZXMgdGhlIGluY3Jl bWVudGFsIG1hcmsgYnVkZ2V0IHZhbHVlLCBhbmQNCiAgICBpbXByb3ZlcyB0 aGUgbWF4aW11bSBsYXRlbmN5IGZvciB0aGUgYG1lbmhpci5vY2FtbHlgIGJl bmNobWFyay4NCg0KICDigKIgW29jYW1sLW11bHRpY29yZS9vY2FtbC1tdWx0 aWNvcmUjMzA3XSBQdXQgdGhlIHBoYXNlIGNoYW5nZSBldmVudCBpbg0KICAg IHRoZSBhY3R1YWwgcGhhc2UgY2hhbmdlIGNvZGUuIFRoZSBQUiBpbmNsdWRl cyB0aGUNCiAgICBgbWFqb3JfZ2MvcGhhc2VfY2hhbmdlYCBldmVudCBpbiB0 aGUgYXBwcm9wcmlhdGUgY29udGV4dC4NCg0KICDigKIgW29jYW1sLW11bHRp Y29yZS9vY2FtbC1tdWx0aWNvcmUjMzA5XSBEb24ndCB0YWtlIGFsbCB0aGUg ZnVsbCBwb29scw0KICAgIGluIG9uZSBnby4NCg0KICAgIFRoZSBjb2RlIGNo YW5nZSBzZWxlY3RzIG9uZSBvZiB0aGUgYGdsb2JhbF9mdWxsX3Bvb2xzYCB0 byB0cnkNCiAgICBzd2VlcGluZyBpdCBsYXRlciwgaW5zdGVhZCBvZiBhZG9w dGluZyBhbGwgb2YgdGhlIGZ1bGwgb25lcy4NCg0KICDigKIgW29jYW1sLW11 bHRpY29yZS9vY2FtbC1tdWx0aWNvcmUjMzEwXSBTdGF0aXN0aWNzIGZvciB0 aGUgY3VycmVudA0KICAgIGRvbWFpbiBhcmUgbW9yZSByZWNlbnQgdGhhbiBv dGhlciBkb21haW5zDQoNCiAgICBUaGUgc3RhdGlzdGljcyAoYG1pbm9yX3dv cmRzYCwgYHByb21vdGVkX3dvcmRzYCwgYG1ham9yX3dvcmRzYCwNCiAgICBg bWlub3JfY29sbGVjdGlvbnNgKSBmb3IgdGhlIGN1cnJlbnQgZG9tYWluIGFy ZSBtb3JlIHJlY2VudCwgYW5kIGFyZQ0KICAgIHVzZWQgaW4gdGhlIHJpZ2h0 IGNvbnRleHQuDQoNCiAg4oCiIFtvY2FtbC1tdWx0aWNvcmUvb2NhbWwtbXVs dGljb3JlIzMxNV0gV3JpdGVzIGluIGBjYW1sX2JsaXRfZmllbGRzYA0KICAg IHNob3VsZCBhbHdheXMgdXNlIGBjYW1sX21vZGlmeV9maWVsZGAgdG8gcmVj b3JkIGB5b3VuZ190b195b3VuZ2ANCiAgICBwb2ludGVycw0KDQogICAgVGhl IFBSIGVuZm9yY2VzIHRoYXQgYGNhbWxfbW9kaWZ5X2ZpZWxkKClgIGlzIGFs d2F5cyB1c2VkIHRvIHN0b3JlDQogICAgYHlvdW5nX3RvX3lvdW5nYCBwb2lu dGVycy4NCg0KICDigKIgW29jYW1sLW11bHRpY29yZS9vY2FtbC1tdWx0aWNv cmUjMzE2XSBGaXggYnVnIHdpdGggYFdlYWsuYmxpdGAuDQoNCiAgICBUaGUg ZXBoZW1lcm9ucyBhcmUgYWxsb2NhdGVkIGFzIG1hcmtlZCwgYnV0LCB0aGUg a2V5cyBvciBkYXRhIGNhbiBiZQ0KICAgIHVubWFya2VkLiBUaGUgYmxpdCBv cGVyYXRpb25zIGNvcHkgd2VhayByZWZlcmVuY2VzIGZyb20gb25lDQogICAg ZXBoZW1lcm9uIHRvIGFub3RoZXIgd2l0aG91dCBtYXJraW5nIHRoZW0uIFRo ZSBwYXRjaCBtYXJrcyB0aGUga2V5cw0KICAgIHRoYXQgYXJlIGJsaXR0ZWQg aW4gb3JkZXIgdG8ga2VlcCB0aGUgdW5yZWFjaGFibGUga2V5cyBhbGl2ZSBm b3INCiAgICBhbm90aGVyIG1ham9yIGN5Y2xlLg0KDQogIOKAoiBbb2NhbWwt bXVsdGljb3JlL29jYW1sLW11bHRpY29yZSMzMTddIFJldHVybiBlYXJseSBm b3IgMCBsZW5ndGggYmxpdA0KDQogICAgVGhlIFBSIGZvcmNlcyBhIGBDQU1M cmV0dXJuKClgIGNhbGwgaWYgdGhlIGJsaXQgbGVuZ3RoIGlzIHplcm8gaW4N CiAgICBgYnl0ZXJ1bi93ZWFrLmNgLg0KDQogIOKAoiBbb2NhbWwtbXVsdGlj b3JlL29jYW1sLW11bHRpY29yZSMzMjBdIE1vdmUgYG51bV9kb21haW5zX3J1 bm5pbmdgDQogICAgZGVjcmVtZW50DQoNCiAgICBUaGUgYGNhbWxfZG9tYWlu X2Fsb25lKClgIGludm9jYXRpb24gbmVlZHMgdG8gYmUgdXNlZCBpbiB0aGUg c2hhcmVkDQogICAgaGVhcCB0ZWFyZG93biwgYW5kIGhlbmNlIHRoZSBgbnVt X2RvbWFpbnNfcnVubmluZ2AgZGVjcmVtZW50IGlzDQogICAgbW92ZWQgYXMg dGhlIGxhc3Qgb3BlcmF0aW9uIGZvciBhdCBsZWFzdCB0aGUgYHNoYXJlZF9o ZWFwYCBsb2NrZnJlZQ0KICAgIGZhc3QgcGF0aHMuDQoNCg0KICBbb2NhbWwt bXVsdGljb3JlL29jYW1sLW11bHRpY29yZSMzMDNdDQogIDxodHRwczovL2dp dGh1Yi5jb20vb2NhbWwtbXVsdGljb3JlL29jYW1sLW11bHRpY29yZS9wdWxs LzMwMz4NCg0KICBbb2NhbWwtbXVsdGljb3JlL29jYW1sLW11bHRpY29yZSMz MDddDQogIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwtbXVsdGljb3JlL29j YW1sLW11bHRpY29yZS9wdWxsLzMwNz4NCg0KICBbb2NhbWwtbXVsdGljb3Jl L29jYW1sLW11bHRpY29yZSMzMDldDQogIDxodHRwczovL2dpdGh1Yi5jb20v b2NhbWwtbXVsdGljb3JlL29jYW1sLW11bHRpY29yZS9wdWxsLzMwOT4NCg0K ICBbb2NhbWwtbXVsdGljb3JlL29jYW1sLW11bHRpY29yZSMzMTBdDQogIDxo dHRwczovL2dpdGh1Yi5jb20vb2NhbWwtbXVsdGljb3JlL29jYW1sLW11bHRp Y29yZS9wdWxsLzMxMD4NCg0KICBbb2NhbWwtbXVsdGljb3JlL29jYW1sLW11 bHRpY29yZSMzMTVdDQogIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwtbXVs dGljb3JlL29jYW1sLW11bHRpY29yZS9wdWxsLzMxNT4NCg0KICBbb2NhbWwt bXVsdGljb3JlL29jYW1sLW11bHRpY29yZSMzMTZdDQogIDxodHRwczovL2dp dGh1Yi5jb20vb2NhbWwtbXVsdGljb3JlL29jYW1sLW11bHRpY29yZS9wdWxs LzMxNj4NCg0KICBbb2NhbWwtbXVsdGljb3JlL29jYW1sLW11bHRpY29yZSMz MTddDQogIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwtbXVsdGljb3JlL29j YW1sLW11bHRpY29yZS9wdWxsLzMxNz4NCg0KICBbb2NhbWwtbXVsdGljb3Jl L29jYW1sLW11bHRpY29yZSMzMjBdDQogIDxodHRwczovL2dpdGh1Yi5jb20v b2NhbWwtbXVsdGljb3JlL29jYW1sLW11bHRpY29yZS9wdWxsLzMyMD4NCg0K DQpCZW5jaG1hcmtpbmcNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjA0KDQogIFRoZSBbU2FuZG1hcmtdIHBlcmZvcm1hbmNlIGJlbmNo bWFya2luZyB0ZXN0IHN1aXRlIGhhcyBoYWQgbmV3ZXINCiAgYmVuY2htYXJr cyBhZGRlZCwgYW5kIHdvcmsgaXMgdW5kZXJ3YXkgdG8gZW5oYW5jZSBpdHMg ZnVuY3Rpb25hbGl0eS4NCg0KICDigKIgW29jYW1sLWJlbmNoL3NhbmRtYXJr Izg4XSBBZGQgUGluZ1BvbmcgTXVsdGljb3JlIGJlbmNobWFyaw0KDQogICAg VGhlIFBpbmdQb25nIGJlbmNobWFyayB0aGF0IHVzZXMgcHJvZHVjZXIgYW5k IGNvbnN1bWVyIHF1ZXVlcyBoYXMNCiAgICBub3cgYmVlbiBpbmNsdWRlZCBp bnRvIFNhbmRtYXJrLg0KDQogIOKAoiBbb2NhbWwtYmVuY2gvc2FuZG1hcmsj OThdIEFkZCB0aGUgcmVhZC93cml0ZSBJcm1pbiBiZW5jaG1hcmsNCg0KICAg IEEgYmFzaWMgcmVhZC93cml0ZSBmaWxlIHBlcmZvcm1hbmNlIGJlbmNobWFy ayBmb3IgSXJtaW4gaGFzIGJlZW4NCiAgICBhZGRlZCB0byBTYW5kbWFyay4g WW91IGNhbiB2YXJ5IHRoZSBmb2xsb3dpbmcgaW5wdXQgcGFyYW1ldGVyczoN CiAgICBudW1iZXIgb2YgYnJhbmNoZXMsIG51bWJlciBvZiBrZXlzLCBwZXJj ZW50YWdlIG9mIHJlYWRzIGFuZCB3cml0ZXMsDQogICAgbnVtYmVyIG9mIGl0 ZXJhdGlvbnMsIGFuZCB0aGUgbnVtYmVyIG9mIHdyaXRlIG9wZXJhdGlvbnMu DQoNCiAg4oCiIFtvY2FtbC1iZW5jaC9zYW5kbWFyayMxMDBdIEFkZCBHcmFt IE1hdHJpeCBiZW5jaG1hcmsNCg0KICAgICBBIHJlcXVlc3QgW29jYW1sLWJl bmNoL3NhbmRtYXJrIzk5XSB0byBpbmNsdWRlIHRoZSBHcmFtIE1hdHJpeA0K ICAgIGluaXRpYWxpemF0aW9uIG51bWVyaWNhbCBiZW5jaG1hcmsgd2FzIGNy ZWF0ZWQuIFRoaXMgaXMgdXNlZnVsIGZvcg0KICAgIG1hY2hpbmUgbGVhcm5p bmcgYXBwbGljYXRpb25zIGFuZCBpcyBub3cgYXZhaWxhYmxlIGluIHRoZSBT YW5kbWFyaw0KICAgIHBlcmZvcm1hbmNlIGJlbmNobWFyayBzdWl0ZS4gVGhl IHNwZWVkdXANCiAgICAoc2VxdWVudGlhbF90aW1lL211bHRpX3RocmVhZGVk X3RpbWUpIHZlcnN1cyBudW1iZXIgb2YgY29yZXMgZm9yDQogICAgTXVsdGlj b3JlIChDb25jdXJyZW50IE1pbm9yIENvbGxlY3RvciksIFBhcm1hcCBhbmQg UGFyYW55IGlzIHF1aXRlDQogICAgc2lnbmlmaWNhbnQgYW5kIGlsbHVzdHJh dGVkIGluIHRoZSBncmFwaDoNCiAgICA8aHR0cHM6Ly9hd3MxLmRpc2NvdXJz ZS1jZG4uY29tL3N0YW5kYXJkMTEvdXBsb2Fkcy9vY2FtbC9vcmlnaW5hbC8y WC8yLzIwZGM4NjlhOGRkYTFjODE1NzE0YTk3ZTZhODRmNmY4MWM5MTRjZjQu cG5nPg0KDQogIOKAoiBbb2NhbWwtYmVuY2gvc2FuZG1hcmsjMTAzXSBBZGQg ZGVwZW5kIHRhcmdldCBpbiBNYWtlZmlsZQ0KDQogICAgU2FuZG1hcmsgbm93 IGluY2x1ZGVzIGEgYGRlcGVuZGAgdGFyZ2V0IGRlZmluZWQgaW4gdGhlIE1h a2VmaWxlIHRvDQogICAgY2hlY2sgdGhhdCBib3RoIGBsaWJnbXAtZGV2YCBh bmQgYGxpYmR3LWRldmAgcGFja2FnZXMgYXJlIGluc3RhbGxlZA0KICAgIGFu ZCBhdmFpbGFibGUgb24gVWJ1bnR1Lg0KDQogIOKAoiBbb2NhbWwtYmVuY2gv c2FuZG1hcmsjOTBdIE1vcmUgcGFyYWxsZWwgYmVuY2htYXJrcw0KDQogICAg QW4gaXNzdWUgaGFzIGJlZW4gY3JlYXRlZCB0byBhZGQgbW9yZSBwYXJhbGxl bCBiZW5jaG1hcmtzLiBXZSB3aWxsDQogICAgdXNlIHRoaXMgdG8ga2VlcCB0 cmFjayBvZiB0aGUgcmVxdWVzdHMuIFBsZWFzZSBmZWVsIGZyZWUgdG8gYWRk IHlvdXINCiAgICB3aXNoIGxpc3Qgb2YgYmVuY2htYXJrcyENCg0KDQpbU2Fu ZG1hcmtdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwtYmVuY2gvc2FuZG1h cms+DQoNCltvY2FtbC1iZW5jaC9zYW5kbWFyayM4OF0NCjxodHRwczovL2dp dGh1Yi5jb20vb2NhbWwtYmVuY2gvc2FuZG1hcmsvcHVsbC84OD4NCg0KW29j YW1sLWJlbmNoL3NhbmRtYXJrIzk4XQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9v Y2FtbC1iZW5jaC9zYW5kbWFyay9wdWxsLzk4Pg0KDQpbb2NhbWwtYmVuY2gv c2FuZG1hcmsjMTAwXQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC1iZW5j aC9zYW5kbWFyay9pc3N1ZXMvMTAwPg0KDQpbb2NhbWwtYmVuY2gvc2FuZG1h cmsjOTldDQo8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sLWJlbmNoL3NhbmRt YXJrL2lzc3Vlcy85OT4NCg0KW29jYW1sLWJlbmNoL3NhbmRtYXJrIzEwM10N CjxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwtYmVuY2gvc2FuZG1hcmsvcHVs bC8xMDM+DQoNCltvY2FtbC1iZW5jaC9zYW5kbWFyayM5MF0NCjxodHRwczov L2dpdGh1Yi5jb20vb2NhbWwtYmVuY2gvc2FuZG1hcmsvaXNzdWVzLzkwPg0K DQoNCk9DYW1sDQrilYzilYzilYzilYzilYwNCg0K4peKIE9uZ29pbmcNCg0K ICDigKIgW29jYW1sL29jYW1sIzkwODJdIEV2ZW50bG9nIHRyYWNpbmcgc3lz dGVtDQoNCiAgICBUaGUgY29uZmlndXJlIHNjcmlwdCBoYXMgbm93IGJlZW4g YmUgdXBkYXRlZCBzbyB0aGF0IGl0IGNhbiBidWlsZCBvbg0KICAgIFdpbmRv d3MuIEFwYXJ0IGZyb20gdGhpcyBtYWpvciBjaGFuZ2UsIGEgbnVtYmVyIG9m IG1pbm9yIGNvbW1pdHMNCiAgICBoYXZlIGJlZW4gbWFkZSBmb3IgdGhlIGJ1 aWxkIGFuZCBzYW5pdHkgY2hlY2tzLiBUaGlzIFBSIGlzIGN1cnJlbnRseQ0K ICAgIHVuZGVyIHJldmlldy4NCg0KICDigKIgW29jYW1sL29jYW1sIzkzNTNd IFJlaW1wbGVtZW50IG91dHB1dF92YWx1ZSB1c2luZyBhIGhhc2ggdGFibGUg dG8NCiAgICBkZXRlY3Qgc2hhcmluZy4NCg0KICAgIFRoZSBbb2NhbWwvb2Nh bWwjOTI5M10gIlVzZSBhZGRybWFwIGhhc2ggdGFibGUgZm9yIG1hcnNoYWxp bmciIFBSDQogICAgaGFzIGJlZW4gcmUtaW1wbGVtZW50ZWQgdXNpbmcgYSBo YXNoIHRhYmxlIGFuZCBiaXQgdmVjdG9yLCB0aGFua3MgdG8NCiAgICBAeGF2 aWVybGVyb3kuIFRoaXMgaXMgYSBwcmUtcmVxdWlzaXRlIGZvciBNdWx0aWNv cmUgT0NhbWwgdGhhdCB1c2VzDQogICAgYSBjb25jdXJyZW50IGdhcmJhZ2Ug Y29sbGVjdG9yLg0KDQogIEFzIGFsd2F5cywgd2UgdGhhbmsgdGhlIE9DYW1s IGRldmVsb3BlcnMgYW5kIHVzZXJzIGluIHRoZSBjb21tdW5pdHkNCiAgZm9y IHRoZWlyIGNvZGUgcmV2aWV3cywgc3VwcG9ydCwgYW5kIGNvbnRyaWJ1dGlv biB0byB0aGUgcHJvamVjdC4gRnJvbQ0KICBPQ2FtbCBMYWJzLCBzdGF5IHNh ZmUgYW5kIGhlYWx0aHkgb3V0IHRoZXJlIQ0KDQoNCiAgW29jYW1sL29jYW1s IzkwODJdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvcHVsbC85 MDgyPg0KDQogIFtvY2FtbC9vY2FtbCM5MzUzXSA8aHR0cHM6Ly9naXRodWIu Y29tL29jYW1sL29jYW1sL3B1bGwvOTM1Mz4NCg0KICBbb2NhbWwvb2NhbWwj OTI5M10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9wdWxsLzky OTM+DQoNCg0KT2xkIENXTg0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAg SWYgeW91IGhhcHBlbiB0byBtaXNzIGEgQ1dOLCB5b3UgY2FuIFtzZW5kIG1l IGEgbWVzc2FnZV0gYW5kIEknbGwgbWFpbA0KICBpdCB0byB5b3UsIG9yIGdv IHRha2UgYSBsb29rIGF0IFt0aGUgYXJjaGl2ZV0gb3IgdGhlIFtSU1MgZmVl ZCBvZiB0aGUNCiAgYXJjaGl2ZXNdLg0KDQogIElmIHlvdSBhbHNvIHdpc2gg dG8gcmVjZWl2ZSBpdCBldmVyeSB3ZWVrIGJ5IG1haWwsIHlvdSBtYXkgc3Vi c2NyaWJlDQogIFtvbmxpbmVdLg0KDQogIFtBbGFuIFNjaG1pdHRdDQoNCg0K W3NlbmQgbWUgYSBtZXNzYWdlXSA8bWFpbHRvOmFsYW4uc2NobWl0dEBwb2x5 dGVjaG5pcXVlLm9yZz4NCg0KW3RoZSBhcmNoaXZlXSA8aHR0cDovL2FsYW4u cGV0aXRlcG9tbWUubmV0L2N3bi8+DQoNCltSU1MgZmVlZCBvZiB0aGUgYXJj aGl2ZXNdIDxodHRwOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvY3duL2N3bi5y c3M+DQoNCltvbmxpbmVdIDxodHRwOi8vbGlzdHMuaWR5bGwub3JnL2xpc3Rp bmZvL2NhbWwtbmV3cy13ZWVrbHkvPg0KDQpbQWxhbiBTY2htaXR0XSA8aHR0 cDovL2FsYW4ucGV0aXRlcG9tbWUubmV0Lz4NCg0K --=-=-= Content-Type: text/html; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable OCaml Weekly News

OCaml Weekly News

Previous Week Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of March 24 to 31, 2020.

An In-Depth Look at OCaml=E2=80=99s New =E2=80=9CBest-Fit=E2= =80=9D Garbage Collector Strategy

OCamlPro announced

The Garbage Collector is probably OCaml=E2=80=99s greatest unsung hero. Its= pragmatic approach allows us to allocate without much fear of efficiency loss. We looked into its new "Best-fit" strategy an= d here is what we learned! http://www.ocamlpro.com/2020/03/23/ocaml-new-best-fit-garbage-col= lector/

First release of Pp, a pretty-printing library

J=C3=A9r=C3=A9mie Dimino announced

I'm happy to announce the first release of the pp library! This library provides a lean alternative to the = Format module of the standard library. It uses the same comcepts of box= es and break hints, however it defines its own algebra which some might find easier to work with and reaso= n about. I personally do :) The final rendering is still done via a formatter which makes it easy to integrate Pp in existing programs using Format.

We introduced this module in Dune to hel= p improve the formatting of messages printed in the terminal and it has been a success. The new API is smaller, simpler and makes it easy for d= evelopers to do the right thing. Once the Pp module of Dune was mature enough, we decided to extract it = into a separate library so that it could benefit others.

The library itself is composed of a single Pp module and has n= o dependencies. Its documentation is self-contained and no previous knowledge is required to start using it, however the variou= s guides for the Format module such as this o= ne should be applicable to Pp as well.

If you have used Format before and like me found its API compl= icated and difficult to use, I hope that you will find Pp nicer to work with!

Josh Berdine then said

Another great resource for understanding the core mental model of Format is= Format Unraveled, although if I understand pp correctly the discussion about Format not being document-based won't apply = to pp.

soupault: a static website generator based on HTML rewriting

Daniil Baturin announced

1.10.= 0 release is available.

Bug fixes:

  • Files without extensions are handled correctly.

New features:

  • Plugin discovery: if you save a plugin to plugins/my-plugin.lua, it's automatically loaded as a widget named

my-plugin. List of plugin directories is configurable.

  • New plugin API functions: HTMLget_tag_name, HTML.sel= ect_any_of, HTML.select_all_of.
  • The HTML module is now "monadic": giving a nil to a functi= on that expects an element gives you a nil back, rather than cause a runtim= e error.

routes: path based routing for web applications

Anurag Soni announced

0.7.2 release is now= available on opam. There have been quite a few changes since the previous versions.

  • Routes doesn't deal with HTTP methods anymore
  • The internal implementation is now based around a trie like data struct= ure
  • Routes have pretty printers
  • sprintf style route printing is supported again
  • Minimum supported OCaml version is now 4.05 (it used to be 4.06)
  • There is a release available for bucklescript as well and it is availab= le to install via npm.

Compiler Engineer at Mixtional Code in Darmstadt or anywhere e= lse in Germany

Gerd Stolpmann announced

Type of position:

  • regular hire (no freelancers)
  • full time
  • work from home anywhere in Germany, or in the office in Darmstadt
  • work for a small and highly skilled international team, located in the = US and Europe
  • the team language is English

We are developing a compiler for a no-code platform that translates our DSL= to bytecode and/or WebAssembly. The language is largely of functional type but is also able to manage state wit= h a spreadsheet model, allowing reactive programming without having to resort to libraries. The language is statical= ly typed using a Hindley-Milner type checker. The compiler is primarily written in OCaml. Other languages of our= platform are Go, Elm, and Javascript.

We are looking for a compiler engineer with strong skills in all relevant a= reas:

  • fluent in OCaml or a similar language such as Haskell
  • Understanding of the structure of the DSL, including syntax and semanti= cs
  • Translation of FP languages to executable code
  • Code optimization
  • Graph algorithms
  • Type checking

We are open to both juniors and seniors, and payment will be accordingly. W= e are not so much interested in formal certifications but rather in real practice, either from previous jobs, rese= arch projects, or contributions to open source projects.

The no-code platform is being developed by engineers in Europe and the US a= t various places, and we usually do not meet physically but in video conferences. Working from home is very usual. = We also get you a desk in your home town if you prefer this. The compiler development is lead by Gerd Stolpmann from= Darmstadt.

Due to the strong connections to the US, video conferences will often have = to take place in evening hours, until around 7pm or 8pm.

Applications: please follow the "Apply" link at the official web page descr= ibing the position: https://rmx.mixtional= .de/static/54657cda/

Gerd Stolpmann
CEO of Mixtional Code GmbH (and OCaml hacker of the first hour)
Contact and company details: https://www.mixtional.de/contact.html

S=C3=A9bastien Besnier asked

I'm living in France, can I apply to the position (we are neighbors!)?

Gerd Stolpmann replied

Well, I can (at the moment) only make contracts using German law and for th= e social security system here. So, if you need a doctor you'd have to travel… If my company was a bit bigger t= here would be the option of opening a second site in France (even a very minimal one), but the setup costs are so far to= o high (lawyers and accountants), and it is too distracting for me to keep up with the fine points of the system in = France. Unfortunately, the EU is not that far that it is super simple for an employer to hire anywhere in Europe. - T= hanks for asking.

tiny-httpd 0.5

Simon Cruanes announced

I just released tiny-httpd 0.5 and the new tiny-httpd-camlzip, which makes = it possible to use deflate transparently for queries and responses. The server has evolved quietly and is getting so= mewhat more robust: I'm using it for an internal tool with big html pages (up to several MB) and it's reasonably fa= st and doesn't seem to memleak. There's also an improved http_of_dir to quickly and simply serve a dir= ectory on an arbitrary port.

Previous announcement here

Visual Studio Code plugin for OCaml

Rudi Grinberg announced

I'm proud to announce a preview release of an VSC extension for OCaml. You can fetch and install this plugin directly from the extension marketplace if you search for "OCaml Labs". The extension isn't y= et mature, but I believe that it offers a user experience comparable to other VSC extensions for OCaml already. The p= lugin should be used in conjunction with ocaml-lsp

The extension is for the OCaml "platform", which means that its scope inclu= des support for various tools used in OCaml development such as dune, opam.

Bug reports & contributions are welcome. Happy hacking.

Dismas: a tool for automatically making cross-versions of opam= packages

Daniil Baturin announced

opam-cross-* are seriously lagging behind the official opam repository and = fdopen's opam-windows, not least because importing packages by hand is a lot of work. I suppose at least a semi-automated process could help those repos grow and= stay in sync with the upstream much faster.

I've made a prototype of a tool for "stealing" packages into cross-repos. F= or obvious reasons it's called Dismas. You can find it here: https://github.com/dmbaturin/scripts/blob/master/dismas.m= l

Limitations:

  • the code is a real mess for now
  • only dune is supported by automatic build command adjustment
  • it cannot handle cases when both native and cross-version of a dependen= cy are needed

However:

  • For simple packages that use dune exclusively, it's completely automate= d. I've ported bigstreamaf and angstrom to test it, and cross-versions buil= t just fine from its output, no editing was needed.
  • It automatically converts dependencies from foo to too-$toolchain and r= emoves dependencies and build steps only

needed for with-test and with-doc.

$ ./dismas.ml windows containers ~/devel/opam-repository/packages/container=
s/containers.2.8.1/opam
opam-version: "2.0"
maintainer: "simon.cruanes.2007@m4x.org"
synopsis:
  "A modular, clean and powerful extension of the OCaml standard library"
build: [
  ["dune" "build" "-p" "containers" "-j" jobs "-x" "windows"]
]
depends: [
  "ocaml-windows" {>=3D "4.03.0"}
  "dune" {>=3D "1.1"}
  "dune-configurator"
  "seq-windows"
]
depopts: ["base-unix" "base-threads"]
tags: ["stdlib" "containers" "iterators" "list" "heap" "queue"]
homepage: "https://github.com/c-cube/ocaml-containers/"
doc: "https://c-cube.github.io/ocaml-containers"
dev-repo: "git+https://github.com/c-cube/ocaml-containers.git"
bug-reports: "https://github.com/c-cube/ocaml-containers/issues/"
authors: "Simon Cruanes"
url {
  src: "https://github.com/c-cube/ocaml-containers/archive/v2.8.1.tar.gz"
  checksum: [
    "md5=3Dd84e09c5d0abc501aa17cd502e31a038"
    "sha512=3D8b832f4ada6035e80d81be0cfb7bdffb695ec67d465ed6097a144019e2b8a=
8f909095e78019c3da2d8181cc3cd730cd48f7519e87d3162442562103b7f36aabb"
  ]
}

$ ./dismas.ml windows containers ~/devel/opam-repository/packages/container=
s/containers.2.8.1/opam | diff
~/devel/opam-repository/packages/containers/containers.2.8.1/opam -
3c3,4
< synopsis: "A modular, clean and powerful extension of the OCaml standa=
rd library"
---
> synopsis:
>   "A modular, clean and powerful extension of the OCaml standard libra=
ry"
5,7c6
<   ["dune" "build" "-p" name "-j" jobs]
<   ["dune" "build" "@doc" "-p" name ] {with-doc}
<   ["dune" "runtest" "-p" name "-j" jobs] {with-test}
---
>   ["dune" "build" "-p" "containers" "-j" jobs "-x" "windows"]
10,11c9,10
<   "ocaml" { >=3D "4.03.0" }
<   "dune" { >=3D "1.1" }
---
>   "ocaml-windows" {>=3D "4.03.0"}
>   "dune" {>=3D "1.1"}
13,21c12
<   "seq"
<   "qtest" { with-test }
<   "qcheck" { with-test }
<   "ounit" { with-test }
<   "iter" { with-test }
<   "gen" { with-test }
<   "uutf" { with-test }
<   "mdx" { with-test & >=3D "1.5.0" & < "2.0.0" }
<   "odoc" { with-doc }
---
>   "seq-windows"
23,27c14,15
< depopts: [
<   "base-unix"
<   "base-threads"
< ]
< tags: [ "stdlib" "containers" "iterators" "list" "heap" "queue" ]
---
> depopts: ["base-unix" "base-threads"]
> tags: ["stdlib" "containers" "iterators" "list" "heap" "queue"]

Things to do:

  • identify all packages that don't need cross-versions. Is cppo one of th= em, for example?
  • add support for cases when both native and cross versions are needed. I= f menhir the only one?
  • add support for other build systems. Do all of them work well with `OCA= MLFIND_TOOLCHAIN=3Dwindows` if the build setup is written correctly?

Input from @toots and @pirbo is welcome.

Romain Beauxis then said

That's a great initiative! Here are a couple of thoughts:

  • For dune-based packages, things are indeed pretty straight-forward. Fin= ding out which dependencies need to be ported as cross-dependency is indeed= the part that's hard to automatize
  • For other build systems, it's less clear to me how to automatize. Maybe= others have some thoughts about it.
  • The CI system on opam-cross-windows is pretty good at building from scr= atch and failing if some deps are missing so trial and error there can be a= great tool.
  • Once solved for one cross situation, the problem of cross-dependencies = should be exactly the same for all other cross environment (android, iOS)

I haven't looked at the tool very closely yet but I'd say a first improveme= nt would be to be able to track cross-dependencies resolution and generate new version of the package using= them and/or generate other cross-compiled packages using them.

Anton Kochkov said

For automated pull requests, you might be interested in https://discuss.ocaml.org/t/= dependabot-and-ocaml/4282

Daniil Baturin then asked

I'm not sure if I understand the premise of dependabot. Why would anyone ha= rdcode specific dependency versions? Maybe it makes sense in certain ecosystems that suffer from never-ending ecologic= al disasters… ;)

In any case, most opam packages don't have a constraint on the upper versio= ns of their dependencies. Can dependabot use custom tracking rules to check for presense of a newer version in the r= epo? My thought was much simpler actually: track the commits in opam-repository,= run recently changed files through Dismas and send pull requests to opam-cross-*

Yawar Amin replied

It's common practice nowadays to use semantic versioning and have lockfiles= for reproducible builds. Dependabot updates semantic version ranges and lockfiles. See e.g.

Multicore OCaml: March 2020 update

Anil Madhavapeddy announced

Welcome to the March 2020 news update from the Multicore OCaml team! This = update has been assembled with @shakthimaan and @kayceesrk, as with the February and January ones.

Our work this month was primarily focused on performance improvements to th= e Multicore OCaml compiler and runtime, as part of a comprehensive evaluation exercise. We continue to add additional = benchmarks to the Sandmark test suite. The eventlog tracing system and the use of hash tables for marshaling in upstre= am OCaml are in progress, and more PRs are being queued up for OCaml 4.11.0-dev as well.

The biggest observable change for users trying the branch is that a new GC = (the "parallel minor gc") has been merged in preference to the previous one ("the concurrent minor gc"). We will hav= e the details in longer form at a later stage, but the essential gist is that the parallel minor GC no longer re= quires a read barrier or changes to the C API. It may have slightly worse scalability properties at a very high = number of cores, but is roughly equivalent at up to 24 cores in our evaluations. Given the vast usability improvement= from not having to port existing C FFI uses, we have decided to make the parallel minor GC the default one for our= first upstream runtime patches. The concurrent minor GC follow at a later stage when we ramp up testing to 64-c= ore+ machines. The multicore opam remote has been updated to reflect these changes, for those who wish to try it out at home.

We are now at a stage where we are porting larger applications to multicore= . Thanks go to:

If you do have other suggestions for application that you think might provi= de useful benchmarks, then please do get in touch with myself or @kayceesrk.

Onto the details! The various ongoing and completed tasks for Multicore OCa= ml are listed first, which is followed by the changes to the Sandmark benchmarking infrastructure and ongoing PRs to = upstream OCaml.

Multicore OCaml

  • Ongoing
    • oca= ml-multicore/ocaml-multicore#240 Proposed implementation of threads in = terms of Domain and Atomic

      A new implementation of the `Threads` library for use with the new `Domain`= and `Atomic` modules in Multicore OCaml has been proposed. This builds Dun= e 2.4.0 which in turn makes it useful to build other packages. This PR is o= pen for review.

    • ocaml-multicore/safepoints-cmm-mach Better safe points for OC= aml

      A newer implementation to insert safe points at the Cmm level is being work= ed upon in this branch.

  • Completed

    The following PRs have been merged into Multicore OCaml:

    • oca= ml-multicore/ocaml-multicore#303 Account correctly for incremental mark= budget

      The patch correctly measures the incremental mark budget value, and improve= s the maximum latency for the `menhir.ocamly` benchmark.

    • ocaml-multicore/ocaml-multicore#307 Put the phase change event in the = actual phase change code. The PR includes the `major_gc/phase_change` event= in the appropriate context.
    • oca= ml-multicore/ocaml-multicore#309 Don't take all the full pools in one g= o.

      The code change selects one of the `global_full_pools` to try sweeping it l= ater, instead of adopting all of the full ones.

    • oca= ml-multicore/ocaml-multicore#310 Statistics for the current domain are = more recent than other domains

      The statistics (`minor_words`, `promoted_words`, `major_words`, `minor_coll= ections`) for the current domain are more recent, and are used in the right= context.

    • oca= ml-multicore/ocaml-multicore#315 Writes in `caml_blit_fields` should al= ways use `caml_modify_field` to record `young_to_young` pointers

      The PR enforces that `caml_modify_field()` is always used to store `young_t= o_young` pointers.

    • oca= ml-multicore/ocaml-multicore#316 Fix bug with `Weak.blit`.

      The ephemerons are allocated as marked, but, the keys or data can be unmark= ed. The blit operations copy weak references from one ephemeron to another = without marking them. The patch marks the keys that are blitted in order to= keep the unreachable keys alive for another major cycle.

    • oca= ml-multicore/ocaml-multicore#317 Return early for 0 length blit

      The PR forces a `CAMLreturn()` call if the blit length is zero in `byterun/= weak.c`.

    • oca= ml-multicore/ocaml-multicore#320 Move `num_domains_running` decrement

      The `caml_domain_alone()` invocation needs to be used in the shared heap te= ardown, and hence the `num_domains_running` decrement is moved as the last = operation for at least the `shared_heap` lockfree fast paths.

Benchmarking

The Sandmark perfor= mance benchmarking test suite has had newer benchmarks added, and work is underway to enhance its functionality.

  • ocaml-bench/san= dmark#88 Add PingPong Multicore benchmark

    The PingPong benchmark that uses producer and consumer queues has now been = included into Sandmark.

  • ocaml-bench/san= dmark#98 Add the read/write Irmin benchmark

    A basic read/write file performance benchmark for Irmin has been added to S= andmark. You can vary the following input parameters: number of branches, n= umber of keys, percentage of reads and writes, number of iterations, and th= e number of write operations.

  • ocaml-bench/= sandmark#100 Add Gram Matrix benchmark

    A request oc= aml-bench/sandmark#99 to include the Gram Matrix initialization numeric= al benchmark was created. This is useful for machine learning applications = and is now available in the Sandmark performance benchmark suite. The speed= up (sequential_time/multi_threaded_time) versus number of cores for Multico= re (Concurrent Minor Collector), Parmap and Parany is quite significant and= illustrated in the graph: 3D"20dc869a8dda1c8=

  • ocaml-bench/sa= ndmark#103 Add depend target in Makefile

    Sandmark now includes a `depend` target defined in the Makefile to check th= at both `libgmp-dev` and `libdw-dev` packages are installed and available o= n Ubuntu.

  • ocaml-bench/s= andmark#90 More parallel benchmarks

    An issue has been created to add more parallel benchmarks. We will use this= to keep track of the requests. Please feel free to add your wish list of b= enchmarks!

OCaml

Old CWN

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

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

--=-=-=--