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, T_SCC_BODY_TEXT_LINE,T_SPF_PERMERROR,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 B158C1F54E for ; Thu, 18 Aug 2022 18:23:01 +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="P48pBke/"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 274FA1218E4; Fri, 19 Aug 2022 03:22:56 +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 61C001218E4 for ; Fri, 19 Aug 2022 03:22:53 +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:cc; s=smtpapi; bh=M5WXtzrbEbNPSquJ78KQiEBZyTyBNgvRi6qDNkT7M2o=; b=P48pBke/+oIoIzue/J8kPjSz6R1AQRR9kEXlI8NPnPOa7Si3Rxj5bdnU9+/27OYrWcUU oUbZUTkxiocPOJc3TFPagk/c2LGCiC2CqEjm6N1e+RvxyAAjyVKUwaatDJaeYfrW/TXUgG sh52R7sCq1zeQLQ7zPyTZ3cEikA0HHi0k= Received: by filterdrecv-846bc987b5-mrsrf with SMTP id filterdrecv-846bc987b5-mrsrf-1-62FE837B-38 2022-08-18 18:22:51.766843895 +0000 UTC m=+2413079.546322115 Received: from herokuapp.com (unknown) by geopod-ismtpd-2-2 (SG) with ESMTP id XWtR-4MQSqmVvZcGzlMjBQ for ; Thu, 18 Aug 2022 18:22:51.723 +0000 (UTC) Date: Thu, 18 Aug 2022 18:22:51 +0000 (UTC) From: "chrisseaton (Chris Seaton)" 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: chrisseaton 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: 85966 X-SG-EID: =?us-ascii?Q?955+Sha5zT9JvJEGA0pEH+PLRI7xgFSEgxhG=2Ft17QF=2FlmxVXVwOzSecIY777x4?= =?us-ascii?Q?=2F=2FVC52175RvzxoZpb3l2+qjQgbHeC2q9JfQiAas?= =?us-ascii?Q?M5fGdXZeN=2FYtAn4=2FS++dK+BaJFlcn3a3tL53ZLO?= =?us-ascii?Q?TiRsFMGORQMMN4hC9y4Cbc+jPgaKaKMGKYYhy1h?= =?us-ascii?Q?Xuv0g1BvxXZnuC=2Fidd8a0b5ltzo2sfpD9Liykg5?= =?us-ascii?Q?UG38ZYm4=2FZSsshMyYUCAN5Jz+oQOmBsDx7qzmux?= =?us-ascii?Q?TkvNA8rbTSpe6sCv6LS9A=3D=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 109558 Subject: [ruby-core:109558] [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" SXNzdWUgIzE4Nzc2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgY2hyaXNzZWF0b24gKENocmlzIFNlYXRv bikuCgoKUmVmZXJlbmNlIGtleXdvcmQgYXJndW1lbnRzIC0gd2hhdCB3ZSdyZSBkb2luZyBpcyB1 c2luZyB0aGUgc2FtZSBpZGVhIG9mIHNoYXBlcywgYnV0IGFwcGx5aW5nIHRoZW0gdG8gdGhlIGtl eXdvcmQgYXJndW1lbnRzIGhhc2ggdG8gYmUgYWJsZSB0byBleHRyYWN0IGtleXdvcmQgYXJndW1l bnRzIHdpdGhvdXQgYW55IGNvbnRyb2wtZmxvdy4gV2UgY2FuIGltcGxlbWVudCBrZXl3b3JkIGFy Z3VtZW50cyBsaWtlIHRoaXMgd2l0aCBqdXN0IGEgc2luZ2xlIG1hY2hpbmUtd29yZCBjb21wYXJp c29uIG92ZXJoZWFkIG92ZXIgcG9zaXRpb25hbCBhcmd1bWVudHMuCgpodHRwczovL3d3dy55b3V0 dWJlLmNvbS93YXRjaD92PVJWcVkxRlJVbV84CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCkZlYXR1cmUgIzE4Nzc2OiBPYmplY3QgU2hhcGVzCmh0dHBzOi8vYnVncy5y dWJ5LWxhbmcub3JnL2lzc3Vlcy8xODc3NiNjaGFuZ2UtOTg3MjkKCiogQXV0aG9yOiBqZW1tYWkg KEplbW1hIElzc3JvZmYpCiogU3RhdHVzOiBPcGVuCiogUHJpb3JpdHk6IE5vcm1hbAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgT2JqZWN0IFNoYXBlcyBpbXBsZW1l bnRhdGlvbgoKQWFyb24gUGF0dGVyc29uLCBFaWxlZW4gVWNoaXRlbGxlIGFuZCBJIGhhdmUgYmVl biB3b3JraW5nIG9uIGFuIGltcGxlbWVudGF0aW9uIG9mIE9iamVjdCBTaGFwZXMgZm9yIFJ1Ynku ICBXZSBhcmUgZmlsaW5nIGEgdGlja2V0IHRvIHNoYXJlIHdoYXQgd2UndmUgYmVlbiBkb2luZywg YXMgd2VsbCBhcyBnZXQgZmVlZGJhY2sgb24gdGhlIHByb2plY3QgaW4gaXRzIGN1cnJlbnQgc3Rh dGUuCgpXZSBob3BlIHRvIGV2ZW50dWFsbHkgc3VibWl0IHRoZSBmaW5hbGl6ZWQgcHJvamVjdCB1 cHN0cmVhbSBhZnRlciB2ZXJpZnlpbmcgZWZmaWNhY3kuCgojIyBXaGF0IGFyZSBPYmplY3QgU2hh cGVzPwoKT2JqZWN0IHNoYXBlcyBhcmUgYSB0ZWNobmlxdWUgZm9yIHJlcHJlc2VudGluZyBwcm9w ZXJ0aWVzIG9mIGFuIG9iamVjdC4gT3RoZXIgbGFuZ3VhZ2UgaW1wbGVtZW50YXRpb25zLCBpbmNs dWRpbmcgW1RydWZmbGVSdWJ5XShodHRwczovL2dpdGh1Yi5jb20vb3JhY2xlL3RydWZmbGVydWJ5 KSBhbmQgW1Y4XShodHRwczovL3Y4LmRldi8pLCB1c2UgdGhpcyB0ZWNobmlxdWUuIENocmlzIFNl YXRvbiwgdGhlIGNyZWF0b3Igb2YgVHJ1ZmZsZVJ1YnksIGRpc2N1c3NlZCBvYmplY3Qgc2hhcGVz IGluIGhpcyBbUnVieUthaWdpIDIwMjEgS2V5bm90ZV0oaHR0cHM6Ly9ydWJ5a2FpZ2kub3JnLzIw MjEtdGFrZW91dC9wcmVzZW50YXRpb25zL2NocmlzZ3NlYXRvbi5odG1sKSBhbmQgTWF4aW1lIENo ZXZhbGllci1Cb2lzdmVydCBkaXNjdXNzZWQgdGhlIGltcGxpY2F0aW9ucyBmb3IgWUpJVCBpbiB0 aGUgbGF0dGVyIHBhcnQgb2YgW2hlciB0YWxrIGF0IFJ1YnlLYWlnaSAyMDIxXShodHRwczovL3d3 dy55b3V0dWJlLmNvbS93YXRjaD92PVBCVkxmM3lmTXM4JnQ9MTEwMHMpLiBUaGUgb3JpZ2luYWwg aWRlYSBvZiBvYmplY3Qgc2hhcGVzIFtvcmlnaW5hdGVzIGZyb20gdGhlIFNlbGYgbGFuZ3VhZ2Vd KGh0dHBzOi8vYmlibGlvZ3JhcGh5LnNlbGZsYW5ndWFnZS5vcmcvX3N0YXRpYy9pbXBsZW1lbnRh dGlvbi5wZGYpLCB3aGljaCBpcyBjb25zaWRlcmVkIGEgZGlyZWN0IGRlc2NlbmRhbnQgb2YgU21h bGx0YWxrLgoKRWFjaCBzaGFwZSByZXByZXNlbnRzIGEgc3BlY2lmaWMgc2V0IG9mIGF0dHJpYnV0 ZXMgKGluc3RhbmNlIHZhcmlhYmxlcyBhbmQgb3RoZXIgcHJvcGVydGllcykgYW5kIHRoZWlyIHZh bHVlcy4gSW4gb3VyIGltcGxlbWVudGF0aW9uLCBhbGwgb2JqZWN0cyBoYXZlIGEgc2hhcGUuIFRo ZSBzaGFwZXMgYXJlIG5vZGVzIGluIGEgdHJlZSBkYXRhIHN0cnVjdHVyZS4gRXZlcnkgZWRnZSBp biB0aGUgdHJlZSByZXByZXNlbnRzIGFuIGF0dHJpYnV0ZSB0cmFuc2l0aW9uLgoKTW9yZSBzcGVj aWZpY2FsbHksIHNldHRpbmcgYW4gaW5zdGFuY2UgdmFyaWFibGUgb24gYW4gaW5zdGFuY2Ugb2Yg YW4gb2JqZWN0IGNyZWF0ZXMgYW4gb3V0Z29pbmcgZWRnZSBmcm9tIHRoZSBpbnN0YW5jZSdzIGN1 cnJlbnQgc2hhcGUuIFRoaXMgaXMgYSB0cmFuc2l0aW9uIGZyb20gb25lIHNoYXBlIHRvIGFub3Ro ZXIuIFRoZSBlZGdlIHJlcHJlc2VudHMgdGhlIGluc3RhbmNlIHZhcmlhYmxlIHRoYXQgaXMgc2V0 LgoKRm9yIGV4YW1wbGU6CgpgYGBydWJ5CmNsYXNzIEZvbwogIGRlZiBpbml0aWFsaXplCiAgICAj IEN1cnJlbnRseSB0aGlzIGluc3RhbmNlIGlzIHRoZSByb290IHNoYXBlIChJRCAwKQogICAgQGEg PSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGEgKElEIDEpCiAgICBA YiA9IDIgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYiAoSUQgMikKICBl bmQKZW5kCgpmb28gPSBGb28ubmV3CmBgYAoKV2hlbiBgRm9vYCBpcyBpbnRpYWxpemVkLCBpdHMg c2hhcGUgaXMgdGhlIHJvb3Qgc2hhcGUgd2l0aCBJRCAwLiAgVGhlIHJvb3Qgc2hhcGUgcmVwcmVz ZW50cyBhbiBlbXB0eSBvYmplY3Qgd2l0aCBubyBpbnN0YW5jZSB2YXJpYWJsZXMuIEVhY2ggdGlt ZSBhbiBpbnN0YW5jZSB2YXJpYWJsZSBpcyBzZXQgb24gYGZvb2AsIHRoZSBzaGFwZSBvZiB0aGUg aW5zdGFuY2UgY2hhbmdlcy4gSXQgZmlyc3QgdHJhbnNpdGlvbnMgd2l0aCBgQGFgIHRvIGEgc2hh cGUgd2l0aCBJRCAxLCBhbmQgdGhlbiB0cmFuc2l0aW9ucyB3aXRoIGBAYmAgdG8gYSBzaGFwZSB3 aXRoIElEIDIuIElmIGBAYWAgaXMgdGhlbiBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUsIGl0cyBz aGFwZSB3aWxsIHJlbWFpbiB0aGUgc2hhcGUgd2l0aCBJRCAyLCBzaW5jZSB0aGlzIHNoYXBlIGFs cmVhZHkgaW5jbHVkZXMgdGhlIGluc3RhbmNlIHZhcmlhYmxlIGBAYWAuICAKCiFbXShodHRwczov L3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xOTg4NTYwLzE2NzkxODM2MC0wYTZj OTFhYS0yNTg3LTQ4Y2ItOGZmMi03ZjNhOTU4MzI4OGUuc3ZnKQoKVGhlcmUgaXMgb25lIGdsb2Jh bCBzaGFwZSB0cmVlIGFuZCBvYmplY3RzIHdoaWNoIHVuZGVyZ28gdGhlIHNhbWUgc2hhcGUgdHJh bnNpdGlvbnMgaW4gdGhlIHNhbWUgb3JkZXIgd2lsbCBlbmQgdXAgd2l0aCB0aGUgc2FtZSBmaW5h bCBzaGFwZS4KCkZvciBpbnN0YW5jZSwgaWYgd2UgaGF2ZSBhIGNsYXNzIGBCYXJgIGRlZmluZWQg YXMgZm9sbG93cywgdGhlIGZpcnN0IHRyYW5zaXRpb24gb24gYEJhci5uZXdgIHRocm91Z2ggdGhl IGluc3RhbmNlIHZhcmlhYmxlIGBAYWAgd2lsbCBiZSB0aGUgc2FtZSBhcyBgRm9vLm5ld2AncyBm aXJzdCB0cmFuc2l0aW9uOgoKYGBgcnVieQpjbGFzcyBGb28KICBkZWYgaW5pdGlhbGl6ZQogICAg IyBDdXJyZW50bHkgdGhpcyBpbnN0YW5jZSBpcyB0aGUgcm9vdCBzaGFwZSAoSUQgMCkKICAgIEBh ID0gMSAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBhIChJRCAxKQogICAg QGIgPSAyICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGIgKElEIDIpCiAg ZW5kCmVuZAoKY2xhc3MgQmFyCiAgZGVmIGluaXRpYWxpemUKICAgICMgQ3VycmVudGx5IHRoaXMg aW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUgKElEIDApCiAgICBAYSA9IDEgIyBUcmFuc2l0aW9u cyB0byBzaGFwZSBkZWZpbmVkIGVhcmxpZXIgdmlhIGVkZ2UgQGEgKElEIDEpCiAgICBAYyA9IDEg IyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYyAoSUQgMykKICAgIEBiID0g MSAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBiIChJRCA0KQogIGVuZApl bmQKCmZvbyA9IEZvby5uZXcgIyBibHVlIGluIHRoZSBkaWFncmFtCmJhciA9IEJhci5uZXcgIyBy ZWQgaW4gdGhlIGRpYWdyYW0KYGBgCgpJbiB0aGUgZGlhZ3JhbSBiZWxvdywgcHVycGxlIHJlcHJl c2VudHMgc2hhcmVkIHRyYW5zaXRpb25zLCBibHVlIHJlcHJlc2VudHMgdHJhbnNpdGlvbnMgZm9y IG9ubHkgYGZvb2AsIGFuZCByZWQgcmVwcmVzZW50cyB0cmFuc2l0aW9ucyBmb3Igb25seSBgYmFy YC4KCiFbXShodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xOTg4NTYw LzE2NzkxODg5OS1mMWE2ZjM0NC1hZTVlLTRkYzAtYjE3YS1mYjE1NmQxZDU1MGYuc3ZnKQoKIyMj IENhY2hlIHN0cnVjdHVyZQoKRm9yIGluc3RhbmNlIHZhcmlhYmxlIHdyaXRlcnMsIHRoZSBjdXJy ZW50IHNoYXBlIElELCB0aGUgc2hhcGUgSUQgdGhhdCBpdmFyIHdyaXRlIHdvdWxkIHRyYW5zaXRp b24gdG8gYW5kIGluc3RhbmNlIHZhcmlhYmxlIGluZGV4IGFyZSBhbGwgc3RvcmVkIGluIHRoZSBp bmxpbmUgY2FjaGUuIFRoZSBzaGFwZSBJRCBpcyB0aGUga2V5IHRvIHRoZSBjYWNoZS4KCkZvciBp bnN0YW5jZSB2YXJpYWJsZSByZWFkZXJzLCB0aGUgc2hhcGUgSUQgYW5kIGluc3RhbmNlIHZhcmlh YmxlIGluZGV4IGFyZSBzdG9yZWQgaW4gdGhlIGlubGluZSBjYWNoZS4gIEFnYWluLCB0aGUgc2hh cGUgSUQgaXMgdGhlIGNhY2hlIGtleS4KCmBgYHJ1YnkKY2xhc3MgRm9vCiAgZGVmIGluaXRpYWxp emUKICAgIEBhID0gMSAjIElDIHNoYXBlX2lkOiAwLCBuZXh0IHNoYXBlOiAxLCBpdiBpbmRleCAw CiAgICBAYiA9IDEgIyBJQyBzaGFwZV9pZDogMSwgbmV4dCBzaGFwZTogMiwgaXYgaW5kZXggMQog IGVuZAogICAgCiAgZGVmIGEKICAgIEBhICMgSUMgc2hhcGVfaWQ6IDIsIGl2IGluZGV4IDAKICBl bmQKZW5kCmBgYAoKIyMgUmF0aW9uYWxlCgpXZSB0aGluayB0aGF0IGFuIG9iamVjdCBzaGFwZSBp bXBsZW1lbnRhdGlvbiB3aWxsIHNpbXBsaWZ5IGNhY2hlIGNoZWNrcywgaW5jcmVhc2UgaW5saW5l IGNhY2hlIGhpdHMsIGRlY3JlYXNlIHJ1bnRpbWUgY2hlY2tzLCBhbmQgZW5hYmxlIG90aGVyIHBv dGVudGlhbCBmdXR1cmUgb3B0aW1pemF0aW9ucy4gVGhlc2UgYXJlIGFsbCBleHBsYWluZWQgYmVs b3cuIAoKIyMjIFNpbXBsaWZ5IGNhY2hpbmcKClRoZSBjdXJyZW50IGNhY2hlIGltcGxlbWVudGF0 aW9uIGRlcGVuZHMgb24gdGhlIGNsYXNzIG9mIHRoZSByZWNlaXZlci4gU2luY2UgdGhlIGFkZHJl c3Mgb2YgdGhlIGNsYXNzIGNhbiBiZSByZXVzZWQsIHRoZSBjdXJyZW50IGNhY2hlIGltcGxlbWVu dGF0aW9uIGFsc28gZGVwZW5kcyBvbiBhbiBpbmNyZW1lbnRpbmcgc2VyaWFsIG51bWJlciBzZXQg b24gdGhlIGNsYXNzICh0aGUgY2xhc3Mgc2VyaWFsKS4gIFRoZSBzaGFwZSBpbXBsZW1lbnRhdGlv biBoYXMgbm8gc3VjaCBkZXBlbmRlbmN5LiBJdCBvbmx5IHJlcXVpcmVzIGNoZWNraW5nIHRoZSBz aGFwZSBJRCB0byBkZXRlcm1pbmUgaWYgdGhlIGNhY2hlIGlzIHZhbGlkLgoKIyMjIENhY2hlIGhp dHMKCk9iamVjdHMgdGhhdCBzZXQgcHJvcGVydGllcyBpbiB0aGUgc2FtZSBvcmRlciBjYW4gc2hh cmUgc2hhcGVzLiAgRm9yIGV4YW1wbGU6CgpgYGBydWJ5CmNsYXNzIEhvZ2UKICBkZWYgaW5pdGlh bGl6ZQogICAgIyBDdXJyZW50bHkgdGhpcyBpbnN0YW5jZSBpcyB0aGUgcm9vdCBzaGFwZSAoSUQg MCkKICAgIEBhID0gMSAjIFRyYW5zaXRpb25zIHRvIHRoZSBuZXh0IHNoYXBlIHZpYSBlZGdlIG5h bWVkIEBhCiAgICBAYiA9IDIgIyBUcmFuc2l0aW9ucyB0byBuZXh0IHNoYXBlIHZpYSBlZGdlIG5h bWVkIEBiCiAgZW5kCmVuZAoKY2xhc3MgRnVnYSA8IEhvZ2U7IGVuZAoKaG9nZSA9IEhvZ2UubmV3 CmZ1Z2EgPSBGdWdhLm5ldwpgYGAKCkluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgaW5zdGFuY2Vz IGBob2dlYCBhbmQgYGZ1Z2FgIHdpbGwgc2hhcmUgdGhlIHNhbWUgc2hhcGUgSUQuICBUaGlzIG1l YW5zIGlubGluZSBjYWNoZXMgaW4gYGluaXRpYWxpemVgIHdpbGwgaGl0IGluIGJvdGggY2FzZXMu ICBUaGlzIGNvbnRyYXN0cyB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHRoYXQgdXNl cyB0aGUgY2xhc3MgYXMgdGhlIGNhY2hlIGtleS4gIEluIG90aGVyIHdvcmRzLCB3aXRoIG9iamVj dCBzaGFwZXMgdGhlIGFib3ZlIGNvZGUgd2lsbCBoaXQgaW5saW5lIGNhY2hlcyB3aGVyZSB0aGUg Y3VycmVudCBpbXBsZW1lbnRhdGlvbiB3aWxsIG1pc3MuCgpJZiBwZXJmb3JtYW5jZSB0ZXN0aW5n IHJldmVhbHMgdGhhdCBjYWNoZSBoaXRzIGFyZSAqbm90KiBzdWJzdGFudGlhbGx5IGltcHJvdmVk LCB0aGVuIHdlIGNhbiB1c2Ugc2hhcGVzIHRvIHJlY2xhaW0gbWVtb3J5IGZyb20gYFJCYXNpY2Au IFdlIGNhbiBhY2NvbXBsaXNoIHRoaXMgYnkgZW5jb2RpbmcgdGhlIGNsYXNzIHdpdGhpbiB0aGUg c2hhcGUgdHJlZS4gVGhpcyB3aWxsIGhhdmUgYW4gZXF1aXZhbGVudCBjYWNoZSBoaXQgcmF0ZSB0 byB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gT25jZSB0aGUgY2xhc3MgaXMgZW5jb2RlZCB3 aXRoaW4gdGhlIHNoYXBlIHRyZWUsIHdlIGNhbiByZW1vdmUgdGhlIGNsYXNzIHBvaW50ZXIgZnJv bSBgUkJhc2ljYCBhbmQgZWl0aGVyIHJlY2xhaW0gdGhhdCBtZW1vcnkgb3IgZnJlZSBpdCBmb3Ig YW5vdGhlciB1c2UuCgojIyMgRGVjcmVhc2VzIHJ1bnRpbWUgY2hlY2tpbmcKCldlIGNhbiBlbmNv ZGUgYXR0cmlidXRlcyB0aGF0IGFyZW4ndCBpbnN0YW5jZSB2YXJpYWJsZXMgaW50byBhbiBvYmpl Y3QncyBzaGFwZS4gQ3VycmVudGx5LCB3ZSBhbHNvIGluY2x1ZGUgZnJvemVuIHdpdGhpbiB0aGUg c2hhcGUuIFRoaXMgbWVhbnMgd2UgY2FuIGxpbWl0IGZyb3plbiBjaGVja3MgdG8gb25seSBjYWNo ZSBtaXNzZXMuCgpGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlOgoKYGBgcnVieQpjbGFz cyBUb3RvCiAgZGVmIHNldF9hCiAgICBAYSA9IDEgIyBjYWNoZTogc2hhcGU6IDAsIG5leHQgc2hh cGU6IDEsIElWIGlkeDogMAogIGVuZAplbmQKCnRvdG8gPSBUb3RvLm5ldyAjIHNoYXBlIDAKdG90 by5zZXRfYSAgICAgIyBzaGFwZSAxCgp0b3RvID0gVG90by5uZXcgIyBzaGFwZSAwCnRvdG8uZnJl ZXplICAgICMgc2hhcGUgMgp0b3RvLnNldF9hICAgICAjIENhY2hlIG1pc3MsIEV4Y2VwdGlvbiEK YGBgCgohW10oaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTk4ODU2 MC8xNjc5MjAwMDEtYzRlNjMyNmItM2EzYy00ODNiLWE3OTctOWUwMjMxNzY0N2Q3LnN2ZykKCldp dGhvdXQgc2hhcGVzLCBhbGwgaW5zdGFuY2UgdmFyaWFibGUgc2V0cyByZXF1aXJlIGNoZWNraW5n IHRoZSBmcm96ZW4gc3RhdHVzIG9mIHRoZSBvYmplY3QuIFdpdGggc2hhcGVzLCB3ZSBvbmx5IG5l ZWQgdG8gY2hlY2sgdGhlIGZyb3plbiBzdGF0dXMgb24gY2FjaGUgbWlzc2VzLgoKV2UgY2FuIGFs c28gZWxpbWluYXRlIGVtYmVkZGVkIGFuZCBleHRlbmRlZCBjaGVja3Mgd2l0aCB0aGUgaW50cm9k dWN0aW9uIG9mIG9iamVjdCBzaGFwZXMuIEFueSBwYXJ0aWN1bGFyIHNoYXBlIHJlcHJlc2VudHMg YW4gb2JqZWN0IHRoYXQgaXMgX2VpdGhlcl8gZXh0ZW5kZWQgb3IgZW1iZWRkZWQuIEpJVHMgY2Fu IHBvc3NpYmx5IHRha2UgYWR2YW50YWdlIG9mIHRoaXMgZmFjdCBieSBnZW5lcmF0aW5nIHNwZWNp YWxpemVkIG1hY2hpbmUgY29kZSBiYXNlZCBvbiB0aGUgc2hhcGVzLiAKICAgIAojIyMgQ2xhc3Mg aW5zdGFuY2UgdmFyaWFibGVzIGNhbiBiZSBzdG9yZWQgaW4gYW4gYXJyYXkKCkN1cnJlbnRseSwg YFRfQ0xBU1NgIGFuZCBgVF9NT0RVTEVgIGluc3RhbmNlcyBjYW5ub3QgdXNlIHRoZSBzYW1lIElW IGluZGV4IHRhYmxlIG9wdGltaXphdGlvbiB0aGF0IGBUX09CSkVDVGAgaW5zdGFuY2VzIHVzZS4g IFdlIHRoaW5rIHRoYXQgdGhlIG9iamVjdCBzaGFwZXMgdGVjaG5pcXVlIGNhbiBiZSBsZXZlcmFn ZWQgYnkgY2xhc3MgaW5zdGFuY2VzIHRvIHVzZSBhcnJheXMgZm9yIGNsYXNzIGluc3RhbmNlIHZh cmlhYmxlIHN0b3JhZ2UgYW5kIG1heSBwb3NzaWJseSBsZWFkIHRvIGEgcmVkdWN0aW9uIGluIG1l bW9yeSB1c2FnZSAodGhvdWdoIHdlIGhhdmUgeWV0IHRvIHRlc3QgdGhpcykuCgojIyBJbXBsZW1l bnRhdGlvbiBEZXRhaWxzCgpbSGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL2plbW1haXNzcm9mZi9y dWJ5L2NvbW1pdC80ZTk1ZDAxNjU0ZjI0Y2VmZjZjODMzMGNmNGU1YzdkYWM1MDQ3MzllKSBpcyBh IGxpbmsgdG8gb3VyIGNvZGUgc28gZmFyLgoKQXMgbWVudGlvbmVkIGVhcmxpZXIsIHNoYXBlIG9i amVjdHMgZm9ybSBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUuICBJbiBvcmRlciB0byBsb29rIHVwIHRo ZSBzaGFwZSBxdWlja2x5LCB3ZSBhbHNvIHN0b3JlIHRoZSBzaGFwZXMgaW4gYSB3ZWFrIGFycmF5 IHRoYXQgaXMgc3RvcmVkIG9uIHRoZSBWTS4gIFRoZSBJRCBvZiB0aGUgc2hhcGUgaXMgdGhlIGlu ZGV4IGluIHRvIHRoZSBhcnJheSwgYW5kIHRoZSBJRCBpcyBzdG9yZWQgb24gdGhlIG9iamVjdC4K CkZvciBgVF9PQkpFQ1RgIG9iamVjdHMsIHdlIHN0b3JlIHRoZSBzaGFwZSBJRCBpbiB0aGUgb2Jq ZWN0J3MgaGVhZGVyLiBPbiA2NCBiaXQgc3lzdGVtcywgdGhlIHVwcGVyIDMyIGJpdHMgYXJlIHVz ZWQgYnkgUmFjdG9ycy4gIFdlIHdhbnQgb2JqZWN0IHNoYXBlcyB0byBiZSBlbmFibGVkIG9uIDMy IGJpdCBzeXN0ZW1zIGFuZCA2NCBiaXQgc3lzdGVtcyBzbyB0aGF0IGxpbWl0cyB1cyB0byB0aGUg Ym90dG9tIDMyIGJpdHMgb2YgdGhlIE9iamVjdCBoZWFkZXIuICBUaGUgdG9wIDIwIGJpdHMgZm9y IGBUX09CSkVDVGAgb2JqZWN0cyB3YXMgdW51c2VkLCBzbyB3ZSB1c2VkIHRoZSB0b3AgMTYgYml0 cyBmb3IgdGhlIHNoYXBlIGlkLiAgV2UgY2hvc2UgdGhlIHRvcCAxNiBiaXRzIGJlY2F1c2UgdGhp cyBhbGxvd3MgdXMgdG8gdXNlIGB1aW50MTZfdGAgYW5kIG1hc2tpbmcgdGhlIGhlYWRlciBiaXRz IGlzIGVhc2llci4KClRoaXMgaW1wbGVtZW50YXRpb24gZGV0YWlsIGxpbWl0cyB1cyB0byB+NjVr IHNoYXBlcy4gV2UgbWVhc3VyZWQgdGhlIG51bWJlciBvZiBzaGFwZXMgdXNlZCBvbiBhIHNpbXBs ZSBbRGlzY291cnNlXShodHRwczovL2dpdGh1Yi5jb20vZGlzY291cnNlL2Rpc2NvdXJzZSkgYXBw bGljYXRpb24gKH4zLjVrKSwgW1JhaWxzQmVuY2hdKGh0dHBzOi8vZ2l0aHViLmNvbS9rMGt1YnVu L3JhaWxzYmVuY2gpICh+NGspLCBhbmQgU2hvcGlmeSdzIG1vbm9saXRoJ3MgdGVzdCBzdWl0ZSAo fjQwaykuIEFjY29yZGluZ2x5LCB3ZSBkZWNpZGVkIHRvIGltcGxlbWVudCBnYXJiYWdlIGNvbGxl Y3Rpb24gb24gb2JqZWN0IHNoYXBlcyBzbyB3ZSBjYW4gcmVjeWNsZSBzaGFwZSBJRHMgd2hpY2gg YXJlIG5vIGxvbmdlciBpbiB1c2UuICBXZSBhcmUgY3VycmVudGx5IHdvcmtpbmcgb24gc2hhcGUg R0MuCgpFdmVuIHRob3VnaCBpdCdzIHVubGlrZWx5LCBpdCdzIHN0aWxsIHBvc3NpYmxlIGZvciBh biBhcHBsaWNhdGlvbiB0byBydW4gb3V0IG9mIHNoYXBlcy4gT25jZSBhbGwgc2hhcGUgSURzIGFy ZSBpbiB1c2UsIGFueSBvYmplY3RzIHRoYXQgbmVlZCBuZXcgc2hhcGUgSURzIHdpbGwgbmV2ZXIg aGl0IG9uIGlubGluZSBjYWNoZXMuCgojIyBFdmFsdWF0aW9uCgpXZSBoYXZlIHNvIGZhciB0ZXN0 ZWQgdGhpcyBicmFuY2ggd2l0aCBbRGlzY291cnNlXShodHRwczovL2dpdGh1Yi5jb20vZGlzY291 cnNlL2Rpc2NvdXJzZSksIFtSYWlsc0JlbmNoXShodHRwczovL2dpdGh1Yi5jb20vazBrdWJ1bi9y YWlsc2JlbmNoKSBhbmQgU2hvcGlmeSdzIG1vbm9saXRoLiBXZSBwbGFuIHRvIHRlc3QgdGhpcyBi cmFuY2ggbW9yZSBicm9hZGx5IGFnYWluc3Qgc2V2ZXJhbCBvcGVuIHNvdXJjZSBSdWJ5IGFuZCBS YWlscyBhcHBsaWNhdGlvbnMuIAoKQmVmb3JlIHdlIGNvbnNpZGVyIHRoaXMgYnJhbmNoIHRvIGJl IHJlYWR5IGZvciBmb3JtYWwgcmV2aWV3LCB3ZSB3YW50IHRoZSBydW50aW1lIHBlcmZvcm1hbmNl IGFuZCBtZW1vcnkgdXNhZ2Ugb2YgdGhlc2UgYmVuY2htYXJrcyB0byBiZSBlcXVpdmFsZW50IG9y IGJldHRlciB0aGFuIGl0IGlzIGN1cnJlbnRseS4gSW4gb3VyIG9waW5pb24sIGV2ZW4gd2l0aCBl cXVpdmFsZW50IHJ1bnRpbWUgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1c2FnZSwgdGhlIGZ1dHVy ZSBiZW5lZml0cyBvZiB0aGlzIGFwcHJvYWNoIG1ha2UgdGhlIGNoYW5nZSBzZWVtIHdvcnRod2hp bGUuCgojIyBGZWVkYmFjawoKSWYgeW91IGhhdmUgYW55IGZlZWRiYWNrLCBjb21tZW50cywgb3Ig cXVlc3Rpb25zLCBwbGVhc2UgbGV0IHVzIGtub3cgYW5kIHdlJ2xsIGRvIG91ciBiZXN0IHRvIGFk ZHJlc3MgaXQuIFRoYW5rIHlvdSEKCi0tLUZpbGVzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0Kb2JqZWN0LXNoYXBlcy5wYXRjaCAoMTgwIEtCKQoKCi0tIApodHRwczovL2J1Z3MucnVi eS1sYW5nLm9yZy8K