[#111712] [Ruby master Feature#19322] Support spawning "private" child processes — "kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core" <ruby-core@...>
SXNzdWUgIzE5MzIyIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGtqdHNhbmFrdHNpZGlzIChLSiBUc2Fu
14 messages
2023/01/07
[ruby-core:111717] [Ruby master Feature#19322] Support spawning "private" child processes
From:
"kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core" <ruby-core@...>
Date:
2023-01-07 09:10:14 UTC
List:
ruby-core #111717
SXNzdWUgIzE5MzIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkga2p0c2FuYWt0c2lkaXMgKEtKIFRzYW5h a3RzaWRpcykuDQ0KDQ0KDQ0KSSBkaWQgdGhpbmsgYWJvdXQgc29tZXRoaW5nIGluIHRoYXQgc2hh cGUgQG5vYnUgZm9yIHVuc3VwcG9ydGVkIHN5c3RlbXMsIGJ1dCBJIHRoaW5rIHRoZXJlIGFyZSB0 d28gcHJvYmxlbXMgLQ0NCg0NCi0gU0lHQ0hMRCB3aWxsIHN0aWxsIGJlIHJlY2VpdmVkLCB3aGlj aCBpcyB1bmRlc2lyYWJsZSBvbiBpdHMgb3duDQ0KLSBpZiBhIGRpZmZlcmVudCB0aHJlYWQgaXMg cnVubmluZyBgUHJvY2Vzcy53YWl0cGlkMigtMSlgIGNvbmN1cnJlbnRseSwgdGhlcmUgaXMgZ3Vh cmFudGVlIHdobyB3aWxsIHJlYXAgdGhlIGludGVybWVkaWF0ZSBwYXJlbnQgcHJvY2VzcyAtIHRo ZWlyIGNhbGwgb3Igb3VyIGNhbGwgdG8gd2FpdHBpZC4NDQoNDQotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQ0KRmVhdHVyZSAjMTkzMjI6IFN1cHBvcnQgc3Bhd25pbmcg InByaXZhdGUiIGNoaWxkIHByb2Nlc3Nlcw0NCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lz c3Vlcy8xOTMyMiNjaGFuZ2UtMTAxMTE1DQ0KDQ0KKiBBdXRob3I6IGtqdHNhbmFrdHNpZGlzIChL SiBUc2FuYWt0c2lkaXMpDQ0KKiBTdGF0dXM6IE9wZW4NDQoqIFByaW9yaXR5OiBOb3JtYWwNDQot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQ0KIyMgQmFja2dyb3VuZA0N Cg0NClRoZSB0cmFkaXRpb25hbCBVbml4IHByb2Nlc3MgQVBJcyAoYGZvcmtgIGV0YykgYXJlIHBv b3JseSBpc29sYXRlZC4gSWYgYSBsaWJyYXJ5IHNwYXducyBhIGNoaWxkIHByb2Nlc3MsIHRoaXMg aXMgbm90IHRyYW5zcGFyZW50IHRvIHRoZSBwcm9ncmFtIHVzaW5nIHRoZSBsaWJyYXJ5LiBBbnkg c2lnbmFsIGhhbmRsZXIgZm9yIGBTSUdDSExEYCBpbiB0aGUgcHJvZ3JhbSB3aWxsIGJlIGNhbGxl ZCB3aGVuIHRoZSBzcGF3bmVkIHByb2Nlc3MgZXhpdHMsIGFuZCBldmVuIHdvcnNlLCBpZiB0aGUg cGFyZW50IGNhbGxzIGBQcm9jZXNzLndhaXRwaWQyKC0xKWAsIGl0IHdpbGwgY29uc3VtZSB0aGUg cmV0dXJuZWQgc3RhdHVzIGNvZGUsIHN0ZWFsaW5nIGl0IGZyb20gdGhlIGxpYnJhcnkhDQ0KDQ0K VW5mb3J0dW5hdGVseSwgdGhlIHByYWN0aWNlIG9mIHJlc3BvbmRpbmcgdG8gYFNJR0NITERgIGJ5 IGNhbGxpbmcgYHdhaXRwaWQyKC0xKWAgaW4gYSBsb29wIGlzIGEgcHJldHR5IGNvbW1vbiB1bml4 aXNtLiBGb3IgZXhhbXBsZSwgVW5pY29ybiBkb2VzIGl0IFtoZXJlXShodHRwczovL3loYnQubmV0 L3VuaWNvcm4uZ2l0L3RyZWUvbGliL3VuaWNvcm4vaHR0cF9zZXJ2ZXIucmIjbjQwMSkuIEluIHNo b3J0LCB0aGVyZSBpcyBubyByZWxpYWJsZSB3YXkgZm9yIGEgZ2VtIHRvIHNwYXduIGEgY2hpbGQg cHJvY2VzcyBpbiBhIHdheSB0aGF0IGNhbuKAmXQgKHVuaW50ZW50aW9uYWxseSkgYmUgaW50ZXJm ZXJlZCB3aXRoIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBwcm9ncmFtLg0NCg0NCiMjIEV4aXN0aW5n IHNvbHV0aW9ucyBpbiBPU+KAmXMNDQoNDQpTZXZlcmFsIG9wZXJhdGluZyBzeXN0ZW1zIHByb3Zp ZGUgYW4gaW1wcm92ZWQgQVBJIGZvciBzcGF3bmluZyBjaGlsZCBwcm9jZXNzZXMgd2hpY2ggYXJl IGZ1bGx5IGlzb2xhdGVkOyB0aGF0IGlzLCB0aGV5IGRvIG5vdCBnZW5lcmF0ZSBgU0lHQ0hMRGAg c2lnbmFscyBpbiB0aGUgcHJvZ3JhbSwgYW5kIGFyZSBpbnZpc2libGUgdG8gY2FsbHMgdG8gYHdh aXRwaWQoMilgDQ0KDQ0KKiBPbiBMaW51eCwgc3VjaCBpbnZpc2libGUgcHJvY2Vzc2VzIGNhbiBi ZSBtYWRlIGJ5IGNhbGxpbmcgYGNsb25lKDIpYCB3aXRoIGEgemVybyB2YWx1ZSBpbiB0aGUgbG93 IGJ5dGUgb2YgYGZsYWdzYC4gSWYgdGhlIENMT05FX1BJREZEIGZsYWcgaXMgYWxzbyBwcm92aWRl ZCwgdGhlbiBhIGZpbGUgZGVzY3JpcHRvciByZXByZXNlbnRpbmcgdGhlIHByb2Nlc3MgaXMgYWxz byByZXR1cm5lZDsgdGhpcyBjYW4gYmUgdXNlZCB0byB3YWl0IGZvciBhbmQgc2lnbmFsIHRoZSBw cm9jZXNzIGluIGEgcmFjZS1mcmVlIHdheS4NDQoqIE9uIEZyZWVCU0QsIHRoZSBgcGRmb3JrKDIp YCBzeXNjYWxsIG1ha2VzIGEgcHJvY2VzcyB0aGF0IGRvZXMgbm90IHNpZ25hbCBTSUdDSExEIGFu ZCBpcyBpZ25vcmVkIGJ5IGB3YWl0cGlkKDIpYCBjYWxscyB0aGF0IGRvIG5vdCBleHBsaWNpdGx5 IHNwZWNpZnkgdGhlIHBpZCAoaS5lLiBpdCBpcyBpZ25vcmVkIHdoZW4gLTEgaXMgcGFzc2VkKS4g SXQgYWxzbyByZXR1cm5zIGEgZmlsZSBkZXNjcmlwdG9yIHJlcHJlc2VudGluZyB0aGUgcHJvY2Vz cy4NDQoNDQpCb3RoIG9mIHRoZXNlIEFQSXMgY2VudGVyIGFyb3VuZCB0aGUgaWRlYSBvZiBhIHBy b2Nlc3MgZmlsZSBkZXNjcmlwdG9yLiBSYXRoZXIgdGhhbiBtYW5hZ2luZyBhIGNoaWxkIHByb2Nl c3MgdXNpbmcgdGhlIG9sZCBwcm9jZXNzLWdsb2JhbCB3YWl0L3NpZ25hbCBtZWNoYW5pc21zLCB0 aGV5IHJldHVybiBhIGZpbGUgZGVzY3JpcHRvciByZXByZXNlbnRpbmcgdGhlIHByb2Nlc3MuIFN1 Y2ggYSBmaWxlIGRlc2NyaXB0b3IgY2FuIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBzcGF3bmVkIHBy b2Nlc3MsIGJlIHVzZWQgdG8gd2FpdCBvbiB0aGUgcHJvY2VzcyBhbmQgZ2V0IHRoZSBzdGF0dXMs IHNlbmQgc2lnbmFscywgYW5kIGV2ZW4gcGFydGljaXBhdGUgaW4gYHBvbGwoMilgLiBUaGV5IGFs c28gcHJvdGVjdCBhZ2FpbnN0IHBpZC1yZXVzZSByYWNlIGNvbmRpdGlvbnM7IGFmdGVyIGEgcHJv Y2VzcyBoYXMgdGVybWluYXRlZCBhbmQgYmVlbiByZWFwZWQsIHRoZSBwaWRmZCBiZWNvbWVzIGlu dmFsaWQsIGFuZCBjYW7igJl0IHJhbmRvbWx5IGJlZ2luIHRvIHJlZmVyIHRvIGEgZGlmZmVyZW50 IHByb2Nlc3MuDQ0KDQ0KIyMgUHJvcG9zZWQgUnVieSBBUElzDQ0KDQ0KSSB0aGluayB3ZSBzaG91 bGQgbWFrZSBhIG5ldyBBUEkgYFByb2Nlc3Muc3Bhd25faGFuZGxlYCwgd2hpY2ggYWNjZXB0cyBh bGwgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyBgUHJvY2Vzcy5zcGF3bmAuIEhvd2V2ZXIsIGl0IGRv ZXMgX25vdF8gcmV0dXJuIGEgcGlkIGxpa2UgYFByb2Nlc3Muc3Bhd25gLCBidXQgcmF0aGVyIGEg bmV3IHR5cGUgYFByb2Nlc3M6OkhhbmRsZWAuDQ0KDQ0KYFByb2Nlc3M6OkhhbmRsZWAgd291bGQg aWRlbnRpZnkgYSBzaW5nbGUgc3Bhd25lZCBwcm9jZXNzLCB1c2luZyBhIGR1cmFibGUgT1Mtc3Vw cGxpZWQgaGFuZGxlIG5vdCBzdWJqZWN0IHRvIHJlLXVzZSByaXNrcyAoZS5nLiBhIHBpZGZkKS4g SXQgd291bGQgcHJvdmlkZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6DQ0KDQ0KKiBgI3BpZGAgLSBn ZXQgdGhlIHBpZCB0aGF0IHRoZSBoYW5kbGUgaXMgZm9yLg0NCiogYCNzZW5kX3NpZ25hbChzaWdu YWwpYCAtIHNlbmQgYSBzaWduYWwgdG8gdGhlIHdyYXBwZWQgcHJvY2VzcyAod2hlcmUgInNpZ25h bCIgaXMgYSBzeW1ib2wsIHN0cmluZywgb3IgbnVtYmVyIHdpdGggdGhlIHNhbWUgbWVhbmluZyBh cyBpbiBgUHJvY2Vzcy5raWxsYC4NDQoqIGAjd2FpdGAgLSBibG9ja3Mgd2FpdGluZyBmb3IgdGhl IHByb2dyYW0gdG8gZXhpdCwgYW5kIHRoZW4gcmV0dXJucyBhIGBQcm9jZXNzOjpTdGF0dXNgIG9i amVjdCByZXByZXNlbnRpbmcgZS5nLiB0aGUgZXhpdCBjb2RlLiBMaWtlIGNhbGxpbmcgYHdhaXRw aWRgLg0NCiogYCN3YWl0X25vbmJsb2NrYCAtIFJldHVybnMgYSBgUHJvY2Vzczo6U3RhdHVzYCBv YmplY3QgZm9yIHRoZSBjaGlsZCBwcm9jZXNzLiBJZiB0aGUgY2hpbGQgaGFzIG5vdCBleGl0ZWQs IGl0IHdpbGwgYmUgYSBzdGF0dXMgb2JqZWN0IGZvciB3aGljaCBgI2V4aXRlZD9gIGlzIGZhbHNl LiBEb2VzIG5vdCBibG9jay4gTGlrZSBjYWxsaW5nIGB3YWl0cGlkKFdOT0hBTkcpYC4NDQoNDQpG aW5hbGx5LCB0aGUgYE9wZW4zYCBmYW1pbHkgb2YgbWV0aG9kcyB3b3VsZCBiZSBleHRlbmRlZCB0 byBhY2NlcHQgYGhhbmRsZTpgIGFzIGFuIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudC4gV2hl biBzZXQgdG8gdHJ1ZSwgYFByb2Nlc3Muc3Bhd25faGFuZGxlYCB3aWxsIGJlIHVzZWQgdG8gc3Rh cnQgdGhlIGNoaWxkLCBhbmQgYFByb2Nlc3M6OkhhbmRsZWAgb2JqZWN0cyB3aWxsIGJlIHJldHVy bmVkIGluIHBsYWNlIG9mIHBpZHMuDQ0KDQ0KTW9kaWZ5aW5nIGJhY2t0aWNrcywgYEtlcm5lbCNz eXN0ZW1gIGFuZCBvdGhlciBwcm9jZXNzLWNyZWF0aW5nIG1ldGhvZHMgd2hpY2ggZG9uJ3QgcmV0 dXJuIHBpZHMgdG8gdXNlIGBzcGF3bl9oYW5kbGVgIGludGVybmFsbHkgd291bGQgYWxzbyBiZSBw b3NzaWJsZSwgYnV0IG91dCBvZiBzY29wZSBmb3IgYW4gaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBv ZiB0aGlzIHRpY2tldC4NDQoNDQojIyBPUyBjb21wYXRpYmlsaXR5DQ0KDQ0KRm9yIHRoaXMgQVBJ IHRvIGJlIHVzZWZ1bCB0byBnZW0gYXV0aG9ycywgaXQgaGFzIHRvIGJlIHdpZGVseSBhdmFpbGFi bGUgb24gdGhlIHN5c3RlbXMgdGhhdCB0aGV5IGFuZCB0aGVpciB1c2VycyBjYXJlIGFib3V0LiBB cyBkaXNjdXNzZWQsIHRoZSBgY2xvbmUoMilgIHN5c2NhbGwgYW5kIGBDTE9ORV9QSURGRGAgZmxh ZyBjYW4gYmUgdXNlZCBvbiBMaW51eCA1LjIrIHRvIGltcGxlbWVudCBgUHJvY2Vzczo6SGFuZGxl YC4gRnJlZUJTRCBoYXMgYHBkZm9yaygyKWAgc2luY2UgdjkuDQ0KDQ0KSSBoYXZlbuKAmXQgaW52 ZXN0aWdhdGVkIFdpbmRvd3MgX2RlZXBseV8sIGJ1dCBJIHRoaW5rIFdpbmRvd3MgZG9lc27igJl0 IHJlYWxseSBoYXZlIHRoZSBub3Rpb24gb2YgcHJvY2Vzcy1nbG9iYWwgYHdhaXRwaWRgIG9yIGBT SUdDSExEYCBhbnl3YXkuIFRoZSBgQ3JlYXRlUHJvY2Vzc2AgZnVuY3Rpb24gcmV0dXJucyBhIGBQ Uk9DRVNTX0lORk9STUFUSU9OYCBzdHJ1Y3QsIHdoaWNoIHJldHVybnMgYSBgSEFORExFYCBmb3Ig dGhlIGNoaWxkIHByb2Nlc3MsIHdoaWNoIHNlZW1zIGFuYWxvZ291cyB0byBhIHByb2Nlc3MgRkQu DQ0KDQ0KSG93ZXZlciB0aGlzIGRvZXMgbGVhdmUgYSBsYXJnZSBjaHVuayBvZiBvcGVyYXRpbmcg c3lzdGVtcyB3aGljaCBkb27igJl0IGhhdmUgdGhpcyBmdW5jdGlvbmFsaXR5IGJ1aWx0LWluLiBP ZmYgdGhlIHRvcCBvZiBteSBoZWFkOg0NCg0NCiogTWFjT1MsIE5ldEJTRCwgYW5kIE9wZW5CU0Qg aGF2ZSBub3RoaW5nLiBJIHN0YXJlZCBwcmV0dHkgaGFyZCBhdCB0aGUgRGFyd2luIFhOVSBzb3Vy Y2UgYW5kIGNvdWxkbuKAmXQgZmluZCBhIHJhY2UtZnJlZSB3YXkgdG8gY29udmluY2UgaXQgbm90 IHRvIGRpc3BhdGNoIGBTSUdDSExEYCBmb3IgYSBwYXJ0aWN1bGFyIHByb2Nlc3Mgb3Igc3RvcCBp dCBmcm9tIGJlaW5nIHJlYXBlZCBieSBwcm9jZXNzLXdpZGUgYHdhaXQ0YCBjYWxscy4NDQoqIExp bnV4IDwgNS4yIGlzIGluIHNvbWUgcHJvYmFibHktcHJldHR5LXdpZGVseS1kZXBsb3llZC1zdGls bCBkaXN0cm9zIC0gaXTigJlzIHRoZSByZWxlYXNlIGtlcm5lbCBpbiBVYnVudHUgMTguMDQgZm9y IGV4YW1wbGUuDQ0KDQ0KSSBoYXZlIHR3byBpZGVhcyBmb3IgaG93IHRoZSBzZW1hbnRpY3Mgb2Yg YFByb2Nlc3M6OkhhbmRsZWAgY291bGQgYmUgZW11bGF0ZWQgb24gc3VjaCBzeXN0ZW1zLiBIb3dl dmVyIEkgcmVjb2duaXNlIHRoYXQgdGhleSBhcmVu4oCZdCBhbWF6aW5nIHNvIGlmIGFueWJvZHkg aGFzIHNvbWUgYmV0dGVyIGlkZWFzIEkgd291bGQgZGVhcmx5IGxvdmUgdG8gaGVhciB0aGVtLg0N Cg0NCiMjIyBMb25nLWxpdmVkIHByb3h5DQ0KDQ0KVGhlIGZpcnN0IHRpbWUgYFByb2Nlc3Muc3Bh d25faGFuZGxlYCBpcyB1c2VkLCB3ZSB3b3VsZCBmb3JrL2V4ZWMgYSBsb25nLWxpdmVkIOKAnGZv cmstaGVscGVy4oCdIHByb2dyYW0uIFRoaXMgY291bGQgYmUgYSBzZXBhcmF0ZSBoZWxwZXIgYmlu YXJ5IHdlIGNvbXBpbGUgd2l0aCB0aGUgYnVpbGQgc3lzdGVtLCBvciBwZXJoYXBzIGp1c3QgYSBy ZS1pbnZvY2F0aW9uIG9mIHRoZSBydWJ5IGludGVycHJldGVyIHdpdGggc29tZXRoaW5nIGxpa2Ug YHJ1YnkgLWUg4oCcUHJvY2Vzcy5fZm9ya19oZWxwZXLigJ1gLiBUaGVyZSB3b3VsZCBiZSBhIHVu aXggc29ja2V0cGFpciBzaGFyZWQgYmV0d2VlbiB0aGUgcGFyZW50IHByb2Nlc3MgJiB0aGUgaGVs cGVyLg0NCg0NCkluc3RlYWQgb2YgYWN0dWFsbHkgZm9ya2luZyB3aGVuIHdl4oCZcmUgY2FsbGlu ZyBgUHJvY2Vzcy5zcGF3bl9oYW5kbGVgLCB3ZSB3b3VsZCBpbnN0ZWFkIHNlbmQgYSBtZXNzYWdl IG9uIHRoaXMgc29ja2V0IGFza2luZyB0aGUgaGVscGVyIHRvLCBfaXRzZWxmXywgZm9yayAmIGV4 ZWMgdGhlIHNwZWNpZmllZCBwcm9ncmFtLiBBbnkgZmlsZSBkZXNjcmlwdG9ycyBldGMgbmVlZGVk IGluIHRoZSBjaGlsZCBjb3VsZCBhbHNvIGJlIHNlbnQgb3ZlciB0aGlzIHNvY2tldC4gQWxsIG9m IHRoZSBgUHJvY2Vzczo6SGFuZGxlYCBtZXRob2RzIHdvdWxkIGJlIHByb3hpZXMgd2hpY2ggY2Fs bGVkIHRocm91Z2ggdG8gdGhlIGhlbHBlciBiaW5hcnkuDQ0KDQ0KVGhpcyB3YXksIHRoZSBydWJ5 IHByb2Nlc3MgaXMgbmV2ZXIgYWN0dWFsbHkgdGhlIHBhcmVudCBvZiB0aGUgc3Bhd25lZCBjaGls ZCwgc28gd2Ugd291bGQgbmV2ZXIgZ2V0IGFueSBTSUdDSExEIGV0YyBmcm9tIGl0LiBUaGUgZm9y ay1oZWxwZXIgcHJvZ3JhbSBtaWdodCBnZW5lcmF0ZSBhIFNJR0NITEQsIGJ1dCBpdCBzaG91bGQg cGVyc2lzdCB1bnRpbCB0aGUgcnVieSBwcm9jZXNzIGV4aXRzOyB3ZSB3b3VsZCBvbmx5IGdlbmVy YXRlIGEgU0lHQ0hMRCBzaWduYWwgaWYgaXQgY3Jhc2hlZCBhYm5vcm1hbGx5Lg0NCg0NCiMjIyBG b3J3YXJkIG1pc2RpcmVjdGVkIHdhaXRzDQ0KDQ0KV2l0aCB0aGlzIGFwcHJvYWNoLCBgUHJvY2Vz cy5zcGF3bl9oYW5kbGVgIHdvdWxkIGp1c3QgYGZvcmsoMilgL2BleGVjKDIpYCBvciBgcG9zaXhf c3Bhd24oMilgIHByb2Nlc3NlcyBsaWtlIG5vcm1hbC4gV2Ugd291bGQgaG93ZXZlciBrZWVwIGEg dGFibGUgb2YgcGlkcyAtPiBgUHJvY2Vzczo6SGFuZGxlYCBpbnN0YW5jZXMuDQ0KDQ0KV2hlbiBS dWJ54oCZcyBDLWxldmVsIFNJR0NITEQgaGFuZGxlciBpcyBpbnZva2VkLCB3ZSB3b3VsZCBpbnNw ZWN0IHRoYXQgdGFibGUgYW5kIHNlZSBpZiB0aGUgcGlkIGhhcyBhbiBhc3NvY2lhdGVkIGBQcm9j ZXNzOjpIYW5kbGVgLiBJZiBzbywgd2Ugd291bGQgc2tpcCBjYWxsaW5nIGFueSByZWdpc3RlcmVk IFJ1YnkgU0lHQ0hMRCBoYW5kbGVyOyBpbnN0ZWFkLCB3ZSB3b3VsZCBjYWxsIGB3YWl0cGlkYCBv dXJzZWx2ZXMsIHVwZGF0ZSB0aGUgc3RhdHVzIGluZm8gb24gdGhlIGhhbmRsZSBvYmplY3QsIGFu ZCB1bmJsb2NrIGFueWJvZHkgd2FpdGluZyBvbiBgUHJvY2Vzczo6SGFuZGxlI3dhaXRgLg0NCg0N Ckxpa2V3aXNlLCBpbiB0aGUgQy1zaWRlIGltcGxlbWVudGF0aW9uIG9mIGBQcm9jZXNzLndhaXRw aWQyYCBldGMsIHdlIHdvdWxkIGNoZWNrIHRoZSByZXR1cm5lZCBwaWQgZnJvbSB0aGUgc3lzY2Fs bCBhZ2FpbnN0IHRoZSBoYW5kbGUgdGFibGUuIElmIGl0IG1hdGNoZWQsIHdlIHdvdWxkIHBlcmZv cm0gdGhlIHNhbWUgd29yayBhcyBpbiB0aGUgU0lHQ0hMRCBjYXNlLCBhbmQgdGhlbiByZS1zdGFy dCB0aGUgb3JpZ2luYWwgY2FsbCB0byBgUHJvY2Vzcy53YWl0cGlkMmAuDQ0KDQ0KVGhpcyBhcHBy b2FjaCBrZWVwcyB0aGUgcHJvY2VzcyB0cmVlIGNvcnJlY3QgYW5kIGludm9sdmVzIGxlc3Mgc2ls bHkgcHJveHlpbmcsIGJ1dCBpdCB3b27igJl0IGhpZGUgdGhlIHByb2Nlc3MgZnJvbSBhbnkgY2Fs bGVycyB0byB0aGUgcmF3IGB3YWl0cGlkYCBsaWJyYXJ5IGZ1bmN0aW9ucyBpbiBDIGV4dGVuc2lv bnMuIERvaW5nIHRoYXQgc2VlbXMgbGlrZSBhIHNpbGx5IGlkZWEgYW55d2F5IHRob3VnaCwgc28g bWF5YmUgdGhhdOKAmXMgT0s/DQ0KDQ0KIyMgTW90aXZhdGlvbg0NCg0NCk15IHVzZS1jYXNlIGZv ciB0aGlzIGlzIHRoYXQgSeKAmW0gd29ya2luZyBvbiBhIHBlcmYtYmFzZWQgcHJvZmlsaW5nIHRv b2wgZm9yIFJ1YnkuIFRvIGdldCBhcm91bmQgc29tZSBMaW51eCBjYXBhYmlsaXR5IGlzc3Vlcywg SSB3YW50IG15IHByb2ZpbGVyIGdlbSAob3IgQ1J1YnkgcGF0Y2gsIHdoYXRldmVyIGl0IHdpbmRz IHVwIGJlaW5nISkgdG8gZm9yayBhIHByaXZpbGVnZWQgaGVscGVyIGJpbmFyeSB0byBkbyBzb21l IGVCUEYgdHdpZGRsaW5nLiBCdXQsIGlmIHlvdeKAmXJlIHByb2ZpbGluZyBlLmcuIGEgVW5pY29y biBtYXN0ZXIgcHJvY2VzcywgdGhlIHJlc3VsdCBvZiB0aGF0IGJpbmFyeSBleGl0aW5nIG1pZ2h0 IGJlIGNhdWdodCBieSBVbmljb3JuIGl0c2VsZiwgcmF0aGVyIHRoYW4gbXkgKGdlbSB8IGludGVy cHJldGVyIGZlYXR1cmUpLg0NCg0NCkluIG15IGNhc2UsIEknbSBzbyBkZWVwIGluIGxpbnV4IHNw ZWNpZmljIHN0dWZmIHRoYXQganVzdCBjYWxsaW5nIGBjbG9uZSgyKWAgZnJvbSBteSBleHRlbnNp b24gaXMgcHJvYmFibHkgZmluZSwgYnV0IEkgaGFkIGVub3VnaCBvZiBhIGxvb2sgYXQgdGhpcyBw cm9jZXNzIG1hbmFnZW1lbnQgc3R1ZmYgSSB0aG91Z2h0IGl0IHdvdWxkIGJlIHdvcnRoIGFza2lu ZyB0aGUgcXVlc3Rpb24gaWYgdGhpcyBtaWdodCBiZSB1c2VmdWwgdG8gb3RoZXIsIG1vcmUgbm9y bWFsLCBnZW1zLg0NCg0NCg0NCg0NCg0NCi0tIA0NCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3Jn Lw0NCiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiBydWJ5 LWNvcmUgbWFpbGluZyBsaXN0IC0tIHJ1YnktY29yZUBtbC5ydWJ5LWxhbmcub3JnCiBUbyB1bnN1 YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIHJ1YnktY29yZS1sZWF2ZUBtbC5ydWJ5LWxhbmcub3Jn CiBydWJ5LWNvcmUgaW5mbyAtLSBodHRwczovL21sLnJ1YnktbGFuZy5vcmcvbWFpbG1hbjMvcG9z dG9yaXVzL2xpc3RzL3J1YnktY29yZS5tbC5ydWJ5LWxhbmcub3JnLw==