[#75687] [Ruby trunk Bug#12416] struct rb_id_table lacks mark function — shyouhei@...
Issue #12416 has been reported by Shyouhei Urabe.
3 messages
2016/05/23
[#75763] [Ruby trunk Feature#12435] Using connect_nonblock to open TCP connections in Net::HTTP#connect — mohamed.m.m.hafez@...
Issue #12435 has been reported by Mohamed Hafez.
3 messages
2016/05/28
[#75774] Errno::EAGAIN thrown by OpenSSL::SSL::SSLSocket#connect_nonblock — Mohamed Hafez <mohamed.m.m.hafez@...>
Hi all, every now and then in my production server, I'm
4 messages
2016/05/30
[#75775] Re: Errno::EAGAIN thrown by OpenSSL::SSL::SSLSocket#connect_nonblock
— Mohamed Hafez <mohamed.m.m.hafez@...>
2016/05/30
Or does MRI's OpenSSL::SSL::SSLSocket#connect_nonblock just return
[#75782] Important: Somewhat backwards-incompatible change (Fwd: [ruby-cvs:62388] duerst:r55225 (trunk): * string.c: Activate full Unicode case mapping for UTF-8) — Martin J. Dürst <duerst@...>
V2l0aCB0aGUgY2hhbmdlIGJlbG93LCBJIGhhdmUgYWN0aXZhdGVkIGZ1bGwgVW5pY29kZSBjYXNl
4 messages
2016/05/31
[ruby-core:75432] [Ruby trunk Feature#12361] Proposal: add Geo::Coord class to standard library
From:
shevegen@...
Date:
2016-05-10 07:40:14 UTC
List:
ruby-core #75432
SXNzdWUgIzEyMzYxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgUm9iZXJ0IEEuIEhlaWxlci4KCgpXb3Vs ZCBpdCBhY3R1YWxseSBub3QgYmUgYmV0dGVyIHRvIGluc3RlYWQgYWRkIG9uZSBvciB0d28gbWV0 aG9kcyB0byB0aW1lLCBkYXRlIG9yIGRhdGV0aW1lPwoKSSBndWVzcyB5b3VyIHByb3Bvc2FsIHdv dWxkIGFkZCBhIGRlZmF1bHQgbmV3IHRvcGxldmVsIG5hbWVzcGFjZSBHZW8sIHdoaWNoIEkgYW0g bm90IHN1cmUKaXMgYSBnb29kIGlkZWEgcGVyIHNlIHNpbmNlIG90aGVyIHByb2plY3RzIG1heSB3 YW50IHRvIHVzZSBpdC4gVGltZS9EYXRlL0RhdGVUaW1lIG9uIHRoZQpvdGhlciBoYW5kIGFscmVh ZHkgZXhpc3QgbW9yZSBvciBsZXNzIChhdCB0aGUgbGVhc3QgVGltZSkuCgotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZlYXR1cmUgIzEyMzYxOiBQcm9wb3NhbDogYWRk IEdlbzo6Q29vcmQgY2xhc3MgdG8gc3RhbmRhcmQgbGlicmFyeQpodHRwczovL2J1Z3MucnVieS1s YW5nLm9yZy9pc3N1ZXMvMTIzNjEjY2hhbmdlLTU4NTQ5CgoqIEF1dGhvcjogVmljdG9yIFNoZXBl bGV2CiogU3RhdHVzOiBPcGVuCiogUHJpb3JpdHk6IE5vcm1hbAoqIEFzc2lnbmVlOiAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIyBQcm9wb3NhbAoKQWRkIGBHZW86 OkNvb3JkYCBjbGFzcyB0byBSdWJ5IHN0YW5kYXJkIGxpYnJhcnksIHJlcHJlc2VudGluZyBgW2xh dGl0dWRlLCBsb25naXR1ZGVdYCBwYWlyICsgY29udmVuaWVuY2UgbWV0aG9kcy4gQWRkIGBHZW9g IHN0YW5kYXJkIGxpYnJhcnkgd2l0aCBhZGRpdGlvbmFsIGNhbGN1bGF0aW9ucyBhbmQgY29udmVu aWVuY2UgbWV0aG9kcy4KCiMjIFJhdGlvbmFsZQoKSW4gbW9kZXJuIGFwcGxpY2F0aW9ucywgd29y a2luZyB3aXRoIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyBpcyBmcmVxdWVudC4gV2UgcHJvcG9z ZSB0byB0aGluayBvZiBzdWNoIGNvb3JkaW5hdGVzIChuYW1lbHksIGBsYXRpdHVkZSwgbG9uZ2l0 dWRlYCBwYWlyKSBhcyBvZiAiYmFzaWMiIHR5cGUgdGhhdCBzaG91bGQgYmUgc3VwcG9ydGVkIGJ5 IHN0YW5kYXJkIGxpYnJhcnkgLSB0aGUgc2FtZSB3YXkgYXMgd2Ugc3VwcG9ydCBgVGltZWAvYERh dGVgL2BEYXRlVGltZWAgaW5zdGVhZCBvZiBoYXZpbmcgaXQgZGVmaW5lZApieSB1c2VyL2dlbXMu CgpUaGlzIHR5cGUgaXMgdG9vICJzbWFsbCIgdG8gYmUgZGVmaW5lZCBieSBzZXBhcmF0ZSBnZW0s IHNvLCBhbGwgb2YgZXhpc3RpbmcgZ2VvIGdlbXMgKEdlb0tpdCwgUkdlbywgR2VvUnVieSwgR3Jh dGljdWxlIGV0Yy4pIGRlZmluZSB0aGVpciBvd24gYExhdExuZ2AsIG9yIGBMb2NhdGlvbmAsIG9y IGBQb2ludGAsIHdoYXRldmVyLgoKT24gb3RoZXIgaGFuZCwgQVBJIGRlc2lnbiBmb3IgdGhpcyAi c21hbGwiIHR5cGUgaXMgdmFndWUgZW5vdWdoIGZvciBhbGwgdGhvc2Ugc2ltaWxhciB0eXBlcyB0 byBiZSBpbmNvbXBhdGlibGUgYW5kIGJyZWFrIHNtYWxsIGhhYml0cyBhbmQgY29udmVudGlvbnMg d2hlbiB5b3UgY2hhbmdlIGZyb20gb25lIGdlbyBsaWJyYXJ5IHRvIGFub3RoZXIsIG9yIHRyeSB0 byB1c2Ugc2V2ZXJhbApzaW11bHRhbmVvdXNseS4KCkFkZGl0aW9uYWx5LCBtYW55IGdlbXMgc29t ZWhvdyB3b3JraW5nIHdpdGggZ2VvIGNvb3JkaW5hdGVzIChmb3Igd2VhdGhlciwgb3IgdGltZXpv bmUsIG9yIGFub3RoZXIgdGFza3MpIGdlbmVyYWxseSBwcmVmZXIgbm90IHRvIGludHJvZHVjZSB0 eXBlLCBhbmQganVzdCB3b3JrIHdpdGggYFtsYXQsIGxuZ11gIGFycmF5LCB3aGljaCBpcyBub3Qg dmVyeSBjb252ZW5pZW50LCBmYWl0aGZ1bGx5LgoKU28sIGhhdmluZyAiZ2VvIGNvb3JkaW5hdGVz IiBmdW5jdGlvbmFsaXR5IGluIHN0YW5kYXJkIGxpYnJhcnkgc2VlbXMgcmVhc29uYWJsZSBhbmQg dmFsdWFibGUuCgojIyBFeGlzdGluZy9yZWZlcmVuY2Ugc29sdXRpb25zCgpSdWJ5OgoKKiBbR2Vv S2l0OjpMYXRMbmddKGh0dHA6Ly93d3cucnVieWRvYy5pbmZvL2dpdGh1Yi9nZW9raXQvZ2Vva2l0 L21hc3Rlci9HZW9raXQvTGF0TG5nKTsKKiBbUkdlbzo6RmVhdHVyZTo6UG9pbnRdKGh0dHA6Ly93 d3cucnVieWRvYy5pbmZvL2dlbXMvcmdlby9SR2VvL0ZlYXR1cmUvUG9pbnQpICh3aXRoIHNldmVy YWwgInByaXZhdGUiIGltcGxlbWVudGF0aW9uIGNsYXNzZXMpOyBSR2VvIGltcGxlbWVudHMgZnVs bCBbT0dDIFNpbXBsZSBGZWF0dXJlc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2lt cGxlX0ZlYXR1cmVzKSBzcGVjaWZpY2F0aW9uLCBzbywgaXRzIHBvaW50cyBoYXZlIGB6YCBhbmQg YG1gIGNvb3JkaW5hdGVzLCBwcm9qZWN0aW9uIGFuZCBtdWNoIG1vcmU7CiogW0dyYXRpY3VsZTo6 TG9jYXRpb25dKGh0dHA6Ly93d3cucnVieWRvYy5pbmZvL2dpdGh1Yi9jb2xsZWN0aXZlaWRlYS9n cmF0aWN1bGUvR3JhdGljdWxlL0xvY2F0aW9uKSAobm90IHN0cmljdGx5IGEgYFtsYXQsbG5nXWAg d3JhcHBlcik7CiogW1Jvc2FtYXJ5OjpOb2RlXShodHRwOi8vd3d3LnJ1Ynlkb2MuaW5mby9nZW1z L3Jvc2VtYXJ5LzAuNC40L1Jvc2VtYXJ5L05vZGUpIChmb2xsb3dzIG5hbWluZyBjb252ZW50aW9u IG9mIHVuZGVybHlpbmcgT3BlblN0cmVldE1hcCBBUEkpOwoKT3RoZXIgc291cmNlczoKKiBQeXRo b246IFtnZW9weS5Qb2ludF0oaHR0cDovL2dlb3B5LnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3Qv I2dlb3B5LnBvaW50LlBvaW50KTsKKiBbRWxhc3RpY1NlYXJjaF0oaHR0cHM6Ly93d3cuZWxhc3Rp Yy5jby9ibG9nL2dlby1sb2NhdGlvbi1hbmQtc2VhcmNoKSB1c2VzIGhhc2ggd2l0aCAibGF0IiBh bmQgImxvbiIga2V5czsKKiBHb29nbGUgTWFwcyBbR2VvY29kaW5nIEFQSV0oaHR0cHM6Ly9kZXZl bG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2dlb2NvZGluZy9pbnRybyNHZW9j b2RpbmdSZXNwb25zZXMpIHVzZXMgaGFzaCB3aXRoICJsYXQiIGFuZCAibG5nIiBrZXlzOwoqIFBv c3RHSVM6IFtwcmV0dHkgY29tcGxpY2F0ZWRdKGh0dHA6Ly9wb3N0Z2lzLm5ldC9kb2NzL21hbnVh bC0yLjIvdXNpbmdfcG9zdGdpc19kYm1hbmFnZW1lbnQuaHRtbCNSZWZPYmplY3QpICBoYXMgX2dl b21ldHJpY2FsXyAocHJvamVjdGVkKSBhbmQgX2dlb2dyYXBoaWNhbF8gKGxhdCwgbG5nKSBwb2lu dHMgYW5kIHN0dWZmLgoKIyMgRGVzaWduIGRlY2lzaW9ucwoKV2hpbGUgZGVzaWduaW5nIGBHZW9g IGxpYnJhcnksIG91ciByZWZlcmVuY2UgcG9pbnQgd2FzIHN0YW5kYXJkIGBUaW1lYCBjbGFzcyAo YW5kLCB0byBsZXNzZXIgZXh0ZW50LCBgRGF0ZWAvYERhdGVUaW1lYCkuIEl0IGhhcyB0aGlzIHJl c3BvbnNpYmlsaXRpZXM6Ciogc3RvcmVzIGRhdGEgaW4gc2ltcGxlIGludGVybmFsIGZvcm07Ciog aGVscHMgdG8gcGFyc2UgYW5kIGZvcm1hdCBkYXRhIHRvIGFuZCBmcm9tIHN0cmluZ3M7CiogcHJv dmlkZXMgZWFzeSBhY2Nlc3MgdG8gbG9naWNhbCBjb21wb25lbnRzIG9mIGRhdGE7CiogYWxsb3dz IG1vc3Qgc2ltcGxlIGFuZCB1bmFtYmlndW91cyBjYWxjdWxhdGlvbnMuCgoqKk1haW4gdHlwZSBu YW1lKio6IGFzIGZhciBhcyB3ZSBjYW4gc2VlLCB0aGVyZSdzIG5vIGdvb2Qgc2luZ3VsYXIgbmFt ZSBmb3IgYChsYXQsIGxuZylgIHBhaXIgY29uY2VwdC4gQXMgbWVudGlvbmVkIGFib3ZlLCB0aGVy ZSBjYW4gYmUgc2VlbiBuYW1lcyBsaWtlIGBMYXRMbmdgLCBvciBgTG9jYXRpb25gLCBvciBgUG9p bnRgOyBhbmQgaW4gbmF0dXJhbCBsYW5ndWFnZQpqdXN0ICJjb29yZGluYXRlcyIgdXNlZCBmcmVx dWVudGx5LiBXZSBwcm9wb3NlIHRoZSBuYW1lIGBDb29yZGAsIHdoaWNoIGlzIHByZXR0eSBzaG9y dCwgZWFzeSB0byByZW1lbWJlciwgZGVtb25zdHJhdGVzIGludGVudGlvbnMgKGFuZCBsb29rcyBs aWtlIHNpbmd1bGFyLCBzbyB5b3UgY2FuIGhhdmUgIm9uZSBjb29yZCBvYmplY3QiIGFuZCAiYXJy YXkgb2YgY29vcmRzIiwKd2hpY2ggaXMgbm90IDEwMCUgbGluZ3Vpc3RpY2FsbHkgY29ycmVjdCwg eWV0IGNvbnZlbmllbnQpLiBBbHRlcm5hdGl2ZSBgUG9pbnRgIG5hbWUgc2VlbXMgdG8gYmUgdG9v IGFtYmlnb3VzLCBiZWluZyB1c2VkIGluIG1hbnkgY29udGV4dHMuCgpgR2VvOjpDb29yZGAgb2Jq ZWN0IGlzICoqaW1tdXRhYmxlKiosIHRoZXJlJ3Mgbm8gc2VtYW50aWNhbCBzZW5zZSBpbiBgbG9j YXRpb24ubGF0aXR1ZGUgPSAuLi5gIG9yIHNvbWV0aGluZyBsaWtlIHRoaXMuCgoqKlVuaXRzKio6 IGBHZW9gIGNhbGN1bGF0aW9ucyAoanVzdCBsaWtlIGBUaW1lYCBjYWxjdWxhdGlvbnMpIHByb3Zp ZGUgbm8gdW5pdHMgb3B0aW9ucywganVzdCByZXR1cm5pbmcgbnVtYmVycyBtZWFzdXJlZCBpbiAi ZGVmYXVsdCIgdW5pdHM6IG1ldHJlcyBmb3IgZGlzdGFuY2VzIChhcyB0aGV5IGFyZSBTSSB1bml0 KSBhbmQgZGVncmVlcyBmb3IgYXppbXV0aC4gTGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBhcmUgc3Rv cmVkIGluIGRlZ3JlZXMsIGJ1dCByYWRpYW5zIHZhbHVlcyBhY2Nlc3NvcnMgYXJlIHByb3ZpZGVk IChiZWluZyB3aWRlbHkgdXNlZCBpbiBnZW9kZXN5IG1hdGgpLgoKVGhlcmUncyBpbnRyb2R1Y2Vk ICoqY29uY2VwdCBvZiBnbG9iZSoqIHVzZWQgaW50ZXJuYWxseSBmb3IgY2FsY3VsYXRpb25zLiBP bmx5IGdlbmVyaWMgKHNwaGVyZSkgYW5kIEVhcnRoIGdsb2JlcyBhcmUgaW1wbGVtZW50ZWQsIGJ1 dCBmb3IgMjAxNiB3ZSBmZWVsIGxpa2UgY3VycmVudCBkZXNpZ24gb2YgYmFzaWMgdHlwZXMgc2hv dWxkIHRha2UgaW4gY29uc2lkZXJhdGlvbgpwb3NzaWJpbGl0eSBvZiB3cml0aW5nIFJ1Ynkgc2Ny aXB0cyBmb3IgTWFycyBtYXBzIGFuYWx5c2lzLiBPbmx5IG9uZSBnZW9kZXN5IGZvcm11bGEgaXMg aW1wbGVtZW50ZWQgKFZpbmNlbnR5LCBnZW5lcmFsbHkgY29uc2lkZXJlZCBvbmUgb2YgdGhlIG1v c3QgcHJlY2lzZSksIGFzIGZvciBzdGFuZGFyZCBsaWJyYXJ5IGNsYXNzIGl0IGNvbnNpZGVyZWQg dW5uZWNlc3NhcnkgdG8gcHJvdmlkZSB1c2VyIHdpdGggZ2VvZGVzeSBmb3JtdWxhZSBvcHRpb25z LgoKTm8gKiptYXAgcHJvamVjdGlvbioqIG1hdGggd2FzIGFkZGVkIGludG8gY3VycmVudCBwcm9w b3NhbCwgYnV0IGl0IG1heSBiZSBhIGdvb2QgZGlyZWN0aW9uIGZvciBmdXJ0aGVyIHdvcmsuIE5v ICoqZWxldmF0aW9uKiogZGF0YSBjb25zaWRlcmVkIGVpdGhlci4KCiMjIFByb3Bvc2FsIGRldGFp bHMKCiMjIyBgR2VvOjpDb29yZGAgY2xhc3MKClJlcHJlc2VudHMgYFtsYXRpdHVkZSwgbG9uZ2l0 dWRlXWAgcGFpci4gTGF0aXR1ZGUgaXMgLTkwIHRvICs5MCAoZGVncmVlcykuIExvbmdpdHVkZSBp cyAtMTgwIHRvICsxODAuCgpDbGFzcyBtZXRob2RzOgoqIGBuZXcobGF0LCBsbmcpYCBjcmVhdGVz IGluc3RhbmNlIGZyb20gdHdvIE51bWVyaWNzIChpbiBkZWdyZWVzKTsKKiBgbmV3KGxhdDosIGxu ZzopYCBrZXl3b3JkIGFyZ3VtZW50cyBmb3JtIG9mIGFib3ZlOwoqIGBuZXcobGF0ZDosIGxhdG06 LCBsYXRzOiwgbGF0aDosIGxuZ2Q6IGxuZ206LCBsbmdzOiBsbmdoOilgIGNyZWF0ZXMgaW5zdGFu Y2UgZnJvbSBjb29yZGluYXRlcyBpbiAoZGVnLCBtaW4sIHNlYywgaGVtaXNwaGVyZSkgZm9ybTsg aGVtaXNwaGVyZXMgYXJlICJOIi8iUyIgZm9yIGxhdGl0dWRlIGFuZCAiVyIvRSIgZm9yIGxvbmdp dHVkZTsgYW55IGNvbXBvbmVudCBleGNlcHQgZm9yIGRlZ3JlZXMgY2FuIGJlIG9taXR0ZWQ7IGlm IGhlbWlzcGhlcmUgaXMgb21pdHRlZCwgaXQgaXMgZGVjaWRlZCBieSBkZWdyZWVzIHNpZ24gKGxh dDogcG9zaXRpdmUgaXMgIk4iLCBsbmc6IHBvc2l0aXZlIGlzICJFIik7CiogYGZyb21faChoYXNo KWAgY3JlYXRlcyBpbnN0YW5jZSBmcm9tIGhhc2ggd2l0aCBgImxhdCJgIG9yIGAibGF0aXR1ZGUi YCBrZXkgYW5kIGAibG9uImAgb3IgYCJsbmciYCBvciBgImxvbmdpdHVkZSJgIGtleSAoY2FzZS1p bmRlcGVuZGVudCk7CiogYGZyb21fcmFkaWFucyhwaGksIGxhKWAgY3JlYXRlcyBpbnN0YW5jZSBm cm9tIHJhZGlhbiB2YWx1ZXM7CiogYHN0cnBjb29yZGAgcGFyc2VzIHN0cmluZyBpbnRvIGNvb3Jk aW5hdGVzIGJ5IHByb3ZpZGVkIHBhdHRlcm4gKHNlZSBiZWxvdyBmb3IgcGF0dGVybiBkZXNjcmlw dGlvbik7CiogYHBhcnNlX2xsYCBwYXJzZXMgY29vcmRpbmF0ZXMgc3RyaW5nIGluIGAiZmxvYXQs IGZsb2F0ImAgZm9ybTsKKiBgcGFyc2VfZG1zYCBwYXJzZXMgY29vcmRpbmF0ZXMgc3RyaW5nIGlu IGBkIG0gcyBoLCBkIG0gcyBoYCBmb3JtYXQgKGNvbnNpZGVyaW5nIHNldmVyYWwgd2lkZWx5IHVz ZWQgc3ltYm9scyBmb3IgZGVncmVlcywgbWludXRlcyBhbmQgc2Vjb25kcyk7CiogYHBhcnNlYCB0 cmllcyB0byBwYXJzZSBzdHJpbmcgaW50byBjb29yZGluYXRlcyBmcm9tIHZhcmlvdXMgZm9ybWF0 cy4KCkluc3RhbmNlIG1ldGhvZHM6CiogYGxhdGAgYW5kIGBsbmdgLCByZXR1cm5pbmcgYEZsb2F0 YHMsIHNpZ25lZDsKKiBgbGF0aXR1ZGVgIGFuZCBgbG9uZ2l0dWRlYCBhcyBhbiBhbGlhc2VzOyBg bG9uYCBhcyBhbiBhZGRpdGlvbmFsIGFsaWFzZXMgZm9yIGxvbmdpdHVkZTsKKiBgbGF0ZGAsIGBs YXRtYCwgYGxhdHNgLCBgbGF0aGA6IGRlZ3JlZSwgbWludXRlLCBzZWNvbmQsIGhlbWlzcGhlcmU7 IGBsYXRkYCBhbmQgYGxhdG1gIGFyZSBgRml4bnVtYCwgYGxhdHNgIGlzIGBGbG9hdGAsIGBsYXRo YCBpcyAiTiIvIlMiOyBhbGwgbnVtYmVycyBhcmUgdW5zaWduZWQ7CiogYGxuZ2RgLCBgbG5nbWAs IGBsbmdzYCwgYGxuZ2hgOiB0aGUgc2FtZSBmb3IgbG9uZ2l0dWRlIChoZW1pc3BoZXJlIGlzICJX Ii8iRSIpOwoqIGBsYXRkbXMobm9oZW1pc3BoZXJlID0gZmFsc2UpYCByZXR1cm5zIGBbbGF0ZCwg bGF0bSwgbGF0cywgbGF0aF1gIHdpdGggYG5vaGVtaXNwaGVyZWAgcGFyYW0gZXF1YWwgdG8gYGZh bHNlYCwgYW5kIGBbwrFsYXRkLCBsYXRtLCBsYXRzXWAgd2l0aCBgdHJ1ZWA7IHNhbWUgd2l0aCBg bG5nZG1zYCBmb3IgbG9uZ2l0dWRlOwoqIGBwaGlgIGFuZCBgz4ZgIGlzIGxhdGl0dWRlIGluIHJh ZGlhbnMgKGhlbHBmdWwgZm9yIG1hdGgpLCBgbGFgIG9yIGDOu2AgaXMgbG9uZ2l0dWRlIGluIHJh ZGlhbnMgKG5vdCBgbGFtYmRhYCB0byBub3QgY29uZnVzZSB3aXRoIEtlcm5lbCBtZXRob2QpOwoq IGB0b19zYCByZXR1cm5pbmcgc3RyaW5nIGxpa2UgIjUwLjAwNDQ0NCwzNi4yMzEzODkiIChnb29k IGZvciBtYXAgVVJMcyBjb25zdHJ1Y3Rpb24sIGZvciBleGFtcGxlKTsKKiBgdG9faChsYXQ6IDps YXQsIGxuZzogOmxuZylgIGNvbnZlcnRzIGNvb3JkIHRvIGhhc2ggKHdpdGggZGVzaXJlZCBrZXkg bmFtZXMpOwoqIGB0b19hYCBjb252ZXJ0cyBjb29yZCB0byBzaW1wbGUgYFtsYXQsIGxuZ11gIHBh aXI7CiogYHN0cmZjb29yZChmb3JtYXRzdHIpYCBmb3IgY29tcGxleCBjb29yZGluYXRlIGZvcm1h dHRpbmcgKHNlZSBiZWxvdyBmb3IgZm9ybWF0IHN0cmluZyBkZXNjcmlwdGlvbik7CiogYGRpc3Rh bmNlKG90aGVyKWAgY2FsY3VsYXRlcyBkaXN0YW5jZSB0byBhbm90aGVyIHBvaW50IChpbiBtZXRy ZXMpOwoqIGBhemltdXRoKG90aGVyKWAgY2FsY3VsYXRlcyBkaXJlY3Rpb24gdG8gdGFyZ2V0IChp biBkZWdyZWVzKTsKKiBgZW5kcG9pbnQoZGlyZWN0aW9uLCBhemltdXRoKWAgY2FsY3VsYXRlcyBm aW5hbCBwb2ludCBvZiB0aGUgbGluZSBvZiBgZGlzdGFuY2VgIG1ldHJlcyBnb2luZyBpbiBgYXpp bXV0aGAgZGlyZWN0aW9uIGZyb20gY3VycmVudCBwb2ludC4KCiMjIyMgYHN0cnBjb29yZGAvYHN0 cmZjb29yZGAKCkV4YW1wbGU6Cgp+fn5ydWJ5CmtoYXJraXYuc3RyZmNvb3JkKCclbGF0ZHXCsCVs YXRt4oCyJWxhdHPigLMgJWxhdGgsICVsbmdkdcKwJWxuZ23igLIlbG5nc+KAsyAlbG5naCcpCiMg PT4gIjUwwrAw4oCyMTbigLMgTiwgMzbCsDEz4oCyNTPigLMgRSIKfn5+CgpEaXJlY3RpdmVzOgoq IGAlbGF0YCAtIGZ1bGwgbGF0aXR1ZGUsIGZsb2F0OyBjYW4gYmUgZm9ybWF0dGVkIHdpdGggbW9y ZSBjb250cm9sIGxpa2UgYCUuNGxhdGAgKGZvdXIgZGlnaXRzIGFmdGVyIHBvaW50KSBvciBgJSts YXRgIChleHBsaWNpdCBwbHVzIHNpZ24gZm9yIHBvc2l0aXZlIGxhdGl0dWRlcyk7CiogYCVsYXRk YCAtIGxhdGl0dWRlIGRlZ3JlZXMsIHVuc2lnbmVkLCBpbnRlZ2VyCiogYCVsYXRkc2AgLSBsYXRp dHVkZSBkZWdyZWVzLCBzaWduZWQKKiBgJWxhdG1gIC0gbGF0aXR1ZGUgbWludXRlcywgdW5zaWdu ZWQsIGludGVnZXIKKiBgJWxhdHNgIC0gbGF0aXR1ZGUgc2Vjb25kcywgdW5zaWduZWQsIGludGVn ZXIsIGJ1dCBjYW4gYmUgZm9ybWF0dGVkIGFzIGZsb2F0OiBgJS4ybGF0c2AKKiBgJWxhdGhgIC0g bGF0aXR1ZGUgaGVtaXNwaGVyZSwgb25lIGxldHRlciAoIk4iLyJTIikKKiBgJWxuZ2AsIGAlbG5n ZGAsIGAlbG5nZHNgLCBgJWxuZ3NgLCBgJWxuZ2hgLCBgJWxuZ0hgIC0gc2FtZSBmb3IgbG9uZ2l0 dWRlCiogYCUlYCBsaXRlcmFsIGAlYCBzaWduCgojIyMgQ3VycmVudCBpbXBsZW1lbnRhdGlvbgoK UHJvcG9zZWQgaW1wbGVtZW50YXRpb24gY2FuIGJlIGZvdW5kIGF0IGh0dHBzOi8vZ2l0aHViLmNv bS96dmVyb2svZ2VvX2Nvb3JkLgoKSXQgd2FzIGNyZWF0ZWQgd2l0aCB0aG91Z2h0cyBvZiBzdGFu ZGFyZCBsaWJyYXJ5LCBzbywgYWxsIGRvY3MgYXJlIGluIFJEb2MgZm9ybWF0LCBhbmQgdGVzdHMv c3BlY3MgYXJlIGluIG1zcGVjLWNvbXBhdGlibGUgcnNwZWMgZmxhdm91ci4KCgoKCi0tIApodHRw czovL2J1Z3MucnVieS1sYW5nLm9yZy8KClVuc3Vic2NyaWJlOiA8bWFpbHRvOnJ1YnktY29yZS1y ZXF1ZXN0QHJ1YnktbGFuZy5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KPGh0dHA6Ly9saXN0cy5y dWJ5LWxhbmcub3JnL2NnaS1iaW4vbWFpbG1hbi9vcHRpb25zL3J1YnktY29yZT4K