[ruby-core:118158] [Ruby master Feature#20425] Optimize forwarding callers and callees
From:
"tenderlovemaking (Aaron Patterson) via ruby-core" <ruby-core@...>
Date:
2024-06-03 18:42:19 UTC
List:
ruby-core #118158
SXNzdWUgIzIwNDI1IGhhcyBiZWVuIHVwZGF0ZWQgYnkgdGVuZGVybG92ZW1ha2luZyAoQWFyb24g UGF0dGVyc29uKS4NCg0KDQpJIHVwbG9hZGVkIG15IHNsaWRlcyBhYm91dCB0aGlzIGZlYXR1cmUg d2hpY2ggSSBwcmVzZW50ZWQgYXQgdGhlIGRldiBtZWV0aW5nIGluIE9raW5hd2EgW2hlcmVdKGh0 dHBzOi8vc3BlYWtlcmRlY2suY29tL3RlbmRlcmxvdmUvZmVhdHVyZS1udW1iZXItMjA0MjUtc3Bl ZWRpbmctdXAtZGVsZWdhdGUtbWV0aG9kcykuDQoNCkkndmUgcmVydW4gdGhlIGJlbmNobWFya3Mg ZnJvbSB0aGUgc2xpZGVzLCBhbmQgdGhlIHJlc3VsdHMgYXJlIGJlbG93LiAgYG1hc3Rlci1ydWJ5 YCBpcyB0aGUgbWFzdGVyIGJyYW5jaCwgYGZ3ZC1ydWJ5YCBpcyB0aGUgZXhwZXJpbWVudGFsIGJy YW5jaC4gIFRoaXMgYnJhbmNoIG9ubHkgaW1wYWN0cyBgc2VuZGAgYW5kIGBpbnZva2VzdXBlcmAg aW5zdHJ1Y3Rpb25zIHNvIEkndmUgb25seSBpbmNsdWRlZCBiZW5jaG1hcmtzIHdoaWNoIGV4ZXJj aXNlIHRob3NlIHR3byBpbnN0cnVjdGlvbnMuDQoNCg0KIyMjIEZvcndhcmRpbmcgcG9zaXRpb25h bCBwYXJhbWV0ZXJzDQoNCmBgYHJ1YnkNCmRlZiByZWN2KGEsIGIpDQogIGEgKyBiDQplbmQNCg0K ZGVmIGNhbGwoLi4uKQ0KICByZWN2KC4uLikNCmVuZA0KDQojIGRlZiBydW4NCiMgICBjYWxsKDEs IDIpDQojICAgY2FsbCgxLCAyKQ0KIyAgIGNhbGwoMSwgMikNCiMgICAuLi4NCmV2YWwgImRlZiBy dW47ICIgKyAyMDAudGltZXMubWFwIHsNCiAgImNhbGwoMSwgMikiDQp9LmpvaW4oIjsgIikgKyAi OyBlbmQiDQoNCjIwMDAwMC50aW1lcyBkbw0KICBydW4NCmVuZA0KYGBgDQoNClJlc3VsdHM6DQoN CmBgYA0KQmVuY2htYXJrIDE6IGZ3ZC1ydWJ5L21pbmlydWJ5IC12IHJ1YnkvdGVzdC5yYg0KICBU aW1lIChtZWFuIMKxIM+DKTogICAgICAxLjI0MSBzIMKxICAwLjAyMiBzICAgIFtVc2VyOiAxLjIy NiBzLCBTeXN0ZW06IDAuMDA0IHNdDQogIFJhbmdlIChtaW4g4oCmIG1heCk6ICAgIDEuMjE1IHMg 4oCmICAxLjI5NCBzICAgIDEwIHJ1bnMNCiANCkJlbmNobWFyayAyOiBtYXN0ZXItcnVieS9taW5p cnVieSAtdiBydWJ5L3Rlc3QucmINCiAgVGltZSAobWVhbiDCsSDPgyk6ICAgICAgMi44MzQgcyDC sSAgMC4wMDkgcyAgICBbVXNlcjogMi44MDAgcywgU3lzdGVtOiAwLjAxMSBzXQ0KICBSYW5nZSAo bWluIOKApiBtYXgpOiAgICAyLjgyMCBzIOKApiAgMi44NDYgcyAgICAxMCBydW5zDQogDQpTdW1t YXJ5DQogIGZ3ZC1ydWJ5L21pbmlydWJ5IC12IHJ1YnkvdGVzdC5yYiByYW4NCiAgICAyLjI4IMKx IDAuMDQgdGltZXMgZmFzdGVyIHRoYW4gbWFzdGVyLXJ1YnkvbWluaXJ1YnkgLXYgcnVieS90ZXN0 LnJiDQpgYGANCg0KRXhwZXJpbWVudGFsIGJyYW5jaCBpcyAyLjI4eCBmYXN0ZXIuDQoNCiMjIyBG b3J3YXJkaW5nIGtleXdvcmQgcGFyYW1ldGVycw0KDQpgYGBydWJ5DQpkZWYgcmVjdihhOiwgYjop DQogIGEgKyBiDQplbmQNCg0KZGVmIGNhbGwoLi4uKQ0KICByZWN2KC4uLikNCmVuZA0KDQojIGRl ZiBydW4NCiMgICBjYWxsKGE6IDEsIGI6IDIpDQojICAgY2FsbChhOiAxLCBiOiAyKQ0KIyAgIGNh bGwoYTogMSwgYjogMikNCiMgICBjYWxsKGE6IDEsIGI6IDIpDQojICAgLi4uDQpldmFsICJkZWYg cnVuOyAiICsgMjAwLnRpbWVzLm1hcCB7DQogICJjYWxsKGE6IDEsIGI6IDIpIg0KfS5qb2luKCI7 ICIpICsgIjsgZW5kIg0KDQoyMDAwMDAudGltZXMgZG8NCiAgcnVuDQplbmQNCmBgYA0KDQpSZXN1 bHRzDQoNCmBgYA0KQmVuY2htYXJrIDE6IGZ3ZC1ydWJ5L21pbmlydWJ5IC12IHJ1YnkvdGVzdC5y Yg0KICBUaW1lIChtZWFuIMKxIM+DKTogICAgICAxLjUzMCBzIMKxICAwLjAxNyBzICAgIFtVc2Vy OiAxLjUxMSBzLCBTeXN0ZW06IDAuMDA0IHNdDQogIFJhbmdlIChtaW4g4oCmIG1heCk6ICAgIDEu NTAzIHMg4oCmICAxLjU1OCBzICAgIDEwIHJ1bnMNCiANCkJlbmNobWFyayAyOiBtYXN0ZXItcnVi eS9taW5pcnVieSAtdiBydWJ5L3Rlc3QucmINCiAgVGltZSAobWVhbiDCsSDPgyk6ICAgICAgNS4w MjcgcyDCsSAgMC4wMzYgcyAgICBbVXNlcjogNC45NjkgcywgU3lzdGVtOiAwLjAxOCBzXQ0KICBS YW5nZSAobWluIOKApiBtYXgpOiAgICA0Ljk4OCBzIOKApiAgNS4xMDIgcyAgICAxMCBydW5zDQog DQpTdW1tYXJ5DQogIGZ3ZC1ydWJ5L21pbmlydWJ5IC12IHJ1YnkvdGVzdC5yYiByYW4NCiAgICAz LjI5IMKxIDAuMDQgdGltZXMgZmFzdGVyIHRoYW4gbWFzdGVyLXJ1YnkvbWluaXJ1YnkgLXYgcnVi eS90ZXN0LnJiDQpgYGANCg0KRXhwZXJpbWVudGFsIGJyYW5jaCBpcyAzLjI5eCBmYXN0ZXIuDQoN CiMjIyBgc2VuZGAgaW5zdHJ1Y3Rpb24gdGhhdCBhbHdheXMgbWlzc2VzIGlubGluZSBjYWNoZQ0K DQpgYGBydWJ5DQpjbGFzcyBBDQogIGRlZiBhOyBlbmQNCmVuZA0KDQpjbGFzcyBCIDwgQTsgZW5k DQoNCmEgPSBBLm5ldw0KYiA9IEIubmV3DQoNCmRlZiBjYWxsX21ldGhvZChvYmopDQogIG9iai5h IHsgfSAjIEFsd2F5cyBzZW5kIGluc3RydWN0aW9uDQplbmQNCg0KIyBkZWYgcnVuKGEsIGIpDQoj ICAgY2FsbF9tZXRob2QoYSkNCiMgICBjYWxsX21ldGhvZChiKQ0KIyAgIGNhbGxfbWV0aG9kKGEp DQojICAgY2FsbF9tZXRob2QoYikNCiMgICAuLi4NCmV2YWwgImRlZiBydW4oYSwgYik7ICIgKyAy MDAudGltZXMubWFwIHsNCiAgImNhbGxfbWV0aG9kKGEpOyBjYWxsX21ldGhvZChiKSINCn0uam9p bigiOyAiKSArICI7IGVuZCINCg0KMjAwMDAwLnRpbWVzIGRvDQogIHJ1bihhLCBiKQ0KZW5kDQpg YGANCg0KUmVzdWx0Og0KDQpgYGANCiQgaHlwZXJmaW5lICdmd2QtcnVieS9taW5pcnVieSAtdiBy dWJ5L3Rlc3QucmInICdtYXN0ZXItcnVieS9taW5pcnVieSAtdiBydWJ5L3Rlc3QucmInDQpCZW5j aG1hcmsgMTogZndkLXJ1YnkvbWluaXJ1YnkgLXYgcnVieS90ZXN0LnJiDQogIFRpbWUgKG1lYW4g wrEgz4MpOiAgICAgIDEuOTM0IHMgwrEgIDAuMDE0IHMgICAgW1VzZXI6IDEuOTEwIHMsIFN5c3Rl bTogMC4wMDUgc10NCiAgUmFuZ2UgKG1pbiDigKYgbWF4KTogICAgMS45MTYgcyDigKYgIDEuOTY1 IHMgICAgMTAgcnVucw0KIA0KQmVuY2htYXJrIDI6IG1hc3Rlci1ydWJ5L21pbmlydWJ5IC12IHJ1 YnkvdGVzdC5yYg0KICBUaW1lIChtZWFuIMKxIM+DKTogICAgICAxLjc0OSBzIMKxICAwLjAyMCBz ICAgIFtVc2VyOiAxLjcyOCBzLCBTeXN0ZW06IDAuMDA1IHNdDQogIFJhbmdlIChtaW4g4oCmIG1h eCk6ICAgIDEuNzM0IHMg4oCmICAxLjgwMiBzICAgIDEwIHJ1bnMNCiANClN1bW1hcnkNCiAgbWFz dGVyLXJ1YnkvbWluaXJ1YnkgLXYgcnVieS90ZXN0LnJiIHJhbg0KICAgIDEuMTEgwrEgMC4wMSB0 aW1lcyBmYXN0ZXIgdGhhbiBmd2QtcnVieS9taW5pcnVieSAtdiBydWJ5L3Rlc3QucmINCmBgYA0K DQpFeHBlcmltZW50YWwgYnJhbmNoIGlzIGFib3V0IDExJSBzbG93ZXINCg0KIyMjIGBpbnZva2Vz dXBlcmAgaW5zdHJ1Y3Rpb24NCg0KQmVuY2htYXJrOg0KDQpgYGBydWJ5DQpjbGFzcyBBDQogIGRl ZiBhOyBlbmQNCmVuZA0KDQpjbGFzcyBCIDwgQTsNCiAgZGVmIGE7IHN1cGVyOyBlbmQNCmVuZA0K DQpiID0gQi5uZXcNCg0KZGVmIGNhbGxfbWV0aG9kKG9iaikNCiAgb2JqLmEgIyBDYWxscyBpbnZv a2Vfc3VwZXINCmVuZA0KDQojIGRlZiBydW4oYikNCiMgICBjYWxsX21ldGhvZChiKQ0KIyAgIGNh bGxfbWV0aG9kKGIpDQojICAgLi4uDQpldmFsICJkZWYgcnVuKGIpOyAiICsgNDAwLnRpbWVzLm1h cCB7DQogICJjYWxsX21ldGhvZChiKSINCn0uam9pbigiOyAiKSArICI7IGVuZCINCg0KMjAwMDAw LnRpbWVzIGRvDQogIHJ1bihiKQ0KZW5kDQpgYGANCg0KUmVzdWx0Og0KDQpgYGANCiQgaHlwZXJm aW5lICdmd2QtcnVieS9taW5pcnVieSAtdiBydWJ5L3Rlc3QucmInICdtYXN0ZXItcnVieS9taW5p cnVieSAtdiBydWJ5L3Rlc3QucmInDQpCZW5jaG1hcmsgMTogZndkLXJ1YnkvbWluaXJ1YnkgLXYg cnVieS90ZXN0LnJiDQogIFRpbWUgKG1lYW4gwrEgz4MpOiAgICAgIDIuNDYwIHMgwrEgIDAuMDc3 IHMgICAgW1VzZXI6IDIuNDMyIHMsIFN5c3RlbTogMC4wMDYgc10NCiAgUmFuZ2UgKG1pbiDigKYg bWF4KTogICAgMi4zNzkgcyDigKYgIDIuNjI5IHMgICAgMTAgcnVucw0KIA0KQmVuY2htYXJrIDI6 IG1hc3Rlci1ydWJ5L21pbmlydWJ5IC12IHJ1YnkvdGVzdC5yYg0KICBUaW1lIChtZWFuIMKxIM+D KTogICAgICAyLjE3MyBzIMKxICAwLjAxMSBzICAgIFtVc2VyOiAyLjE0OCBzLCBTeXN0ZW06IDAu MDA2IHNdDQogIFJhbmdlIChtaW4g4oCmIG1heCk6ICAgIDIuMTYzIHMg4oCmICAyLjIwMSBzICAg IDEwIHJ1bnMNCiANClN1bW1hcnkNCiAgbWFzdGVyLXJ1YnkvbWluaXJ1YnkgLXYgcnVieS90ZXN0 LnJiIHJhbg0KICAgIDEuMTMgwrEgMC4wNCB0aW1lcyBmYXN0ZXIgdGhhbiBmd2QtcnVieS9taW5p cnVieSAtdiBydWJ5L3Rlc3QucmINCmBgYA0KDQpFeHBlcmltZW50YWwgYnJhbmNoIGlzIGFib3V0 IDEzJSBzbG93ZXIuDQoNClRoZSBleHBlcmltZW50YWwgYnJhbmNoIGlzIGEgbGl0dGxlIHNsb3dl ciBvbiBgc2VuZGAgYW5kIGBpbnZva2VzdXBlcmAgaW5zdHJ1Y3Rpb25zLiAgSWYgd2UncmUgd29y cmllZCBhYm91dCB0aGF0IHNsb3dkb3duLCB3ZSBjYW4gaW50cm9kdWNlIHNwZWNpYWxpemVkICJm b3J3YXJkX3NlbmQiIGFuZCAiZm9yd2FyZF9pbnZva2VzdXBlciIgaW5zdHJ1Y3Rpb25zIHdoaWNo IHNob3VsZCBlbGltaW5hdGUgb3ZlcmhlYWQgZnJvbSB0aGVzZSBpbnN0cnVjdGlvbnMuICBXZSdy ZSBhYmxlIHRvIGRldGVjdCBgLi4uYCB1c2VzIGF0IGNvbXBpbGUgdGltZSwgc28gYWRkaW5nIHRo ZXNlIGluc3RydWN0aW9ucyBpc24ndCBhIHByb2JsZW0gKEkgaGF2ZSBhIHBhdGNoIGZvciBpdCwg YnV0IEkgd2FudCB0byBnZXQgdGhpcyBmZWF0dXJlIG1lcmdlZCBmaXJzdCkuDQoNCkBrbzEgQ2Fu IHlvdSB0YWtlIGEgbG9vayBhZ2FpbiBwbGVhc2U/ICBJJ2QgbGlrZSB0byBtZXJnZSB0aGlzIGFu ZCB3ZSBjYW4gZml4IGFueSBpc3N1ZXMgZ29pbmcgZm9yd2FyZC4NCg0KVGhhbmtzIQ0KDQotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpGZWF0dXJlICMyMDQyNTogT3B0 aW1pemUgZm9yd2FyZGluZyBjYWxsZXJzIGFuZCBjYWxsZWVzDQpodHRwczovL2J1Z3MucnVieS1s YW5nLm9yZy9pc3N1ZXMvMjA0MjUjY2hhbmdlLTEwODU5Ng0KDQoqIEF1dGhvcjogdGVuZGVybG92 ZW1ha2luZyAoQWFyb24gUGF0dGVyc29uKQ0KKiBTdGF0dXM6IE9wZW4NCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCltUaGlzIFBSXShodHRwczovL2dpdGh1Yi5jb20v cnVieS9ydWJ5L3B1bGwvMTA1MTApIG9wdGltaXplcyBmb3J3YXJkaW5nIGNhbGxlcnMgYW5kIGNh bGxlZXMuIEl0IG9ubHkgb3B0aW1pemVzIG1ldGhvZHMgdGhhdCBvbmx5IHRha2UgYC4uLmAgYXMg dGhlaXIgcGFyYW1ldGVyLCBhbmQgdGhlbiBwYXNzIGAuLi5gIHRvIG90aGVyIGNhbGxzLg0KDQpD YWxscyBpdCBvcHRpbWl6ZXMgbG9vayBsaWtlIHRoaXM6DQoNCmBgYHJ1YnkNCmRlZiBiYXIoYSkg PSBhDQpkZWYgZm9vKC4uLikgPSBiYXIoLi4uKSAjIG9wdGltaXplZA0KZm9vKDEyMykNCmBgYA0K DQpgYGBydWJ5DQpkZWYgYmFyKGEpID0gYQ0KZGVmIGZvbyguLi4pID0gYmFyKDEsIDIsIC4uLikg IyBvcHRpbWl6ZWQNCmZvbygxMjMpDQpgYGANCg0KYGBgcnVieQ0KZGVmIGJhcigqYSkgPSBhDQoN CmRlZiBmb28oLi4uKQ0KICBsaXN0ID0gWzEsIDJdDQogIGJhcigqbGlzdCwgLi4uKSAjIG9wdGlt aXplZA0KZW5kDQpmb28oMTIzKQ0KYGBgDQoNCkFsbCB2YXJpYW50cyBvZiB0aGUgYWJvdmUgYnV0 IHVzaW5nIGBzdXBlcmAgYXJlIGFsc28gb3B0aW1pemVkLCBpbmNsdWRpbmcgYSBiYXJlIHN1cGVy IGxpa2UgdGhpczoNCg0KYGBgcnVieQ0KZGVmIGZvbyguLi4pDQogIHN1cGVyDQplbmQNCmBgYA0K DQpUaGlzIHBhdGNoIGVsaW1pbmF0ZXMgaW50ZXJtZWRpYXRlIGFsbG9jYXRpb25zIG1hZGUgd2hl biBjYWxsaW5nIG1ldGhvZHMgdGhhdCBhY2NlcHQgYC4uLmAuDQpXZSBjYW4gb2JzZXJ2ZSBhbGxv Y2F0aW9uIGVsaW1pbmF0aW9uIGxpa2UgdGhpczoNCg0KYGBgcnVieQ0KZGVmIG0NCiAgeCA9IEdD LnN0YXQoOnRvdGFsX2FsbG9jYXRlZF9vYmplY3RzKQ0KICB5aWVsZA0KICBHQy5zdGF0KDp0b3Rh bF9hbGxvY2F0ZWRfb2JqZWN0cykgLSB4DQplbmQNCg0KZGVmIGJhcihhKSA9IGENCmRlZiBmb28o Li4uKSA9IGJhciguLi4pDQoNCmRlZiB0ZXN0DQogIG0geyBmb28oMTIzKSB9DQplbmQNCg0KdGVz dA0KcCB0ZXN0ICMgYWxsb2NhdGVzIDEgb2JqZWN0IG9uIG1hc3RlciwgYnV0IDAgb2JqZWN0cyB3 aXRoIHRoaXMgcGF0Y2gNCmBgYA0KDQpgYGBydWJ5DQpkZWYgYmFyKGEsIGI6KSA9IGEgKyBiDQpk ZWYgZm9vKC4uLikgPSBiYXIoLi4uKQ0KDQpkZWYgdGVzdA0KICBtIHsgZm9vKDEsIGI6IDIpIH0N CmVuZA0KDQp0ZXN0DQpwIHRlc3QgIyBhbGxvY2F0ZXMgMiBvYmplY3RzIG9uIG1hc3RlciwgYnV0 IDAgb2JqZWN0cyB3aXRoIHRoaXMgcGF0Y2gNCmBgYA0KDQojIyBIb3cgZG9lcyBpdCB3b3JrPw0K DQpUaGlzIHBhdGNoIHdvcmtzIGJ5IHVzaW5nIGEgZHluYW1pYyBzdGFjayBzaXplIHdoZW4gcGFz c2luZyBmb3J3YXJkZWQgcGFyYW1ldGVycyB0byBjYWxsZWVzLg0KVGhlIGNhbGxlcidzIGluZm8g b2JqZWN0IChrbm93biBhcyB0aGUgIkNJIikgY29udGFpbnMgdGhlIHN0YWNrIHNpemUgb2YgdGhl DQpwYXJhbWV0ZXJzLCBzbyB3ZSBwYXNzIHRoZSBDSSBvYmplY3QgaXRzZWxmIGFzIGEgcGFyYW1l dGVyIHRvIHRoZSBjYWxsZWUuDQpXaGVuIGZvcndhcmRpbmcgcGFyYW1ldGVycywgdGhlIGZvcndh cmRpbmcgSVNlcSB1c2VzIHRoZSBjYWxsZXIncyBDSSB0byBkZXRlcm1pbmUgaG93IG11Y2ggc3Rh Y2sgdG8gY29weSwgdGhlbiBjb3BpZXMgdGhlIGNhbGxlcidzIHN0YWNrIGJlZm9yZSBjYWxsaW5n IHRoZSBjYWxsZWUuDQpUaGUgQ0kgYXQgdGhlIGZvcndhcmRlZCBjYWxsIHNpdGUgaXMgYWRqdXN0 ZWQgdXNpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgY2FsbGVyJ3MgQ0kuDQoNCkkgdGhpbmsgdGhp cyBkZXNjcmlwdGlvbiBpcyBraW5kIG9mIGNvbmZ1c2luZywgc28gbGV0J3Mgd2FsayB0aHJvdWdo IGFuIGV4YW1wbGUgd2l0aCBjb2RlLg0KDQpgYGBydWJ5DQpkZWYgZGVsZWdhdGVlKGEsIGIpID0g YSArIGINCg0KZGVmIGRlbGVnYXRvciguLi4pDQogIGRlbGVnYXRlZSguLi4pICAjIENJMiAoRk9S V0FSRElORykNCmVuZA0KDQpkZWYgY2FsbGVyDQogIGRlbGVnYXRvcigxLCAyKSAjIENJMSAoYXJn YzogMikNCmVuZA0KYGBgDQoNCkJlZm9yZSB3ZSBjYWxsIHRoZSBkZWxlZ2F0b3IgbWV0aG9kLCB0 aGUgc3RhY2sgbG9va3MgbGlrZSB0aGlzOg0KDQpgYGANCkV4ZWN1dGluZyBMaW5lIHwgQ29kZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFN0YWNrDQotLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tDQogICAgICAg ICAgICAgIDF8IGRlZiBkZWxlZ2F0ZWUoYSwgYikgPSBhICsgYiAgICAgICAgICAgfCBzZWxmDQog ICAgICAgICAgICAgIDJ8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAx DQogICAgICAgICAgICAgIDN8IGRlZiBkZWxlZ2F0b3IoLi4uKSAgICAgICAgICAgICAgICAgICAg fCAyDQogICAgICAgICAgICAgIDR8ICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfA0KICAgICAgICAgICAgICA1fCAgIGRlbGVnYXRlZSguLi4pICAjIENJMiAoRk9SV0FSRElO RykgIHwNCiAgICAgICAgICAgICAgNnwgZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8DQogICAgICAgICAgICAgIDd8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfA0KICAgICAgICAgICAgICA4fCBkZWYgY2FsbGVyICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwNCiAgICAgICAgICAtPiAgOXwgICBkZWxlZ2F0b3IoMSwgMikgIyBDSTEgKGFyZ2M6 IDIpICAgICB8DQogICAgICAgICAgICAgMTB8IGVuZCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfA0KYGBgDQoNClRoZSBJU2VxIGZvciBgZGVsZWdhdG9yYCBpcyB0YWdnZWQgYXMg ImZvcndhcmRhYmxlIiwgc28gd2hlbiBgY2FsbGVyYCBjYWxscyBpbg0KdG8gYGRlbGVnYXRvcmAs IGl0IHdyaXRlcyBgQ0kxYCBvbiB0byB0aGUgc3RhY2sgYXMgYSBsb2NhbCB2YXJpYWJsZSBmb3Ig dGhlDQpgZGVsZWdhdG9yYCBtZXRob2QuICBUaGUgYGRlbGVnYXRvcmAgbWV0aG9kIGhhcyBhIHNw ZWNpYWwgbG9jYWwgY2FsbGVkIGAuLi5gDQp0aGF0IGhvbGRzIHRoZSBjYWxsZXIncyBDSSBvYmpl Y3QuDQoNCkhlcmUgaXMgdGhlIElTZXEgZGlzYXNtIGZvIGBkZWxlZ2F0b3JgOg0KDQpgYGANCj09 IGRpc2FzbTogIzxJU2VxOmRlbGVnYXRvckAtZToxICgxLDApLSgxLDM5KT4NCmxvY2FsIHRhYmxl IChzaXplOiAxLCBhcmdjOiAwIFtvcHRzOiAwLCByZXN0OiAtMSwgcG9zdDogMCwgYmxvY2s6IC0x LCBrdzogLTFALTEsIGt3cmVzdDogLTFdKQ0KWyAxXSAiLi4uIkAwDQowMDAwIHB1dHNlbGYgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAg IDEpW0xpQ2FdDQowMDAxIGdldGxvY2FsX1dDXzAgICAgICAgICAgICAgICAgICAgICAgICAgICIu Li4iQDANCjAwMDMgc2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNhbGxk YXRhIW1pZDpkZWxlZ2F0ZWUsIGFyZ2M6MCwgRkNBTEx8Rk9SV0FSRElORz4sIG5pbA0KMDAwNiBs ZWF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbUmVdDQpgYGANCg0KVGhlIGxv Y2FsIGNhbGxlZCBgLi4uYCB3aWxsIGNvbnRhaW4gdGhlIGNhbGxlcidzIENJOiBDSTEuDQoNCkhl cmUgaXMgdGhlIHN0YWNrIHdoZW4gd2UgZW50ZXIgYGRlbGVnYXRvcmA6DQoNCg0KYGBgDQpFeGVj dXRpbmcgTGluZSB8IENvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTdGFj aw0KLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLQ0KICAgICAgICAgICAgICAxfCBkZWYgZGVsZWdhdGVlKGEsIGIpID0gYSArIGIg ICAgICAgICAgIHwgc2VsZg0KICAgICAgICAgICAgICAyfCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgMQ0KICAgICAgICAgICAgICAzfCBkZWYgZGVsZWdhdG9yKC4uLikg ICAgICAgICAgICAgICAgICAgIHwgMg0KICAgICAgICAgICAtPiA0fCAgICMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgQ0kxIChhcmdjOiAyKQ0KICAgICAgICAgICAgICA1fCAg IGRlbGVnYXRlZSguLi4pICAjIENJMiAoRk9SV0FSRElORykgIHwgY3JlZl9vcl9tZQ0KICAgICAg ICAgICAgICA2fCBlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3BlY3Zh bA0KICAgICAgICAgICAgICA3fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgdHlwZQ0KICAgICAgICAgICAgICA4fCBkZWYgY2FsbGVyICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwNCiAgICAgICAgICAgICAgOXwgICBkZWxlZ2F0b3IoMSwgMikgIyBDSTEgKGFyZ2M6 IDIpICAgICB8DQogICAgICAgICAgICAgMTB8IGVuZCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfA0KYGBgDQoNClRoZSBDSSBhdCBgZGVsZWdhdGVlYCBvbiBsaW5lIDUgaXMgdGFn Z2VkIGFzICJGT1JXQVJESU5HIiwgc28gaXQga25vd3MgdG8NCm1lbWNvcHkgdGhlIGNhbGxlcidz IHN0YWNrIGJlZm9yZSBjYWxsaW5nIGBkZWxlZ2F0ZWVgLiAgSW4gdGhpcyBjYXNlLCBpdCB3aWxs DQptZW1jb3B5IHNlbGYsIDEsIGFuZCAyIHRvIHRoZSBzdGFjayBiZWZvcmUgY2FsbGluZyBgZGVs ZWdhdGVlYC4gIEl0IGtub3dzIGhvdyBtdWNoDQptZW1vcnkgdG8gY29weSBmcm9tIHRoZSBjYWxs ZXIgYmVjYXVzZSBgQ0kxYCBjb250YWlucyBzdGFjayBzaXplIGluZm9ybWF0aW9uDQooYXJnYzog MikuDQoNCkJlZm9yZSBleGVjdXRpbmcgdGhlIGBzZW5kYCBpbnN0cnVjdGlvbiwgd2UgcHVzaCBg Li4uYCBvbiB0aGUgc3RhY2suICBUaGUNCmBzZW5kYCBpbnN0cnVjdGlvbiBwb3BzIGAuLi5gLCBh bmQgYmVjYXVzZSBpdCBpcyB0YWdnZWQgd2l0aCBgRk9SV0FSRElOR2AsIGl0DQprbm93cyB0byBt ZW1jb3B5ICh1c2luZyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIENJIGl0IGp1c3QgcG9wcGVkKToN Cg0KYGBgDQo9PSBkaXNhc206ICM8SVNlcTpkZWxlZ2F0b3JALWU6MSAoMSwwKS0oMSwzOSk+DQps b2NhbCB0YWJsZSAoc2l6ZTogMSwgYXJnYzogMCBbb3B0czogMCwgcmVzdDogLTEsIHBvc3Q6IDAs IGJsb2NrOiAtMSwga3c6IC0xQC0xLCBrd3Jlc3Q6IC0xXSkNClsgMV0gIi4uLiJAMA0KMDAwMCBw dXRzZWxmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICggICAxKVtMaUNhXQ0KMDAwMSBnZXRsb2NhbF9XQ18wICAgICAgICAgICAgICAgICAg ICAgICAgICAiLi4uIkAwDQowMDAzIHNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDxjYWxsZGF0YSFtaWQ6ZGVsZWdhdGVlLCBhcmdjOjAsIEZDQUxMfEZPUldBUkRJTkc+LCBu aWwNCjAwMDYgbGVhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1JlXQ0KYGBg DQoNCkluc3RydWN0aW9uIDAwMSBwdXRzIHRoZSBjYWxsZXIncyBDSSBvbiB0aGUgc3RhY2suICBg c2VuZGAgaXMgdGFnZ2VkIHdpdGgNCkZPUldBUkRJTkcsIHNvIGl0IHJlYWRzIHRoZSBDSSBhbmQg X2NvcGllc18gdGhlIGNhbGxlcnMgc3RhY2sgdG8gdGhpcyBzdGFjazoNCg0KYGBgDQpFeGVjdXRp bmcgTGluZSB8IENvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTdGFjaw0K LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLQ0KICAgICAgICAgICAgICAxfCBkZWYgZGVsZWdhdGVlKGEsIGIpID0gYSArIGIgICAg ICAgICAgIHwgc2VsZg0KICAgICAgICAgICAgICAyfCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgMQ0KICAgICAgICAgICAgICAzfCBkZWYgZGVsZWdhdG9yKC4uLikgICAg ICAgICAgICAgICAgICAgIHwgMg0KICAgICAgICAgICAgICA0fCAgICMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgQ0kxIChhcmdjOiAyKQ0KICAgICAgICAgICAtPiA1fCAgIGRl bGVnYXRlZSguLi4pICAjIENJMiAoRk9SV0FSRElORykgIHwgY3JlZl9vcl9tZQ0KICAgICAgICAg ICAgICA2fCBlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3BlY3ZhbA0K ICAgICAgICAgICAgICA3fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg dHlwZQ0KICAgICAgICAgICAgICA4fCBkZWYgY2FsbGVyICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgc2VsZg0KICAgICAgICAgICAgICA5fCAgIGRlbGVnYXRvcigxLCAyKSAjIENJMSAoYXJn YzogMikgICAgIHwgMQ0KICAgICAgICAgICAgIDEwfCBlbmQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgMg0KYGBgDQoNClRoZSAiRk9SV0FSRElORyIgY2FsbCBzaXRlIGNvbWJp bmVzIGluZm9ybWF0aW9uIGZyb20gQ0kxIHdpdGggQ0kyIGluIG9yZGVyDQp0byBzdXBwb3J0IHBh c3Npbmcgb3RoZXIgdmFsdWVzIGluIGFkZGl0aW9uIHRvIHRoZSBgLi4uYCB2YWx1ZSwgYXMgd2Vs bCBhcw0KcGVyZmVjdGx5IGZvcndhcmQgc3BsYXQgYXJncywga3dhcmdzLCBldGMuDQoNClNpbmNl IHdlJ3JlIGFibGUgdG8gY29weSB0aGUgc3RhY2sgZnJvbSBgY2FsbGVyYCBpbiB0byBgZGVsZWdh dG9yYCdzIHN0YWNrLCB3ZQ0KY2FuIGF2b2lkIGFsbG9jYXRpbmcgb2JqZWN0cy4NCg0KIyMgV2h5 Pw0KDQpJIHdhbnQgdG8gZG8gdGhpcyB0byBlbGltaW5hdGUgb2JqZWN0IGFsbG9jYXRpb25zIGZv ciBkZWxlZ2F0ZSBtZXRob2RzLg0KTXkgbG9uZyB0ZXJtIGdvYWwgaXMgdG8gaW1wbGVtZW50IGBD bGFzcyNuZXdgIGluIFJ1YnkgYW5kIGl0IHVzZXMgYC4uLmAuDQoNCkkgd2FzIGFibGUgdG8gaW1w bGVtZW50IGBDbGFzcyNuZXdgIGluIFJ1YnkNCltoZXJlXShodHRwczovL2dpdGh1Yi5jb20vcnVi eS9ydWJ5L3B1bGwvOTI4OSkuDQpJZiB3ZSBhZG9wdCB0aGUgdGVjaG5pcXVlIGluIHRoaXMgcGF0 Y2gsIHRoZW4gd2UgY2FuIG9wdGltaXplIGFsbG9jYXRpbmcNCm9iamVjdHMgdGhhdCB0YWtlIGtl eXdvcmQgcGFyYW1ldGVycyBmb3IgYGluaXRpYWxpemVgLg0KDQpGb3IgZXhhbXBsZSwgdGhpcyBj b2RlIHdpbGwgYWxsb2NhdGUgMiBvYmplY3RzOiBvbmUgZm9yIGBTb21lT2JqZWN0YCwgYW5kIG9u ZQ0KZm9yIHRoZSBrd2FyZ3M6DQoNCmBgYHJ1YnkNClNvbWVPYmplY3QubmV3KGZvbzogMSkNCmBg YA0KDQpJZiB3ZSBjb21iaW5lIHRoaXMgdGVjaG5pcXVlLCBwbHVzIGltcGxlbWVudCBgQ2xhc3Mj bmV3YCBpbiBSdWJ5LCB0aGVuIHdlIGNhbg0KcmVkdWNlIGFsbG9jYXRpb25zIGZvciB0aGlzIGNv bW1vbiBvcGVyYXRpb24uDQoNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0K IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIHJ1YnktY29y ZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3JlQG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vic2Ny aWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1jb3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1 YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwucnVieS1sYW5nLm9yZy9tYWlsbWFuMy9wb3N0b3Jp dXMvbGlzdHMvcnVieS1jb3JlLm1sLnJ1YnktbGFuZy5vcmcv