From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS4713 221.184.0.0/13 X-Spam-Status: No, score=-3.5 required=3.0 tests=AWL,BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY,URIBL_GREY shortcircuit=no autolearn=no autolearn_force=no version=3.4.2 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id E90081F4D7 for ; Thu, 12 May 2022 12:41:20 +0000 (UTC) Authentication-Results: dcvr.yhbt.net; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sendgrid.me header.i=@sendgrid.me header.b="j3c5r/Wv"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id A8B06120AE0; Thu, 12 May 2022 21:41:16 +0900 (JST) Received: from xtrwkhkc.outbound-mail.sendgrid.net (xtrwkhkc.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id 884B0120AF7 for ; Thu, 12 May 2022 21:41:14 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sendgrid.me; h=from:references:subject:mime-version:content-type: content-transfer-encoding:list-id:to; s=smtpapi; bh=Co5hX5E/aVnTbhwKhfvXpvtxjae2GMzfzwL0OrS1mN8=; b=j3c5r/WvDHQjzyf/SCfXuCh9jb1RRSx0DLrhtGJlNIsrNyydHqdsP22RQzMqFlr3PnfA 5oNMBh4HPiSdhVbQFR2+bFnBd7GQM/A+Yj/ZkoN24/g2j79v3OxlI2uIOtX4ezhl0+4aRc u/jVTfqJJKKJ0jmUJuoKuQBZQ03Puwl90= Received: by filterdrecv-77df7bffc9-csd7t with SMTP id filterdrecv-77df7bffc9-csd7t-1-627D0062-6B 2022-05-12 12:41:06.80399639 +0000 UTC m=+3077713.870166209 Received: from herokuapp.com (unknown) by geopod-ismtpd-2-3 (SG) with ESMTP id c-wzdi1ST8ek8mAn75lAXg for ; Thu, 12 May 2022 12:41:06.721 +0000 (UTC) Date: Thu, 12 May 2022 12:41:06 +0000 (UTC) From: "byroot (Jean Boussier)" Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 18776 X-Redmine-Issue-Author: jemmai X-Redmine-Sender: byroot X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-Redmine-MailingListIntegration-Message-Ids: 84894 X-SG-EID: =?us-ascii?Q?Dq8GNIcVqP8cs5uR+EIAabfg3LE9XdC6dZ5KYNrMpf6VzBWG6HqArcu5raQjXL?= =?us-ascii?Q?IGTFdxKHUt7++67+KD54pNYXheirMcsUIf3sdgF?= =?us-ascii?Q?Riq06jWh1QC2IKPEosPPpgmYdVbsTvDhscxoxSD?= =?us-ascii?Q?ZAupc=2FH0jbGcrOSy=2FOITOWi9+Q8sPzsF4AQyrF2?= =?us-ascii?Q?FlQBElWadixLRgwkzn2yFA7yZY=2F4nny5ByGrNNB?= =?us-ascii?Q?dNDhPut2U9xXv4hu72D58ZiewVDRZWW7QpQP9ZU?= =?us-ascii?Q?1WdtU6KxnCZlO=2FoW7syhQ=3D=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 108525 Subject: [ruby-core:108525] [Ruby master Feature#18776] Object Shapes X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Reply-To: Ruby developers Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" SXNzdWUgIzE4Nzc2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgYnlyb290IChKZWFuIEJvdXNzaWVyKS4K Cgo+IFdlIHdhbnQgb2JqZWN0IHNoYXBlcyB0byBiZSBlbmFibGVkIG9uIDMyIGJpdCBzeXN0ZW1z IGFuZCA2NCBiaXQgc3lzdGVtcyBzbyB0aGF0IGxpbWl0cyB1cyB0byB0aGUgYm90dG9tIDMyIGJp dHMgb2YgdGhlIE9iamVjdCBoZWFkZXIuIAoKTWlnaHQgYmUgYSBzaWxseSBxdWVzdGlvbiwgYnV0 IGhvdyBwb3B1bGFyIGFyZSAzMmJpdHMgc3lzdGVtcyB0aGVzZSBkYXlzPyBXb3VsZCBpdCBiZSBh Y2NlcHRhYmxlIHRvIG1ha2Ugb2JqZWN0cyBhIGJpdCBiaWdnZXIgb24gMzIgYml0cyBzeXN0ZW1z IHNvIHRoYXQgYm90aCAzMmJpdHMgYW5kIDY0Yml0cyBSdWJ5IGhhdmUgYSAzMmJpdCBzaGFwZSBJ RHM/CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZlYXR1cmUgIzE4 Nzc2OiBPYmplY3QgU2hhcGVzCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xODc3 NiNjaGFuZ2UtOTc1NjcKCiogQXV0aG9yOiBqZW1tYWkgKEplbW1hIElzc3JvZmYpCiogU3RhdHVz OiBPcGVuCiogUHJpb3JpdHk6IE5vcm1hbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiMgT2JqZWN0IFNoYXBlcyBpbXBsZW1lbnRhdGlvbgoKQWFyb24gUGF0dGVyc29u LCBFaWxlZW4gVWNoaXRlbGxlIGFuZCBJIGhhdmUgYmVlbiB3b3JraW5nIG9uIGFuIGltcGxlbWVu dGF0aW9uIG9mIE9iamVjdCBTaGFwZXMgZm9yIFJ1YnkuICBXZSBhcmUgZmlsaW5nIGEgdGlja2V0 IHRvIHNoYXJlIHdoYXQgd2UndmUgYmVlbiBkb2luZywgYXMgd2VsbCBhcyBnZXQgZmVlZGJhY2sg b24gdGhlIHByb2plY3QgaW4gaXRzIGN1cnJlbnQgc3RhdGUuCgpXZSBob3BlIHRvIGV2ZW50dWFs bHkgc3VibWl0IHRoZSBmaW5hbGl6ZWQgcHJvamVjdCB1cHN0cmVhbSBhZnRlciB2ZXJpZnlpbmcg ZWZmaWNhY3kuCgojIyBXaGF0IGFyZSBPYmplY3QgU2hhcGVzPwoKT2JqZWN0IHNoYXBlcyBhcmUg YSB0ZWNobmlxdWUgZm9yIHJlcHJlc2VudGluZyBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdC4gT3Ro ZXIgbGFuZ3VhZ2UgaW1wbGVtZW50YXRpb25zLCBpbmNsdWRpbmcgW1RydWZmbGVSdWJ5XShodHRw czovL2dpdGh1Yi5jb20vb3JhY2xlL3RydWZmbGVydWJ5KSBhbmQgW1Y4XShodHRwczovL3Y4LmRl di8pLCB1c2UgdGhpcyB0ZWNobmlxdWUuIENocmlzIFNlYXRvbiwgdGhlIGNyZWF0b3Igb2YgVHJ1 ZmZsZVJ1YnksIGRpc2N1c3NlZCBvYmplY3Qgc2hhcGVzIGluIGhpcyBbUnVieUthaWdpIDIwMjEg S2V5bm90ZV0oaHR0cHM6Ly9ydWJ5a2FpZ2kub3JnLzIwMjEtdGFrZW91dC9wcmVzZW50YXRpb25z L2NocmlzZ3NlYXRvbi5odG1sKSBhbmQgTWF4aW1lIENoZXZhbGllci1Cb2lzdmVydCBkaXNjdXNz ZWQgdGhlIGltcGxpY2F0aW9ucyBmb3IgWUpJVCBpbiB0aGUgbGF0dGVyIHBhcnQgb2YgW2hlciB0 YWxrIGF0IFJ1YnlLYWlnaSAyMDIxXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVBC VkxmM3lmTXM4JnQ9MTEwMHMpLiBUaGUgb3JpZ2luYWwgaWRlYSBvZiBvYmplY3Qgc2hhcGVzIFtv cmlnaW5hdGVzIGZyb20gdGhlIFNlbGYgbGFuZ3VhZ2VdKGh0dHBzOi8vYmlibGlvZ3JhcGh5LnNl bGZsYW5ndWFnZS5vcmcvX3N0YXRpYy9pbXBsZW1lbnRhdGlvbi5wZGYpLCB3aGljaCBpcyBjb25z aWRlcmVkIGEgZGlyZWN0IGRlc2NlbmRhbnQgb2YgU21hbGx0YWxrLgoKRWFjaCBzaGFwZSByZXBy ZXNlbnRzIGEgc3BlY2lmaWMgc2V0IG9mIGF0dHJpYnV0ZXMgKGluc3RhbmNlIHZhcmlhYmxlcyBh bmQgb3RoZXIgcHJvcGVydGllcykgYW5kIHRoZWlyIHZhbHVlcy4gSW4gb3VyIGltcGxlbWVudGF0 aW9uLCBhbGwgb2JqZWN0cyBoYXZlIGEgc2hhcGUuIFRoZSBzaGFwZXMgYXJlIG5vZGVzIGluIGEg dHJlZSBkYXRhIHN0cnVjdHVyZS4gRXZlcnkgZWRnZSBpbiB0aGUgdHJlZSByZXByZXNlbnRzIGFu IGF0dHJpYnV0ZSB0cmFuc2l0aW9uLgoKTW9yZSBzcGVjaWZpY2FsbHksIHNldHRpbmcgYW4gaW5z dGFuY2UgdmFyaWFibGUgb24gYW4gaW5zdGFuY2Ugb2YgYW4gb2JqZWN0IGNyZWF0ZXMgYW4gb3V0 Z29pbmcgZWRnZSBmcm9tIHRoZSBpbnN0YW5jZSdzIGN1cnJlbnQgc2hhcGUuIFRoaXMgaXMgYSB0 cmFuc2l0aW9uIGZyb20gb25lIHNoYXBlIHRvIGFub3RoZXIuIFRoZSBlZGdlIHJlcHJlc2VudHMg dGhlIGluc3RhbmNlIHZhcmlhYmxlIHRoYXQgaXMgc2V0LgoKRm9yIGV4YW1wbGU6CgpgYGBydWJ5 CmNsYXNzIEZvbwogIGRlZiBpbml0aWFsaXplCiAgICAjIEN1cnJlbnRseSB0aGlzIGluc3RhbmNl IGlzIHRoZSByb290IHNoYXBlIChJRCAwKQogICAgQGEgPSAxICMgVHJhbnNpdGlvbnMgdG8gYSBu ZXcgc2hhcGUgdmlhIGVkZ2UgQGEgKElEIDEpCiAgICBAYiA9IDIgIyBUcmFuc2l0aW9ucyB0byBh IG5ldyBzaGFwZSB2aWEgZWRnZSBAYiAoSUQgMikKICBlbmQKZW5kCgpmb28gPSBGb28ubmV3CmBg YAoKV2hlbiBgRm9vYCBpcyBpbnRpYWxpemVkLCBpdHMgc2hhcGUgaXMgdGhlIHJvb3Qgc2hhcGUg d2l0aCBJRCAwLiAgVGhlIHJvb3Qgc2hhcGUgcmVwcmVzZW50cyBhbiBlbXB0eSBvYmplY3Qgd2l0 aCBubyBpbnN0YW5jZSB2YXJpYWJsZXMuIEVhY2ggdGltZSBhbiBpbnN0YW5jZSB2YXJpYWJsZSBp cyBzZXQgb24gYGZvb2AsIHRoZSBzaGFwZSBvZiB0aGUgaW5zdGFuY2UgY2hhbmdlcy4gSXQgZmly c3QgdHJhbnNpdGlvbnMgd2l0aCBgQGFgIHRvIGEgc2hhcGUgd2l0aCBJRCAxLCBhbmQgdGhlbiB0 cmFuc2l0aW9ucyB3aXRoIGBAYmAgdG8gYSBzaGFwZSB3aXRoIElEIDIuIElmIGBAYWAgaXMgdGhl biBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUsIGl0cyBzaGFwZSB3aWxsIHJlbWFpbiB0aGUgc2hh cGUgd2l0aCBJRCAyLCBzaW5jZSB0aGlzIHNoYXBlIGFscmVhZHkgaW5jbHVkZXMgdGhlIGluc3Rh bmNlIHZhcmlhYmxlIGBAYWAuICAKCiFbXShodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJj b250ZW50LmNvbS8xOTg4NTYwLzE2NzkxODM2MC0wYTZjOTFhYS0yNTg3LTQ4Y2ItOGZmMi03ZjNh OTU4MzI4OGUuc3ZnKQoKVGhlcmUgaXMgb25lIGdsb2JhbCBzaGFwZSB0cmVlIGFuZCBvYmplY3Rz IHdoaWNoIHVuZGVyZ28gdGhlIHNhbWUgc2hhcGUgdHJhbnNpdGlvbnMgaW4gdGhlIHNhbWUgb3Jk ZXIgd2lsbCBlbmQgdXAgd2l0aCB0aGUgc2FtZSBmaW5hbCBzaGFwZS4KCkZvciBpbnN0YW5jZSwg aWYgd2UgaGF2ZSBhIGNsYXNzIGBCYXJgIGRlZmluZWQgYXMgZm9sbG93cywgdGhlIGZpcnN0IHRy YW5zaXRpb24gb24gYEJhci5uZXdgIHRocm91Z2ggdGhlIGluc3RhbmNlIHZhcmlhYmxlIGBAYWAg d2lsbCBiZSB0aGUgc2FtZSBhcyBgRm9vLm5ld2AncyBmaXJzdCB0cmFuc2l0aW9uOgoKYGBgcnVi eQpjbGFzcyBGb28KICBkZWYgaW5pdGlhbGl6ZQogICAgIyBDdXJyZW50bHkgdGhpcyBpbnN0YW5j ZSBpcyB0aGUgcm9vdCBzaGFwZSAoSUQgMCkKICAgIEBhID0gMSAjIFRyYW5zaXRpb25zIHRvIGEg bmV3IHNoYXBlIHZpYSBlZGdlIEBhIChJRCAxKQogICAgQGIgPSAyICMgVHJhbnNpdGlvbnMgdG8g YSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGIgKElEIDIpCiAgZW5kCmVuZAoKY2xhc3MgQmFyCiAgZGVm IGluaXRpYWxpemUKICAgICMgQ3VycmVudGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hh cGUgKElEIDApCiAgICBAYSA9IDEgIyBUcmFuc2l0aW9ucyB0byBzaGFwZSBkZWZpbmVkIGVhcmxp ZXIgdmlhIGVkZ2UgQGEgKElEIDEpCiAgICBAYyA9IDEgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBz aGFwZSB2aWEgZWRnZSBAYyAoSUQgMykKICAgIEBiID0gMSAjIFRyYW5zaXRpb25zIHRvIGEgbmV3 IHNoYXBlIHZpYSBlZGdlIEBiIChJRCA0KQogIGVuZAplbmQKCmZvbyA9IEZvby5uZXcgIyBibHVl IGluIHRoZSBkaWFncmFtCmJhciA9IEJhci5uZXcgIyByZWQgaW4gdGhlIGRpYWdyYW0KYGBgCgpJ biB0aGUgZGlhZ3JhbSBiZWxvdywgcHVycGxlIHJlcHJlc2VudHMgc2hhcmVkIHRyYW5zaXRpb25z LCBibHVlIHJlcHJlc2VudHMgdHJhbnNpdGlvbnMgZm9yIG9ubHkgYGZvb2AsIGFuZCByZWQgcmVw cmVzZW50cyB0cmFuc2l0aW9ucyBmb3Igb25seSBgYmFyYC4KCiFbXShodHRwczovL3VzZXItaW1h Z2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xOTg4NTYwLzE2NzkxODg5OS1mMWE2ZjM0NC1hZTVl LTRkYzAtYjE3YS1mYjE1NmQxZDU1MGYuc3ZnKQoKIyMjIENhY2hlIHN0cnVjdHVyZQoKRm9yIGlu c3RhbmNlIHZhcmlhYmxlIHdyaXRlcnMsIHRoZSBjdXJyZW50IHNoYXBlIElELCB0aGUgc2hhcGUg SUQgdGhhdCBpdmFyIHdyaXRlIHdvdWxkIHRyYW5zaXRpb24gdG8gYW5kIGluc3RhbmNlIHZhcmlh YmxlIGluZGV4IGFyZSBhbGwgc3RvcmVkIGluIHRoZSBpbmxpbmUgY2FjaGUuIFRoZSBzaGFwZSBJ RCBpcyB0aGUga2V5IHRvIHRoZSBjYWNoZS4KCkZvciBpbnN0YW5jZSB2YXJpYWJsZSByZWFkZXJz LCB0aGUgc2hhcGUgSUQgYW5kIGluc3RhbmNlIHZhcmlhYmxlIGluZGV4IGFyZSBzdG9yZWQgaW4g dGhlIGlubGluZSBjYWNoZS4gIEFnYWluLCB0aGUgc2hhcGUgSUQgaXMgdGhlIGNhY2hlIGtleS4K CmBgYHJ1YnkKY2xhc3MgRm9vCiAgZGVmIGluaXRpYWxpemUKICAgIEBhID0gMSAjIElDIHNoYXBl X2lkOiAwLCBuZXh0IHNoYXBlOiAxLCBpdiBpbmRleCAwCiAgICBAYiA9IDEgIyBJQyBzaGFwZV9p ZDogMSwgbmV4dCBzaGFwZTogMiwgaXYgaW5kZXggMQogIGVuZAogICAgCiAgZGVmIGEKICAgIEBh ICMgSUMgc2hhcGVfaWQ6IDIsIGl2IGluZGV4IDAKICBlbmQKZW5kCmBgYAoKIyMgUmF0aW9uYWxl CgpXZSB0aGluayB0aGF0IGFuIG9iamVjdCBzaGFwZSBpbXBsZW1lbnRhdGlvbiB3aWxsIHNpbXBs aWZ5IGNhY2hlIGNoZWNrcywgaW5jcmVhc2UgaW5saW5lIGNhY2hlIGhpdHMsIGRlY3JlYXNlIHJ1 bnRpbWUgY2hlY2tzLCBhbmQgZW5hYmxlIG90aGVyIHBvdGVudGlhbCBmdXR1cmUgb3B0aW1pemF0 aW9ucy4gVGhlc2UgYXJlIGFsbCBleHBsYWluZWQgYmVsb3cuIAoKIyMjIFNpbXBsaWZ5IGNhY2hp bmcKClRoZSBjdXJyZW50IGNhY2hlIGltcGxlbWVudGF0aW9uIGRlcGVuZHMgb24gdGhlIGNsYXNz IG9mIHRoZSByZWNlaXZlci4gU2luY2UgdGhlIGFkZHJlc3Mgb2YgdGhlIGNsYXNzIGNhbiBiZSBy ZXVzZWQsIHRoZSBjdXJyZW50IGNhY2hlIGltcGxlbWVudGF0aW9uIGFsc28gZGVwZW5kcyBvbiBh biBpbmNyZW1lbnRpbmcgc2VyaWFsIG51bWJlciBzZXQgb24gdGhlIGNsYXNzICh0aGUgY2xhc3Mg c2VyaWFsKS4gIFRoZSBzaGFwZSBpbXBsZW1lbnRhdGlvbiBoYXMgbm8gc3VjaCBkZXBlbmRlbmN5 LiBJdCBvbmx5IHJlcXVpcmVzIGNoZWNraW5nIHRoZSBzaGFwZSBJRCB0byBkZXRlcm1pbmUgaWYg dGhlIGNhY2hlIGlzIHZhbGlkLgoKIyMjIENhY2hlIGhpdHMKCk9iamVjdHMgdGhhdCBzZXQgcHJv cGVydGllcyBpbiB0aGUgc2FtZSBvcmRlciBjYW4gc2hhcmUgc2hhcGVzLiAgRm9yIGV4YW1wbGU6 CgpgYGBydWJ5CmNsYXNzIEhvZ2UKICBkZWYgaW5pdGlhbGl6ZQogICAgIyBDdXJyZW50bHkgdGhp cyBpbnN0YW5jZSBpcyB0aGUgcm9vdCBzaGFwZSAoSUQgMCkKICAgIEBhID0gMSAjIFRyYW5zaXRp b25zIHRvIHRoZSBuZXh0IHNoYXBlIHZpYSBlZGdlIG5hbWVkIEBhCiAgICBAYiA9IDIgIyBUcmFu c2l0aW9ucyB0byBuZXh0IHNoYXBlIHZpYSBlZGdlIG5hbWVkIEBiCiAgZW5kCmVuZAoKY2xhc3Mg RnVnYSA8IEhvZ2U7IGVuZAoKaG9nZSA9IEhvZ2UubmV3CmZ1Z2EgPSBGdWdhLm5ldwpgYGAKCklu IHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgaW5zdGFuY2VzIGBob2dlYCBhbmQgYGZ1Z2FgIHdpbGwg c2hhcmUgdGhlIHNhbWUgc2hhcGUgSUQuICBUaGlzIG1lYW5zIGlubGluZSBjYWNoZXMgaW4gYGlu aXRpYWxpemVgIHdpbGwgaGl0IGluIGJvdGggY2FzZXMuICBUaGlzIGNvbnRyYXN0cyB3aXRoIHRo ZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHRoYXQgdXNlcyB0aGUgY2xhc3MgYXMgdGhlIGNhY2hl IGtleS4gIEluIG90aGVyIHdvcmRzLCB3aXRoIG9iamVjdCBzaGFwZXMgdGhlIGFib3ZlIGNvZGUg d2lsbCBoaXQgaW5saW5lIGNhY2hlcyB3aGVyZSB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB3 aWxsIG1pc3MuCgpJZiBwZXJmb3JtYW5jZSB0ZXN0aW5nIHJldmVhbHMgdGhhdCBjYWNoZSBoaXRz IGFyZSAqbm90KiBzdWJzdGFudGlhbGx5IGltcHJvdmVkLCB0aGVuIHdlIGNhbiB1c2Ugc2hhcGVz IHRvIHJlY2xhaW0gbWVtb3J5IGZyb20gYFJCYXNpY2AuIFdlIGNhbiBhY2NvbXBsaXNoIHRoaXMg YnkgZW5jb2RpbmcgdGhlIGNsYXNzIHdpdGhpbiB0aGUgc2hhcGUgdHJlZS4gVGhpcyB3aWxsIGhh dmUgYW4gZXF1aXZhbGVudCBjYWNoZSBoaXQgcmF0ZSB0byB0aGUgY3VycmVudCBpbXBsZW1lbnRh dGlvbi4gT25jZSB0aGUgY2xhc3MgaXMgZW5jb2RlZCB3aXRoaW4gdGhlIHNoYXBlIHRyZWUsIHdl IGNhbiByZW1vdmUgdGhlIGNsYXNzIHBvaW50ZXIgZnJvbSBgUkJhc2ljYCBhbmQgZWl0aGVyIHJl Y2xhaW0gdGhhdCBtZW1vcnkgb3IgZnJlZSBpdCBmb3IgYW5vdGhlciB1c2UuCgojIyMgRGVjcmVh c2VzIHJ1bnRpbWUgY2hlY2tpbmcKCldlIGNhbiBlbmNvZGUgYXR0cmlidXRlcyB0aGF0IGFyZW4n dCBpbnN0YW5jZSB2YXJpYWJsZXMgaW50byBhbiBvYmplY3QncyBzaGFwZS4gQ3VycmVudGx5LCB3 ZSBhbHNvIGluY2x1ZGUgZnJvemVuIHdpdGhpbiB0aGUgc2hhcGUuIFRoaXMgbWVhbnMgd2UgY2Fu IGxpbWl0IGZyb3plbiBjaGVja3MgdG8gb25seSBjYWNoZSBtaXNzZXMuCgpGb3IgZXhhbXBsZSwg dGhlIGZvbGxvd2luZyBjb2RlOgoKYGBgcnVieQpjbGFzcyBUb3RvCiAgZGVmIHNldF9hCiAgICBA YSA9IDEgIyBjYWNoZTogc2hhcGU6IDAsIG5leHQgc2hhcGU6IDEsIElWIGlkeDogMAogIGVuZApl bmQKCnRvdG8gPSBUb3RvLm5ldyAjIHNoYXBlIDAKdG90by5zZXRfYSAgICAgIyBzaGFwZSAxCgp0 b3RvID0gVG90by5uZXcgIyBzaGFwZSAwCnRvdG8uZnJlZXplICAgICMgc2hhcGUgMgp0b3RvLnNl dF9hICAgICAjIENhY2hlIG1pc3MsIEV4Y2VwdGlvbiEKYGBgCgohW10oaHR0cHM6Ly91c2VyLWlt YWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTk4ODU2MC8xNjc5MjAwMDEtYzRlNjMyNmItM2Ez Yy00ODNiLWE3OTctOWUwMjMxNzY0N2Q3LnN2ZykKCldpdGhvdXQgc2hhcGVzLCBhbGwgaW5zdGFu Y2UgdmFyaWFibGUgc2V0cyByZXF1aXJlIGNoZWNraW5nIHRoZSBmcm96ZW4gc3RhdHVzIG9mIHRo ZSBvYmplY3QuIFdpdGggc2hhcGVzLCB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgdGhlIGZyb3plbiBz dGF0dXMgb24gY2FjaGUgbWlzc2VzLgoKV2UgY2FuIGFsc28gZWxpbWluYXRlIGVtYmVkZGVkIGFu ZCBleHRlbmRlZCBjaGVja3Mgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIG9iamVjdCBzaGFwZXMu IEFueSBwYXJ0aWN1bGFyIHNoYXBlIHJlcHJlc2VudHMgYW4gb2JqZWN0IHRoYXQgaXMgX2VpdGhl cl8gZXh0ZW5kZWQgb3IgZW1iZWRkZWQuIEpJVHMgY2FuIHBvc3NpYmx5IHRha2UgYWR2YW50YWdl IG9mIHRoaXMgZmFjdCBieSBnZW5lcmF0aW5nIHNwZWNpYWxpemVkIG1hY2hpbmUgY29kZSBiYXNl ZCBvbiB0aGUgc2hhcGVzLiAKICAgIAojIyMgQ2xhc3MgaW5zdGFuY2UgdmFyaWFibGVzIGNhbiBi ZSBzdG9yZWQgaW4gYW4gYXJyYXkKCkN1cnJlbnRseSwgYFRfQ0xBU1NgIGFuZCBgVF9NT0RVTEVg IGluc3RhbmNlcyBjYW5ub3QgdXNlIHRoZSBzYW1lIElWIGluZGV4IHRhYmxlIG9wdGltaXphdGlv biB0aGF0IGBUX09CSkVDVGAgaW5zdGFuY2VzIHVzZS4gIFdlIHRoaW5rIHRoYXQgdGhlIG9iamVj dCBzaGFwZXMgdGVjaG5pcXVlIGNhbiBiZSBsZXZlcmFnZWQgYnkgY2xhc3MgaW5zdGFuY2VzIHRv IHVzZSBhcnJheXMgZm9yIGNsYXNzIGluc3RhbmNlIHZhcmlhYmxlIHN0b3JhZ2UgYW5kIG1heSBw b3NzaWJseSBsZWFkIHRvIGEgcmVkdWN0aW9uIGluIG1lbW9yeSB1c2FnZSAodGhvdWdoIHdlIGhh dmUgeWV0IHRvIHRlc3QgdGhpcykuCgojIyBJbXBsZW1lbnRhdGlvbiBEZXRhaWxzCgpbSGVyZV0o aHR0cHM6Ly9naXRodWIuY29tL2plbW1haXNzcm9mZi9ydWJ5L2NvbW1pdC80ZTk1ZDAxNjU0ZjI0 Y2VmZjZjODMzMGNmNGU1YzdkYWM1MDQ3MzllKSBpcyBhIGxpbmsgdG8gb3VyIGNvZGUgc28gZmFy LgoKQXMgbWVudGlvbmVkIGVhcmxpZXIsIHNoYXBlIG9iamVjdHMgZm9ybSBhIHRyZWUgZGF0YSBz dHJ1Y3R1cmUuICBJbiBvcmRlciB0byBsb29rIHVwIHRoZSBzaGFwZSBxdWlja2x5LCB3ZSBhbHNv IHN0b3JlIHRoZSBzaGFwZXMgaW4gYSB3ZWFrIGFycmF5IHRoYXQgaXMgc3RvcmVkIG9uIHRoZSBW TS4gIFRoZSBJRCBvZiB0aGUgc2hhcGUgaXMgdGhlIGluZGV4IGluIHRvIHRoZSBhcnJheSwgYW5k IHRoZSBJRCBpcyBzdG9yZWQgb24gdGhlIG9iamVjdC4KCkZvciBgVF9PQkpFQ1RgIG9iamVjdHMs IHdlIHN0b3JlIHRoZSBzaGFwZSBJRCBpbiB0aGUgb2JqZWN0J3MgaGVhZGVyLiBPbiA2NCBiaXQg c3lzdGVtcywgdGhlIHVwcGVyIDMyIGJpdHMgYXJlIHVzZWQgYnkgUmFjdG9ycy4gIFdlIHdhbnQg b2JqZWN0IHNoYXBlcyB0byBiZSBlbmFibGVkIG9uIDMyIGJpdCBzeXN0ZW1zIGFuZCA2NCBiaXQg c3lzdGVtcyBzbyB0aGF0IGxpbWl0cyB1cyB0byB0aGUgYm90dG9tIDMyIGJpdHMgb2YgdGhlIE9i amVjdCBoZWFkZXIuICBUaGUgdG9wIDIwIGJpdHMgZm9yIGBUX09CSkVDVGAgb2JqZWN0cyB3YXMg dW51c2VkLCBzbyB3ZSB1c2VkIHRoZSB0b3AgMTYgYml0cyBmb3IgdGhlIHNoYXBlIGlkLiAgV2Ug Y2hvc2UgdGhlIHRvcCAxNiBiaXRzIGJlY2F1c2UgdGhpcyBhbGxvd3MgdXMgdG8gdXNlIGB1aW50 MTZfdGAgYW5kIG1hc2tpbmcgdGhlIGhlYWRlciBiaXRzIGlzIGVhc2llci4KClRoaXMgaW1wbGVt ZW50YXRpb24gZGV0YWlsIGxpbWl0cyB1cyB0byB+NjVrIHNoYXBlcy4gV2UgbWVhc3VyZWQgdGhl IG51bWJlciBvZiBzaGFwZXMgdXNlZCBvbiBhIHNpbXBsZSBbRGlzY291cnNlXShodHRwczovL2dp dGh1Yi5jb20vZGlzY291cnNlL2Rpc2NvdXJzZSkgYXBwbGljYXRpb24gKH4zLjVrKSwgW1JhaWxz QmVuY2hdKGh0dHBzOi8vZ2l0aHViLmNvbS9rMGt1YnVuL3JhaWxzYmVuY2gpICh+NGspLCBhbmQg U2hvcGlmeSdzIG1vbm9saXRoJ3MgdGVzdCBzdWl0ZSAofjQwaykuIEFjY29yZGluZ2x5LCB3ZSBk ZWNpZGVkIHRvIGltcGxlbWVudCBnYXJiYWdlIGNvbGxlY3Rpb24gb24gb2JqZWN0IHNoYXBlcyBz byB3ZSBjYW4gcmVjeWNsZSBzaGFwZSBJRHMgd2hpY2ggYXJlIG5vIGxvbmdlciBpbiB1c2UuICBX ZSBhcmUgY3VycmVudGx5IHdvcmtpbmcgb24gc2hhcGUgR0MuCgpFdmVuIHRob3VnaCBpdCdzIHVu bGlrZWx5LCBpdCdzIHN0aWxsIHBvc3NpYmxlIGZvciBhbiBhcHBsaWNhdGlvbiB0byBydW4gb3V0 IG9mIHNoYXBlcy4gT25jZSBhbGwgc2hhcGUgSURzIGFyZSBpbiB1c2UsIGFueSBvYmplY3RzIHRo YXQgbmVlZCBuZXcgc2hhcGUgSURzIHdpbGwgbmV2ZXIgaGl0IG9uIGlubGluZSBjYWNoZXMuCgoj IyBFdmFsdWF0aW9uCgpXZSBoYXZlIHNvIGZhciB0ZXN0ZWQgdGhpcyBicmFuY2ggd2l0aCBbRGlz Y291cnNlXShodHRwczovL2dpdGh1Yi5jb20vZGlzY291cnNlL2Rpc2NvdXJzZSksIFtSYWlsc0Jl bmNoXShodHRwczovL2dpdGh1Yi5jb20vazBrdWJ1bi9yYWlsc2JlbmNoKSBhbmQgU2hvcGlmeSdz IG1vbm9saXRoLiBXZSBwbGFuIHRvIHRlc3QgdGhpcyBicmFuY2ggbW9yZSBicm9hZGx5IGFnYWlu c3Qgc2V2ZXJhbCBvcGVuIHNvdXJjZSBSdWJ5IGFuZCBSYWlscyBhcHBsaWNhdGlvbnMuIAoKQmVm b3JlIHdlIGNvbnNpZGVyIHRoaXMgYnJhbmNoIHRvIGJlIHJlYWR5IGZvciBmb3JtYWwgcmV2aWV3 LCB3ZSB3YW50IHRoZSBydW50aW1lIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgdXNhZ2Ugb2YgdGhl c2UgYmVuY2htYXJrcyB0byBiZSBlcXVpdmFsZW50IG9yIGJldHRlciB0aGFuIGl0IGlzIGN1cnJl bnRseS4gSW4gb3VyIG9waW5pb24sIGV2ZW4gd2l0aCBlcXVpdmFsZW50IHJ1bnRpbWUgcGVyZm9y bWFuY2UgYW5kIG1lbW9yeSB1c2FnZSwgdGhlIGZ1dHVyZSBiZW5lZml0cyBvZiB0aGlzIGFwcHJv YWNoIG1ha2UgdGhlIGNoYW5nZSBzZWVtIHdvcnRod2hpbGUuCgojIyBGZWVkYmFjawoKSWYgeW91 IGhhdmUgYW55IGZlZWRiYWNrLCBjb21tZW50cywgb3IgcXVlc3Rpb25zLCBwbGVhc2UgbGV0IHVz IGtub3cgYW5kIHdlJ2xsIGRvIG91ciBiZXN0IHRvIGFkZHJlc3MgaXQuIFRoYW5rIHlvdSEKCgoK LS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwo=