[ruby-core:109525] [Ruby master Feature#18934] Proposal: Introduce method results memoization API in the core
From:
"matz (Yukihiro Matsumoto)" <noreply@...>
Date:
2022-08-18 06:27:11 UTC
List:
ruby-core #109525
SXNzdWUgIzE4OTM0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWF0eiAoWXVraWhpcm8gTWF0c3Vtb3Rv KS4NCg0KU3RhdHVzIGNoYW5nZWQgZnJvbSBPcGVuIHRvIFJlamVjdGVkDQoNCkkgcmVqZWN0IHRo aXMgcHJvcG9zYWwgdG8gbWFrZSB0aGUgZmVhdHVyZSBidWlsdC1pbiBmb3Igc2V2ZXJhbCByZWFz b25zOg0KDQoqIEkgc3RpbGwgdGhpbmsgaXQgc2hvdWxkIGJlIGRvbmUgaW4gbGlicmFyeSAoZ2Vt KQ0KKiBUaGUgdGVybSBgbWVtb2l6ZWAgaW4gdGhpcyBwcm9wb3NhbCBpcyBtaXN1c2VkLiBUaGUg Y2Fub25pY2FsIGBtZW1vaXplYCBwcm9jZXNzIHJlY29yZCB0aGUgZnVuY3Rpb24gcmVzdWx0IGFj Y29yZGluZyB0byBhcmd1bWVudHMuIEJ1dCBpbiB0aGlzIHByb3Bvc2FsLCBpdCdzIHJlc3RyaWN0 ZWQgdG8gZnVuY3Rpb25zIChtZXRob2RzKSB3aXRob3V0IGFyZ3VtZW50cy4gU2luY2UgaXQgZGlm ZmVycyBmcm9tIHRoZSBjYW5vbmljYWwgZGVmaW5pdGlvbiwgaXQgaXMgaGFyZCB0byBtYWtlIGl0 IGJ1aWx0LWluLg0KDQpNYXR6Lg0KDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCkZlYXR1cmUgIzE4OTM0OiBQcm9wb3NhbDogSW50cm9kdWNlIG1ldGhvZCByZXN1 bHRzIG1lbW9pemF0aW9uIEFQSSBpbiB0aGUgY29yZQ0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5v cmcvaXNzdWVzLzE4OTM0I2NoYW5nZS05ODY5NQ0KDQoqIEF1dGhvcjogenZlcm9rIChWaWN0b3Ig U2hlcGVsZXYpDQoqIFN0YXR1czogUmVqZWN0ZWQNCiogUHJpb3JpdHk6IE5vcm1hbA0KLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKipBYnN0cmFjdDoqKiBJIHByb3Bv c2UgdG8gaW50cm9kdWNlIGEgc2ltcGxlIGNvcmUgQVBJIGZvciBtZW1vaXppbmcgYXJndW1lbnQt bGVzcyBtZXRob2QgcmV0dXJuIHZhbHVlcy4NCg0KYGBgcnVieQ0KY2xhc3MgVGVzdA0KICBkZWYg Zm9vDQogICAgcHV0cyAiY2FsbCEiDQogICAgNQ0KICBlbmQNCg0KICBtZW1vaXplZCA6Zm9vDQpl bmQNCg0KbyA9IFRlc3QubmV3DQpvLmZvbyAjIHByaW50cyAiY2FsbCEiLCByZXR1cm5zIDUNCm8u Zm9vICMgcmV0dXJucyA1IGltbWVkaWF0ZWx5DQpgYGANCg0KVGhlIGZ1bGwgcHJvcG9zYWwgaXMg YmVsb3cuDQoNCiMjIEludHJvDQoNCkZvciBmdXJ0aGVyIHJlYXNvbmluZywgSSdsbCBiZSB1c2lu ZyB0aGUgZm9sbG93aW5nIGNsYXNzLiBJdCBpcyBzaW1wbGlmaWVkL2ludmVudGVkIGZvciBkZW1v bnN0cmF0aXZlIHB1cnBvc2VzLCBzbyBJJ2QgcHJlZmVyIHRvIGRpc2N1c3MgcHJvYmxlbXMvc29s dXRpb25zIGRlc2NyaWJlZCBpbiBnZW5lcmFsIGFuZCBub3QgZm9jdXMgb24gInlvdSBjb3VsZCBy ZXdyaXRlIHRoaXMgY2xhc3MgdGhhdCB3YXkiLg0KDQpgYGBydWJ5DQpjbGFzcyBTZW50ZW5jZQ0K ICBhdHRyX3JlYWRlciA6dGV4dA0KDQogIGRlZiBpbml0aWFsaXplKHRleHQpID0gQHRleHQgPSB0 ZXh0DQoNCiAgZGVmIHRva2VucygpID0gU29tZVRva2VuaXplci5uZXcodGV4dCkuY2FsbA0KDQog IGRlZiBzaXplKCkgPSB0b2tlbnMuc2l6ZQ0KICBkZWYgZW1wdHk/KCkgPSB0b2tlbnMuYWxsPygm OndoaXRlc3BhY2U/KQ0KDQogIGRlZiB3b3JkcygpID0gdG9rZW5zLnNlbGVjdCgmOndvcmQ/KQ0K ICBkZWYgc2VydmljZT8oKSA9IHdvcmRzLmVtcHR5Pw0KZW5kDQpgYGANCg0KIyMgVGhlIHByb2Js ZW0NCg0KVGhlIGNsYXNzIGFib3ZlIGlzIG5pY2UsIGNsZWFuLCBhbmQgZWFzeSB0byByZWFkLiBU aGUgcHJvYmxlbSB3aXRoIGl0IGlzIGVmZmljaWVuY3k6IGlmIHdlIGltYWdpbmUgdGhhdCBgU29t ZVRva2VuaXplciNjYWxsYCBpcyBub3QgY2hlYXAgKGl0IHByb2JhYmx5IGlzbid0KSwgdGhlbiBj cmVhdGluZyBhIGZldyBzZW50ZW5jZXMgYW5kIHRoZW4gcHJvY2Vzc2luZyB0aGVtIHdpdGggc29t ZSBhbGdvcml0aG0gd2lsbCBiZeKAlHdpdGggdGhlIGRlbW9uc3RyYXRlZCBkZWZpbml0aW9uIG9m IHRoZSBjbGFzc+KAlG11Y2ggbGVzcyBlZmZpY2llbnQgdGhlbiBpdCBjb3VsZCBiZS4gRXZlcnkg c3RhdGVtZW50IGxpa2UuLi4NCmBgYHJ1YnkNCm1hbnlfc2VudGVuY2VzLnJlamVjdCgmOmVtcHR5 Pykuc2VsZWN0IHsgXzEud29yZHMuaW5jbHVkZT8oJ1J1YnknKSB9Lm1hcCB7IF8xLndvcmRzLmNv dW50IC8gXzEudG9rZW5zLmNvdW50IH0NCmBgYA0KLi4uaXMgbXVjaCBsZXNzIGVmZmljaWVudCB0 aGFuIGl0ICJpbnR1aXRpdmVseSIgc2hvdWxkIGJlIGJlY2F1c2UgdG9rZW5pemF0aW9uIGhhcHBl bnMgYWdhaW4gYW5kIGFnYWluLg0KDQpDYWNoaW5nIGp1c3QgYHRva2Vuc2Agd291bGQgcHJvYmFi bHkgbm90IGJlIGVub3VnaCBmb3IgYSBjb21wbGV4IGFsZ29yaXRobSB3b3JraW5nIHdpdGggc29t ZSBub3RhYmxlIGFtb3VudHMgb2YgZGF0YTogYHdoaXRlc3BhY2U/YCBhbmQgYHdvcmQ/YCBtaWdo dCBhbHNvIGJlIG5vbi10cml2aWFsOyBidXQgZXZlbiB0cml2aWFsIG1ldGhvZHMgbGlrZSBgc2Vs ZWN0YCBhbmQgYGVtcHR5P2Agd2hlbiBuZWVkbGVzc2x5IHJlcGVhdGVkIHRob3VzYW5kcyBvZiB0 aW1lcywgd291bGQgYmUgdmlzaWJsZSBpbiBwcm9maWxpbmcuDQoNClNvLCBjYW4gd2Ugc3RvcCBy ZWNhbGN1bGF0aW5nIHRoZW0gY29uc3RhbnRseT8NCg0KIyMgRXhpc3Rpbmcgc29sdXRpb25zDQoN CiMjIyBKdXN0IHByZS1jYWxjdWxhdGUgZXZlcnl0aGluZyBpbiBgaW5pdGlhbGl6ZWANCg0KV2Ug Y291bGQgY3JlYXRlIGEgbG90IG9mIGluc3RhbmNlIHZhcmlhYmxlcyBpbiBgaW5pdGlhbGl6ZWA6 DQpgYGBydWJ5DQpkZWYgaW5pdGlhbGl6ZSh0ZXh0KQ0KICBAdGV4dCA9IHRleHQNCiAgQHRva2Vu cyA9IFNvbWVUb2tlbml6ZXIubmV3KEB0ZXh0KS5jYWxsDQogIEBzaXplID0gQHRva2Vucy5zaXpl DQogIEBlbXB0eSA9IEB0b2tlbnMuYWxsPygmOndoaXRlc3BhY2U/KQ0KICBAd29yZHMgPSBAdG9r ZW5zLnNlbGVjdCgmOndvcmQ/KQ0KICBAc2VydmljZSA9IEB3b3Jkcy5lbXB0eT8NCmVuZA0KYGBg DQpJdCB3aWxsIHdvcmssIG9mIGNvdXJzZSwgYnV0IGl0IGxvc2VzIG5pY2UgdmlzaWJpbGl0eSBv ZiB3aGF0J3Mgb2JqZWN0cyBtYWluIGRhdGEgYW5kIHdoYXQgaXMgZGVyaXZhdGl2ZTsgYW5kIGl0 IGlzIG1vcmUgY29kZSAobm93IHdlIG5lZWQgdG8gZGVmaW5lIGF0dHJfcmVhZGVycyBhbmQgcHJl ZGljYXRlIG1ldGhvZHMgZm9yIGFsbCBvZiB0aGF0ISkuIEFuZCBhZGRpbmcgZXZlcnkgbmV3IHNt YWxsIHNlcnZpY2UgbWV0aG9kIChsaWtlIGBkZWYgcXVlc3Rpb24/KCkgPSB0b2tlbnMubGFzdCYu dGV4dCA9PSAnPydgKSB3b3VsZCByZXF1aXJlIHJldGhpbmtpbmcgImlzIGl0IGVmZmljaWVudCBl bm91Z2ggdG8gYmUgYSBtZXRob2QsIG9yIHNob3VsZCBJIGFkZCBvbmUgbW9yZSBpbnN0YW5jZSB2 YXIiPw0KDQojIyMgYHx8PWAgaWRpb20NCg0KVGhlIGNvbW1vbiBpZGlvbSBmb3IgY2FjaGluZyBp cyBgfHw9YDoNCmBgYHJ1YnkNCmRlZiB3b3JkcygpPSBAd29yZHMgfHw9IHRva2Vucy5zZWxlY3Qo Jjp3b3JkPykNCmBgYA0KDQpJdCBoYXMgaXRzIGRyYXdiYWNrcywgdGhvdWdoOg0KMS4gZG9lc24n dCBzdWl0IG1ldGhvZHMgdGhhdCBjYW4gcmV0dXJuIGBmYWxzZWAgb3IgYG5pbGAgKGxpa2UgYHNl cnZpY2U/YCkNCjIuIGhhcmRlciB0byB1c2Ugd2l0aCBtZXRob2RzIHRoYXQgbmVlZCBzZXZlcmFs IHN0YXRlbWVudHMgdG8gY2FsY3VsYXRlIHRoZSBlbmQgcmVzdWx0DQozLiBpdCBtaXhlcyB0aGUg Y29uY2VybnMgb2YgImhvdyBpdCBpcyBjYWxjdWxhdGVkIiBhbmQgIml0IGlzIG1lbW9pemVkIiAo bG9va2luZyBhdCB0aGUgbWV0aG9kJ3MgY29kZSwgeW91IGRvbid0IGltbWVkaWF0ZWx5IGtub3cg aWYgdGhlIHZhcmlhYmxlIGlzIHVzZWQgb25seSBmb3IgbWVtb2l6YXRpb24sIG9yIGl0IGNvdWxk J3ZlIGJlZW4gc2V0IGVsc2V3aGVyZSwgYW5kIGhlcmUgd2UganVzdCBwcm92aWRpbmcgZGVmYXVs dCB2YWx1ZSkNCjQuIGl0IHBvbGx1dGVzIHRoZSBvYmplY3QncyBkYXRhIHJlcHJlc2VudGF0aW9u DQoNCjEtMiBpcyB0eXBpY2FsbHkgYWR2aXNlZCB0byBzb2x2ZSB3aXRoIGEgbGVzcyBlbGVnYW50 IGJ1dCBmdXR1cmVwcm9vZiBzb2x1dGlvbiAod2hpY2ggYWxzbyBtYWtlcyBpdCBpbXBvc3NpYmxl IHRvIGRlZmluZSBpbiBvbmUtbGluZSBtZXRob2RzLCBldmVuIGlmIHRoZSBtYWluIGNvZGUgaXMg c2hvcnQpOg0KDQpgYGBydWJ5DQpkZWYgZW1wdHk/DQogIHJldHVybiBAZW1wdHkgaWYgZGVmaW5l ZD8oQGVtcHR5KQ0KDQogIEBlbXB0eSA9IHRva2Vucy5hbGw/KCY6d2hpdGVzcGFjZT8pDQplbmQN CmBgYA0KDQpBYm91dCA0OiB3aGlsZSB1c2luZyB0aGlzIHNvbHV0aW9uLCB3ZSdsbCBoYXZlIGEg bG90IG9mIGluc3RhbmNlIHZhcnMgKHRoYXQgYXJlIGRlcml2YXRpdmUgYW5kIGxvZ2ljYWxseSBu b3QgdGhlIHBhcnQgb2Ygb2JqZWN0J3Mgc3RhdGUpIG5vdyB2aXNpYmxlIGluIGRlZmF1bHQgYCNp bnNwZWN0YCBhbmQgc2VyaWFsaXphdGlvbjoNCmBgYHJ1YnkNCnMgPSBTZW50ZW5jZS5uZXcoJ1J1 YnkgaXMgY29vbCcpDQpwIHMNCiMgIzxTZW50ZW5jZToweDAwMDA3ZmUyMWQ4ZmQxMzggQHRleHQ9 IlJ1YnkgaXMgY29vbCI+DQpwdXRzIHMudG9feWFtbA0KIyAtLS0gIXJ1Ynkvb2JqZWN0OlNlbnRl bmNlDQojIHRleHQ6IFJ1YnkgaXMgY29vbA0KcCBzLmVtcHR5Pw0KIyBmYWxzZQ0KcCBzDQojICM8 U2VudGVuY2U6MHgwMDAwN2ZlMjFkOGZkMTM4IEB0ZXh0PSJSdWJ5IGlzIGNvb2wiLCBAZW1wdHk9 ZmFsc2U+DQpwdXRzIHMudG9feWFtbA0KIyAtLS0gIXJ1Ynkvb2JqZWN0OlNlbnRlbmNlDQojIHRl eHQ6IFJ1YnkgaXMgY29vbA0KIyBlbXB0eTogZmFsc2UNCmBgYA0KDQojIyMgRXhpc3RpbmcgbWVt b2l6YXRpb24gbGlicmFyaWVzDQoNClRoZXJlIGFyZSBzZXZlcmFsIHdlbGwta25vd24gbWVtb2l6 YXRpb24gbGlicmFyaWVzIG91dCB0aGVyZSwgdG8gbmFtZSBhIGNvdXBsZTogb2xkIGFuZCByZWxp YWJsZSBbbWVtb2lzdF0oaHR0cHM6Ly9naXRodWIuY29tL21hdHRoZXdydWR5L21lbW9pc3QpLCBu ZXcgYW5kIGVmZmljaWVudCBbbWVtb193aXNlXShodHRwczovL2dpdGh1Yi5jb20vcGFub3JhbWEt ZWQvbWVtb193aXNlKS4NCg0KVGhleSBzb2x2ZSBwcm9ibGVtcyAxLTMgb2YgYHx8PWAsIGFuZCBh bHNvIGFkZCBzZXZlcmFsIGNvb2wgZmVhdHVyZXMgKGxpa2UgYXJndW1lbnQtZGVwZW5kZW50IG1l bW9pemF0aW9uKSB3aXRoIGEgbWFjcm8gKHRoaXMgaXMgYG1lbW9fd2lzZWAsIGBtZW1vaXN0YCBi ZWhhdmVzIHRoZSBzYW1lLCBqdXN0IGRpZmZlcmVudCBtYWNybyBuYW1lKToNCg0KYGBgcnVieQ0K Y2xhc3MgU2VudGVuY2UNCiAgcHJlcGVuZCBNZW1vV2lzZQ0KICAjIC4uLg0KICBtZW1vX3dpc2Ug ZGVmIGVtcHR5PygpID0gdG9rZW5zLmFsbD8oOndoaXRlc3BhY2U/KQ0KZW5kDQpgYGANCg0KTm93 IHdlIGhhdmUgYSBuaWNlIGRlY2xhcmF0aXZlIGFuZCBkZWNvdXBsZWQgc3RhdGVtZW50ICJpdCBp cyBtZW1vaXplZCIsIHdoaWNoIGFsc28gc3VwcG9ydHMgYm9vbGVhbnMgYW5kIGBuaWxgcyBhbmQg bXVsdGktc3RhdGVtZW50IG1ldGhvZHMuDQoNClRoZSBwcm9ibGVtIG9mICJkZXRhaWwgbGVha2lu ZyIgaXNuJ3Qgc29sdmVkLCB0aG91Z2g6DQpgYGBydWJ5DQpwIHMuZW1wdHk/DQojIGZhbHNlDQpw IHMNCiMgIzxTZW50ZW5jZToweDAwMDA3ZjBmNDc0ZWI0MTggQF9tZW1vX3dpc2U9ezplbXB0eT89 PmZhbHNlfSwgQHRleHQ9IlJ1YnkgaXMgY29vbCI+DQpwdXRzIHMudG9feWFtbA0KIyAtLS0gIXJ1 Ynkvb2JqZWN0OlNlbnRlbmNlDQojIF9tZW1vX3dpc2U6DQojICAgOmVtcHR5PzogZmFsc2UNCiMg dGV4dDogUnVieSBpcyBjb29sDQpgYGANCg0KQWxzbywgdXNpbmcgdGhpcmQtcGFydHkgZ2VtcyBp bnRyb2R1Y2VzIGEgZmV3IG5ldyBwcm9ibGVtczoNCjEuIFBlcmZvcm1hbmNlIHBlbmFsdHkuIEhv d2V2ZXIgd2VsbCBpdCBpcyBvcHRpbWl6ZWQsIFJ1YnktbGFuZCAicmVkZWZpbmUgbWV0aG9kLCB0 aGVuIGNoZWNrIGl0IGlzIHRoZXJlLCB0aGVuIGNhbGN1bGF0ZSIgaGFzIG5vdCB6ZXJvIG92ZXJo ZWFkLg0KMi4gRGVwZW5kZW5jeSBwZW5hbHR5LiBJZiB0aGUgbWVtb2l6aW5nIGdlbSBpcyBub3Qg aW4gdGhlIHByb2plY3QgeWV0LCBpdCBpcyBhIGRlY2lzaW9uIHdoZXRoZXIgdG8gaW50cm9kdWNl IGl0IG9yIG5vdCBhbmQgZm9yIHNtYWxsIG5vLWRlcGVuZGVuY2llcyBnZW1zIG9yIGZvciB0aGUg c3RyaWN0bHktY29udHJvbGxlZCBjb2RlYmFzZSwgaXQgbWlnaHQgYmUgYSBwcm9ibGVtLiBBbHNv LCBkb2luZyBgcHJlcGVuZCBNZW1vV2lzZWAgKG9yIGBleHRlbmQgTWVtb2lzdGApIGlzIGFub3Ro ZXIgcG9pbnQgd2hlcmUgdGhlIHF1ZXN0aW9uICJzaG91bGQgSSBpbnRyb2R1Y2UgdGhpcyBkZXBl bmRlbmN5PyIgYXJpc2VzIChpbiBhIHNtYWxsIGNsYXNzIHdpdGggZXhhY3RseSBvbmUgbWV0aG9k IHRvIG1lbW9pemUsIGZvciBleGFtcGxlISkNCg0KIyMgRmVhdHVyZSBwcm9wb3NhbCAmIERlc2ln biBkZWNpc2lvbnMNCg0KSSBwcm9wb3NlIHRvIGludHJvZHVjZSB0aGUgYE1vZHVsZSNtZW1vaXpl ZCgqc3ltYm9scylgIG1ldGhvZCBpbiB0aGUgY29yZSwgaW1wbGVtZW50ZWQgaW4gQy4NCg0KMS4g TmFtZTogYG1lbW9pemVgIGlzIGEgdHlwaWNhbCBuYW1lIHRoYXQgdGhlIGNvbW11bml0eSBpcyB1 c2VkIHRvLiBJIHdhbnQgdGhlIG5ldyBtZXRob2QgdG8gbG9vayB1bmlmb3JtIHdpdGggb3RoZXIg ZXhpc3RpbmcgIm1hY3JvcyIgdGhhdCBoYXZlIHdvcmRpbmcgc3VpdGFibGUgZm9yIHRoZSBwaHJh c2UgInRoaXMgbWV0aG9kIGlzIHt3b3JkfSI6IGBwcml2YXRlYCBvciBgbW9kdWxlX2Z1bmN0aW9u YDsgdGhhdCdzIHdoeSBJIHByb3Bvc2UgdGhlIG5hbWUgYG1lbW9pemVkYA0KMi4gSSBiZWxpZXZl IHRoYXQgdGhlIG1lbW9pc2F0aW9uIHNob3VsZCBiZSBmdWxseSBvcGFxdWU6IG5vdCB2aXNpYmxl IG9uIGAjaW5zcGVjdGAgb3Igc2VyaWFsaXphdGlvbjsgbm8gc2V0dGluZ3Mgb3IgQVBJIHRvIGlu dGVyYWN0IHdpdGggdGhlIGludGVybmFsIHN0YXRlIG9mIG1lbW9pemF0aW9uLg0KMy4gT25seSBh cmd1bWVudC1sZXNzIG1ldGhvZHMgYXJlIG1lbW9pemFibGUsIGBtZW1vaXplIGRlZiBmb28oYW55 LCBhcmdzKWAgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbg0KNC4gKE5vdCBzdXJlIGFib3V0IHRo YXQgb25lKSAiTWVtb2lzZWQiIHN0YXRlIG9mIHRoZSBtZXRob2Qgc2hvdWxkIGJlIGluaGVyaXRh YmxlLiBQcm9iYWJseSB3ZSBtaWdodCBuZWVkIGEgc3ltbWV0cmljIGB1bm1lbW9pemVkIDpmb29g IHRvIG92ZXJ3cml0ZSB0aGF0IGluIGRlc2NlbmRhbnRzLg0KDQojIyMgTm9uLWZlYXR1cmVzDQoN ClRoZXJlIGFyZSBzZXZlcmFsIG1vcmUgZmVhdHVyZXMgdHlwaWNhbGx5IHNlZW4gaW4gbWVtb2l6 YXRpb24gZ2VtcyBjb25zaWRlcmVkIHVuc3VpdGFibGUgZm9yIGNvcmUgZnVuY3Rpb25hbGl0eToN Cg0KKiBObyBhcmd1bWVudHMtZGVwZW5kZW50IG1lbW9pemF0aW9uLiBJIGJlbGlldmUgaXQgaXMg YSAiYnVzaW5lc3MgbG9naWMiIGNvbmNlcm46IGhvdyBleGFjdGx5IHRoZSBhcmd1bWVudHMgc2hv dWxkIGJlIHN0b3JlZCwgY2FjaGUgZ3Jvd3RoIGNvbnRyb2wgKHdpdGggdG9vIG1hbnkgYXJndW1l bnQtcmVzdWx0IHBhaXJzIG1lbW9pemVkKSwgY2FjaGUgY2xlYW51cCwgZXRjLiBUaGlyZC1wYXJ0 eSBsaWJyYXJpZXMgY2FuIGhhbmRsZSB0aGF0Lg0KKiBObyBjYWNoZSBwcmVzZXR0aW5nL3Jlc2V0 dGluZyBBUEkuIElmICJpdCBpcyBtZW1vaXplZCBpbiBnZW5lcmFsLCBidXQgc29tZXRpbWVzIHJl c2V0IiwgaXQgaXMgYWdhaW4gYSBidXNpbmVzcy1sYXllciBjb25jZXJuIGFuZCBzaG91bGRuJ3Qg YmUgc29sdmVkIGJ5IGEgbGFuZ3VhZ2UtbGV2ZWwgZGVjbGFyYXRpb24uIFRoaXJkLXBhcnR5IGxp YnJhcmllcyBjYW4gaGFuZGxlIHRoYXQuDQoqIE5vIGV4dHJhIEFQSSB0byBtZW1vaXplIGNsYXNz IG1ldGhvZHMsIGxpa2Ugd2UgZG9uJ3QgaGF2ZSBhIHNwZWNpZmljIEFQSSBmb3IgbWFraW5nIGNs YXNzIG1ldGhvZHMgcHJpdmF0ZS4NCg0KDQoNCg0KLS0gDQpodHRwczovL2J1Z3MucnVieS1sYW5n Lm9yZy8NCgpVbnN1YnNjcmliZTogPG1haWx0bzpydWJ5LWNvcmUtcmVxdWVzdEBydWJ5LWxhbmcu b3JnP3N1YmplY3Q9dW5zdWJzY3JpYmU+CjxodHRwOi8vbGlzdHMucnVieS1sYW5nLm9yZy9jZ2kt YmluL21haWxtYW4vb3B0aW9ucy9ydWJ5LWNvcmU+Cg==