[ruby-core:112981] [Ruby master Feature#19541] Proposal: Generate frame unwinding info for YJIT code
From:
"kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core" <ruby-core@...>
Date:
2023-03-22 23:41:39 UTC
List:
ruby-core #112981
SXNzdWUgIzE5NTQxIGhhcyBiZWVuIHVwZGF0ZWQgYnkga2p0c2FuYWt0c2lkaXMgKEtKIFRzYW5h a3RzaWRpcykuDQ0KDQ0KDQ0KVGhhbmtzIEFsYW4gZm9yIHlvdXIgZmVlZGJhY2sgYW5kIGNsYXJp ZnlpbmcgWUpJVCdzIGdvYWxzIGZvciBtZS4NDQoNDQpGaXJzdCBvZmYsIGxldCBtZSBjb25maXJt IEknbSBvbiB0aGUgc2FtZSBwYWdlIGFzIHlvdSBhYm91dCBhIGNvdXBsZSBvZiB0aGluZ3MuDQ0K DQ0KSSB0b3RhbGx5IGFncmVlIHRoZSB1bndpbmQtaW5mby1yZWdpc3RyYXRpb24gQVBJJ3MgaW4g R05VIGxhbmQgYXJlIF9hd2Z1bF8uIFdpbmRvd3MgZG9lcyB0aGlzIHdheSBiZXR0ZXIgd2l0aCBg UnRsSW5zdGFsbEZ1bmN0aW9uVGFibGVDYWxsYmFja2AgLSBpdCBjb3ZlcnMgYm90aCBpbi1wcm9j ZXNzIGFuZCBvdXQtb2YtcHJvY2VzcyB1bndpbmRpbmcgaW4gYSBsYXp5IHdheS4gQWxhcywgbm90 IHdoYXQgd2UgaGF2ZSBhdmFpbGFibGUgb24gR05VL0xpbnV4Lg0NCg0NCkkgYWdyZWUgd2l0aCB5 b3VyIHByZW1pc2UgdGhhdCBZSklUIGRvZXMgbm90IG11Y2sgYXJvdW5kIHdpdGggdGhlIHN0YWNr IGluIHZlcnkgY3JlYXRpdmUgd2F5cywgYW5kIHZlcnkgbGl0dGxlIGluZm9ybWF0aW9uIGlzIGFj dHVhbGx5IG5lZWRlZCB0byB1bndpbmQgdGhyb3VnaCBZSklUIGZyYW1lcy4gTXkgYXBwcm9hY2gg aW4gbXkgUE9DIHdhcyB0byBtYWtlIFJ1YnkgdXNlIHRoZSBtb3N0IG9idmlvdXMgYW5kIHdlbGwt ZXhlcmNpc2VkIHBsYXRmb3JtIEFQSXMgZm9yIHJlZ2lzdGVyaW5nIHVud2luZCBpbmZvLCB3aGlj aCB0byBtZSBzZWVtZWQgdG8gYmUgYF9fcmVnaXN0ZXJfZnJhbWVgIGFuZCBgX19qaXRfZGVidWdf cmVnaXN0ZXJfY29kZWAuIFRoYXQgaXMsIEkgd2VudCB0aHJvdWdoIHRoZSByaWdtYXJvbGUgb2Yg RFdBUkYgQ0ZJICYgRUxGIGdlbmVyYXRpb24gdG8gdHJ5IGFuZCBiZSBhIGdvb2QgcGxhdGZvcm0g Y2l0aXplbi4NDQoNDQpJIGFsc28gYWdyZWUgaG93ZXZlciB0aGF0IHRoaXMgaXMgcHJldHR5IGhl YXZ5d2VpZ2h0IC0gdGhlIEVMRiBmaWxlIGdlbmVyYXRpb24gZXNwZWNpYWxseSBiZWNhdXNlIGl0 IGhhcyB0byBiZSByZWdlbmVyYXRlZCBwZXJpb2RpY2FsbHkgaWYgaXQgcnVucyBvdXQgb2YgImZy ZWUiIHNwYWNlIHRvIGphbSBtb3JlIGRlYnVnaW5mbyBpbiB0aGVyZS4NDQoNDQpGaW5hbGx5LCBJ IGFsc28gYWNrbm93bGVkZ2UgdGhhdCBhZGRpbmcgUnVzdCBkZXBlbmRlbmNpZXMgaW5jcmVhc2Vz IGNvbXBpbGUgdGltZXMgJiBpcyBhIGh1Z2UgcGFpbiBmb3IgZG93bnN0cmVhbSBkaXN0cmlidXRv cnMgZXRjLCBhbmQgeW91J3ZlIGdvbmUgdG8gcXVpdGUgc29tZSBlZmZvcnQgdG8gX25vdF8gZG8g dGhhdCAtIEkgYXNzdW1lIHRoZXNlIGFyZSB0aGUgbWFpbiBpc3N1ZXMgd2l0aCBhY3R1YWxseSBh ZGRpbmcgdGhlIGdpbWxpL29iamVjdCBkZXBlbmRlbmNpZXMgcGVyLXNlPw0NCg0NClRoZSBnZW5l cmFsICJ2aWJlIiBJIGdldCBmcm9tIHlvdXIgZmVlZGJhY2sgaXMgdGhhdCB3ZSBkb24ndCB3YW50 IHRvIGludHJvZHVjZSBodWdlIGltcGxlbWVudGF0aW9uIGNvbXBsZXhpdHkganVzdCB0byBtYWtl IFlKSVQgdXNlIHRoZSAic3RhbmRhcmQiIHVud2luZGluZyBtZWNoYW5pc21zOyByYXRoZXIsIHdl IHNob3VsZCBhY3R1YWxseSBpbXBsZW1lbnQgdGhlIHNpbXBsZXN0IHRoaW5nIHRoYXQgd29ya3Mg Zm9yIFlKSVQsIGFuZCB0aGVuIHRhaWxvciBfdGhhdF8gdG8gcGxhdGZvcm0gaW50ZXJmYWNlcy4N DQoNDQpPbmUgZmluYWwgdGhpbmcgdG8gY2xhcmlmeSB0aG91Z2g6DQ0KDQ0KPiBGb3IgY2FzZXMg d2hlcmUgUnVieSBhbHJlYWR5IGxpbmtzIHdpdGggbGlidW53aW5kIChzb21lIExpbnV4IGRpc3Ry b3MgYW5kIEJTRHMpLCB3ZSBjYW4gcmVnaXN0ZXIgd2l0aCBpdHMgZHluYW1pYyBpbnRlcmZhY2UN DQoNDQpJZiB5b3UncmUgcmVmZXJyaW5nIHRvIGBVTldfSU5GT19GT1JNQVRfRFlOQU1JQ2AgaW5m bywgdGhhdCdzIGFjdHVhbGx5IHRvdGFsbHkgdW5pbXBsZW1lbnRlZCBpbiBsaWJ1bndpbmQgZm9y IGFueXRoaW5nIGV4Y2VwdCBJdGFuaXVtICh3aGljaC4uLiBJIGFzc3VtZSBpcyBub3QgYSB0YXJn ZXQgWUpJVCB3YW50cyB0byBzdXBwb3J0IHhEICkuIGBVTldfSU5GT19GT1JNQVRfVEFCTEVgIHdv cmtzIEFGQUlDVCwgYnV0IHJlcXVyaWVzIGdlbmVyYXRpbmcgRFdBUkYgQ0ZJIGluZm8gKHdoaWNo IGlzIHNvbWV0aGluZyB3ZSdkIGxpa2UgdG8gYXZvaWQpLg0NCg0NCi0tLQ0NCg0NCk9LLCBzbyB3 aGF0IGNhbiB3ZSBkbyB0aGF0IHNhdGlzZmllcyB0aGUgZm9sbG93aW5nIGNvbnN0cmFpbnRzPw0N Cg0NCjEuIExldHMgdXMgdW53aW5kIHN0YWNrcyBjb250YWluaW5nIFlKSVQgZnJhbWVzIGluIGJv dGggR0RCIGFuZCB0aGUgY3Jhc2ggcmVwb3J0ZXINDQoyLiBEb2VzIG5vdCByZXF1aXJlIHVzIHRv IGNvbnN0cnVjdCBjb21wbGV4IGluLW1lbW9yeSBzdHJ1Y3R1cmVzIHdoaWNoIGFyZSByZWFsbHkg ZGVzaWduZWQgZm9yIG9uLWRpc2sgdXNlIChpLmUuIG5vIEVMRiBmaWxlcykNDQozLiBEb2VzIG5v dCByZXF1aXJlIHVzIHRvIHVzZSBEV0FSRiBDRkkgKHdoaWNoIGlzIGZhciB0b28gY29tcGxleCBm b3IgdGhlIHNpbXBsZSBzdGFja3MgdGhhdCBZSklUIGxheXMgb3V0KQ0NCjQuIEhhcyB2ZXJ5IGxp dHRsZSBydW50aW1lIENQVSBjb3N0IHRvIGNvbnN0cnVjdCBhbmQgcmVnaXN0ZXINDQo1LiBIYXMg dmVyeSBsaXR0bGUgcnVudGltZSBtZW1vcnkgY29zdCB0byBoYXZlIGhhbmdpbmcgYXJvdW5kDQ0K DQ0KSSB0aGluayBJIGhhdmUgYSByb3VnaCBpZGVhIG9mIHNvbWV0aGluZyB0aGF0IG1pZ2h0IGZp dCB0aGUgYmlsbC4NDQoNDQpGaXJzdGx5LCBsZXQncyBoYXZlIFlKSVQgZ2VuZXJhdGUgYSAiY29t cGFjdCB1bndpbmQgaW5mbyBmb3JtYXQiIG9mIG91ciBvd24uIEkgZGVmaW5pdGVseSBuZWVkIHRv IGV4cGVyaW1lbnQgd2l0aCBpbXBsZW1lbnRhdGlvbiBiZWZvcmUgYmVpbmcgdG9vIHNwZWNpZmlj IGhlcmUsIGJ1dCByb3VnaGx5Li4uDQ0KDQ0KKiBUaGVyZSB3b3VsZCBhY3R1YWxseSBiZSB0d28g c2VwYXJhdGUgdGFibGVzIC0gb25lIGZvciBpbmxpbmUsIGFuZCBvbmUgZm9yIG91dGxpbmUuDQ0K KiBJdCB3b3VsZCBiZSBzb3J0ZWQgYnkgSVANDQoqIEl0IHdvdWxkIGJlIG9ubHkgX2FwcGVuZGVk XyB0byB3aGVuIGNvZGUgaXMgZ2VuZXJhdGVkIC0gdGhpcyBpcyBiZWNhdXNlIChub3JtYWxseSkg dGhlIElQIG9mIGdlbmVyYXRlZCBjb2RlIGZvciBlYWNoIGNvZGUgYmxvY2sgb25seSBpbmNyZWFz ZXMuIFRoaXMgbWVhbnMgaG9wZWZ1bGx5IGEgbWluaW11bSBvZiBncmF0dWl0b3VzIG1lbWNweSdn IGFyb3VuZCBvZiBkYXRhIChleGNlcHQgZm9yIHdoZW4gaXQgbmVlZHMgdG8gZ3JvdykuDQ0KKiBO ZWVkIHRvIGRvIHNvbWV0aGluZyBhYm91dCBDb2RlIEdDLCB3aGljaCB2aW9sYXRlcyB0aGUgIklQ IG9ubHkgaW5jcmVhc2VzIiBpbnZhcmlhbnQuIFNpbmNlIENvZGUgR0MgZnJlZXMgb25seSB3aG9s ZSBwYWdlcywgcGVyaGFwcyB0aGUgdW53aW5kIGluZm8gY291bGQgYmUgcGVyLXBhZ2UsIGFuZCB0 aGUgcGFnZXMgd291bGQgYmUgc3RvcmVkIGluIGEgaGFzaCB0YWJsZS4gVGhhdCB3b3VsZCBtYWtl IGl0IE8oMSkgYm90aCB0byBnZXQgdGhlIHJpZ2h0IGJsb2NrIG9mIHVud2luZCBpbmZvIHRvIGFw cGVuZCB0byB3aGVuIGdlbmVyYXRpbmcgY29kZSwgYXMgd2VsbCBhcyB3aGVuIGxvb2tpbmcgdXAg dGhlIHVud2luZCBpbmZvIGZvciBhIGdpdmVuIElQLg0NCiogRm9yIGVhY2ggYmxvY2ssIHRoZSB1 bndpbmQgaW5mbyB3b3VsZCBzdG9yZToNDQogICAgKiBTdGFydC9lbmQgSVAgb2YgdGhlIGJsb2Nr DQ0KICAgICogV2hldGhlciBvciBub3QgdGhpcyBibG9jayBoYXMgYSBmcmFtZV9zZXR1cCBwcm9s b2d1ZQ0NCiAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgYmxvY2sgaGFzIGEgZnJhbWVfdGVhcmRv d24gZXBpbG9ndWUNDQogICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIGJsb2NrIGlzIHNwbGl0IGlu dG8gdGhlIG5leHQgaW5saW5lL291dGxpbmUgcGFnZSBhcyB3ZWxsDQ0KICAgICogfkEgcG9pbnRl ciB0byB0aGUgaXNlcSBzdHJ1Y3R1cmV+ICh0aGlzIGNhbiBjb21lIGxhdGVyIC0gaXQnZCBiZSBu ZWVkZWQgZm9yIG5hbWluZyB0aGUgYmxvY2ssIGJ1dCBhbHNvIGludHJvZHVjZXMgc29tZSBmdW4g R0MgbWFyay9jb21wYWN0aW9uIGlzc3VlcykuDQ0KDQ0KSWYgd2UncmUgYWxsb3dlZCB0byByZWx5 IG9uIHRoZSBmcmFtZSBwb2ludGVyIGJlaW5nIHNldHVwIFsxXSwgYW5kIHRoZSBzaGFwZSBvZiBv dXIgcHJvbG9ndWUvZXBpbG9ndWVzLCBJIHRoaW5rIHRoYXQncyBhbGwgdGhlIGluZm9ybWF0aW9u IG5lZWRlZCB0byBkbyBmcmFtZSB1bndpbmRpbmcuDQ0KDQ0KWzFdIFRoaXMgd291bGQgbWVhbiB3 ZSdkIG5lZWQgdG8gYWRkIGl0IHRvIHg4Nl82NCBjb2RlIGdlbmVyYXRpb24uIFRoZSByZWdpc3Rl ciBpc24ndCBhY3R1YWxseSB1c2VkIGZvciBhbnkgb2YgWUpJVCdzIGdlbmVyYXRlZCBjb2RlIGZv ciBhbnkgb3RoZXIgcmVhc29uLCBzbyBJIGRvdWJ0IGl0J2xsIGhhdmUgYSBiaWcgcGVyZm9ybWFu Y2UgaW1wYWN0Lg0NCg0NCg0NCk5vdywgaG93IGRvIHdlIGNvbm5lY3QgdGhhdCB0byBHREIgJiB0 aGUgY3Jhc2ggYmFja3RyYWNlcj8gTGV0J3MgdHJlYXQgdGhvc2Ugc2VwYXJhdGVseS4uLg0NCg0N CkZvciBHREIsIHRoZXJlIGFyZSBhY3R1YWxseSBfdGhyZWVfIEpJVCBjb2RlIHJlZ2lzdHJhdGlv biBtZWNoYW5pc21zICh0aGF0IEkgY291bGQgY291bnQpLi4uDQ0KDQ0KMS4gVGhlIG9uZSB1c2lu ZyBgX19qaXRfZGVidWdfcmVnaXN0ZXJfY29kZWAgKHdoaWNoIEkgdXNlZCBpbiBteSBQT0MpOiBo dHRwczovL3NvdXJjZXdhcmUub3JnL2dkYi9vbmxpbmVkb2NzL2dkYi9KSVQtSW50ZXJmYWNlLmh0 bWwNDQoyLiBPbmUgdGhhdCBsZXRzIHlvdSBsb2FkIGEgLnNvIGZpbGUgaW4gR0RCIHRvIGhlbHAg aXQgdW5kZXJzdGFuZCB5b3VyIEpJVCBzdGFja3M6IGh0dHBzOi8vc291cmNld2FyZS5vcmcvZ2Ri L29ubGluZWRvY3MvZ2RiL1dyaXRpbmctSklULURlYnVnLUluZm8tUmVhZGVycy5odG1sDQ0KMy4g T25lIGJhc2VkIG9uIHRoZSBQeXRob24gaW50ZXJmYWNlOiBodHRwczovL3NvdXJjZXdhcmUub3Jn L2dkYi9vbmxpbmVkb2NzL2dkYi9VbndpbmRpbmctRnJhbWVzLWluLVB5dGhvbi5odG1sDQ0KDQ0K V2UgYWxyZWFkeSBzaGlwIEdEQiBoZWxwZXJzIHdpdGggUnVieSAoaW4gYC5nZGJpbml0YCkuIEl0 J3MgaG9wZWZ1bGx5IHBvc3NpYmxlIHRvIHdyaXRlIHNvbWUgUHl0aG9uIHdoaWNoIGNhbiB1bndp bmQgWUpJVCBzdGFja3MgdXNpbmcgdGhlIGN1c3RvbSB1bndpbmQgaW5mbywgYW5kIGFsc28gZGlz dHJpYnV0ZSB0aGF0IGluc2lkZSB0aGUgUnVieSBzb3VyY2UgdHJlZSAocGVyaGFwcyBpdCdzIGV2 ZW4gcG9zc2libGUgdG8gZGlzdHJpYnV0ZSBpdCBpbmxpbmUgaW4gYC5nZGJpbml0YCAtIEkgY2Fu IGV4cGVyaW1lbnQgd2l0aCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMpLg0NCg0NCkZvciB0aGUgY3Jh c2ggYmFja3RyYWNlciwgSSBfdGhpbmtfIGxpYnVud2luZCBjYW4gYmUgYmVudCBpbnRvIHNoYXBl IGZvciBvdXIgcHVycG9zZXMuIA0NCg0NCiogV2UgY2FuIGFkZCBhIGNvbmZpZ3VyZSBmbGFnIGAt LXdpdGgtbGlidW53aW5kYCBvciBzdWNoIHRvIGNvbXBpbGUgUnVieSBhZ2FpbnN0IGxpYnVud2lu ZCBpZiBwcmVzZW50LCBldmVuIHdoZW4gdGhhdCB3b3VsZCBub3Qgbm9ybWFsbHkgYmUgdGhlIGNh c2Ugb24gYSBnaXZlbiBwbGF0Zm9ybS4NDQoqIElmIGxpYnVud2luZCBpcyBwcmVzZW50LCBpbnN0 ZWFkIG9mIHVzaW5nIGBiYWNrdHJhY2UoMylgIHRvIGNvbGxlY3QgdGhlIHN0YWNrIGFsbCBhdCBv bmNlLCBpbnN0ZWFkIHVzZSBgdW53X2luaXRfbG9jYWxgIHRvIGJlZ2luIHVud2luZGluZywgYW5k IHVud2luZCBmcmFtZS1ieS1mcmFtZSB3aXRoIGB1bndfc3RlcGAuDQ0KKiBJZiB3ZSBlbmNvdW50 ZXIgYW4gSVAgd2UgcmVjb2duaXNlIGFzIGJlbG9uZ2luZyB0byBZSklULCBkbyBfTk9UXyBjYWxs IGB1bndfc3RlcGAgdG8gdW53aW5kIHRoYXQgZnJhbWUuDQ0KKiBJbnN0ZWFkLCBwZXJmb3JtIHRo ZSB1bndpbmRpbmcgbG9naWMgb3Vyc2VsdmVzIHVzaW5nIHRoZSBZSklUIHVud2luZCBpbmZvLCBh bmQgdGhlbiBjb25zdHJ1Y3QgYSBgdW53X2NvbnRleHRfdGAgZm9yIHRoZSBwcmV2aW91cyBmcmFt ZSBieSBoYW5kIChpdCBsb29rcyBsaWtlIHRoZSBuZWNlc3Nhcnkgc3RydWN0IGRlZmluaXRpb25z IGFyZSBwcmVzZW50IGluIHRoZSBgbGlidW53aW5kLSR7YXJjaH0uaGAgaGVhZGVyIGZpbGVzLg0N CiogU3RhcnQgdW53aW5kaW5nIGFnYWluIGJhc2VkIG9uIHRoaXMgY3VzdG9tIGNvbnRleHQgc3Ry dWN0IGJ5IGNhbGxpbmcgYHVud19pbml0X2xvY2FsYDsgdGhpcyBfc2hvdWxkXyBzdGFydCB1bndp bmRpbmcgZnJvbSB0aGUgZnJhbWUgYmVsb3cgaWYgd2UndmUgZG9uZSBpdCByaWdodC4NDQoNDQpF c3NlbnRpYWxseSwgdGhlIHRyYWRlb2ZmIGhlcmUgaXMgdGhhdCB3ZSBjYW4gbWFrZSB1bndpbmQg aW5mbyBnZW5lcmF0aW9uIG11Y2ggc2ltcGxlciwgYXQgdGhlIGV4cGVuc2Ugb2YgbWFraW5nIHVu d2luZGluZyBpdHNlbGYgbW9yZSBjb21wbGV4IChiZWNhdXNlIHdlIGNhbid0IGp1c3QgcmVseSBv biB0aGUgcGxhdGZvcm0ncyBEV0FSRiB1bndpbmRlcikuIFRoYXQgc2VlbXMgbGlrZSBhIHJlYXNv bmFibGUgdHJhZGVvZmYgdG8gbWUuDQ0KDQ0KRG9lcyB0aGlzIHNvdW5kIGxpa2UgYSBmcnVpdGZ1 bCBwYXRoIHRvIGdvIGRvd24/IEkgc2hvdWxkIGhhdmUgYSBmZXcgd2Vla3MgbW9yZSBvciBsZXNz IGZ1bGwgdGltZSB0byB3b3JrIG9uIHRoaXMgY29taW5nIHVwIChJJ20gdGFraW5nIGEgc2FiYmF0 aWNhbCBmcm9tIHdvcmsgdG8gZG8gb3BlbiBzb3VyY2Ugc3R1ZmYhKSwgc28gSSdkIHJlYWxseSBs aWtlIHRvIGtub3cgaWYgc29tZXRoaW5nIGFsb25nIHRoZXNlIGxpbmVzIHdvdWxkIGJlIHVzZWZ1 bCwgbW9yZSBpbiBsaW5lIHdpdGggWUpJVCdzIGdvYWxzLCBhbmQgc29tZXRoaW5nIHdoaWNoIHdv dWxkIGJlIGNvbnNpZGVyZWQgZm9yIG1lcmdpbmcuDQ0KDQ0KVGhhbmtzIGFnYWluIGZvciB5b3Vy IHRpbWUsIEkgYXBwcmVjaWF0ZSBpdC4NDQoNDQotLS0NDQoNDQpGb290bm90ZToNDQoNDQo+IGl0 J3MgKEdEQidzIGppdCBpbnRlcmZhY2UpIGFsc28ga25vd24gdG8gYmUgbm90IGhhdmUgdGhlIGJl c3Qgc3BlZWQuDQ0KDQ0KSSB0aGluayB0aGlzIGNvbmNlcm4gb25seSBhcHBsaWVzIHdoaWxlIEdE QiBpcyBhY3R1YWxseSBfYXR0YWNoZWRfOyBJIGRvbid0IHRoaW5rIHRoZSBzcGVlZCBvZiBydW5u aW5nIHRoZSBwcm9ncmFtIHVuZGVyIGEgZGVidWdnZXIgc2hvdWxkIGJlIGEgcHJpbWFyeSBjb25j ZXJuIG9mIHRoaXMgdW53aW5kaW5nIHdvcmsuIFRoaXMgaXMgbW9vdCBhbnl3YXkgdGhvdWdoIGJl Y2F1c2UgdGhlIEVMRiBnZW5lcmF0aW9uIGlzIGEgaHVnZSBwYWluIGFzIHlvdSBwb2ludCBvdXQu DQ0KDQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0NCkZlYXR1cmUg IzE5NTQxOiBQcm9wb3NhbDogR2VuZXJhdGUgZnJhbWUgdW53aW5kaW5nIGluZm8gZm9yIFlKSVQg Y29kZQ0NCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xOTU0MSNjaGFuZ2UtMTAy NTEwDQ0KDQ0KKiBBdXRob3I6IGtqdHNhbmFrdHNpZGlzIChLSiBUc2FuYWt0c2lkaXMpDQ0KKiBT dGF0dXM6IEFzc2lnbmVkDQ0KKiBQcmlvcml0eTogTm9ybWFsDQ0KKiBBc3NpZ25lZTogeWppdA0N Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NDQojIyBXaGF0IGlzIGJl aW5nIHByb3BzZWQ/DQ0KDQ0KQ3VycmVudGx5LCB3aGVuIFJ1YnkgY3Jhc2hlcyB3aXRoIHlqaXQg Z2VuZXJhdGVkIGNvZGUgb24gdGhlIHN0YWNrLCBgcmJfcHJpbnRfYmFja3RyYWNlKClgIGlzIHVu YWJsZSB0byBhY3R1YWxseSBzaG93IGFueSBmcmFtZXMgdW5kZXJuZWF0aCB0aGUgeWppdCBjb2Rl LiBGb3IgZXhhbXBsZSwgaWYgeW91IHNlbmQgU0lHU0VHViB0byBhIFJ1YnkgcHJvY2VzcyBydW5u aW5nIHlqaXQsIHRoaXMgaXMgd2hhdCB5b3Ugc2VlOg0NCg0NCmBgYA0NCi9ydWJ5L21pbmlydWJ5 KHJiX3ByaW50X2JhY2t0cmFjZSsweGMpIFsweGFhYWFkMDI3Njg4NF0gL3J1Ynkvdm1fZHVtcC5j Ojc4NQ0NCi9ydWJ5L21pbmlydWJ5KHJiX3ZtX2J1Z3JlcG9ydCkgL3J1Ynkvdm1fZHVtcC5jOjEw OTMNDQovcnVieS9taW5pcnVieShyYl9idWdfZm9yX2ZhdGFsX3NpZ25hbCsweGQwKSBbMHhhYWFh ZDAwNzU1ODBdIC9ydWJ5L2Vycm9yLmM6ODEzDQ0KL3J1YnkvbWluaXJ1Ynkoc2lnc2VndisweDVj KSBbMHhhYWFhZDAxYmVkYWNdIC9ydWJ5L3NpZ25hbC5jOjkxOQ0NCmxpbnV4LXZkc28uc28uMShf X2tlcm5lbF9ydF9zaWdyZXR1cm4rMHgwKSBbMHhmZmZmOTFhM2U4YmNdDQ0KL3J1YnkvbWluaXJ1 YnkobWFwPCh1c2l6ZSwgeWppdDo6YmFja2VuZDo6aXI6Okluc24pLCAodXNpemUsIHlqaXQ6OmJh Y2tlbmQ6OmlyOjpJbnNuKSwgeWppdDo6YmFja2VuZDo6aXI6OntpbXBsIzE3fTo6bmV4dF9tYXBw ZWQ6OntjbG9zdXJlX2VudiMwfT4rMHg4YykgWzB4YWFhYWQwM2I4YjAwXSAvcnVzdGMvODk3ZTM3 NTUzYmJhOGI0Mjc1MWM2NzY1ODk2Nzg4OWQxMWVjZDEyMC9saWJyYXJ5L2NvcmUvc3JjL29wdGlv bi5yczo5MjkNDQovcnVieS9taW5pcnVieShuZXh0X21hcHBlZCsweDNjKSBbMHhhYWFhZDAyOTFk YzBdIHNyYy9iYWNrZW5kL2lyLnJzOjEyMjUNDQovcnVieS9taW5pcnVieShhcm02NF9zcGxpdCsw eDExNCkgWzB4YWFhYWQwMjg3NzQ0XSBzcmMvYmFja2VuZC9hcm02NC9tb2QucnM6MzU5DQ0KL3J1 YnkvbWluaXJ1YnkoY29tcGlsZV93aXRoX3JlZ3MrMHg4MCkgWzB4YWFhYWQwMjhiZjg0XSBzcmMv YmFja2VuZC9hcm02NC9tb2QucnM6MTEwNg0NCi9ydWJ5L21pbmlydWJ5KGNvbXBpbGUrMHhjNCkg WzB4YWFhYWQwMjkxYWUwXSBzcmMvYmFja2VuZC9pci5yczoxMTU4DQ0KL3J1YnkvbWluaXJ1Ynko Z2VuX3NpbmdsZV9ibG9jaysweGU0NCkgWzB4YWFhYWQwMmIxZjg4XSBzcmMvY29kZWdlbi5yczo4 NTQNDQovcnVieS9taW5pcnVieShnZW5fYmxvY2tfc2VyaWVzX2JvZHkrMHg5YykgWzB4YWFhYWQw M2IwMjUwXSBzcmMvY29yZS5yczoxNjk4DQ0KL3J1YnkvbWluaXJ1YnkoZ2VuX2Jsb2NrX3Nlcmll cysweDUwKSBbMHhhYWFhZDAzYjAxMDBdIHNyYy9jb3JlLnJzOjE2NzYNDQovcnVieS9taW5pcnVi eShicmFuY2hfc3R1Yl9oaXRfYm9keSsweDgwYykgWzB4YWFhYWQwM2IxZjY4XSBzcmMvY29yZS5y czoyMDIxDQ0KL3J1YnkvbWluaXJ1Ynkoe2Nsb3N1cmUjMH0rMHgyOCkgWzB4YWFhYWQwMmViODZj XSBzcmMvY29yZS5yczoxOTI0DQ0KL3J1YnkvbWluaXJ1YnkoZG9fY2FsbDx5aml0Ojpjb3JlOjpi cmFuY2hfc3R1Yl9oaXQ6OntjbG9zdXJlX2VudiMwfSwgKmNvbnN0IHU4PisweDk4KSBbMHhhYWFh ZDAzNWJhM2NdIC9ydXN0Yy84OTdlMzc1NTNiYmE4YjQyNzUxYzY3NjU4OTY3ODg5ZDExZWNkMTIw L2xpYnJhcnkvc3RkL3NyYy9wYW5pY2tpbmcucnM6NDkyDQ0KWzB4YWFhYWQwMzVjOWI0XQ0NCmBg YA0NCg0NCihuLmIuIC0gSSBjb21waWxlZCBSdWJ5IHdpdGggYC1mYXN5bmNocm9ub3VzLXVud2lu ZC10YWJsZXMg4oCTcmR5bmFtaWMg4oCTZ2AgaW4gY2ZsYWdzIHRvIG1ha2Ugc3VyZSBnY2MgZ2Vu ZXJhdGVzIGFwcHJvcHJpYXRlIHVud2luZCBpbmZvICYga2VlcHMgdGhlIHN5bWJvbCB0YWJsZXMp Lg0NCg0NCkxpa2V3aXNlLCBpZiB5b3UgYXR0YWNoIGdkYiB0byBhIFJ1YnkgcHJvY2VzcyB3aXRo IHlqaXQgZW5hYmxlZCwgZ2RiIGNhbid0IHNob3cgdGhyZWFkIGJhY2t0cmFjZXMgdGhyb3VnaCB5 aml0LWdlbmVyYXRlZCBjb2RlIGVpdGhlci4NDQoNDQpNeSBwcm9wb3NhbCBpcyB0aGF0IFlKSVQg Z2VuZXJhdGUgc3VmZmljaWVudCB1bndpbmRpbmcgYW5kIGRlYnVnIGluZm9ybWF0aW9uIG9uIGFs bCBwbGF0Zm9ybXMgdG8gYWxsb3cgYm90aCBgcmJfcHJpbnRfYmFja3RyYWNlKClgIGFuZCB0aGUg cGxhdGZvcm0ncyBkZWJ1Z2dlciAoZ2RiL2xsZGIvV2luRGJnKSB0byBzaG93Og0NCg0NCiogRnVs bCBzdGFjayB0cmFjZXMgYWxsIHRoZSB3YXkgYmFjayB0byBgbWFpbmAuIFRoYXQgaXMsIGl0IHNo b3VsZCBiZSBwb3NzaWJsZSB0byBzZWUgZnJhbWVzIF91bmRlcm5lYXRoXyBgWzB4YWFhYWQwMzVj OWI0XWAgZnJvbSB0aGUgYmFja3RyYWNlIGFib3ZlLg0NCiogTmFtZXMgZm9yIHRoZSBkeW5hbWlj YWxseSBnZW5lcmF0ZWQgeWppdCBibG9ja3MgKGUuZy4gaW5zdGVhZCBvZiBgWzB4YWFhYWQwMzVj OWI0XWAsIHdlIHNob3VsZCBzZWUgc29tZXRoaW5nIGxpa2UgYHlqaXQkJG5hbWVfb2ZfcnVieV9t ZXRob2RgLCB3aGVyZSBgbmFtZV9vZl9ydWJ5X21ldGhvZGAgaXMgdGhlIGBsYWJlbGAgZm9yIHRo ZSBpc2VxIHRoaXMgaXMgSklUJ2QgY29kZSBmb3IpLg0NCg0NCiMjIE1vdGl2YXRpb24NDQoNDQpJ IGhhdmUgYSBmZXcgbW90aXZhdGlvbnMgZm9yIHdhbnRpbmcgdGhpcy4gRmlyc3RseSwgSSBmZWVs IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBpbmRlcGVuZGVudGx5IHVzZWZ1bC4gV2hlbiBSdWJ5IGNy YXNoZXMsIHRoZSBtb3JlIGluZm9ybWF0aW9uIHdlIGNhbiBnZXQsIHRoZSBtb3JlIGxpa2VseSB3 ZSBhcmUgdG8gZmluZCB0aGUgcm9vdCBjYXVzZS4gTGlrZXdpc2UsIHRoZSBzYW1lIHByaW5jaXBs ZSBhcHBsaWVzIHRvIGRlYnVnZ2luZyB3aXRoIGdkYiAtIHlvdSBjYW4gZ2V0IGEgZnVsbGVyIHVu ZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGUgcHJvY2VzcyBpcyBkb2luZyBpZiB5b3Ugc2VlIHRoZSB3 aG9sZSBzdGFjay4NDQoNDQpJIGhhdmUgb2Z0ZW4gZm91bmQgYXR0YWNoaW5nIGdkYiB0byB0aGUg UnVieSBpbnRlcnByZXRlciBoZWxwcyBpbiB1bmRlcnN0YW5kaW5nIHByb2JsZW1zIGluIFJ1Ynkg Y29kZSBvciBDIGV4dGVuc2lvbnMgYW5kIGlzIHNvbWV0aGluZyBJIGRvIHJlbGF0aXZlbHkgZnJl cXVlbnRseTsgeWppdCBicmVha2luZyB0aGF0IHdpbGwgZGVmaW5pdGVseSBiZSBpbmNvbnZlbmll bnQgZm9yIG1lIQ0NCg0NCiMjIEltcGxlbWVudGF0aW9uDQ0KDQ0KSSBoYXZlIGEgZHJhZnQgaW1w bGVtZW50YXRpb24gaGVyZSBvbiBob3cgSSdkIGltcGxlbWVudCB0aGlzOiBodHRwczovL2dpdGh1 Yi5jb20vcnVieS9ydWJ5L3B1bGwvNzU2Ny4gSXQncyBjdXJyZW50bHkgbWlzc2luZyB0ZXN0cyAm IHBsYXRmb3JtIHN1cHBvcnQgKGl0IG9ubHkgd29ya3Mgb24gTGludXggYWFyY2g2NCkuIEFsc28s IGl0IGltcGxlbWVudHMgdW53aW5kIGluZm8gZ2VuZXJhdGlvbiwgc28gdW53aW5kaW5nIGNhbiB3 b3JrIF90aHJvdWdoXyB5aml0IGNvZGUsIGJ1dCBpdCBkb2VzIG5vdCBjdXJyZW50bHkgZW1pdCBz eW1ib2xzIHRvIGdpdmUgX25hbWVzXyB0byB0aG9zZSB5aml0IGZyYW1lcy4NDQoNDQpNeSBQUiBj b250YWlucyBhIGRvY3VtZW50IHdoaWNoIGV4cGxhaW5zIGhvdyB0aGUgTGludXggaW50ZXJmYWNl cyBmb3IgcmVnaXN0ZXJpbmcgdW53aW5kIGluZm8gZm9yIEpJVCdkIGNvZGUgd29yaywgc28gSSB3 b24ndCBkdXBsaWNhdGUgdGhhdCBpbmZvcm1hdGlvbiBoZXJlLg0NCg0NClRoZSBiaWdnZXN0IGlt cGxlbWVudGF0aW9uIHF1ZXN0aW9uIEkgaGFkIGlzIGFyb3VuZCB0aGUgdXNlIG9mIFJ1c3QgY3Jh dGVzLiBDdXJyZW50bHksIEkgcHJvdG90eXBlZCBteSBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGUg Z2ltbGkgJiBvYmplY3QgY3JhdGVzLCBmb3IgZ2VuZXJhdGluZyBEV0FSRiBpbmZvIGFuZCBFTEYg YmluYXJpZXMuIEhvd2V2ZXIsIHRoZSB5aml0IGJ1aWxkIGRvZXMgcHVycG9zZWZ1bGx5IGRvZXMg bm90IHVzZSBjYXJnbyAmIGV4dGVybmFsIGNyYXRlcyBmb3IgcmVsZWFzZSBidWlsZHMuIFRoZXJl IGFyZSBhIGZldyBkaWZmZXJlbnQgd2F5cyB3ZSBjb3VsZCBnbyBoZXJlOg0NCg0NCiogRG9uJ3Qg dXNlIHRoZSBnaW1saSAmIG9iamVjdCBjcmF0ZXM7IGluc3RlYWQsIHJlLWltcGxlbWVudCBhbGwg ZGVidWcgaW5mbyAmIG9iamVjdCBmaWxlIGdlbmVyYXRpb24gY29kZSBpbiB5aml0Lg0NCiogRG9u J3QgdXNlIHRoZSBjcmF0ZXM7IGluc3RlYWQsIGxpbmsgYWdhaW50IEMgbGlicmFyaWVzIHRvIHBy b3ZpZGUgdGhpcyBmdW5jdGlvbmFsaXR5ICYgY2FsbCB0aGVtIGZyb20gUnVzdCAocGVyaGFwcyBz b21lIGNvbWJpbmF0aW9uIG9mIGxpYmVsZiwgbGliZHcsIGxpYmJmZCwgb3IgbGx2bSBtaWdodCBk byB3aGF0IHdlIG5lZWQpDQ0KKiBVc2UgY2FyZ28gYWZ0ZXIgYWxsIGZvciB0aGUgcmVsZWFzZSBi dWlsZCAmIGRvd25sb2FkIHRoZSBjcmF0ZXMgYXQgYnVpbGQtdGltZQ0NCiogVXNlIGNhcmdvIGZv ciB0aGUgcmVsZWFzZSBidWlsZCwgYnV0IHZlbmRvciBldmVyeXRoaW5nLCBzbyB0aGUgYnVpbGQg ZG9lc24ndCBuZWVkIHRvIGRvd25sb2FkIGFueXRoaW5nDQ0KKiBPbmx5IG1ha2UgdW53aW5kIGlu Zm8gZ2VuZXJhdGlvbiBhdmFpbGFibGUgaW4gZGV2IG1vZGUgd2hlcmUgY2FyZ28gaXMgdXNlZCwg YW5kIHNvIG1hcmsgdGhlIGdpbWxpL29iamVjdCBkZXBlbmRlbmNpZXMgYXMgb3B0aW9uYWwgaW4g Q2FyZ28udG9tbC4NDQoNDQpXZSdkIG5lZWQgdG8gZGVjaWRlIG9uIG9uZSBvZiB0aGVzZSBhcHBy b2FjaGVzIGZvciB0aGlzIHByb3Bvc2FsIHRvIHdvcmsuIEkgZG9uJ3QgcmVhbGx5IGhhdmUgYSBz dHJvbmcgc2Vuc2Ugb2YgdGhlIHByb3MvY29ucyBvZiBlYWNoLg0NCg0NCihTaWRlIG5vdGUgLSBt eSBQUiBhY3R1YWxseSBkZXBlbmRzIG9uIGEgX2ZvcmtfIG9mIGdpbWxpIC0gSSd2ZSBiZWVuIGRp c2N1c3NpbmcgYWRkaW5nIHRoZSBuZWVkZWQgaW50ZXJmYWNlcyB1cHN0cmVhbSBoZXJlOiBodHRw czovL2dpdGh1Yi5jb20vZ2ltbGktcnMvZ2ltbGkvaXNzdWVzLzY0OCkuDQ0KDQ0KIyMgQmVuY2ht YXJrcw0NCg0NCkkgcmFuIHRoZSB5aXQtYmVuY2ggc3VpdGUgb24gbXkgYnJhbmNoIGFuZCBjb21w YXJlZCBpdCB0byBSdWJ5IG1hc3RlcjoNDQoNDQoqIE15IGJyYW5jaDogaHR0cHM6Ly9naXN0Lmdp dGh1Yi5jb20vS0pUc2FuYWt0c2lkaXMvNTc0MWE5ZjY0ZTVjZDc1Y2RmNWZlZGQ4NDYwOTFhNGYN DQoqIFJ1YnkgbWFzdGVyOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9LSlRzYW5ha3RzaWRpcy81 OTJkM2ViY2Y5OGY2NzQ1ZGZhM2VmYmQzMGEyNWFjZg0NCg0NClRoaXMgaXMgYSAodmVyeSBzaW1w bGUpIGNvbXBhcmlzb246DQ0KDQ0KYGBgDQ0KLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tIC0t LS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0NDQpiZW5jaCAgICAgICAgICB5aml0IChtcykgICAg YnJhbmNoIChtcykgIGJyYW5jaC95aml0ICglKQ0NCmFjdGl2ZXJlY29yZCAgIDk3LjUgICAgICAg ICA5OC41ICAgICAgICAgMTAxLjAzJQ0NCmhleGFwZGYgICAgICAgIDI0MTUuMyAgICAgICAyNDU4 LjIgICAgICAgMTAxLjc4JQ0NCmxpcXVpZC1jICAgICAgIDYxLjkgICAgICAgICA2My4xICAgICAg ICAgMTAxLjk0JQ0NCmxpcXVpZC1yZW5kZXIgIDEzNS4zICAgICAgICAxMzUuMCAgICAgICAgOTku NzglDQ0KbWFpbCAgICAgICAgICAgMTA0LjYgICAgICAgIDEwNS41ICAgICAgICAxMDAuODYlDQ0K cHN5Y2gtbG9hZCAgICAgMTg4Ny4xICAgICAgIDE5MjIuMCAgICAgICAxMDEuODUlDQ0KcmFpbHNi ZW5jaCAgICAgMTU0NC40ICAgICAgIDE1NTYuMCAgICAgICAxMDAuNzUlDQ0KcnVieS1sc3AgICAg ICAgODguNCAgICAgICAgIDg5LjUgICAgICAgICAxMDEuMjQlDQ0Kc2VxdWVsICAgICAgICAgMTQ3 LjUgICAgICAgIDE1MS4xICAgICAgICAxMDIuNDQlDQ0KYmluYXJ5dHJlZXMgICAgMzAzICAgICAg ICAgIDMwNS42ICAgICAgICAxMDAuODYlDQ0KY2h1bmt5X3BuZyAgICAgMTA3NS44ICAgICAgIDEw NzkuNCAgICAgICAxMDAuMzMlDQ0KZXJ1YmkgICAgICAgICAgMzkyLjkgICAgICAgIDM5Mi4zICAg ICAgICA5OS44NSUNDQplcnViaV9yYWlscyAgICAxNC43ICAgICAgICAgMTQuNyAgICAgICAgIDEw MC4wMCUNDQpldGFubmkgICAgICAgICA3OTIuMyAgICAgICAgNzkxLjQgICAgICAgIDk5Ljg5JQ0N CmZhbm5rdWNocmVkdXggIDM4MTUuOSAgICAgICAzODEzLjYgICAgICAgOTkuOTQlDQ0KbGVlICAg ICAgICAgICAgMTAzMC4yICAgICAgIDEwMzkuMiAgICAgICAxMDAuODclDQ0KbmJvZHkgICAgICAg ICAgNDkuMiAgICAgICAgIDQ5LjMgICAgICAgICAxMDAuMjAlDQ0Kb3B0Y2Fycm90ICAgICAgNDE0 MiAgICAgICAgIDQxNDMuMyAgICAgICAxMDAuMDMlDQ0KcnVieS1qc29uICAgICAgMjg2MC43ICAg ICAgIDI4NzQuMCAgICAgICAxMDAuNDYlDQ0KcnVieWtvbiAgICAgICAgNzkwNi42ICAgICAgIDc5 MDQuMiAgICAgICA5OS45NyUNDQozMGtfaWZlbHNlICAgICAzNDguNyAgICAgICAgMzQ1LjQgICAg ICAgIDk5LjA1JQ0NCjMwa19tZXRob2RzICAgIDgyOC42ICAgICAgICA4MzEuOCAgICAgICAgMTAw LjM5JQ0NCmNmdW5jX2l0c2VsZiAgIDI4LjggICAgICAgICAyOC45ICAgICAgICAgMTAwLjM1JQ0N CmZpYiAgICAgICAgICAgIDM0LjQgICAgICAgICAzNC41ICAgICAgICAgMTAwLjI5JQ0NCmdldGl2 YXIgICAgICAgIDExNS41ICAgICAgICAxMDkuNyAgICAgICAgOTQuOTglDQ0Ka2V5d29yZF9hcmdz ICAgMzcuNyAgICAgICAgIDM4LjAgICAgICAgICAxMDAuODAlDQ0KcmVzcG9uZF90byAgICAgMjYg ICAgICAgICAgIDI2LjEgICAgICAgICAxMDAuMzglDQ0Kc2V0aXZhciAgICAgICAgMzMuOCAgICAg ICAgIDMzLjUgICAgICAgICA5OS4xMSUNDQpzZXRpdmFyX29iamVjdCAyMDguNyAgICAgICAgMTk0 LjMgICAgICAgIDkzLjEwJQ0NCnN0cl9jb25jYXQgICAgIDUyLjYgICAgICAgICA1Mi4yICAgICAg ICAgOTkuMjQlDQ0KdGhyb3cgICAgICAgICAgMjMuOCAgICAgICAgIDI0LjEgICAgICAgICAxMDEu MjYlDQ0KLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLSAtLS0tLS0tLS0t LS0tLS0NDQpgYGANDQoNDQpJdCBzZWVtcyBsaWtlIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3Qgb2Yg Z2VuZXJhdGluZyBhbmQgcmVnaXN0ZXJpbmcgdGhlIGRlYnVnIGluZm8gaXMgbWFyZ2luYWwuDQ0K DQ0KDQ0KDQ0KLS0gDQ0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvDQ0KIF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIHJ1YnktY29yZSBtYWlsaW5nIGxp c3QgLS0gcnVieS1jb3JlQG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vic2NyaWJlIHNlbmQgYW4g ZW1haWwgdG8gcnVieS1jb3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1YnktY29yZSBpbmZv IC0tIGh0dHBzOi8vbWwucnVieS1sYW5nLm9yZy9tYWlsbWFuMy9wb3N0b3JpdXMvbGlzdHMvcnVi eS1jb3JlLm1sLnJ1YnktbGFuZy5vcmcv