[ruby-core:112979] [Ruby master Feature#19541] Proposal: Generate frame unwinding info for YJIT code
From:
"alanwu (Alan Wu) via ruby-core" <ruby-core@...>
Date:
2023-03-22 18:59:38 UTC
List:
ruby-core #112979
SXNzdWUgIzE5NTQxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgYWxhbnd1IChBbGFuIFd1KS4NDQoNDQoN DQpUaGFuayB5b3UgZm9yIGxvb2tpbmcgYXQgdGhpcy4gWW91IGNsZWFybHkgcHV0IGluIGEgbG90 IG9mIGVmZm9ydC4gSG93ZXZlciwNDQp0aGlzIHByb3Bvc2FsIGNvbmZsYXRlcyB0b28gbWFueSBj b25jZXJucywgd2hpbGUgdGhlIGdvYWxzIGFyZSByZWxhdGVkLCB0aGUNDQpzb2x1dGlvbiB0byBz b2x2ZSBlYWNoIG9uZSBoYXZlIGRpZmZlcmVudCBjb25zdHJhaW50cy4gSSBzdWdnZXN0IHNlbmRp bmcNDQpzbWFsbGVyIHByb3Bvc2FscyBpbiB0aGUgZnV0dXJlLg0NCg0NCkknbGwgcmVzcG9uZCB0 byBqdXN0IHRoZSB1bndpbmRpbmcgY29uY2VybiBoZXJlLCBiZWNhdXNlIHRoYXQgaGFzIGFuDQ0K aW1wbGVtZW50ZWQgcHJvb2Ytb2YtY29uY2VwdC4gQXQgZmlyc3QgYmx1c2gsIGZvciBzb2x2aW5n IGEgZGVidWdnaW5nIGNvbmNlcm5zLA0NCnRoZSBhZGRlZCBjb21wbGV4aXR5IGZyb20gZGVwZW5k aW5nIG9uIHRoZSBtYXNzaXZlIGBnbGltaWAgY3JhdGUgZmVlbHMgYmFkLg0NCkFsc28sIHRoZSBu ZWVkIHRvIGdlbmVyYXRlIEVMRiBvYmplY3RzIGluLW1lbW9yeSBpcyBhbnRpdGhldGljYWwgdG8g WUpJVCdzIGdvYWwNDQpvZiBrZWVwaW5nIG1lbW9yeSBjb25zdW1wdGlvbiBsb3cuDQ0KDQ0KRm9y IHRoZSBnb2FsIG9mIHByb3ZpZGluZyB1bndpbmRhYmlsaXR5IGluIHJlbGVhc2UgYnVpbGRzLCBn ZW5lcmF0aW5nIERXQVJGIGFuZA0NCkVMRiBvYmplY3RzIGluIG1lbW9yeSBpcyBtb3JlIGNvbXBs ZXggdGhhbiBuZWVkcyB0byBiZS4gRFdBUkYgdW53aW5kIGlzIHZlcnkNDQpleHByZXNzaXZlLCB3 YXkgbW9yZSBwb3dlcmZ1bCB0aGFuIHdoYXQgd2UgbmVlZCB0byB1bndpbmQgdGhyb3VnaCBZSklU DQ0KZ2VuZXJhdGVkIGZyYW1lcy4gVGhlIHVudXNlZCBjb21wbGV4aXR5IHNob3cgdXAgYXMgZXh0 cmEgbWVtb3J5IGNvbnN1bXB0aW9uLg0NClRoZSBMaW51eCBrZXJuZWwgaGFzIFtpdHMgb3duIHVu d2luZGluZyBmb3JtYXRdWzFdIHBhcnRseSBiZWNhdXNlIERXQVJGIGlzIG1vcmUNDQpjb21wbGV4 IHRoYW4gd2hhdCB0aGV5IG5lZWQuIFdoYXQgWUpJVCBuZWVkcyBpcyBldmVuIHNpbXBsZXIgdGhh biB3aGF0IExpbnV4DQ0KbmVlZHMuIFNpbmNlIHlvdSBtZW50aW9uZWQgV2luRGJnLCB1bndpbmRh YmlsaXR5IGlzIHRlY2huaWNhbGx5IGFuIEFCSQ0NCnJlcXVpcmVtZW50IG9uIFdpbmRvd3MuIFRo ZSBpbnRlcmZhY2UgdGhlcmUgZG9lc24ndCByZXF1aXJlIHByZS1yZWdpc3RyYXRpb24NDQpmb3Ig ZWFjaCBwaWVjZSBvZiBjb2RlOyBpdCBzaW1wbHkgY2FsbHMgYmFjayB3aGVuIHVud2luZGluZyBu ZWVkcyB0byBoYXBwZW4uDQ0KVGhhdCBpbnRlcmZhY2UsIGNvbWJpbmVkIHdpdGggYSBkZXNpZ25l ZCBwcm9sb2d1ZSwgc2hvdWxkIGFsbG93cyBmb3IgdW53aW5kaW5nDQ0KdGhyb3VnaCBnZW5lcmF0 ZWQgZnJhbWVzIHdpdGhvdXQgKmFueSogZXh0cmEgbWV0YWRhdGEuIFRoaXMgaXMgaWRlYWwgbWVt b3J5DQ0KY29uc3VtcHRpb24gd2lzZS4NDQoNDQpGb3IgcGxhdGZvcm1zIFlKSVQgYWxyZWFkeSBz dXBwb3J0cywgd2UgbWlnaHQgaGF2ZSBubyBjaG9pY2UgYnV0IHRvIHJlZ2lzdGVyDQ0KY29kZSBi ZWZvcmUgaGFuZC4gUmVnaXN0ZXJpbmcgdXNpbmcgdGhlIEdEQiBpbnRlcmZhY2Ugc2VlbXMgbGVz cyB0aGFuIGlkZWFsLA0NCnRob3VnaC4gSXQgcmVxdWlyZXMgZ2VuZXJhdGluZyBFTEYgb2JqZWN0 cyBpbi1tZW1vcnksIHdoaWNoIGlzIGJhZCBmb3IgbWVtb3J5DQ0KY29uc3VtcHRpb24sIGFuZCBp dCdzIGFsc28gW2tub3duIHRvIGJlIG5vdCBoYXZlIHRoZSBiZXN0IHNwZWVkXVsyXS4gRm9yIGNh c2VzDQ0Kd2hlcmUgUnVieSBhbHJlYWR5IGxpbmtzIHdpdGggYGxpYnVud2luZGAgKHNvbWUgTGlu dXggZGlzdHJvcyBhbmQgQlNEcyksIHdlIGNhbg0NCnJlZ2lzdGVyIHdpdGggW2l0cyBkeW5hbWlj IGludGVyZmFjZV1bM10sIG9yIHVzZSBpdCB0byB0ZWFjaCBgYWRkcjJsaW5lLmNgIGhvdw0NCnRv IHVud2luZCB0aHJvdWdoIFlKSVQgZnJhbWVzIHdpdGhvdXQgbmVlZGluZyB0byBnZW5lcmF0ZSBl eHRyYSBtZXRhZGF0YS4NDQoNDQpOb3RlIHRoYXQgb24gQTY0IG1hY09TLCBiZWNhdXNlIEFwcGxl IFttYW5kYXRlc11bNF0gZnJhbWUgcG9pbnRlciB1bndpbmRpbmcsDQ0KTExEQiBhbHJlYWR5IHVu d2luZHMgdGhyb3VnaCBZSklUIGZyYW1lcyBqdXN0IGZpbmUuIFdlIGdlbmVyYXRlIHRoZSBzYW1l IGNvZGUNDQpvbiBBNjQgTGludXggd2l0aCBHTlUgdXNlcnNwYWNlLCBidXQgdGhlIHNhbWUgZ3Vh cmFudGVlIGRvZXNuJ3QgZXhpc3QgdGhlcmUuDQ0KDQ0KSW4gc3VtbWFyeSwgSSBkbyBhZ3JlZSB0 aGF0IHdlIHNob3VsZCB0cnkgdG8gZ2l2ZSBmdWxsZXIgYmFja3RyYWNlcyBpbiB0aGUgYnVnDQ0K cmVwb3J0ZXIgYW5kIGhlbHAgZGVidWdnZXJzLCBidXQgaWYgdGhlIHByb3Bvc2FsIGlzICJsZXQn cyB1c2UgYSBidW5jaCBvZg0NCm1lbW9yeSBhbmQgdGFrZSBvbiBhIGZldyBiaWcgZGVwZW5kZW5j aWVzIHRvIGRvIGl0IiwgdGhlbiB0aGUgYW5zd2VyIGlzIG5vLg0NClRoYXQgY29tcGV0ZXMgd2l0 aCBhbmQgdW5kZXJtaW5lcyB0b28gbWFueSBvdGhlciBnb2Fscy4NDQoNDQoNDQpbMV06IGh0dHBz Oi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L3g4Ni9vcmMtdW53aW5kZXIuaHRtbA0N ClsyXTogaHR0cHM6Ly9naXRodWIuY29tL0p1bGlhTGFuZy9qdWxpYS9pc3N1ZXMvMTQ4NDYNDQpb M106IGh0dHBzOi8vd3d3Lm5vbmdudS5vcmcvbGlidW53aW5kL21hbi9saWJ1bndpbmQtZHluYW1p YygzKS5odG1sDQ0KWzRdOiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlv bi94Y29kZS93cml0aW5nLWFybTY0LWNvZGUtZm9yLWFwcGxlLXBsYXRmb3Jtcw0NCg0NCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NDQpGZWF0dXJlICMxOTU0MTogUHJv cG9zYWw6IEdlbmVyYXRlIGZyYW1lIHVud2luZGluZyBpbmZvIGZvciBZSklUIGNvZGUNDQpodHRw czovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTk1NDEjY2hhbmdlLTEwMjUwNw0NCg0NCiog QXV0aG9yOiBranRzYW5ha3RzaWRpcyAoS0ogVHNhbmFrdHNpZGlzKQ0NCiogU3RhdHVzOiBBc3Np Z25lZA0NCiogUHJpb3JpdHk6IE5vcm1hbA0NCiogQXNzaWduZWU6IHlqaXQNDQotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQ0KIyMgV2hhdCBpcyBiZWluZyBwcm9wc2Vk Pw0NCg0NCkN1cnJlbnRseSwgd2hlbiBSdWJ5IGNyYXNoZXMgd2l0aCB5aml0IGdlbmVyYXRlZCBj b2RlIG9uIHRoZSBzdGFjaywgYHJiX3ByaW50X2JhY2t0cmFjZSgpYCBpcyB1bmFibGUgdG8gYWN0 dWFsbHkgc2hvdyBhbnkgZnJhbWVzIHVuZGVybmVhdGggdGhlIHlqaXQgY29kZS4gRm9yIGV4YW1w bGUsIGlmIHlvdSBzZW5kIFNJR1NFR1YgdG8gYSBSdWJ5IHByb2Nlc3MgcnVubmluZyB5aml0LCB0 aGlzIGlzIHdoYXQgeW91IHNlZToNDQoNDQpgYGANDQovcnVieS9taW5pcnVieShyYl9wcmludF9i YWNrdHJhY2UrMHhjKSBbMHhhYWFhZDAyNzY4ODRdIC9ydWJ5L3ZtX2R1bXAuYzo3ODUNDQovcnVi eS9taW5pcnVieShyYl92bV9idWdyZXBvcnQpIC9ydWJ5L3ZtX2R1bXAuYzoxMDkzDQ0KL3J1Ynkv bWluaXJ1YnkocmJfYnVnX2Zvcl9mYXRhbF9zaWduYWwrMHhkMCkgWzB4YWFhYWQwMDc1NTgwXSAv cnVieS9lcnJvci5jOjgxMw0NCi9ydWJ5L21pbmlydWJ5KHNpZ3NlZ3YrMHg1YykgWzB4YWFhYWQw MWJlZGFjXSAvcnVieS9zaWduYWwuYzo5MTkNDQpsaW51eC12ZHNvLnNvLjEoX19rZXJuZWxfcnRf c2lncmV0dXJuKzB4MCkgWzB4ZmZmZjkxYTNlOGJjXQ0NCi9ydWJ5L21pbmlydWJ5KG1hcDwodXNp emUsIHlqaXQ6OmJhY2tlbmQ6OmlyOjpJbnNuKSwgKHVzaXplLCB5aml0OjpiYWNrZW5kOjppcjo6 SW5zbiksIHlqaXQ6OmJhY2tlbmQ6OmlyOjp7aW1wbCMxN306Om5leHRfbWFwcGVkOjp7Y2xvc3Vy ZV9lbnYjMH0+KzB4OGMpIFsweGFhYWFkMDNiOGIwMF0gL3J1c3RjLzg5N2UzNzU1M2JiYThiNDI3 NTFjNjc2NTg5Njc4ODlkMTFlY2QxMjAvbGlicmFyeS9jb3JlL3NyYy9vcHRpb24ucnM6OTI5DQ0K L3J1YnkvbWluaXJ1YnkobmV4dF9tYXBwZWQrMHgzYykgWzB4YWFhYWQwMjkxZGMwXSBzcmMvYmFj a2VuZC9pci5yczoxMjI1DQ0KL3J1YnkvbWluaXJ1YnkoYXJtNjRfc3BsaXQrMHgxMTQpIFsweGFh YWFkMDI4Nzc0NF0gc3JjL2JhY2tlbmQvYXJtNjQvbW9kLnJzOjM1OQ0NCi9ydWJ5L21pbmlydWJ5 KGNvbXBpbGVfd2l0aF9yZWdzKzB4ODApIFsweGFhYWFkMDI4YmY4NF0gc3JjL2JhY2tlbmQvYXJt NjQvbW9kLnJzOjExMDYNDQovcnVieS9taW5pcnVieShjb21waWxlKzB4YzQpIFsweGFhYWFkMDI5 MWFlMF0gc3JjL2JhY2tlbmQvaXIucnM6MTE1OA0NCi9ydWJ5L21pbmlydWJ5KGdlbl9zaW5nbGVf YmxvY2srMHhlNDQpIFsweGFhYWFkMDJiMWY4OF0gc3JjL2NvZGVnZW4ucnM6ODU0DQ0KL3J1Ynkv bWluaXJ1YnkoZ2VuX2Jsb2NrX3Nlcmllc19ib2R5KzB4OWMpIFsweGFhYWFkMDNiMDI1MF0gc3Jj L2NvcmUucnM6MTY5OA0NCi9ydWJ5L21pbmlydWJ5KGdlbl9ibG9ja19zZXJpZXMrMHg1MCkgWzB4 YWFhYWQwM2IwMTAwXSBzcmMvY29yZS5yczoxNjc2DQ0KL3J1YnkvbWluaXJ1YnkoYnJhbmNoX3N0 dWJfaGl0X2JvZHkrMHg4MGMpIFsweGFhYWFkMDNiMWY2OF0gc3JjL2NvcmUucnM6MjAyMQ0NCi9y dWJ5L21pbmlydWJ5KHtjbG9zdXJlIzB9KzB4MjgpIFsweGFhYWFkMDJlYjg2Y10gc3JjL2NvcmUu cnM6MTkyNA0NCi9ydWJ5L21pbmlydWJ5KGRvX2NhbGw8eWppdDo6Y29yZTo6YnJhbmNoX3N0dWJf aGl0Ojp7Y2xvc3VyZV9lbnYjMH0sICpjb25zdCB1OD4rMHg5OCkgWzB4YWFhYWQwMzViYTNjXSAv cnVzdGMvODk3ZTM3NTUzYmJhOGI0Mjc1MWM2NzY1ODk2Nzg4OWQxMWVjZDEyMC9saWJyYXJ5L3N0 ZC9zcmMvcGFuaWNraW5nLnJzOjQ5Mg0NClsweGFhYWFkMDM1YzliNF0NDQpgYGANDQoNDQoobi5i LiAtIEkgY29tcGlsZWQgUnVieSB3aXRoIGAtZmFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzIOKA k3JkeW5hbWljIOKAk2dgIGluIGNmbGFncyB0byBtYWtlIHN1cmUgZ2NjIGdlbmVyYXRlcyBhcHBy b3ByaWF0ZSB1bndpbmQgaW5mbyAmIGtlZXBzIHRoZSBzeW1ib2wgdGFibGVzKS4NDQoNDQpMaWtl d2lzZSwgaWYgeW91IGF0dGFjaCBnZGIgdG8gYSBSdWJ5IHByb2Nlc3Mgd2l0aCB5aml0IGVuYWJs ZWQsIGdkYiBjYW4ndCBzaG93IHRocmVhZCBiYWNrdHJhY2VzIHRocm91Z2ggeWppdC1nZW5lcmF0 ZWQgY29kZSBlaXRoZXIuDQ0KDQ0KTXkgcHJvcG9zYWwgaXMgdGhhdCBZSklUIGdlbmVyYXRlIHN1 ZmZpY2llbnQgdW53aW5kaW5nIGFuZCBkZWJ1ZyBpbmZvcm1hdGlvbiBvbiBhbGwgcGxhdGZvcm1z IHRvIGFsbG93IGJvdGggYHJiX3ByaW50X2JhY2t0cmFjZSgpYCBhbmQgdGhlIHBsYXRmb3JtJ3Mg ZGVidWdnZXIgKGdkYi9sbGRiL1dpbkRiZykgdG8gc2hvdzoNDQoNDQoqIEZ1bGwgc3RhY2sgdHJh Y2VzIGFsbCB0aGUgd2F5IGJhY2sgdG8gYG1haW5gLiBUaGF0IGlzLCBpdCBzaG91bGQgYmUgcG9z c2libGUgdG8gc2VlIGZyYW1lcyBfdW5kZXJuZWF0aF8gYFsweGFhYWFkMDM1YzliNF1gIGZyb20g dGhlIGJhY2t0cmFjZSBhYm92ZS4NDQoqIE5hbWVzIGZvciB0aGUgZHluYW1pY2FsbHkgZ2VuZXJh dGVkIHlqaXQgYmxvY2tzIChlLmcuIGluc3RlYWQgb2YgYFsweGFhYWFkMDM1YzliNF1gLCB3ZSBz aG91bGQgc2VlIHNvbWV0aGluZyBsaWtlIGB5aml0JCRuYW1lX29mX3J1YnlfbWV0aG9kYCwgd2hl cmUgYG5hbWVfb2ZfcnVieV9tZXRob2RgIGlzIHRoZSBgbGFiZWxgIGZvciB0aGUgaXNlcSB0aGlz IGlzIEpJVCdkIGNvZGUgZm9yKS4NDQoNDQojIyBNb3RpdmF0aW9uDQ0KDQ0KSSBoYXZlIGEgZmV3 IG1vdGl2YXRpb25zIGZvciB3YW50aW5nIHRoaXMuIEZpcnN0bHksIEkgZmVlbCB0aGlzIGZ1bmN0 aW9uYWxpdHkgaXMgaW5kZXBlbmRlbnRseSB1c2VmdWwuIFdoZW4gUnVieSBjcmFzaGVzLCB0aGUg bW9yZSBpbmZvcm1hdGlvbiB3ZSBjYW4gZ2V0LCB0aGUgbW9yZSBsaWtlbHkgd2UgYXJlIHRvIGZp bmQgdGhlIHJvb3QgY2F1c2UuIExpa2V3aXNlLCB0aGUgc2FtZSBwcmluY2lwbGUgYXBwbGllcyB0 byBkZWJ1Z2dpbmcgd2l0aCBnZGIgLSB5b3UgY2FuIGdldCBhIGZ1bGxlciB1bmRlcnN0YW5kaW5n IG9mIHdoYXQgdGhlIHByb2Nlc3MgaXMgZG9pbmcgaWYgeW91IHNlZSB0aGUgd2hvbGUgc3RhY2su DQ0KDQ0KSSBoYXZlIG9mdGVuIGZvdW5kIGF0dGFjaGluZyBnZGIgdG8gdGhlIFJ1YnkgaW50ZXJw cmV0ZXIgaGVscHMgaW4gdW5kZXJzdGFuZGluZyBwcm9ibGVtcyBpbiBSdWJ5IGNvZGUgb3IgQyBl eHRlbnNpb25zIGFuZCBpcyBzb21ldGhpbmcgSSBkbyByZWxhdGl2ZWx5IGZyZXF1ZW50bHk7IHlq aXQgYnJlYWtpbmcgdGhhdCB3aWxsIGRlZmluaXRlbHkgYmUgaW5jb252ZW5pZW50IGZvciBtZSEN DQoNDQojIyBJbXBsZW1lbnRhdGlvbg0NCg0NCkkgaGF2ZSBhIGRyYWZ0IGltcGxlbWVudGF0aW9u IGhlcmUgb24gaG93IEknZCBpbXBsZW1lbnQgdGhpczogaHR0cHM6Ly9naXRodWIuY29tL3J1Ynkv cnVieS9wdWxsLzc1NjcuIEl0J3MgY3VycmVudGx5IG1pc3NpbmcgdGVzdHMgJiBwbGF0Zm9ybSBz dXBwb3J0IChpdCBvbmx5IHdvcmtzIG9uIExpbnV4IGFhcmNoNjQpLiBBbHNvLCBpdCBpbXBsZW1l bnRzIHVud2luZCBpbmZvIGdlbmVyYXRpb24sIHNvIHVud2luZGluZyBjYW4gd29yayBfdGhyb3Vn aF8geWppdCBjb2RlLCBidXQgaXQgZG9lcyBub3QgY3VycmVudGx5IGVtaXQgc3ltYm9scyB0byBn aXZlIF9uYW1lc18gdG8gdGhvc2UgeWppdCBmcmFtZXMuDQ0KDQ0KTXkgUFIgY29udGFpbnMgYSBk b2N1bWVudCB3aGljaCBleHBsYWlucyBob3cgdGhlIExpbnV4IGludGVyZmFjZXMgZm9yIHJlZ2lz dGVyaW5nIHVud2luZCBpbmZvIGZvciBKSVQnZCBjb2RlIHdvcmssIHNvIEkgd29uJ3QgZHVwbGlj YXRlIHRoYXQgaW5mb3JtYXRpb24gaGVyZS4NDQoNDQpUaGUgYmlnZ2VzdCBpbXBsZW1lbnRhdGlv biBxdWVzdGlvbiBJIGhhZCBpcyBhcm91bmQgdGhlIHVzZSBvZiBSdXN0IGNyYXRlcy4gQ3VycmVu dGx5LCBJIHByb3RvdHlwZWQgbXkgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIGdpbWxpICYgb2Jq ZWN0IGNyYXRlcywgZm9yIGdlbmVyYXRpbmcgRFdBUkYgaW5mbyBhbmQgRUxGIGJpbmFyaWVzLiBI b3dldmVyLCB0aGUgeWppdCBidWlsZCBkb2VzIHB1cnBvc2VmdWxseSBkb2VzIG5vdCB1c2UgY2Fy Z28gJiBleHRlcm5hbCBjcmF0ZXMgZm9yIHJlbGVhc2UgYnVpbGRzLiBUaGVyZSBhcmUgYSBmZXcg ZGlmZmVyZW50IHdheXMgd2UgY291bGQgZ28gaGVyZToNDQoNDQoqIERvbid0IHVzZSB0aGUgZ2lt bGkgJiBvYmplY3QgY3JhdGVzOyBpbnN0ZWFkLCByZS1pbXBsZW1lbnQgYWxsIGRlYnVnIGluZm8g JiBvYmplY3QgZmlsZSBnZW5lcmF0aW9uIGNvZGUgaW4geWppdC4NDQoqIERvbid0IHVzZSB0aGUg Y3JhdGVzOyBpbnN0ZWFkLCBsaW5rIGFnYWludCBDIGxpYnJhcmllcyB0byBwcm92aWRlIHRoaXMg ZnVuY3Rpb25hbGl0eSAmIGNhbGwgdGhlbSBmcm9tIFJ1c3QgKHBlcmhhcHMgc29tZSBjb21iaW5h dGlvbiBvZiBsaWJlbGYsIGxpYmR3LCBsaWJiZmQsIG9yIGxsdm0gbWlnaHQgZG8gd2hhdCB3ZSBu ZWVkKQ0NCiogVXNlIGNhcmdvIGFmdGVyIGFsbCBmb3IgdGhlIHJlbGVhc2UgYnVpbGQgJiBkb3du bG9hZCB0aGUgY3JhdGVzIGF0IGJ1aWxkLXRpbWUNDQoqIFVzZSBjYXJnbyBmb3IgdGhlIHJlbGVh c2UgYnVpbGQsIGJ1dCB2ZW5kb3IgZXZlcnl0aGluZywgc28gdGhlIGJ1aWxkIGRvZXNuJ3QgbmVl ZCB0byBkb3dubG9hZCBhbnl0aGluZw0NCiogT25seSBtYWtlIHVud2luZCBpbmZvIGdlbmVyYXRp b24gYXZhaWxhYmxlIGluIGRldiBtb2RlIHdoZXJlIGNhcmdvIGlzIHVzZWQsIGFuZCBzbyBtYXJr IHRoZSBnaW1saS9vYmplY3QgZGVwZW5kZW5jaWVzIGFzIG9wdGlvbmFsIGluIENhcmdvLnRvbWwu DQ0KDQ0KV2UnZCBuZWVkIHRvIGRlY2lkZSBvbiBvbmUgb2YgdGhlc2UgYXBwcm9hY2hlcyBmb3Ig dGhpcyBwcm9wb3NhbCB0byB3b3JrLiBJIGRvbid0IHJlYWxseSBoYXZlIGEgc3Ryb25nIHNlbnNl IG9mIHRoZSBwcm9zL2NvbnMgb2YgZWFjaC4NDQoNDQooU2lkZSBub3RlIC0gbXkgUFIgYWN0dWFs bHkgZGVwZW5kcyBvbiBhIF9mb3JrXyBvZiBnaW1saSAtIEkndmUgYmVlbiBkaXNjdXNzaW5nIGFk ZGluZyB0aGUgbmVlZGVkIGludGVyZmFjZXMgdXBzdHJlYW0gaGVyZTogaHR0cHM6Ly9naXRodWIu Y29tL2dpbWxpLXJzL2dpbWxpL2lzc3Vlcy82NDgpLg0NCg0NCiMjIEJlbmNobWFya3MNDQoNDQpJ IHJhbiB0aGUgeWl0LWJlbmNoIHN1aXRlIG9uIG15IGJyYW5jaCBhbmQgY29tcGFyZWQgaXQgdG8g UnVieSBtYXN0ZXI6DQ0KDQ0KKiBNeSBicmFuY2g6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0tK VHNhbmFrdHNpZGlzLzU3NDFhOWY2NGU1Y2Q3NWNkZjVmZWRkODQ2MDkxYTRmDQ0KKiBSdWJ5IG1h c3RlcjogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vS0pUc2FuYWt0c2lkaXMvNTkyZDNlYmNmOThm Njc0NWRmYTNlZmJkMzBhMjVhY2YNDQoNDQpUaGlzIGlzIGEgKHZlcnkgc2ltcGxlKSBjb21wYXJp c29uOg0NCg0NCmBgYA0NCi0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0g LS0tLS0tLS0tLS0tLS0tDQ0KYmVuY2ggICAgICAgICAgeWppdCAobXMpICAgIGJyYW5jaCAobXMp ICBicmFuY2gveWppdCAoJSkNDQphY3RpdmVyZWNvcmQgICA5Ny41ICAgICAgICAgOTguNSAgICAg ICAgIDEwMS4wMyUNDQpoZXhhcGRmICAgICAgICAyNDE1LjMgICAgICAgMjQ1OC4yICAgICAgIDEw MS43OCUNDQpsaXF1aWQtYyAgICAgICA2MS45ICAgICAgICAgNjMuMSAgICAgICAgIDEwMS45NCUN DQpsaXF1aWQtcmVuZGVyICAxMzUuMyAgICAgICAgMTM1LjAgICAgICAgIDk5Ljc4JQ0NCm1haWwg ICAgICAgICAgIDEwNC42ICAgICAgICAxMDUuNSAgICAgICAgMTAwLjg2JQ0NCnBzeWNoLWxvYWQg ICAgIDE4ODcuMSAgICAgICAxOTIyLjAgICAgICAgMTAxLjg1JQ0NCnJhaWxzYmVuY2ggICAgIDE1 NDQuNCAgICAgICAxNTU2LjAgICAgICAgMTAwLjc1JQ0NCnJ1YnktbHNwICAgICAgIDg4LjQgICAg ICAgICA4OS41ICAgICAgICAgMTAxLjI0JQ0NCnNlcXVlbCAgICAgICAgIDE0Ny41ICAgICAgICAx NTEuMSAgICAgICAgMTAyLjQ0JQ0NCmJpbmFyeXRyZWVzICAgIDMwMyAgICAgICAgICAzMDUuNiAg ICAgICAgMTAwLjg2JQ0NCmNodW5reV9wbmcgICAgIDEwNzUuOCAgICAgICAxMDc5LjQgICAgICAg MTAwLjMzJQ0NCmVydWJpICAgICAgICAgIDM5Mi45ICAgICAgICAzOTIuMyAgICAgICAgOTkuODUl DQ0KZXJ1YmlfcmFpbHMgICAgMTQuNyAgICAgICAgIDE0LjcgICAgICAgICAxMDAuMDAlDQ0KZXRh bm5pICAgICAgICAgNzkyLjMgICAgICAgIDc5MS40ICAgICAgICA5OS44OSUNDQpmYW5ua3VjaHJl ZHV4ICAzODE1LjkgICAgICAgMzgxMy42ICAgICAgIDk5Ljk0JQ0NCmxlZSAgICAgICAgICAgIDEw MzAuMiAgICAgICAxMDM5LjIgICAgICAgMTAwLjg3JQ0NCm5ib2R5ICAgICAgICAgIDQ5LjIgICAg ICAgICA0OS4zICAgICAgICAgMTAwLjIwJQ0NCm9wdGNhcnJvdCAgICAgIDQxNDIgICAgICAgICA0 MTQzLjMgICAgICAgMTAwLjAzJQ0NCnJ1YnktanNvbiAgICAgIDI4NjAuNyAgICAgICAyODc0LjAg ICAgICAgMTAwLjQ2JQ0NCnJ1Ynlrb24gICAgICAgIDc5MDYuNiAgICAgICA3OTA0LjIgICAgICAg OTkuOTclDQ0KMzBrX2lmZWxzZSAgICAgMzQ4LjcgICAgICAgIDM0NS40ICAgICAgICA5OS4wNSUN DQozMGtfbWV0aG9kcyAgICA4MjguNiAgICAgICAgODMxLjggICAgICAgIDEwMC4zOSUNDQpjZnVu Y19pdHNlbGYgICAyOC44ICAgICAgICAgMjguOSAgICAgICAgIDEwMC4zNSUNDQpmaWIgICAgICAg ICAgICAzNC40ICAgICAgICAgMzQuNSAgICAgICAgIDEwMC4yOSUNDQpnZXRpdmFyICAgICAgICAx MTUuNSAgICAgICAgMTA5LjcgICAgICAgIDk0Ljk4JQ0NCmtleXdvcmRfYXJncyAgIDM3LjcgICAg ICAgICAzOC4wICAgICAgICAgMTAwLjgwJQ0NCnJlc3BvbmRfdG8gICAgIDI2ICAgICAgICAgICAy Ni4xICAgICAgICAgMTAwLjM4JQ0NCnNldGl2YXIgICAgICAgIDMzLjggICAgICAgICAzMy41ICAg ICAgICAgOTkuMTElDQ0Kc2V0aXZhcl9vYmplY3QgMjA4LjcgICAgICAgIDE5NC4zICAgICAgICA5 My4xMCUNDQpzdHJfY29uY2F0ICAgICA1Mi42ICAgICAgICAgNTIuMiAgICAgICAgIDk5LjI0JQ0N CnRocm93ICAgICAgICAgIDIzLjggICAgICAgICAyNC4xICAgICAgICAgMTAxLjI2JQ0NCi0tLS0t LS0tLS0tLS0tIC0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tDQ0KYGBg DQ0KDQ0KSXQgc2VlbXMgbGlrZSB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IG9mIGdlbmVyYXRpbmcg YW5kIHJlZ2lzdGVyaW5nIHRoZSBkZWJ1ZyBpbmZvIGlzIG1hcmdpbmFsLg0NCg0NCg0NCg0NCi0t IA0NCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0NCiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCiBydWJ5LWNvcmUgbWFpbGluZyBsaXN0IC0tIHJ1Ynkt Y29yZUBtbC5ydWJ5LWxhbmcub3JnCiBUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIHJ1 YnktY29yZS1sZWF2ZUBtbC5ydWJ5LWxhbmcub3JnCiBydWJ5LWNvcmUgaW5mbyAtLSBodHRwczov L21sLnJ1YnktbGFuZy5vcmcvbWFpbG1hbjMvcG9zdG9yaXVzL2xpc3RzL3J1YnktY29yZS5tbC5y dWJ5LWxhbmcub3JnLw==