[ruby-core:121588] [Ruby Feature#21221] Proposal to upstream ZJIT
From:
"maximecb (Maxime Chevalier-Boisvert) via ruby-core" <ruby-core@...>
Date:
2025-04-08 15:15:58 UTC
List:
ruby-core #121588
SXNzdWUgIzIxMjIxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWF4aW1lY2IgKE1heGltZSBDaGV2YWxp ZXItQm9pc3ZlcnQpLg0KDQoNClRoYW5rIHlvdSBmb3IgeW91IHRydXN0IE1hdHohDQoNCkkgdGhp bmsgaXQgc2hvdWxkIGJlIGhlbHBmdWwgdG8gb25ib2FyZCBuZXcgcGVvcGxlIGlmIHdlIGhhdmUg YW4gYXJjaGl0ZWN0dXJlIHRoYXQgaXMgbW9yZSAic3RhbmRhcmQiLCBtb3JlIGxpa2Ugc29tZXRo aW5nIHlvdSB3b3VsZCByZWFkIGFib3V0IGluIGEgY29tcGlsZXIgdGV4dGJvb2suIEkgd2lsbCB0 YWxrIGEgYml0IGFib3V0IHRoYXQgYXQgUnVieUthaWdpLiBDb25uZWN0cyB3aXRoIHRoZSBjb25j ZXB0IG9mIGEgInN0cmFuZ2VuZXNzIGJ1ZGdldDogaHR0cHM6Ly9zdGV2ZWtsYWJuaWsuY29tL3dy aXRpbmcvdGhlLWxhbmd1YWdlLXN0cmFuZ2VuZXNzLWJ1ZGdldC8NCg0KVGhlIG1vc3QgaW1wb3J0 YW50IHRoaW5nIHRob3VnaCBpcyB0aGF0IHRoaXMgY29tcGlsZXIgd2lsbCBoYXZlIGEgaGlnaGVy LWxldmVsIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiwgd2hpY2ggd2lsbCBhbGxvdyB1cyB0 byBoYXZlIG1vcmUgb2YgYSBtb2R1bGFyL2V4dGVuc2libGUgZGVzaWduLCBhbmQgdGhpcyBpcyBv cnRob2dvbmFsIHdpdGggQkJWLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpGZWF0dXJlICMyMTIyMTogUHJvcG9zYWwgdG8gdXBzdHJlYW0gWkpJVA0KaHR0cHM6 Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzIxMjIxI2NoYW5nZS0xMTI2NDMNCg0KKiBBdXRo b3I6IG1heGltZWNiIChNYXhpbWUgQ2hldmFsaWVyLUJvaXN2ZXJ0KQ0KKiBTdGF0dXM6IE9wZW4N CiogQXNzaWduZWU6IG1heGltZWNiIChNYXhpbWUgQ2hldmFsaWVyLUJvaXN2ZXJ0KQ0KKiBUYXJn ZXQgdmVyc2lvbjogMy41DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQojIEJhY2tncm91bmQNCg0KRm9yIHRoZSBwYXN0IDMgbW9udGhzLCB0aGUgWUpJVCB0ZWFtIGF0 IFNob3BpZnkgaGFzIGJlZW4gd29ya2luZyBvbiBhIG5leHQtZ2VuZXJhdGlvbiBSdWJ5IEpJVCwg d2hpY2ggd2UgcmVmZXIgdG8gYXMgWkpJVC4gIFRoaXMgbmV3IGNvbXBpbGVyIGlzIGN1cnJlbnRs eSBiZWluZyBkZXZlbG9wZWQgaW4gYSBwcml2YXRlIGZvcmssIHdpdGggdGhlIGhvcGUgdGhhdCB3 ZSBjYW4gZXZlbnR1YWxseSB1cHN0cmVhbSBpdCBpbnRvIHJ1YnkvcnVieS4gTWF4aW1lIENoZXZh bGllci1Cb2lzdmVydCB3aWxsIGdpdmUgYSB0YWxrIGF0IFJ1YnlLYWlnaSAyMDI1IHRvIG9mZmlj aWFsbHkgYW5ub3VuY2UgdGhlIHByb2plY3QgdG8gdGhlIFJ1YnkgY29tbXVuaXR5IGFuZCB0aGUg YnJvYWRlciBwdWJsaWMuDQoNCiMgRGVzaWduIG9mIFpKSVQNCg0KWUpJVCBjb21waWxlcyBZQVJW IGJ5dGVjb2RlIG1vcmUgb3IgbGVzcyBkaXJlY3RseSB0byBtYWNoaW5lIGNvZGUuIFRoaXMgaGFz IHRoZSBiZW5lZml0IHRoYXQgWUpJVCBjb21waWxlcyBjb2RlIGZhc3QgYW5kIHRoYXQgaXTigJlz IGEgcmVsYXRpdmVseSBzaW1wbGUgYXJjaGl0ZWN0dXJlLCB3aGljaCB3YXMgaGVscGZ1bCBpbiBi dWlsZGluZyB0aGUgY29tcGlsZXIgaW5jcmVtZW50YWxseS4gVGhlIGRvd25zaWRlIGlzIHRoYXQg WUpJVCBpcyBkaWZmaWN1bHQgdG8gZXh0ZW5kIGFuZCBidWlsZCB1cG9uLiBJbiBwYXJ0aWN1bGFy LCBZSklUIGlzIHZlcnkgbGltaXRlZCB3aGVuIGl0IGNvbWVzIHRvIG9wdGltaXphdGlvbnMgdGhh dCBjcm9zcyBZQVJWIGluc3RydWN0aW9uIGJvdW5kYXJpZXMuIFdl4oCZdmUga25vd24gZm9yIHNv bWUgdGltZSB0aGF0IGluIG9yZGVyIHRvIHVubG9jayBoaWdoZXIgbGV2ZWxzIG9mIHBlcmZvcm1h bmNlLCBhIFJ1YnkgSklUIHdvdWxkIG5lZWQgdGhlIGFiaWxpdHkgdG8gcGVyZm9ybSBtb3JlIGFn Z3Jlc3NpdmUgaW5saW5pbmcsIGJ1dCBpdCBpcyBjaGFsbGVuZ2luZyB0byBjbGVhbmx5IGRvIHRo aXMgaW4gWUpJVC4NCg0KVGhlIG1haW4gaW5ub3ZhdGlvbiBvZiBaSklUIGlzIHRoYXQgaXQgaGFz IGl0cyBvd24gU3RhdGljIFNpbmdsZSBBc3NpZ25tZW50IChTU0EpIEludGVybWVkaWF0ZSBSZXBy ZXNlbnRhdGlvbiAoSVIpLiBZQVJWIGJ5dGVjb2RlIGlzIGNvbnZlcnRlZCBpbnRvIHRoaXMgSVIs IHdoaWNoIGNhbiB0aGVuIGJlIG9wdGltaXplZCB1c2luZyBtdWx0aXBsZSBvcHRpbWl6YXRpb24g cGFzc2VzLiBUaGVzZSBwYXNzZXMgY2FuIGJlIG9ydGhvZ29uYWwgYW5kIG1vZHVsYXIgdG8gc29t ZSBkZWdyZWUsIHdoaWNoIG1ha2VzIHRoZSBkZXNpZ24gb2YgdGhlIGNvbXBpbGVyIGVhc2llciB0 byByZWFzb24gYWJvdXQsIGVhc2llciB0byBleHRlbmQgYW5kIGFsc28gb3BlbnMgdXAgdGhlIHBv c3NpYmlsaXR5IG9mIGhhdmluZyBtdWx0aXBsZSBKSVQgY29tcGlsYXRpb24gdGllcnMgaW4gdGhl IGZ1dHVyZSwgd2hpY2ggaXMgc29tZXRoaW5nIHRoYXQgYm90aCBNYXR6IGFuZCBUYWthc2hpIEtv a3VidW4gaGF2ZSBob3BlZCB0byBzZWUgaW4gYSBSdWJ5IEpJVCBmb3Igc29tZSB0aW1lLg0KDQpJ biBhZGRpdGlvbiB0byB0aGlzLCB3ZSBhcmUgbW92aW5nIHRvIGEgbW9yZSB0cmFkaXRpb25hbCBt ZXRob2QtYmFzZWQgSklUIGNvbXBpbGVyIGRlc2lnbi4gSSAoTWF4aW1lKSBoYXZlIGhhZCB0aGUg Y2hhbmNlIHRvIGhlbHAgYnVpbGQgYW5kIGRlcGxveSBMYXp5IEJhc2ljIEJsb2NrIFZlcnNpb25p bmcgKExCQlYpLCBhbiBvZmZzaG9vdCBvZiBteSBQaEQgcmVzZWFyY2ggaW50byBhIHByb2R1Y3Rp b24gY29tcGlsZXIsIGFuIG9wcG9ydHVuaXR5IHdoaWNoIEnigJltIHZlcnkgdGhhbmtmdWwgZm9y LiBIb3dldmVyLCBJIGZlZWwgbGlrZSBaSklUIG1pZ2h0IGJlbmVmaXQgZnJvbSBoYXZpbmcgYSBj b21waWxlciBhcmNoaXRlY3R1cmUgdGhhdCBpcyBtb3JlIOKAnHN0YW5kYXJk4oCdLiBXaXRoIFlK SVQsIHdl4oCZdmUgaGFkIHZlcnkgZmV3IGNvbnRyaWJ1dGlvbnMgZnJvbSBSdWJ5IENvcmUgY29u dHJpYnV0b3JzIG91dHNpZGUgb2YgU2hvcGlmeS4gSeKAmW0gaG9waW5nIHRoYXQgaWYgd2UgYnVp bGQgYSBjb21waWxlciB3aXRoIGFuIGFyY2hpdGVjdHVyZSB0aGF0IGlzIG1vcmUgdGV4dGJvb2st bGlrZSwgd2UgY291bGQgaGF2ZSBhIHByb2plY3QgdGhhdCBpcyBtb3JlIGFwcHJvYWNoYWJsZSBm b3IgbmV3IGNvbnRyaWJ1dG9ycyBhbmQgdGh1cyBtb3JlIGluY2x1c2l2ZSBvZiBvdGhlciBSdWJ5 IGNvcmUgbWVtYmVycyBvdXRzaWRlIG9mIFNob3BpZnksIHdoaWNoIHdvdWxkIGJlIGdyZWF0IGZv ciB0aGUgbG9uZy10ZXJtIGZ1dHVyZSBvZiBSdWJ5Lg0KDQojIEN1cnJlbnQgU3RhdHVzDQoNCkl0 IGlzIHN0aWxsIGVhcmx5IGRheXMgZm9yIFpKSVQuIFdlIGFyZSBvbmx5IDMgbW9udGhzIGludG8g aXRzIGRldmVsb3BtZW50LiBBcyBzdWNoLCBaSklUIGlzIGN1cnJlbnRseSB2ZXJ5IG11Y2ggaW5j b21wbGV0ZSBhbmQgY2FuIG9ubHkgcnVuIHNtYWxsIHRlc3RzIGFuZCBtaWNyb2JlbmNobWFya3Mu IE5vbmV0aGVsZXNzLCB3ZSB3b3VsZCBzdGlsbCBsaWtlIHRvIHVwc3RyZWFtIGl0IGJlY2F1c2Ug ZGV2ZWxvcGluZyBpbiBhIGZvcmsgbWFrZXMgaXQgbXVjaCBoYXJkZXIgdG8ga2VlcCB1cCB3aXRo IHVwc3RyZWFtIGNoYW5nZXMgaW4gUnVieS4gV2XigJlyZSBob3BpbmcgdG8gYnJpbmcgaXQgbXVj aCBmYXJ0aGVyIGFsb25nIHRoaXMgeWVhciwgYW5kIHdlIGJlbGlldmUgdGhhdCBaSklUIHdpbGwg YmUgZmFpcmx5IHVuaW50cnVzaXZlIGluIHRoZSB1cHN0cmVhbSByZXBvIGdpdmVuIHRoYXQgaXQg d2lsbCBoYXZlIG5vIG1vcmUgZGVwZW5kZW5jaWVzIHRoYW4gWUpJVCwgYW5kIGl0IHdpbGwgYWxz byBiZSBndWFyZGVkIGJ5IGEgY29tbWFuZC1saW5lIHN3aXRjaC4NClJ1YnkgMy41IC8gMjAyNSBP YmplY3RpdmVzDQpPdXIgZ29hbCBmb3IgdGhlIGVuZCBvZiB0aGUgeWVhciBpcyB0byBicmluZyBa SklUIGFwcHJveGltYXRlbHkgYXQgcGFyaXR5IHdpdGggWUpJVCBpbiB0ZXJtcyBvZiBwZXJmb3Jt YW5jZS4gV2UgZXhwZWN0IHRoYXQgaXQgd2lsbCBiZSByZWxhdGl2ZWx5IGVhc3kgdG8gb3V0cGVy Zm9ybSBZSklUIG9uIHNtYWxsIG1pY3JvYmVuY2htYXJrcywgYnV0IHRoYXQgbWF0Y2hpbmcgWUpJ VOKAmXMgcGVyZm9ybWFuY2UgYWNyb3NzIGxhcmdlciBSdWJ5IHByb2dyYW1zIHdpbGwgdGFrZSBz ZXZlcmFsIG1vbnRocyBiZWNhdXNlIG9mIHRoZSBicmVhZHRoIG9mIFJ1YnkgZmVhdHVyZXMgdXNl ZC4gSXQgaXMgbm9uLXRyaXZpYWwgdG8gZWZmaWNpZW50bHkgaGFuZGxlIG1lZ2Ftb3JwaGljIGNh bGwgc2l0ZXMgbWFraW5nIHVzZSBvZiBrZXl3b3JkIGFyZ3VtZW50cywgZm9yIGluc3RhbmNlLg0K DQpJdCBzaG91bGQgbm90IGJlIGRpZmZpY3VsdCB0byBicmluZyBaSklUIGF0IHBhcml0eSB3aXRo IFlKSVQgaW4gdGVybXMgb2Ygc3VwcG9ydGVkL3Vuc3VwcG9ydGVkIFJ1YnkgZmVhdHVyZXMsIGJl Y2F1c2UgdGhlIEpJVCBjb21waWxlciBjYW4gYWx3YXlzIGZhbGwgYmFjayB0byB0aGUgaW50ZXJw cmV0ZXIgZm9yIGFueSBmZWF0dXJlIGl0IGRvZXNu4oCZdCBzdXBwb3J0Lg0KDQpTb21lIGZlYXR1 cmVzIHdlIGFpbSB0byBpbXBsZW1lbnQvY29tcGxldGUgaW4gdGltZSBmb3IgUnVieSAzLjU6DQot IEZhc3QgSklULXRvLUpJVCBjYWxscyB1c2luZyBhIGN1c3RvbSBjYWxsaW5nIGNvbnZlbnRpb24N Ci0gUG9seW1vcnBoaWMgaW5saW5lIGNhY2hlcw0KLSBTdXBwb3J0IGZvciBmdWxsIGRlb3B0aW1p emF0aW9uIChlLmcuIGZvciBUcmFjZVBvaW50KQ0KLSBBYmlsaXR5IHRvIGRlb3B0aW1pemUgc2lu Z2xlIGZ1bmN0aW9ucyAoZS5nLiBtZXRob2QgcmVkZWZpbmVkLCBjYWxsZXIgZ2V0cyBkZW9wdGlt aXplZCkNCi0gU2lkZS1leGl0IG11Y2ggbGVzcyBvZnRlbiB0aGFuIFlKSVQgKGNydWNpYWwgZm9y IGdvb2QgcGVyZm9ybWFuY2UpDQotIEFiaWxpdHkgdG8gc2VyaWFsaXplIG1hY2hpbmUgY29kZQ0K LSBEZWFkLWNvZGUgZWxpbWluYXRpb24sIGNvbnN0YW50IHByb3BhZ2F0aW9uDQotIEZ1c2lvbiBv ZiBjb21wYXJpc29uIGFuZCBicmFuY2ggaW5zdHJ1Y3Rpb25zDQoNClN0cmV0Y2ggZ29hbHMgYW5k IGxvbmdlci10ZXJtIGdvYWxzOg0KLSBTdXBwb3J0IHR3byBKSVQgY29tcGlsYXRpb24gdGllcnMN Ci0gQWdncmVzc2l2ZSBpbmxpbmluZyBvZiBSdWJ5IGNhbGxzDQotIE9wdGltaXplIEdDIGFsbG9j YXRpb25zDQotIEFsbG9jYXRpb24gZWxpc2lvbiB0byBzcGVlZCB1cCBhbGxvY2F0aW9ucyBhbmQg cmVkdWNlIEdDIHByZXNzdXJlDQoNCldlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtb2RpZmllZC9p bXByb3ZlZCB2ZXJzaW9uIG9mIHRoZSBZSklUIGJhY2tlbmQgdG8gZ2VuZXJhdGUgbWFjaGluZSBj b2RlLiBUaGlzIG1lYW5zIFpKSVQgaXMgY29taW5nIG91dCBvZiB0aGUgZ2F0ZSB3aXRoIHN1cHBv cnQgZm9yIGJvdGggeDg2LTY0IGFuZCBhcm02NCwgYXMgWUpJVCBkaWQuDQoNClRoZSBhYmlsaXR5 IHRvIHNlcmlhbGl6ZSBtYWNoaW5lIGNvZGUgaXMgc29tZXRoaW5nIHRoYXQgd2UgaG9wZSB0byBi ZSBhYmxlIHRvIGltcGxlbWVudCBpbiBaSklULiBUaGlzIHdvdWxkIGFsbG93IHVzIHRvIHNhdmUg Y29tcGlsZWQgY29kZSBhbmQgcmV1c2UgaXQgaW4gZnV0dXJlIGV4ZWN1dGlvbnMgb2YgYSBnaXZl biBwcm9ncmFtLiBUaGlzIHdvdWxkIGVuYWJsZSBmYXN0ZXIgc3RhcnR1cCB0aW1lcy4gV2Uga25v dyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGlzIGlzIGltcG9ydGFudCBpbiBwcm9kdWN0aW9uIGVu dmlyb25tZW50cyBzdWNoIGFzIFNob3BpZnnigJlzIHdoZXJlIGNvZGUgY2FuIGJlIChyZSlkZXBs b3llZCBzZXZlcmFsIHRpbWVzIGEgZGF5LCBidXQgaXQgYWxzbyBtYWtlcyBzZW5zZSBvbiBhIHNt YWxsZXIgc2NhbGUgd2hlcmUgaW5kaXZpZHVhbHMgcnVuIGNvZGUgb24gYSBwZXJzb25hbCBjb21w dXRlciBhbmQgY2FuIGJlbmVmaXQgZnJvbSBzb2Z0d2FyZSBzdGFydGluZyB1cCBmYXN0ZXIuDQoN CiMgTWVyZ2luZyBMb2dpc3RpY3MNCg0KTGlrZSBpdHMgcHJlZGVjZXNzb3IsIFpKSVQgaXMgd3Jp dHRlbiBpbiBSdXN0LCBhbmQgaGFzIHZlcnkgZmV3IGRlcGVuZGVuY2llcyBieSBkZXNpZ24uIElu IHBhcnRpY3VsYXIsIHRoZXJlIGFyZSBubyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgb3V0c2lkZSBv ZiB0aGUgUnVzdCBjb21waWxlciAocnVzdGMpIHRvIGJ1aWxkIFpKSVQgd2l0aCBSdWJ5Lg0KDQpH aXZlbiB0aGF0IGl0IGlzIHZlcnkgZWFybHkgaW4gWkpJVOKAmXMgZGV2ZWxvcG1lbnQgcHJvY2Vz cywgd2Ugd291bGQgbGlrZSB0byB1cHN0cmVhbSBaSklUIHdpdGhvdXQgcmVwbGFjaW5nIFlKSVQs IHNvIGFzIHRvIGVuc3VyZSB0aGF0IFJ1YnkgMy41IHNoaXBzIHdpdGggYSB3ZWxsLXRlc3RlZCwg cHJvZHVjdGlvbi1yZWFkeSBKSVQuIEFzIHdpdGggWUpJVCwgd2Ugd291bGQgbGlrZSB0byBzdWdn ZXN0IHRoYXQgWkpJVCBzaG91bGQgYmUgZ3VhcmRlZCBieSBhIC0temppdCBjb21tYW5kLWxpbmUg c3dpdGNoLiBTaW5jZSB1c2luZyB0aGUgY29tcGlsZXIgaXMgb3B0LWluLCB0aGVyZSBpcyB2ZXJ5 IGxpdHRsZSByaXNrIGZvciB0aGUgYXZlcmFnZSBSdWJ5IHVzZXIuIFdlIGNhbiBhZGp1c3QgdGhl IHdheSB3ZSBhZHZlcnRpc2UgWkpJVCBhdCB0aGUgdGltZSBvZiB0aGUgUnVieSAzLjUgcmVsZWFz ZSBhbmQgaG93IG11Y2ggd2Ugd2FudCB0aGUgYnJvYWRlciBSdWJ5IGNvbW11bml0eSB0byB0cnkg aXQgYmFzZWQgb24gaXRzIGxldmVsIG9mIG1hdHVyaXR5IGF0IHRoYXQgcG9pbnQuIElmIFpKSVQg aXMgbm90IHN1ZmZpY2llbnRseSBtYXR1cmUsIHdlIGNhbiBzaW1wbHkgdGVsbCBwZW9wbGUgdGhh dCBpdCBpcyBleHBlcmltZW50YWwgYW5kIG9ubHkgZm9yIGVudGh1c2lhc3RzLCBhbmQgcmVjb21t ZW5kIHRoYXQgdGhleSB1c2UgWUpJVCBpbnN0ZWFkLg0KDQpXZSBhcmUgY3VycmVudGx5IGRldmVs b3BpbmcgWkpJVCB1c2luZyBSdXN0IDEuODUuMCBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlIDIwMjQg ZWRpdGlvbiBvZiBSdXN0LiBUaGlzIHNob3VsZG7igJl0IGJlIGEgcHJvYmxlbSBzaW5jZSBSdXN0 IGNhbiBlYXNpbHkgYmUgaW5zdGFsbGVkIHVzaW5nIHRoZSBydXN0dXAgdG9vbCwgYW5kIGlmIGEg c3VmZmljaWVudGx5IHJlY2VudCBSdXN0IGNvbXBpbGVyIGlzIG5vdCBhdmFpbGFibGUsIENSdWJ5 IGNhbiBzdGlsbCBidWlsZCB3aXRob3V0IFpKSVQsIG9yIHdpdGggWUpJVCBvbmx5IChZSklUIHJl cXVpcmVzIHJ1c3RjIDEuNTguMCkuDQoNCkluIHRlcm1zIG9mIGJ1aWxkIHN0cmF0ZWd5LCBpZiBh IHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBSdXN0IGNhcmdvIHRvb2wgaXMgaW5zdGFsbGVkLCBpdCBt YXkgYmUgcG9zc2libGUgdG8gYXV0b21hdGljYWxseSBidWlsZCBib3RoIFlKSVQgYW5kIFpKSVQg aW4gdGhlIHNhbWUgYmluYXJ5LiBPdGhlcndpc2UsIFlKSVQgY291bGQgYmUgYnVpbHQgd2l0aG91 dCBaSklUIGFzIGxvbmcgYXMgcnVzdGMgMS41OC4wIG9yIG1vcmUgYSByZWNlbnQgdmVyc2lvbiBp cyBhdmFpbGFibGUuIElmIG5laXRoZXIgaXMgYXZhaWxhYmxlLCB0aGVuIENSdWJ5IGNhbiBiZSBi dWlsdCB3aXRob3V0IGVpdGhlciBKSVQgYXMgYSBmYWxsYmFjay4gQW5vdGhlciBwb3NzaWJpbGl0 eSwgaWYgd2Ugd2FudCB0byBiZSBtb3JlIGNvbnNlcnZhdGl2ZSBmb3IgUnVieSAzLjUsIGlzIHRv IG9ubHkgZW5hYmxlIGJ1aWxkaW5nIFpKSVQgaWYgY29uZmlndXJlIGlzIHJ1biB3aXRoIGFuIGV4 cGxpY2l0IC0tZW5hYmxlLXpqaXQuIFdlIGNhbiBwb3RlbnRpYWxseSBtYWtlIHRoaXMgZGVjaXNp b24gY2xvc2VyIHRvIHRoZSBlbmQgb2YgdGhlIHllYXIuDQoNClRoZSB0aW1lbGluZSBmb3IgdXBz dHJlYW1pbmcgd291bGQgYmUgaW4gdGhlIDQgdG8gNiB3ZWVrcyBmb2xsb3dpbmcgUnVieUthaWdp LiBUbyBtZXJnZSBaSklUIHVwc3RyZWFtLCB3ZSB3aWxsIHJlYmFzZSB0aGUgY29tbWl0cyBvbiBy dWJ5L3J1YnnigJhzIG1hc3RlciBicmFuY2ggYW5kIGdlbmVyYWxseSBwcmVzZXJ2ZSB0aGUgY29t bWl0IGhpc3RvcnkuIFNvbWUgY29tbWl0IG1lc3NhZ2VzIHdpbGwgYmUgY2xlYW5lZCB1cCBhbmQg aW1wcm92ZWQgcHJpb3IgdG8gbWVyZ2luZy4gU29tZSBjb21taXRzIHdoaWNoIGFyZSBsb2dpY2Fs bHkgcmVsYXRlZCBtYXkgYmUgc3F1YXNoZWQgdG9nZXRoZXIuIFdlIHdpbGwgb25seSBlbmFibGUg YSBzbWFsbCBzdWJzZXQgb2YgQ0kgdGVzdHMgZm9yIFpKSVQgYXQgZmlyc3QsIHNvIGFzIHRvIGtl ZXAgYWxsIHRlc3RzIHBhc3NpbmcuDQoNCg0KDQoNCg0KLS0gDQpodHRwczovL2J1Z3MucnVieS1s YW5nLm9yZy8NCiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CiBydWJ5LWNvcmUgbWFpbGluZyBsaXN0IC0tIHJ1YnktY29yZUBtbC5ydWJ5LWxhbmcub3JnCiBU byB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIHJ1YnktY29yZS1sZWF2ZUBtbC5ydWJ5LWxh bmcub3JnCiBydWJ5LWNvcmUgaW5mbyAtLSBodHRwczovL21sLnJ1YnktbGFuZy5vcmcvbWFpbG1h bjMvbGlzdHMvcnVieS1jb3JlLm1sLnJ1YnktbGFuZy5vcmcv