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 3F1751F54E for ; Thu, 18 Aug 2022 15:41:03 +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="qOFu3yC3"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id B885712185E; Fri, 19 Aug 2022 00:41:01 +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 B102B121175 for ; Fri, 19 Aug 2022 00:40:58 +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=b0WdA7VBUKmeySMFPHMUiEk6J5/D2LxHHrm/JyHferg=; b=qOFu3yC3VqySAweJ50sle0MYZgK4eGpcYXToa5swPRsb8uReBGvnxfV4fgwvfQQCbSZm Y6xLsC0dJEpmfgtAPzcOTkduf4NybAWe1nof/Y6+W8lqu523a3E7Ik1At6Imdq0XwABJ3g ut8LFbigUb/V1oeBDM9KN8BY0ZUtKWtko= Received: by filterdrecv-67c4c66ffd-lw9xw with SMTP id filterdrecv-67c4c66ffd-lw9xw-1-62FE5D84-13 2022-08-18 15:40:52.317805742 +0000 UTC m=+2403307.284383823 Received: from herokuapp.com (unknown) by geopod-ismtpd-6-0 (SG) with ESMTP id tmPY9Fz1Q4WqSG76VIDA7Q for ; Thu, 18 Aug 2022 15:40:52.279 +0000 (UTC) Date: Thu, 18 Aug 2022 15:40:52 +0000 (UTC) From: "Dan0042 (Daniel DeLorme)" 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: Dan0042 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: 85959 X-SG-EID: =?us-ascii?Q?9vnO9kNFlf1pwhty1clU3mt9eNWYniufdXqocdsQQtaDTWZk4+b5g5js0Akvaj?= =?us-ascii?Q?32LW=2F+fGSAom3tt8Jo+=2FGW3uDD0ktbmu7qAbln0?= =?us-ascii?Q?uJrjICTEbt2az7MBjXr1U=2F2bJktxlPRPqASKZTe?= =?us-ascii?Q?rNgtGm=2FN36B0VNENFelXQfJsFdLpCdZ+3kA7Zd7?= =?us-ascii?Q?KER1cQXjLL0fHzgJsU=2FSo+u1y5IoyxijzaFv1ww?= =?us-ascii?Q?7uHffVgo+bPWksHmL9z9Is0NDfhmEmB1WP9eK54?= =?us-ascii?Q?D4ly7y2Liv1DkOuuZqmdQ=3D=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 109551 Subject: [ruby-core:109551] [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" SXNzdWUgIzE4Nzc2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgRGFuMDA0MiAoRGFuaWVsIERlTG9ybWUp LgoKClRoYW5rIHlvdSBmb3IgdGhpcyBpbXBvcnRhbnQgd29yay4gSW4gcGFydGljdWxhciBJIHRo aW5rIHNoYXBlcyB3aWxsIGJlIHZlcnkgdXNlZnVsIGluIHRoZSBmdXR1cmUgdG8gaW1wcm92ZSB0 aGUgcGVyZm9ybWFuY2Ugb2Yga2V5d29yZCBhcmd1bWVudHMuCgpUaGUgZm9sbG93aW5nIGNvbW1l bnRzL25pdHBpY2tzIG1heSBiZSBpcnJlbGV2YW50IChvciBJIG1heSBoYXZlIG1pc3VuZGVyc3Rv b2QgdGhlIGNvZGUgY29tcGxldGVseSksIGJ1dCBJIGhhZCB0byBnZXQgdGhlbSBvZmYgbXkgYnJh aW46CgooMSkgSXQgd291bGQgYmUgbmljZSB0byBjb252ZXJ0IHRoZSBtYWdpYyBudW1iZXJzIGlu dG8gY29uc3RhbnRzLiBTbyBtYXliZSB3ZSBjb3VsZCBoYXZlIGAjZGVmaW5lIFNIQVBFX0JJVFMg MTZgIGFuZCBgI2RlZmluZSBTSEFQRV9NQVNLICgoMTw8U0hBUEVfQklUUyktMSlgIGFuZCB0aGVu IG90aGVyIGNvbnN0YW50cyB0aGF0IGRlcml2ZSBmcm9tIHRoYXQsIGFuZCBtYXliZSBpdCB3b3Vs ZCBiZSBwb3NzaWJsZSB0byBjb21waWxlIGEgdmVyc2lvbiB3aXRoIDE3LWJpdCBzaGFwZXMuCgoo MikgSXQgbG9va3MgdG8gbWUgbGlrZSBgcmJfc2hhcGVfZ2V0X2l2X2luZGV4YCBpcyByZWFsbHkg Y3JpdGljYWwgdG8gcGVyZm9ybWFuY2UsIGJ1dCB0aGUgbGlua2VkLWxpc3Qgc3RydWN0dXJlIGhh cyBiYWQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGZvciBsb2NhbGl0eSBvZiBtZW1vcnkg YWNjZXNzLiBJZiBhbiBvYmplY3QgaGFzIDYgaXZhcnMgeW91IG5lZWQgdG8gcmVhZCA3IG5vbi1j b250aWd1b3VzIHN0cnVjdHMgZm9yICplYWNoKiBpdmFyIGFjY2Vzcy4gSXQgc2hvdWxkIGJlIGZh ciBtb3JlIGNwdS1lZmZpY2llbnQgaWYgZWFjaCBzaGFwZSBzdHJ1Y3QgaGFkIHRoZSBmdWxsIGxp c3Qgb2YgSURzIGluIHRoZSBzaGFwZS4gV2l0aCBhIFNJTUQgaW5zdHJ1Y3Rpb24gaXQgd291bGQg YmUgc3VwZXItZmFzdCB0byBmaW5kIHRoZSBpbmRleCBmb3IgYSBnaXZlbiBJRCwgYnV0IGV2ZW4g d2l0aG91dCBTSU1EIHRoZSBtZW1vcnkgbG9jYWxpdHkgd291bGQgYmUgbXVjaCBiZXR0ZXIuCgoo MykgVGhlIGZyb3plbiBmbGFnIGlzIHJlcHJlc2VudGVkIGFzIGEgZGlmZmVyZW50IHJvb3Qgc2hh cGUsIGJ1dCB0aGlzIHJlc3VsdHMgaW4gbWFueSBleHRyYSBzaGFwZXMgdGhhdCBhcmUgbm90IHVz ZWQgYnkgYW55IG9iamVjdDoKCmBgYHJ1YnkKZGVmIGluaXRpYWxpemUoYSxiLGMsZCkKICBAYSxA YixAYyxAZCA9IGEsYixjLGQKICBmcmVlemUKZW5kCmBgYAogICAgMChyb290KSAtPiAyKEBhKSAt PiAzKEBhLEBiKSAtPiA0KEBhLEBiLEBjKSAtPiA1KEBhLEBiLEBjLEBkKQogICAgCiAgICAxKGZy b3plbikgLT4gNihAYSkgLT4gNyhAYSxAYikgLT4gOChAYSxAYixAYykgLT4gOShAYSxAYixAYyxA ZCkKCklmIHRoZSBmcm96ZW4gZmxhZyB3YXMgcmVwcmVzZW50ZWQgYnkgYSBsZWFmIG5vZGUsIHRo aXMgd291bGQgdXNlIGZld2VyIHNoYXBlcy4gKEl0IHdvdWxkIGFsc28gbWlycm9yIHRoZSBvcmRl ciBvZiBvcGVyYXRpb25zIGFuZCB0aGUgZmFjdCB0aGF0IGFmdGVyIGZyZWV6aW5nIGl0J3Mgbm90 IHBvc3NpYmxlIGFkZCBtb3JlIGl2YXJzLikKCiAgICAwKHJvb3QpIC0+IDEoQGEpIC0+IDIoQGEs QGIpIC0+IDMoQGEsQGIsQGMpIC0+IDQoQGEsQGIsQGMsQGQpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgNShAYSxAYixAYyxAZCxmcm96ZW4pCgoKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGZWF0dXJlICMxODc3NjogT2JqZWN0 IFNoYXBlcwpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTg3NzYjY2hhbmdlLTk4 NzIxCgoqIEF1dGhvcjogamVtbWFpIChKZW1tYSBJc3Nyb2ZmKQoqIFN0YXR1czogT3BlbgoqIFBy aW9yaXR5OiBOb3JtYWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoj IE9iamVjdCBTaGFwZXMgaW1wbGVtZW50YXRpb24KCkFhcm9uIFBhdHRlcnNvbiwgRWlsZWVuIFVj aGl0ZWxsZSBhbmQgSSBoYXZlIGJlZW4gd29ya2luZyBvbiBhbiBpbXBsZW1lbnRhdGlvbiBvZiBP YmplY3QgU2hhcGVzIGZvciBSdWJ5LiAgV2UgYXJlIGZpbGluZyBhIHRpY2tldCB0byBzaGFyZSB3 aGF0IHdlJ3ZlIGJlZW4gZG9pbmcsIGFzIHdlbGwgYXMgZ2V0IGZlZWRiYWNrIG9uIHRoZSBwcm9q ZWN0IGluIGl0cyBjdXJyZW50IHN0YXRlLgoKV2UgaG9wZSB0byBldmVudHVhbGx5IHN1Ym1pdCB0 aGUgZmluYWxpemVkIHByb2plY3QgdXBzdHJlYW0gYWZ0ZXIgdmVyaWZ5aW5nIGVmZmljYWN5LgoK IyMgV2hhdCBhcmUgT2JqZWN0IFNoYXBlcz8KCk9iamVjdCBzaGFwZXMgYXJlIGEgdGVjaG5pcXVl IGZvciByZXByZXNlbnRpbmcgcHJvcGVydGllcyBvZiBhbiBvYmplY3QuIE90aGVyIGxhbmd1YWdl IGltcGxlbWVudGF0aW9ucywgaW5jbHVkaW5nIFtUcnVmZmxlUnVieV0oaHR0cHM6Ly9naXRodWIu Y29tL29yYWNsZS90cnVmZmxlcnVieSkgYW5kIFtWOF0oaHR0cHM6Ly92OC5kZXYvKSwgdXNlIHRo aXMgdGVjaG5pcXVlLiBDaHJpcyBTZWF0b24sIHRoZSBjcmVhdG9yIG9mIFRydWZmbGVSdWJ5LCBk aXNjdXNzZWQgb2JqZWN0IHNoYXBlcyBpbiBoaXMgW1J1YnlLYWlnaSAyMDIxIEtleW5vdGVdKGh0 dHBzOi8vcnVieWthaWdpLm9yZy8yMDIxLXRha2VvdXQvcHJlc2VudGF0aW9ucy9jaHJpc2dzZWF0 b24uaHRtbCkgYW5kIE1heGltZSBDaGV2YWxpZXItQm9pc3ZlcnQgZGlzY3Vzc2VkIHRoZSBpbXBs aWNhdGlvbnMgZm9yIFlKSVQgaW4gdGhlIGxhdHRlciBwYXJ0IG9mIFtoZXIgdGFsayBhdCBSdWJ5 S2FpZ2kgMjAyMV0oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1QQlZMZjN5Zk1zOCZ0 PTExMDBzKS4gVGhlIG9yaWdpbmFsIGlkZWEgb2Ygb2JqZWN0IHNoYXBlcyBbb3JpZ2luYXRlcyBm cm9tIHRoZSBTZWxmIGxhbmd1YWdlXShodHRwczovL2JpYmxpb2dyYXBoeS5zZWxmbGFuZ3VhZ2Uu b3JnL19zdGF0aWMvaW1wbGVtZW50YXRpb24ucGRmKSwgd2hpY2ggaXMgY29uc2lkZXJlZCBhIGRp cmVjdCBkZXNjZW5kYW50IG9mIFNtYWxsdGFsay4KCkVhY2ggc2hhcGUgcmVwcmVzZW50cyBhIHNw ZWNpZmljIHNldCBvZiBhdHRyaWJ1dGVzIChpbnN0YW5jZSB2YXJpYWJsZXMgYW5kIG90aGVyIHBy b3BlcnRpZXMpIGFuZCB0aGVpciB2YWx1ZXMuIEluIG91ciBpbXBsZW1lbnRhdGlvbiwgYWxsIG9i amVjdHMgaGF2ZSBhIHNoYXBlLiBUaGUgc2hhcGVzIGFyZSBub2RlcyBpbiBhIHRyZWUgZGF0YSBz dHJ1Y3R1cmUuIEV2ZXJ5IGVkZ2UgaW4gdGhlIHRyZWUgcmVwcmVzZW50cyBhbiBhdHRyaWJ1dGUg dHJhbnNpdGlvbi4KCk1vcmUgc3BlY2lmaWNhbGx5LCBzZXR0aW5nIGFuIGluc3RhbmNlIHZhcmlh YmxlIG9uIGFuIGluc3RhbmNlIG9mIGFuIG9iamVjdCBjcmVhdGVzIGFuIG91dGdvaW5nIGVkZ2Ug ZnJvbSB0aGUgaW5zdGFuY2UncyBjdXJyZW50IHNoYXBlLiBUaGlzIGlzIGEgdHJhbnNpdGlvbiBm cm9tIG9uZSBzaGFwZSB0byBhbm90aGVyLiBUaGUgZWRnZSByZXByZXNlbnRzIHRoZSBpbnN0YW5j ZSB2YXJpYWJsZSB0aGF0IGlzIHNldC4KCkZvciBleGFtcGxlOgoKYGBgcnVieQpjbGFzcyBGb28K ICBkZWYgaW5pdGlhbGl6ZQogICAgIyBDdXJyZW50bHkgdGhpcyBpbnN0YW5jZSBpcyB0aGUgcm9v dCBzaGFwZSAoSUQgMCkKICAgIEBhID0gMSAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZp YSBlZGdlIEBhIChJRCAxKQogICAgQGIgPSAyICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUg dmlhIGVkZ2UgQGIgKElEIDIpCiAgZW5kCmVuZAoKZm9vID0gRm9vLm5ldwpgYGAKCldoZW4gYEZv b2AgaXMgaW50aWFsaXplZCwgaXRzIHNoYXBlIGlzIHRoZSByb290IHNoYXBlIHdpdGggSUQgMC4g IFRoZSByb290IHNoYXBlIHJlcHJlc2VudHMgYW4gZW1wdHkgb2JqZWN0IHdpdGggbm8gaW5zdGFu Y2UgdmFyaWFibGVzLiBFYWNoIHRpbWUgYW4gaW5zdGFuY2UgdmFyaWFibGUgaXMgc2V0IG9uIGBm b29gLCB0aGUgc2hhcGUgb2YgdGhlIGluc3RhbmNlIGNoYW5nZXMuIEl0IGZpcnN0IHRyYW5zaXRp b25zIHdpdGggYEBhYCB0byBhIHNoYXBlIHdpdGggSUQgMSwgYW5kIHRoZW4gdHJhbnNpdGlvbnMg d2l0aCBgQGJgIHRvIGEgc2hhcGUgd2l0aCBJRCAyLiBJZiBgQGFgIGlzIHRoZW4gc2V0IHRvIGEg ZGlmZmVyZW50IHZhbHVlLCBpdHMgc2hhcGUgd2lsbCByZW1haW4gdGhlIHNoYXBlIHdpdGggSUQg Miwgc2luY2UgdGhpcyBzaGFwZSBhbHJlYWR5IGluY2x1ZGVzIHRoZSBpbnN0YW5jZSB2YXJpYWJs ZSBgQGFgLiAgCgohW10oaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20v MTk4ODU2MC8xNjc5MTgzNjAtMGE2YzkxYWEtMjU4Ny00OGNiLThmZjItN2YzYTk1ODMyODhlLnN2 ZykKClRoZXJlIGlzIG9uZSBnbG9iYWwgc2hhcGUgdHJlZSBhbmQgb2JqZWN0cyB3aGljaCB1bmRl cmdvIHRoZSBzYW1lIHNoYXBlIHRyYW5zaXRpb25zIGluIHRoZSBzYW1lIG9yZGVyIHdpbGwgZW5k IHVwIHdpdGggdGhlIHNhbWUgZmluYWwgc2hhcGUuCgpGb3IgaW5zdGFuY2UsIGlmIHdlIGhhdmUg YSBjbGFzcyBgQmFyYCBkZWZpbmVkIGFzIGZvbGxvd3MsIHRoZSBmaXJzdCB0cmFuc2l0aW9uIG9u IGBCYXIubmV3YCB0aHJvdWdoIHRoZSBpbnN0YW5jZSB2YXJpYWJsZSBgQGFgIHdpbGwgYmUgdGhl IHNhbWUgYXMgYEZvby5uZXdgJ3MgZmlyc3QgdHJhbnNpdGlvbjoKCmBgYHJ1YnkKY2xhc3MgRm9v CiAgZGVmIGluaXRpYWxpemUKICAgICMgQ3VycmVudGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJv b3Qgc2hhcGUgKElEIDApCiAgICBAYSA9IDEgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2 aWEgZWRnZSBAYSAoSUQgMSkKICAgIEBiID0gMiAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBl IHZpYSBlZGdlIEBiIChJRCAyKQogIGVuZAplbmQKCmNsYXNzIEJhcgogIGRlZiBpbml0aWFsaXpl CiAgICAjIEN1cnJlbnRseSB0aGlzIGluc3RhbmNlIGlzIHRoZSByb290IHNoYXBlIChJRCAwKQog ICAgQGEgPSAxICMgVHJhbnNpdGlvbnMgdG8gc2hhcGUgZGVmaW5lZCBlYXJsaWVyIHZpYSBlZGdl IEBhIChJRCAxKQogICAgQGMgPSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVk Z2UgQGMgKElEIDMpCiAgICBAYiA9IDEgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEg ZWRnZSBAYiAoSUQgNCkKICBlbmQKZW5kCgpmb28gPSBGb28ubmV3ICMgYmx1ZSBpbiB0aGUgZGlh Z3JhbQpiYXIgPSBCYXIubmV3ICMgcmVkIGluIHRoZSBkaWFncmFtCmBgYAoKSW4gdGhlIGRpYWdy YW0gYmVsb3csIHB1cnBsZSByZXByZXNlbnRzIHNoYXJlZCB0cmFuc2l0aW9ucywgYmx1ZSByZXBy ZXNlbnRzIHRyYW5zaXRpb25zIGZvciBvbmx5IGBmb29gLCBhbmQgcmVkIHJlcHJlc2VudHMgdHJh bnNpdGlvbnMgZm9yIG9ubHkgYGJhcmAuCgohW10oaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1 c2VyY29udGVudC5jb20vMTk4ODU2MC8xNjc5MTg4OTktZjFhNmYzNDQtYWU1ZS00ZGMwLWIxN2Et ZmIxNTZkMWQ1NTBmLnN2ZykKCiMjIyBDYWNoZSBzdHJ1Y3R1cmUKCkZvciBpbnN0YW5jZSB2YXJp YWJsZSB3cml0ZXJzLCB0aGUgY3VycmVudCBzaGFwZSBJRCwgdGhlIHNoYXBlIElEIHRoYXQgaXZh ciB3cml0ZSB3b3VsZCB0cmFuc2l0aW9uIHRvIGFuZCBpbnN0YW5jZSB2YXJpYWJsZSBpbmRleCBh cmUgYWxsIHN0b3JlZCBpbiB0aGUgaW5saW5lIGNhY2hlLiBUaGUgc2hhcGUgSUQgaXMgdGhlIGtl eSB0byB0aGUgY2FjaGUuCgpGb3IgaW5zdGFuY2UgdmFyaWFibGUgcmVhZGVycywgdGhlIHNoYXBl IElEIGFuZCBpbnN0YW5jZSB2YXJpYWJsZSBpbmRleCBhcmUgc3RvcmVkIGluIHRoZSBpbmxpbmUg Y2FjaGUuICBBZ2FpbiwgdGhlIHNoYXBlIElEIGlzIHRoZSBjYWNoZSBrZXkuCgpgYGBydWJ5CmNs YXNzIEZvbwogIGRlZiBpbml0aWFsaXplCiAgICBAYSA9IDEgIyBJQyBzaGFwZV9pZDogMCwgbmV4 dCBzaGFwZTogMSwgaXYgaW5kZXggMAogICAgQGIgPSAxICMgSUMgc2hhcGVfaWQ6IDEsIG5leHQg c2hhcGU6IDIsIGl2IGluZGV4IDEKICBlbmQKICAgIAogIGRlZiBhCiAgICBAYSAjIElDIHNoYXBl X2lkOiAyLCBpdiBpbmRleCAwCiAgZW5kCmVuZApgYGAKCiMjIFJhdGlvbmFsZQoKV2UgdGhpbmsg dGhhdCBhbiBvYmplY3Qgc2hhcGUgaW1wbGVtZW50YXRpb24gd2lsbCBzaW1wbGlmeSBjYWNoZSBj aGVja3MsIGluY3JlYXNlIGlubGluZSBjYWNoZSBoaXRzLCBkZWNyZWFzZSBydW50aW1lIGNoZWNr cywgYW5kIGVuYWJsZSBvdGhlciBwb3RlbnRpYWwgZnV0dXJlIG9wdGltaXphdGlvbnMuIFRoZXNl IGFyZSBhbGwgZXhwbGFpbmVkIGJlbG93LiAKCiMjIyBTaW1wbGlmeSBjYWNoaW5nCgpUaGUgY3Vy cmVudCBjYWNoZSBpbXBsZW1lbnRhdGlvbiBkZXBlbmRzIG9uIHRoZSBjbGFzcyBvZiB0aGUgcmVj ZWl2ZXIuIFNpbmNlIHRoZSBhZGRyZXNzIG9mIHRoZSBjbGFzcyBjYW4gYmUgcmV1c2VkLCB0aGUg Y3VycmVudCBjYWNoZSBpbXBsZW1lbnRhdGlvbiBhbHNvIGRlcGVuZHMgb24gYW4gaW5jcmVtZW50 aW5nIHNlcmlhbCBudW1iZXIgc2V0IG9uIHRoZSBjbGFzcyAodGhlIGNsYXNzIHNlcmlhbCkuICBU aGUgc2hhcGUgaW1wbGVtZW50YXRpb24gaGFzIG5vIHN1Y2ggZGVwZW5kZW5jeS4gSXQgb25seSBy ZXF1aXJlcyBjaGVja2luZyB0aGUgc2hhcGUgSUQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjYWNoZSBp cyB2YWxpZC4KCiMjIyBDYWNoZSBoaXRzCgpPYmplY3RzIHRoYXQgc2V0IHByb3BlcnRpZXMgaW4g dGhlIHNhbWUgb3JkZXIgY2FuIHNoYXJlIHNoYXBlcy4gIEZvciBleGFtcGxlOgoKYGBgcnVieQpj bGFzcyBIb2dlCiAgZGVmIGluaXRpYWxpemUKICAgICMgQ3VycmVudGx5IHRoaXMgaW5zdGFuY2Ug aXMgdGhlIHJvb3Qgc2hhcGUgKElEIDApCiAgICBAYSA9IDEgIyBUcmFuc2l0aW9ucyB0byB0aGUg bmV4dCBzaGFwZSB2aWEgZWRnZSBuYW1lZCBAYQogICAgQGIgPSAyICMgVHJhbnNpdGlvbnMgdG8g bmV4dCBzaGFwZSB2aWEgZWRnZSBuYW1lZCBAYgogIGVuZAplbmQKCmNsYXNzIEZ1Z2EgPCBIb2dl OyBlbmQKCmhvZ2UgPSBIb2dlLm5ldwpmdWdhID0gRnVnYS5uZXcKYGBgCgpJbiB0aGUgYWJvdmUg ZXhhbXBsZSwgdGhlIGluc3RhbmNlcyBgaG9nZWAgYW5kIGBmdWdhYCB3aWxsIHNoYXJlIHRoZSBz YW1lIHNoYXBlIElELiAgVGhpcyBtZWFucyBpbmxpbmUgY2FjaGVzIGluIGBpbml0aWFsaXplYCB3 aWxsIGhpdCBpbiBib3RoIGNhc2VzLiAgVGhpcyBjb250cmFzdHMgd2l0aCB0aGUgY3VycmVudCBp bXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgdGhlIGNsYXNzIGFzIHRoZSBjYWNoZSBrZXkuICBJbiBv dGhlciB3b3Jkcywgd2l0aCBvYmplY3Qgc2hhcGVzIHRoZSBhYm92ZSBjb2RlIHdpbGwgaGl0IGlu bGluZSBjYWNoZXMgd2hlcmUgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gd2lsbCBtaXNzLgoK SWYgcGVyZm9ybWFuY2UgdGVzdGluZyByZXZlYWxzIHRoYXQgY2FjaGUgaGl0cyBhcmUgKm5vdCog c3Vic3RhbnRpYWxseSBpbXByb3ZlZCwgdGhlbiB3ZSBjYW4gdXNlIHNoYXBlcyB0byByZWNsYWlt IG1lbW9yeSBmcm9tIGBSQmFzaWNgLiBXZSBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IGVuY29kaW5n IHRoZSBjbGFzcyB3aXRoaW4gdGhlIHNoYXBlIHRyZWUuIFRoaXMgd2lsbCBoYXZlIGFuIGVxdWl2 YWxlbnQgY2FjaGUgaGl0IHJhdGUgdG8gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIE9uY2Ug dGhlIGNsYXNzIGlzIGVuY29kZWQgd2l0aGluIHRoZSBzaGFwZSB0cmVlLCB3ZSBjYW4gcmVtb3Zl IHRoZSBjbGFzcyBwb2ludGVyIGZyb20gYFJCYXNpY2AgYW5kIGVpdGhlciByZWNsYWltIHRoYXQg bWVtb3J5IG9yIGZyZWUgaXQgZm9yIGFub3RoZXIgdXNlLgoKIyMjIERlY3JlYXNlcyBydW50aW1l IGNoZWNraW5nCgpXZSBjYW4gZW5jb2RlIGF0dHJpYnV0ZXMgdGhhdCBhcmVuJ3QgaW5zdGFuY2Ug dmFyaWFibGVzIGludG8gYW4gb2JqZWN0J3Mgc2hhcGUuIEN1cnJlbnRseSwgd2UgYWxzbyBpbmNs dWRlIGZyb3plbiB3aXRoaW4gdGhlIHNoYXBlLiBUaGlzIG1lYW5zIHdlIGNhbiBsaW1pdCBmcm96 ZW4gY2hlY2tzIHRvIG9ubHkgY2FjaGUgbWlzc2VzLgoKRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dp bmcgY29kZToKCmBgYHJ1YnkKY2xhc3MgVG90bwogIGRlZiBzZXRfYQogICAgQGEgPSAxICMgY2Fj aGU6IHNoYXBlOiAwLCBuZXh0IHNoYXBlOiAxLCBJViBpZHg6IDAKICBlbmQKZW5kCgp0b3RvID0g VG90by5uZXcgIyBzaGFwZSAwCnRvdG8uc2V0X2EgICAgICMgc2hhcGUgMQoKdG90byA9IFRvdG8u bmV3ICMgc2hhcGUgMAp0b3RvLmZyZWV6ZSAgICAjIHNoYXBlIDIKdG90by5zZXRfYSAgICAgIyBD YWNoZSBtaXNzLCBFeGNlcHRpb24hCmBgYAoKIVtdKGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVi dXNlcmNvbnRlbnQuY29tLzE5ODg1NjAvMTY3OTIwMDAxLWM0ZTYzMjZiLTNhM2MtNDgzYi1hNzk3 LTllMDIzMTc2NDdkNy5zdmcpCgpXaXRob3V0IHNoYXBlcywgYWxsIGluc3RhbmNlIHZhcmlhYmxl IHNldHMgcmVxdWlyZSBjaGVja2luZyB0aGUgZnJvemVuIHN0YXR1cyBvZiB0aGUgb2JqZWN0LiBX aXRoIHNoYXBlcywgd2Ugb25seSBuZWVkIHRvIGNoZWNrIHRoZSBmcm96ZW4gc3RhdHVzIG9uIGNh Y2hlIG1pc3Nlcy4KCldlIGNhbiBhbHNvIGVsaW1pbmF0ZSBlbWJlZGRlZCBhbmQgZXh0ZW5kZWQg Y2hlY2tzIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBvYmplY3Qgc2hhcGVzLiBBbnkgcGFydGlj dWxhciBzaGFwZSByZXByZXNlbnRzIGFuIG9iamVjdCB0aGF0IGlzIF9laXRoZXJfIGV4dGVuZGVk IG9yIGVtYmVkZGVkLiBKSVRzIGNhbiBwb3NzaWJseSB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIGZh Y3QgYnkgZ2VuZXJhdGluZyBzcGVjaWFsaXplZCBtYWNoaW5lIGNvZGUgYmFzZWQgb24gdGhlIHNo YXBlcy4gCiAgICAKIyMjIENsYXNzIGluc3RhbmNlIHZhcmlhYmxlcyBjYW4gYmUgc3RvcmVkIGlu IGFuIGFycmF5CgpDdXJyZW50bHksIGBUX0NMQVNTYCBhbmQgYFRfTU9EVUxFYCBpbnN0YW5jZXMg Y2Fubm90IHVzZSB0aGUgc2FtZSBJViBpbmRleCB0YWJsZSBvcHRpbWl6YXRpb24gdGhhdCBgVF9P QkpFQ1RgIGluc3RhbmNlcyB1c2UuICBXZSB0aGluayB0aGF0IHRoZSBvYmplY3Qgc2hhcGVzIHRl Y2huaXF1ZSBjYW4gYmUgbGV2ZXJhZ2VkIGJ5IGNsYXNzIGluc3RhbmNlcyB0byB1c2UgYXJyYXlz IGZvciBjbGFzcyBpbnN0YW5jZSB2YXJpYWJsZSBzdG9yYWdlIGFuZCBtYXkgcG9zc2libHkgbGVh ZCB0byBhIHJlZHVjdGlvbiBpbiBtZW1vcnkgdXNhZ2UgKHRob3VnaCB3ZSBoYXZlIHlldCB0byB0 ZXN0IHRoaXMpLgoKIyMgSW1wbGVtZW50YXRpb24gRGV0YWlscwoKW0hlcmVdKGh0dHBzOi8vZ2l0 aHViLmNvbS9qZW1tYWlzc3JvZmYvcnVieS9jb21taXQvNGU5NWQwMTY1NGYyNGNlZmY2YzgzMzBj ZjRlNWM3ZGFjNTA0NzM5ZSkgaXMgYSBsaW5rIHRvIG91ciBjb2RlIHNvIGZhci4KCkFzIG1lbnRp b25lZCBlYXJsaWVyLCBzaGFwZSBvYmplY3RzIGZvcm0gYSB0cmVlIGRhdGEgc3RydWN0dXJlLiAg SW4gb3JkZXIgdG8gbG9vayB1cCB0aGUgc2hhcGUgcXVpY2tseSwgd2UgYWxzbyBzdG9yZSB0aGUg c2hhcGVzIGluIGEgd2VhayBhcnJheSB0aGF0IGlzIHN0b3JlZCBvbiB0aGUgVk0uICBUaGUgSUQg b2YgdGhlIHNoYXBlIGlzIHRoZSBpbmRleCBpbiB0byB0aGUgYXJyYXksIGFuZCB0aGUgSUQgaXMg c3RvcmVkIG9uIHRoZSBvYmplY3QuCgpGb3IgYFRfT0JKRUNUYCBvYmplY3RzLCB3ZSBzdG9yZSB0 aGUgc2hhcGUgSUQgaW4gdGhlIG9iamVjdCdzIGhlYWRlci4gT24gNjQgYml0IHN5c3RlbXMsIHRo ZSB1cHBlciAzMiBiaXRzIGFyZSB1c2VkIGJ5IFJhY3RvcnMuICBXZSB3YW50IG9iamVjdCBzaGFw ZXMgdG8gYmUgZW5hYmxlZCBvbiAzMiBiaXQgc3lzdGVtcyBhbmQgNjQgYml0IHN5c3RlbXMgc28g dGhhdCBsaW1pdHMgdXMgdG8gdGhlIGJvdHRvbSAzMiBiaXRzIG9mIHRoZSBPYmplY3QgaGVhZGVy LiAgVGhlIHRvcCAyMCBiaXRzIGZvciBgVF9PQkpFQ1RgIG9iamVjdHMgd2FzIHVudXNlZCwgc28g d2UgdXNlZCB0aGUgdG9wIDE2IGJpdHMgZm9yIHRoZSBzaGFwZSBpZC4gIFdlIGNob3NlIHRoZSB0 b3AgMTYgYml0cyBiZWNhdXNlIHRoaXMgYWxsb3dzIHVzIHRvIHVzZSBgdWludDE2X3RgIGFuZCBt YXNraW5nIHRoZSBoZWFkZXIgYml0cyBpcyBlYXNpZXIuCgpUaGlzIGltcGxlbWVudGF0aW9uIGRl dGFpbCBsaW1pdHMgdXMgdG8gfjY1ayBzaGFwZXMuIFdlIG1lYXN1cmVkIHRoZSBudW1iZXIgb2Yg c2hhcGVzIHVzZWQgb24gYSBzaW1wbGUgW0Rpc2NvdXJzZV0oaHR0cHM6Ly9naXRodWIuY29tL2Rp c2NvdXJzZS9kaXNjb3Vyc2UpIGFwcGxpY2F0aW9uICh+My41ayksIFtSYWlsc0JlbmNoXShodHRw czovL2dpdGh1Yi5jb20vazBrdWJ1bi9yYWlsc2JlbmNoKSAofjRrKSwgYW5kIFNob3BpZnkncyBt b25vbGl0aCdzIHRlc3Qgc3VpdGUgKH40MGspLiBBY2NvcmRpbmdseSwgd2UgZGVjaWRlZCB0byBp bXBsZW1lbnQgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIG9iamVjdCBzaGFwZXMgc28gd2UgY2FuIHJl Y3ljbGUgc2hhcGUgSURzIHdoaWNoIGFyZSBubyBsb25nZXIgaW4gdXNlLiAgV2UgYXJlIGN1cnJl bnRseSB3b3JraW5nIG9uIHNoYXBlIEdDLgoKRXZlbiB0aG91Z2ggaXQncyB1bmxpa2VseSwgaXQn cyBzdGlsbCBwb3NzaWJsZSBmb3IgYW4gYXBwbGljYXRpb24gdG8gcnVuIG91dCBvZiBzaGFwZXMu IE9uY2UgYWxsIHNoYXBlIElEcyBhcmUgaW4gdXNlLCBhbnkgb2JqZWN0cyB0aGF0IG5lZWQgbmV3 IHNoYXBlIElEcyB3aWxsIG5ldmVyIGhpdCBvbiBpbmxpbmUgY2FjaGVzLgoKIyMgRXZhbHVhdGlv bgoKV2UgaGF2ZSBzbyBmYXIgdGVzdGVkIHRoaXMgYnJhbmNoIHdpdGggW0Rpc2NvdXJzZV0oaHR0 cHM6Ly9naXRodWIuY29tL2Rpc2NvdXJzZS9kaXNjb3Vyc2UpLCBbUmFpbHNCZW5jaF0oaHR0cHM6 Ly9naXRodWIuY29tL2swa3VidW4vcmFpbHNiZW5jaCkgYW5kIFNob3BpZnkncyBtb25vbGl0aC4g V2UgcGxhbiB0byB0ZXN0IHRoaXMgYnJhbmNoIG1vcmUgYnJvYWRseSBhZ2FpbnN0IHNldmVyYWwg b3BlbiBzb3VyY2UgUnVieSBhbmQgUmFpbHMgYXBwbGljYXRpb25zLiAKCkJlZm9yZSB3ZSBjb25z aWRlciB0aGlzIGJyYW5jaCB0byBiZSByZWFkeSBmb3IgZm9ybWFsIHJldmlldywgd2Ugd2FudCB0 aGUgcnVudGltZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHVzYWdlIG9mIHRoZXNlIGJlbmNobWFy a3MgdG8gYmUgZXF1aXZhbGVudCBvciBiZXR0ZXIgdGhhbiBpdCBpcyBjdXJyZW50bHkuIEluIG91 ciBvcGluaW9uLCBldmVuIHdpdGggZXF1aXZhbGVudCBydW50aW1lIHBlcmZvcm1hbmNlIGFuZCBt ZW1vcnkgdXNhZ2UsIHRoZSBmdXR1cmUgYmVuZWZpdHMgb2YgdGhpcyBhcHByb2FjaCBtYWtlIHRo ZSBjaGFuZ2Ugc2VlbSB3b3J0aHdoaWxlLgoKIyMgRmVlZGJhY2sKCklmIHlvdSBoYXZlIGFueSBm ZWVkYmFjaywgY29tbWVudHMsIG9yIHF1ZXN0aW9ucywgcGxlYXNlIGxldCB1cyBrbm93IGFuZCB3 ZSdsbCBkbyBvdXIgYmVzdCB0byBhZGRyZXNzIGl0LiBUaGFuayB5b3UhCgotLS1GaWxlcy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm9iamVjdC1zaGFwZXMucGF0Y2ggKDE4MCBLQikK CgotLSAKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvCg==