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_HI,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY,URIBL_GREY shortcircuit=no autolearn=ham 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 607D81F4D7 for ; Thu, 12 May 2022 15:59:24 +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="JzFACP0q"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 66FD3120E4C; Fri, 13 May 2022 00:59:22 +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 7B6F9120E47 for ; Fri, 13 May 2022 00:59:19 +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=PHIAXd288VAX0R0K3LYl9sAUocgcT6IThMvaEyeYzZ8=; b=JzFACP0qWQ9KC6uX8asTM9wZ/rrofYIY4QrTAPyT6cA0601NuN+ueICO4V2fDlUpQJ4k C/RgsDb6/i6AXLgAkxg7j9cuWlHmTU9lg5CCq13YB9B3Oo8s3vWyOioNPGy5DC5xDXWGeW Q+0p1QqT69LWHbYp90gJwerpCt7yUYbv4= Received: by filterdrecv-75d94df84d-rqslk with SMTP id filterdrecv-75d94df84d-rqslk-1-627D2ED5-72 2022-05-12 15:59:17.961949345 +0000 UTC m=+3089652.821965207 Received: from herokuapp.com (unknown) by geopod-ismtpd-4-0 (SG) with ESMTP id -JZ2gGaQSdCqbDK-FamUGQ for ; Thu, 12 May 2022 15:59:17.915 +0000 (UTC) Date: Thu, 12 May 2022 15:59:17 +0000 (UTC) From: "tenderlovemaking (Aaron Patterson)" 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: tenderlovemaking 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: 84898 X-SG-EID: =?us-ascii?Q?BKB5GcL7X6C0rbmtNyuS4vu6kpqmF4QQnKhBtJ3bB9xFaNZ3GycY7zB6Wl8eil?= =?us-ascii?Q?ZkydIZDAItvjzOlfamM+7a5D1pUwROaGAI=2FXJho?= =?us-ascii?Q?sWvhCDik7A89AbAux0zspw8qBUBggrGNjM7J3hg?= =?us-ascii?Q?fNeNLeU6Y=2FZ5WxikGkS4JeXUIc9ou2BA93dmU7g?= =?us-ascii?Q?ZNJtk+U0Yu8=2Fi4jVcimq=2Fry=2FjQ430uRBCTf1Zr8?= =?us-ascii?Q?PD9ExjICYdmCEolgCmBgFxpI2mRf9pRBBJP25zP?= =?us-ascii?Q?KqNd5MWT06vioaqyMiB0fx15U7pngy7P46q7afb?= =?us-ascii?Q?id4=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 108529 Subject: [ruby-core:108529] [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" SXNzdWUgIzE4Nzc2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgdGVuZGVybG92ZW1ha2luZyAoQWFyb24g UGF0dGVyc29uKS4NCg0KDQpieXJvb3QgKEplYW4gQm91c3NpZXIpIHdyb3RlIGluICNub3RlLTQ6 DQo+ID4gV2Ugd2FudCBvYmplY3Qgc2hhcGVzIHRvIGJlIGVuYWJsZWQgb24gMzIgYml0IHN5c3Rl bXMgYW5kIDY0IGJpdCBzeXN0ZW1zIHNvIHRoYXQgbGltaXRzIHVzIHRvIHRoZSBib3R0b20gMzIg Yml0cyBvZiB0aGUgT2JqZWN0IGhlYWRlci4gDQo+IA0KPiBNaWdodCBiZSBhIHNpbGx5IHF1ZXN0 aW9uLCBidXQgaG93IHBvcHVsYXIgYXJlIDMyYml0cyBzeXN0ZW1zIHRoZXNlIGRheXM/IFdvdWxk IGl0IGJlIGFjY2VwdGFibGUgdG8gbWFrZSBvYmplY3RzIGEgYml0IGJpZ2dlciBvbiAzMiBiaXRz IHN5c3RlbXMgc28gdGhhdCBib3RoIDMyYml0cyBhbmQgNjRiaXRzIFJ1YnkgaGF2ZSBhIDMyYml0 IHNoYXBlIElEcz8NCg0KSSdtIG5vdCBzdXJlIGhvdyBwb3B1bGFyIDMyIGJpdCBzeXN0ZW1zIGFy ZSwgZXNwZWNpYWxseSB3aGVyZSBoaWdoIHBlcmZvcm1hbmNlIGlzIGEgcmVxdWlyZW1lbnQuICBC dXQgSSBkbyB0aGluayB0aGUgYnJvYWRlciBxdWVzdGlvbiBvZiAiaG93IG11Y2ggd29yayBzaG91 bGQgd2UgZG8gdG8gc3VwcG9ydCAzMiBiaXQgc3lzdGVtcz8iIGlzIHNvbWV0aGluZyB3ZSBzaG91 bGQgdGhpbmsgYWJvdXQuICBGb3Igbm93IEkgdGhpbmsgd2UgY2FuIG1ha2Ugc2hhcGVzIHdvcmsg d2VsbCBvbiAzMiBiaXQgbWFjaGluZXMgc28gSSdtIG5vdCB0b28gd29ycmllZCBhYm91dCBpdCBh dCB0aGlzIHBvaW50ICh0aG91Z2ggaXQgZGVmaW5pdGVseSB3b3VsZCBiZSBlYXNpZXIgaWYgd2Ug aGFkIG1vcmUgdGhhbiAxNiBiaXRzIPCfmIYpDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCkZlYXR1cmUgIzE4Nzc2OiBPYmplY3QgU2hhcGVzDQpodHRwczovL2J1 Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTg3NzYjY2hhbmdlLTk3NTcxDQoNCiogQXV0aG9yOiBq ZW1tYWkgKEplbW1hIElzc3JvZmYpDQoqIFN0YXR1czogT3Blbg0KKiBQcmlvcml0eTogTm9ybWFs DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIE9iamVjdCBTaGFw ZXMgaW1wbGVtZW50YXRpb24NCg0KQWFyb24gUGF0dGVyc29uLCBFaWxlZW4gVWNoaXRlbGxlIGFu ZCBJIGhhdmUgYmVlbiB3b3JraW5nIG9uIGFuIGltcGxlbWVudGF0aW9uIG9mIE9iamVjdCBTaGFw ZXMgZm9yIFJ1YnkuICBXZSBhcmUgZmlsaW5nIGEgdGlja2V0IHRvIHNoYXJlIHdoYXQgd2UndmUg YmVlbiBkb2luZywgYXMgd2VsbCBhcyBnZXQgZmVlZGJhY2sgb24gdGhlIHByb2plY3QgaW4gaXRz IGN1cnJlbnQgc3RhdGUuDQoNCldlIGhvcGUgdG8gZXZlbnR1YWxseSBzdWJtaXQgdGhlIGZpbmFs aXplZCBwcm9qZWN0IHVwc3RyZWFtIGFmdGVyIHZlcmlmeWluZyBlZmZpY2FjeS4NCg0KIyMgV2hh dCBhcmUgT2JqZWN0IFNoYXBlcz8NCg0KT2JqZWN0IHNoYXBlcyBhcmUgYSB0ZWNobmlxdWUgZm9y IHJlcHJlc2VudGluZyBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdC4gT3RoZXIgbGFuZ3VhZ2UgaW1w bGVtZW50YXRpb25zLCBpbmNsdWRpbmcgW1RydWZmbGVSdWJ5XShodHRwczovL2dpdGh1Yi5jb20v b3JhY2xlL3RydWZmbGVydWJ5KSBhbmQgW1Y4XShodHRwczovL3Y4LmRldi8pLCB1c2UgdGhpcyB0 ZWNobmlxdWUuIENocmlzIFNlYXRvbiwgdGhlIGNyZWF0b3Igb2YgVHJ1ZmZsZVJ1YnksIGRpc2N1 c3NlZCBvYmplY3Qgc2hhcGVzIGluIGhpcyBbUnVieUthaWdpIDIwMjEgS2V5bm90ZV0oaHR0cHM6 Ly9ydWJ5a2FpZ2kub3JnLzIwMjEtdGFrZW91dC9wcmVzZW50YXRpb25zL2NocmlzZ3NlYXRvbi5o dG1sKSBhbmQgTWF4aW1lIENoZXZhbGllci1Cb2lzdmVydCBkaXNjdXNzZWQgdGhlIGltcGxpY2F0 aW9ucyBmb3IgWUpJVCBpbiB0aGUgbGF0dGVyIHBhcnQgb2YgW2hlciB0YWxrIGF0IFJ1YnlLYWln aSAyMDIxXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVBCVkxmM3lmTXM4JnQ9MTEw MHMpLiBUaGUgb3JpZ2luYWwgaWRlYSBvZiBvYmplY3Qgc2hhcGVzIFtvcmlnaW5hdGVzIGZyb20g dGhlIFNlbGYgbGFuZ3VhZ2VdKGh0dHBzOi8vYmlibGlvZ3JhcGh5LnNlbGZsYW5ndWFnZS5vcmcv X3N0YXRpYy9pbXBsZW1lbnRhdGlvbi5wZGYpLCB3aGljaCBpcyBjb25zaWRlcmVkIGEgZGlyZWN0 IGRlc2NlbmRhbnQgb2YgU21hbGx0YWxrLg0KDQpFYWNoIHNoYXBlIHJlcHJlc2VudHMgYSBzcGVj aWZpYyBzZXQgb2YgYXR0cmlidXRlcyAoaW5zdGFuY2UgdmFyaWFibGVzIGFuZCBvdGhlciBwcm9w ZXJ0aWVzKSBhbmQgdGhlaXIgdmFsdWVzLiBJbiBvdXIgaW1wbGVtZW50YXRpb24sIGFsbCBvYmpl Y3RzIGhhdmUgYSBzaGFwZS4gVGhlIHNoYXBlcyBhcmUgbm9kZXMgaW4gYSB0cmVlIGRhdGEgc3Ry dWN0dXJlLiBFdmVyeSBlZGdlIGluIHRoZSB0cmVlIHJlcHJlc2VudHMgYW4gYXR0cmlidXRlIHRy YW5zaXRpb24uDQoNCk1vcmUgc3BlY2lmaWNhbGx5LCBzZXR0aW5nIGFuIGluc3RhbmNlIHZhcmlh YmxlIG9uIGFuIGluc3RhbmNlIG9mIGFuIG9iamVjdCBjcmVhdGVzIGFuIG91dGdvaW5nIGVkZ2Ug ZnJvbSB0aGUgaW5zdGFuY2UncyBjdXJyZW50IHNoYXBlLiBUaGlzIGlzIGEgdHJhbnNpdGlvbiBm cm9tIG9uZSBzaGFwZSB0byBhbm90aGVyLiBUaGUgZWRnZSByZXByZXNlbnRzIHRoZSBpbnN0YW5j ZSB2YXJpYWJsZSB0aGF0IGlzIHNldC4NCg0KRm9yIGV4YW1wbGU6DQoNCmBgYHJ1YnkNCmNsYXNz IEZvbw0KICBkZWYgaW5pdGlhbGl6ZQ0KICAgICMgQ3VycmVudGx5IHRoaXMgaW5zdGFuY2UgaXMg dGhlIHJvb3Qgc2hhcGUgKElEIDApDQogICAgQGEgPSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcg c2hhcGUgdmlhIGVkZ2UgQGEgKElEIDEpDQogICAgQGIgPSAyICMgVHJhbnNpdGlvbnMgdG8gYSBu ZXcgc2hhcGUgdmlhIGVkZ2UgQGIgKElEIDIpDQogIGVuZA0KZW5kDQoNCmZvbyA9IEZvby5uZXcN CmBgYA0KDQpXaGVuIGBGb29gIGlzIGludGlhbGl6ZWQsIGl0cyBzaGFwZSBpcyB0aGUgcm9vdCBz aGFwZSB3aXRoIElEIDAuICBUaGUgcm9vdCBzaGFwZSByZXByZXNlbnRzIGFuIGVtcHR5IG9iamVj dCB3aXRoIG5vIGluc3RhbmNlIHZhcmlhYmxlcy4gRWFjaCB0aW1lIGFuIGluc3RhbmNlIHZhcmlh YmxlIGlzIHNldCBvbiBgZm9vYCwgdGhlIHNoYXBlIG9mIHRoZSBpbnN0YW5jZSBjaGFuZ2VzLiBJ dCBmaXJzdCB0cmFuc2l0aW9ucyB3aXRoIGBAYWAgdG8gYSBzaGFwZSB3aXRoIElEIDEsIGFuZCB0 aGVuIHRyYW5zaXRpb25zIHdpdGggYEBiYCB0byBhIHNoYXBlIHdpdGggSUQgMi4gSWYgYEBhYCBp cyB0aGVuIHNldCB0byBhIGRpZmZlcmVudCB2YWx1ZSwgaXRzIHNoYXBlIHdpbGwgcmVtYWluIHRo ZSBzaGFwZSB3aXRoIElEIDIsIHNpbmNlIHRoaXMgc2hhcGUgYWxyZWFkeSBpbmNsdWRlcyB0aGUg aW5zdGFuY2UgdmFyaWFibGUgYEBhYC4gIA0KDQohW10oaHR0cHM6Ly91c2VyLWltYWdlcy5naXRo dWJ1c2VyY29udGVudC5jb20vMTk4ODU2MC8xNjc5MTgzNjAtMGE2YzkxYWEtMjU4Ny00OGNiLThm ZjItN2YzYTk1ODMyODhlLnN2ZykNCg0KVGhlcmUgaXMgb25lIGdsb2JhbCBzaGFwZSB0cmVlIGFu ZCBvYmplY3RzIHdoaWNoIHVuZGVyZ28gdGhlIHNhbWUgc2hhcGUgdHJhbnNpdGlvbnMgaW4gdGhl IHNhbWUgb3JkZXIgd2lsbCBlbmQgdXAgd2l0aCB0aGUgc2FtZSBmaW5hbCBzaGFwZS4NCg0KRm9y IGluc3RhbmNlLCBpZiB3ZSBoYXZlIGEgY2xhc3MgYEJhcmAgZGVmaW5lZCBhcyBmb2xsb3dzLCB0 aGUgZmlyc3QgdHJhbnNpdGlvbiBvbiBgQmFyLm5ld2AgdGhyb3VnaCB0aGUgaW5zdGFuY2UgdmFy aWFibGUgYEBhYCB3aWxsIGJlIHRoZSBzYW1lIGFzIGBGb28ubmV3YCdzIGZpcnN0IHRyYW5zaXRp b246DQoNCmBgYHJ1YnkNCmNsYXNzIEZvbw0KICBkZWYgaW5pdGlhbGl6ZQ0KICAgICMgQ3VycmVu dGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUgKElEIDApDQogICAgQGEgPSAxICMg VHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGEgKElEIDEpDQogICAgQGIgPSAy ICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGIgKElEIDIpDQogIGVuZA0K ZW5kDQoNCmNsYXNzIEJhcg0KICBkZWYgaW5pdGlhbGl6ZQ0KICAgICMgQ3VycmVudGx5IHRoaXMg aW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUgKElEIDApDQogICAgQGEgPSAxICMgVHJhbnNpdGlv bnMgdG8gc2hhcGUgZGVmaW5lZCBlYXJsaWVyIHZpYSBlZGdlIEBhIChJRCAxKQ0KICAgIEBjID0g MSAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBjIChJRCAzKQ0KICAgIEBi ID0gMSAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBiIChJRCA0KQ0KICBl bmQNCmVuZA0KDQpmb28gPSBGb28ubmV3ICMgYmx1ZSBpbiB0aGUgZGlhZ3JhbQ0KYmFyID0gQmFy Lm5ldyAjIHJlZCBpbiB0aGUgZGlhZ3JhbQ0KYGBgDQoNCkluIHRoZSBkaWFncmFtIGJlbG93LCBw dXJwbGUgcmVwcmVzZW50cyBzaGFyZWQgdHJhbnNpdGlvbnMsIGJsdWUgcmVwcmVzZW50cyB0cmFu c2l0aW9ucyBmb3Igb25seSBgZm9vYCwgYW5kIHJlZCByZXByZXNlbnRzIHRyYW5zaXRpb25zIGZv ciBvbmx5IGBiYXJgLg0KDQohW10oaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVu dC5jb20vMTk4ODU2MC8xNjc5MTg4OTktZjFhNmYzNDQtYWU1ZS00ZGMwLWIxN2EtZmIxNTZkMWQ1 NTBmLnN2ZykNCg0KIyMjIENhY2hlIHN0cnVjdHVyZQ0KDQpGb3IgaW5zdGFuY2UgdmFyaWFibGUg d3JpdGVycywgdGhlIGN1cnJlbnQgc2hhcGUgSUQsIHRoZSBzaGFwZSBJRCB0aGF0IGl2YXIgd3Jp dGUgd291bGQgdHJhbnNpdGlvbiB0byBhbmQgaW5zdGFuY2UgdmFyaWFibGUgaW5kZXggYXJlIGFs bCBzdG9yZWQgaW4gdGhlIGlubGluZSBjYWNoZS4gVGhlIHNoYXBlIElEIGlzIHRoZSBrZXkgdG8g dGhlIGNhY2hlLg0KDQpGb3IgaW5zdGFuY2UgdmFyaWFibGUgcmVhZGVycywgdGhlIHNoYXBlIElE IGFuZCBpbnN0YW5jZSB2YXJpYWJsZSBpbmRleCBhcmUgc3RvcmVkIGluIHRoZSBpbmxpbmUgY2Fj aGUuICBBZ2FpbiwgdGhlIHNoYXBlIElEIGlzIHRoZSBjYWNoZSBrZXkuDQoNCmBgYHJ1YnkNCmNs YXNzIEZvbw0KICBkZWYgaW5pdGlhbGl6ZQ0KICAgIEBhID0gMSAjIElDIHNoYXBlX2lkOiAwLCBu ZXh0IHNoYXBlOiAxLCBpdiBpbmRleCAwDQogICAgQGIgPSAxICMgSUMgc2hhcGVfaWQ6IDEsIG5l eHQgc2hhcGU6IDIsIGl2IGluZGV4IDENCiAgZW5kDQogICAgDQogIGRlZiBhDQogICAgQGEgIyBJ QyBzaGFwZV9pZDogMiwgaXYgaW5kZXggMA0KICBlbmQNCmVuZA0KYGBgDQoNCiMjIFJhdGlvbmFs ZQ0KDQpXZSB0aGluayB0aGF0IGFuIG9iamVjdCBzaGFwZSBpbXBsZW1lbnRhdGlvbiB3aWxsIHNp bXBsaWZ5IGNhY2hlIGNoZWNrcywgaW5jcmVhc2UgaW5saW5lIGNhY2hlIGhpdHMsIGRlY3JlYXNl IHJ1bnRpbWUgY2hlY2tzLCBhbmQgZW5hYmxlIG90aGVyIHBvdGVudGlhbCBmdXR1cmUgb3B0aW1p emF0aW9ucy4gVGhlc2UgYXJlIGFsbCBleHBsYWluZWQgYmVsb3cuIA0KDQojIyMgU2ltcGxpZnkg Y2FjaGluZw0KDQpUaGUgY3VycmVudCBjYWNoZSBpbXBsZW1lbnRhdGlvbiBkZXBlbmRzIG9uIHRo ZSBjbGFzcyBvZiB0aGUgcmVjZWl2ZXIuIFNpbmNlIHRoZSBhZGRyZXNzIG9mIHRoZSBjbGFzcyBj YW4gYmUgcmV1c2VkLCB0aGUgY3VycmVudCBjYWNoZSBpbXBsZW1lbnRhdGlvbiBhbHNvIGRlcGVu ZHMgb24gYW4gaW5jcmVtZW50aW5nIHNlcmlhbCBudW1iZXIgc2V0IG9uIHRoZSBjbGFzcyAodGhl IGNsYXNzIHNlcmlhbCkuICBUaGUgc2hhcGUgaW1wbGVtZW50YXRpb24gaGFzIG5vIHN1Y2ggZGVw ZW5kZW5jeS4gSXQgb25seSByZXF1aXJlcyBjaGVja2luZyB0aGUgc2hhcGUgSUQgdG8gZGV0ZXJt aW5lIGlmIHRoZSBjYWNoZSBpcyB2YWxpZC4NCg0KIyMjIENhY2hlIGhpdHMNCg0KT2JqZWN0cyB0 aGF0IHNldCBwcm9wZXJ0aWVzIGluIHRoZSBzYW1lIG9yZGVyIGNhbiBzaGFyZSBzaGFwZXMuICBG b3IgZXhhbXBsZToNCg0KYGBgcnVieQ0KY2xhc3MgSG9nZQ0KICBkZWYgaW5pdGlhbGl6ZQ0KICAg ICMgQ3VycmVudGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUgKElEIDApDQogICAg QGEgPSAxICMgVHJhbnNpdGlvbnMgdG8gdGhlIG5leHQgc2hhcGUgdmlhIGVkZ2UgbmFtZWQgQGEN CiAgICBAYiA9IDIgIyBUcmFuc2l0aW9ucyB0byBuZXh0IHNoYXBlIHZpYSBlZGdlIG5hbWVkIEBi DQogIGVuZA0KZW5kDQoNCmNsYXNzIEZ1Z2EgPCBIb2dlOyBlbmQNCg0KaG9nZSA9IEhvZ2UubmV3 DQpmdWdhID0gRnVnYS5uZXcNCmBgYA0KDQpJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIGluc3Rh bmNlcyBgaG9nZWAgYW5kIGBmdWdhYCB3aWxsIHNoYXJlIHRoZSBzYW1lIHNoYXBlIElELiAgVGhp cyBtZWFucyBpbmxpbmUgY2FjaGVzIGluIGBpbml0aWFsaXplYCB3aWxsIGhpdCBpbiBib3RoIGNh c2VzLiAgVGhpcyBjb250cmFzdHMgd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB0aGF0 IHVzZXMgdGhlIGNsYXNzIGFzIHRoZSBjYWNoZSBrZXkuICBJbiBvdGhlciB3b3Jkcywgd2l0aCBv YmplY3Qgc2hhcGVzIHRoZSBhYm92ZSBjb2RlIHdpbGwgaGl0IGlubGluZSBjYWNoZXMgd2hlcmUg dGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gd2lsbCBtaXNzLg0KDQpJZiBwZXJmb3JtYW5jZSB0 ZXN0aW5nIHJldmVhbHMgdGhhdCBjYWNoZSBoaXRzIGFyZSAqbm90KiBzdWJzdGFudGlhbGx5IGlt cHJvdmVkLCB0aGVuIHdlIGNhbiB1c2Ugc2hhcGVzIHRvIHJlY2xhaW0gbWVtb3J5IGZyb20gYFJC YXNpY2AuIFdlIGNhbiBhY2NvbXBsaXNoIHRoaXMgYnkgZW5jb2RpbmcgdGhlIGNsYXNzIHdpdGhp biB0aGUgc2hhcGUgdHJlZS4gVGhpcyB3aWxsIGhhdmUgYW4gZXF1aXZhbGVudCBjYWNoZSBoaXQg cmF0ZSB0byB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gT25jZSB0aGUgY2xhc3MgaXMgZW5j b2RlZCB3aXRoaW4gdGhlIHNoYXBlIHRyZWUsIHdlIGNhbiByZW1vdmUgdGhlIGNsYXNzIHBvaW50 ZXIgZnJvbSBgUkJhc2ljYCBhbmQgZWl0aGVyIHJlY2xhaW0gdGhhdCBtZW1vcnkgb3IgZnJlZSBp dCBmb3IgYW5vdGhlciB1c2UuDQoNCiMjIyBEZWNyZWFzZXMgcnVudGltZSBjaGVja2luZw0KDQpX ZSBjYW4gZW5jb2RlIGF0dHJpYnV0ZXMgdGhhdCBhcmVuJ3QgaW5zdGFuY2UgdmFyaWFibGVzIGlu dG8gYW4gb2JqZWN0J3Mgc2hhcGUuIEN1cnJlbnRseSwgd2UgYWxzbyBpbmNsdWRlIGZyb3plbiB3 aXRoaW4gdGhlIHNoYXBlLiBUaGlzIG1lYW5zIHdlIGNhbiBsaW1pdCBmcm96ZW4gY2hlY2tzIHRv IG9ubHkgY2FjaGUgbWlzc2VzLg0KDQpGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlOg0K DQpgYGBydWJ5DQpjbGFzcyBUb3RvDQogIGRlZiBzZXRfYQ0KICAgIEBhID0gMSAjIGNhY2hlOiBz aGFwZTogMCwgbmV4dCBzaGFwZTogMSwgSVYgaWR4OiAwDQogIGVuZA0KZW5kDQoNCnRvdG8gPSBU b3RvLm5ldyAjIHNoYXBlIDANCnRvdG8uc2V0X2EgICAgICMgc2hhcGUgMQ0KDQp0b3RvID0gVG90 by5uZXcgIyBzaGFwZSAwDQp0b3RvLmZyZWV6ZSAgICAjIHNoYXBlIDINCnRvdG8uc2V0X2EgICAg ICMgQ2FjaGUgbWlzcywgRXhjZXB0aW9uIQ0KYGBgDQoNCiFbXShodHRwczovL3VzZXItaW1hZ2Vz LmdpdGh1YnVzZXJjb250ZW50LmNvbS8xOTg4NTYwLzE2NzkyMDAwMS1jNGU2MzI2Yi0zYTNjLTQ4 M2ItYTc5Ny05ZTAyMzE3NjQ3ZDcuc3ZnKQ0KDQpXaXRob3V0IHNoYXBlcywgYWxsIGluc3RhbmNl IHZhcmlhYmxlIHNldHMgcmVxdWlyZSBjaGVja2luZyB0aGUgZnJvemVuIHN0YXR1cyBvZiB0aGUg b2JqZWN0LiBXaXRoIHNoYXBlcywgd2Ugb25seSBuZWVkIHRvIGNoZWNrIHRoZSBmcm96ZW4gc3Rh dHVzIG9uIGNhY2hlIG1pc3Nlcy4NCg0KV2UgY2FuIGFsc28gZWxpbWluYXRlIGVtYmVkZGVkIGFu ZCBleHRlbmRlZCBjaGVja3Mgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIG9iamVjdCBzaGFwZXMu IEFueSBwYXJ0aWN1bGFyIHNoYXBlIHJlcHJlc2VudHMgYW4gb2JqZWN0IHRoYXQgaXMgX2VpdGhl cl8gZXh0ZW5kZWQgb3IgZW1iZWRkZWQuIEpJVHMgY2FuIHBvc3NpYmx5IHRha2UgYWR2YW50YWdl IG9mIHRoaXMgZmFjdCBieSBnZW5lcmF0aW5nIHNwZWNpYWxpemVkIG1hY2hpbmUgY29kZSBiYXNl ZCBvbiB0aGUgc2hhcGVzLiANCiAgICANCiMjIyBDbGFzcyBpbnN0YW5jZSB2YXJpYWJsZXMgY2Fu IGJlIHN0b3JlZCBpbiBhbiBhcnJheQ0KDQpDdXJyZW50bHksIGBUX0NMQVNTYCBhbmQgYFRfTU9E VUxFYCBpbnN0YW5jZXMgY2Fubm90IHVzZSB0aGUgc2FtZSBJViBpbmRleCB0YWJsZSBvcHRpbWl6 YXRpb24gdGhhdCBgVF9PQkpFQ1RgIGluc3RhbmNlcyB1c2UuICBXZSB0aGluayB0aGF0IHRoZSBv YmplY3Qgc2hhcGVzIHRlY2huaXF1ZSBjYW4gYmUgbGV2ZXJhZ2VkIGJ5IGNsYXNzIGluc3RhbmNl cyB0byB1c2UgYXJyYXlzIGZvciBjbGFzcyBpbnN0YW5jZSB2YXJpYWJsZSBzdG9yYWdlIGFuZCBt YXkgcG9zc2libHkgbGVhZCB0byBhIHJlZHVjdGlvbiBpbiBtZW1vcnkgdXNhZ2UgKHRob3VnaCB3 ZSBoYXZlIHlldCB0byB0ZXN0IHRoaXMpLg0KDQojIyBJbXBsZW1lbnRhdGlvbiBEZXRhaWxzDQoN CltIZXJlXShodHRwczovL2dpdGh1Yi5jb20vamVtbWFpc3Nyb2ZmL3J1YnkvY29tbWl0LzRlOTVk MDE2NTRmMjRjZWZmNmM4MzMwY2Y0ZTVjN2RhYzUwNDczOWUpIGlzIGEgbGluayB0byBvdXIgY29k ZSBzbyBmYXIuDQoNCkFzIG1lbnRpb25lZCBlYXJsaWVyLCBzaGFwZSBvYmplY3RzIGZvcm0gYSB0 cmVlIGRhdGEgc3RydWN0dXJlLiAgSW4gb3JkZXIgdG8gbG9vayB1cCB0aGUgc2hhcGUgcXVpY2ts eSwgd2UgYWxzbyBzdG9yZSB0aGUgc2hhcGVzIGluIGEgd2VhayBhcnJheSB0aGF0IGlzIHN0b3Jl ZCBvbiB0aGUgVk0uICBUaGUgSUQgb2YgdGhlIHNoYXBlIGlzIHRoZSBpbmRleCBpbiB0byB0aGUg YXJyYXksIGFuZCB0aGUgSUQgaXMgc3RvcmVkIG9uIHRoZSBvYmplY3QuDQoNCkZvciBgVF9PQkpF Q1RgIG9iamVjdHMsIHdlIHN0b3JlIHRoZSBzaGFwZSBJRCBpbiB0aGUgb2JqZWN0J3MgaGVhZGVy LiBPbiA2NCBiaXQgc3lzdGVtcywgdGhlIHVwcGVyIDMyIGJpdHMgYXJlIHVzZWQgYnkgUmFjdG9y cy4gIFdlIHdhbnQgb2JqZWN0IHNoYXBlcyB0byBiZSBlbmFibGVkIG9uIDMyIGJpdCBzeXN0ZW1z IGFuZCA2NCBiaXQgc3lzdGVtcyBzbyB0aGF0IGxpbWl0cyB1cyB0byB0aGUgYm90dG9tIDMyIGJp dHMgb2YgdGhlIE9iamVjdCBoZWFkZXIuICBUaGUgdG9wIDIwIGJpdHMgZm9yIGBUX09CSkVDVGAg b2JqZWN0cyB3YXMgdW51c2VkLCBzbyB3ZSB1c2VkIHRoZSB0b3AgMTYgYml0cyBmb3IgdGhlIHNo YXBlIGlkLiAgV2UgY2hvc2UgdGhlIHRvcCAxNiBiaXRzIGJlY2F1c2UgdGhpcyBhbGxvd3MgdXMg dG8gdXNlIGB1aW50MTZfdGAgYW5kIG1hc2tpbmcgdGhlIGhlYWRlciBiaXRzIGlzIGVhc2llci4N Cg0KVGhpcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgbGltaXRzIHVzIHRvIH42NWsgc2hhcGVzLiBX ZSBtZWFzdXJlZCB0aGUgbnVtYmVyIG9mIHNoYXBlcyB1c2VkIG9uIGEgc2ltcGxlIFtEaXNjb3Vy c2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3Vyc2UvZGlzY291cnNlKSBhcHBsaWNhdGlvbiAo fjMuNWspLCBbUmFpbHNCZW5jaF0oaHR0cHM6Ly9naXRodWIuY29tL2swa3VidW4vcmFpbHNiZW5j aCkgKH40ayksIGFuZCBTaG9waWZ5J3MgbW9ub2xpdGgncyB0ZXN0IHN1aXRlICh+NDBrKS4gQWNj b3JkaW5nbHksIHdlIGRlY2lkZWQgdG8gaW1wbGVtZW50IGdhcmJhZ2UgY29sbGVjdGlvbiBvbiBv YmplY3Qgc2hhcGVzIHNvIHdlIGNhbiByZWN5Y2xlIHNoYXBlIElEcyB3aGljaCBhcmUgbm8gbG9u Z2VyIGluIHVzZS4gIFdlIGFyZSBjdXJyZW50bHkgd29ya2luZyBvbiBzaGFwZSBHQy4NCg0KRXZl biB0aG91Z2ggaXQncyB1bmxpa2VseSwgaXQncyBzdGlsbCBwb3NzaWJsZSBmb3IgYW4gYXBwbGlj YXRpb24gdG8gcnVuIG91dCBvZiBzaGFwZXMuIE9uY2UgYWxsIHNoYXBlIElEcyBhcmUgaW4gdXNl LCBhbnkgb2JqZWN0cyB0aGF0IG5lZWQgbmV3IHNoYXBlIElEcyB3aWxsIG5ldmVyIGhpdCBvbiBp bmxpbmUgY2FjaGVzLg0KDQojIyBFdmFsdWF0aW9uDQoNCldlIGhhdmUgc28gZmFyIHRlc3RlZCB0 aGlzIGJyYW5jaCB3aXRoIFtEaXNjb3Vyc2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3Vyc2Uv ZGlzY291cnNlKSwgW1JhaWxzQmVuY2hdKGh0dHBzOi8vZ2l0aHViLmNvbS9rMGt1YnVuL3JhaWxz YmVuY2gpIGFuZCBTaG9waWZ5J3MgbW9ub2xpdGguIFdlIHBsYW4gdG8gdGVzdCB0aGlzIGJyYW5j aCBtb3JlIGJyb2FkbHkgYWdhaW5zdCBzZXZlcmFsIG9wZW4gc291cmNlIFJ1YnkgYW5kIFJhaWxz IGFwcGxpY2F0aW9ucy4gDQoNCkJlZm9yZSB3ZSBjb25zaWRlciB0aGlzIGJyYW5jaCB0byBiZSBy ZWFkeSBmb3IgZm9ybWFsIHJldmlldywgd2Ugd2FudCB0aGUgcnVudGltZSBwZXJmb3JtYW5jZSBh bmQgbWVtb3J5IHVzYWdlIG9mIHRoZXNlIGJlbmNobWFya3MgdG8gYmUgZXF1aXZhbGVudCBvciBi ZXR0ZXIgdGhhbiBpdCBpcyBjdXJyZW50bHkuIEluIG91ciBvcGluaW9uLCBldmVuIHdpdGggZXF1 aXZhbGVudCBydW50aW1lIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgdXNhZ2UsIHRoZSBmdXR1cmUg YmVuZWZpdHMgb2YgdGhpcyBhcHByb2FjaCBtYWtlIHRoZSBjaGFuZ2Ugc2VlbSB3b3J0aHdoaWxl Lg0KDQojIyBGZWVkYmFjaw0KDQpJZiB5b3UgaGF2ZSBhbnkgZmVlZGJhY2ssIGNvbW1lbnRzLCBv ciBxdWVzdGlvbnMsIHBsZWFzZSBsZXQgdXMga25vdyBhbmQgd2UnbGwgZG8gb3VyIGJlc3QgdG8g YWRkcmVzcyBpdC4gVGhhbmsgeW91IQ0KDQoNCg0KLS0gDQpodHRwczovL2J1Z3MucnVieS1sYW5n Lm9yZy8NCg==