[#119637] Behavior of raising from rescue blocks when multiple rescue blocks exist — Rodrigo Rosenfeld Rosas via ruby-core <ruby-core@...>
Hello, I couldn't find any documentation about the subject, so I thought
3 messages
2024/10/29
[ruby-core:119459] [Ruby master Feature#17326] Add Kernel#must! to the standard library
From:
"matz (Yukihiro Matsumoto) via ruby-core" <ruby-core@...>
Date:
2024-10-05 06:17:51 UTC
List:
ruby-core #119459
SXNzdWUgIzE3MzI2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWF0eiAoWXVraWhpcm8gTWF0c3Vtb3Rv KS4NCg0KU3RhdHVzIGNoYW5nZWQgZnJvbSBPcGVuIHRvIENsb3NlZA0KDQpJIHN0aWxsIGRvIG5v dCBzZWUgdGhlIG5lZWQgZm9yIHRoaXMgbWV0aG9kLiBBbHRob3VnaCB0aGlzIG1ldGhvZCBjYW4g YmUgdXNlZCBmb3IgdHlwZSBhc3NlcnRpb24sIHRoZXJlIGFyZSBubyBwbGFucyBhdCB0aGlzIHRp bWUgdG8gaW50cm9kdWNlIGZlYXR1cmVzIHJlbGF0ZWQgdG8gdHlwZSBkZWNsYXJhdGlvbnMgYW5k IGFzc2VydGlvbiBpbnRvIHRoZSBsYW5ndWFnZSBjb3JlLg0KDQpNYXR6Lg0KDQoNCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1cmUgIzE3MzI2OiBBZGQgS2Vy bmVsI211c3QhIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5DQpodHRwczovL2J1Z3MucnVieS1sYW5n Lm9yZy9pc3N1ZXMvMTczMjYjY2hhbmdlLTExMDA3OQ0KDQoqIEF1dGhvcjogamV6IChKYWtlIFpp bW1lcm1hbikNCiogU3RhdHVzOiBDbG9zZWQNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCiMgQWJzdHJhY3QNCg0KV2Ugc2hvdWxkIGFkZCBhIG1ldGhvZCBgS2VybmVs I211c3QhYCAobmFtZSBUQkQpIHdoaWNoIHJhaXNlcyBpZiBgc2VsZmAgaXMgYG5pbGAgYW5kIHJl dHVybnMgYHNlbGZgIG90aGVyd2lzZS4NCg0KDQojIEJhY2tncm91bmQNCg0KUnVieSAzIGludHJv ZHVjZXMgdHlwZSBhbm5vdGF0aW9ucyBmb3IgdGhlIHN0YW5kYXJkIGxpYnJhcnkuDQpUeXBlIGNo ZWNrZXJzIGNvbnN1bWUgdGhlc2UgYW5ub3RhdGlvbnMsIGFuZCByZXBvcnQgZXJyb3JzIGZvciB0 eXBlIG1pc21hdGNoZXMuDQpPbmUgb2YgdGhlIG1vc3QgY29tbW9uIGFuZCBtb3N0IHZhbHVhYmxl IHR5cGUgZXJyb3JzIGlzIHdoZXRoZXIgYG5pbGAgaXMgYWxsb3dlZCBhcyBhbiBhcmd1bWVudCBv ciByZXR1cm4gdmFsdWUuDQpTb3JiZXQncyB0eXBlIHN5c3RlbSB0cmFja3MgdGhpcywgYW5kIFJC UyBmaWxlcyBoYXZlIHN5bnRheCBmb3IgYW5ub3RhdGluZyB3aGV0aGVyIGBuaWxgIGlzIGFsbG93 ZWQgb3Igbm90Lg0KDQpTaW5jZSBTb3JiZXQgY2hlY2tzIHByb3BlciB1c2FnZSBvZiBgbmlsYCwg aXQgcmVxdWlyZXMgY29kZSB0aGF0IGxvb2tzIGxpa2UgdGhpczoNCg0KYGBgcnVieQ0KaWYgdGhp bmcubmlsPw0KICByYWlzZSAiVGhlIHRoaW5nIHdhcyBuaWwiDQplbmQNCg0KdGhpbmcuZG9fc29t ZXRoaW5nDQpgYGANCg0KVGhpcyBpcyBnb29kIGJlY2F1c2UgaXQgZm9yY2VzIHRoZSBwcm9ncmFt bWVyIHRvIGFja25vd2xlZGdlIHRoYXQgdGhlIHRoaW5nIG1pZ2h0IGJlIGBuaWxgLCBhbmQgZGVj bGFyZQ0KdGhhdCB0aGV5J2QgcmF0aGVyIHJhaXNlIGFuIGV4Y2VwdGlvbiBpbiB0aGF0IGNhc2Ug dGhhbiBoYW5kbGUgdGhlIGBuaWxgIChvZiBjb3Vyc2UsIHRoZXJlIGFyZSBtYW55IG90aGVyDQp0 aW1lcyB3aGVyZSBgbmlsYCBpcyBib3RoIHBvc3NpYmxlIGFuZCB2YWxpZCwgd2hpY2ggaXMgd2h5 IFNvcmJldCBmb3JjZXMgYXQgbGVhc3QgY29uc2lkZXJpbmcgaW4gYWxsIGNhc2VzKS4NCg0KSXQg aXMgYW5ub3lpbmcgYW5kIHJlcGV0aXRpdmUgdG8gaGF2ZSB0byB3cml0ZSB0aGVzZSBgaWYgLm5p bD9gIGNoZWNrcyBldmVyeXdoZXJlIHRvIGlnbm9yZSB0aGUgdHlwZSBlcnJvciwNCnNvIFNvcmJl dCBwcm92aWRlcyBpdCBhcyBhIGxpYnJhcnkgZnVuY3Rpb24sIGNhbGxlZCBgVC5tdXN0YDoNCg0K YGBgcnVieQ0KVC5tdXN0KHRoaW5nKS5kb19zb21ldGhpbmcNCmBgYA0KDQpTb3JiZXQga25vd3Mg dGhhdCB0aGUgY2FsbCB0byBgVC5tdXN0YCByYWlzZXMgaWYgYHRoaW5nYCBpcyBgbmlsYC4NClRv IG1ha2UgdGhpcyB2ZXJ5IGNvbmNyZXRlLCBoZXJlJ3MgYSBTb3JiZXQgcGxheWdyb3VuZCB3aGVy ZSB5b3UgY2FuIHNlZSB0aGlzIGluIGFjdGlvbjoNCg0KW+KGkiBWaWV3IG9uIHNvcmJldC5ydW5d KGh0dHBzOi8vc29yYmV0LnJ1bi8jJTIzJTIwdHlwZWQlM0ElMjB0cnVlJTBBZXh0ZW5kJTIwVCUz QSUzQVNpZyUwQSUwQWNsYXNzJTIwVGhpbmclMEElMjAlMjBkZWYlMjBkb19zb21ldGhpbmclM0Il MjBlbmQlMEFlbmQlMEElMEFzaWclMjAlN0JwYXJhbXModGhpbmclM0ElMjBULm5pbGFibGUoVGhp bmcpKS52b2lkJTdEJTBBZGVmJTIwZXhhbXBsZTEodGhpbmcpJTBBJTIwJTIwJTIzJTIwZXJyb3Il MkMlMjBtaWdodCUyMGJlJTIwbmlsJTNBJTBBJTIwJTIwdGhpbmcuZG9fc29tZXRoaW5nJTBBZW5k JTBBJTBBc2lnJTIwJTdCcGFyYW1zKHRoaW5nJTNBJTIwVC5uaWxhYmxlKFRoaW5nKSkudm9pZCU3 RCUwQWRlZiUyMGV4YW1wbGUyKHRoaW5nKSUwQSUyMCUyMGlmJTIwdGhpbmcubmlsJTNGJTBBJTIw JTIwJTIwJTIwcmFpc2UlMjAlMjJUaGUlMjB0aGluZyUyMHdhcyUyMG5pbCUyMiUwQSUyMCUyMGVu ZCUwQSUwQSUyMCUyMCUyMyUyMG5vJTIwZXJyb3IlMkMlMjBiZWNhdXNlJTIwaXQncyUyMGFmdGVy JTIwdGhlJTIwJTYwaWYlMjAubmlsJTNGJTYwJTIwY2hlY2slM0ElMEElMjAlMjB0aGluZy5kb19z b21ldGhpbmclMEFlbmQlMEElMEFzaWclMjAlN0JwYXJhbXModGhpbmclM0ElMjBULm5pbGFibGUo VGhpbmcpKS52b2lkJTdEJTBBZGVmJTIwZXhhbXBsZTModGhpbmcpJTBBJTIwJTIwJTIzJTIwbm8l MjBlcnJvciUyQyUyMGJlY2F1c2UlMjBpdCdzJTIwYWZ0ZXIlMjB0aGUlMjAlNjBpZiUyMC5uaWwl M0YlNjAlMjBjaGVjayUzQSUwQSUyMCUyMFQubXVzdCh0aGluZykuZG9fc29tZXRoaW5nJTBBZW5k KQ0KDQpZb3UgY2FuIHJlYWQgbW9yZSBhYm91dCBgVC5tdXN0YCBpbiB0aGUgW1NvcmJldCBkb2N1 bWVudGF0aW9uXShodHRwczovL3NvcmJldC5vcmcvZG9jcy90eXBlLWFzc2VydGlvbnMjdG11c3Qp Lg0KDQoNCiMgUHJvYmxlbQ0KDQpXaGlsZSBgVC5tdXN0YCB3b3JrcywgaXQgaXMgbm90IGlkZWFs IGZvciBhIGNvdXBsZSByZWFzb25zOg0KDQoxLiAgSXQgbGVhZHMgdG8gYSB3ZWlyZCBvdXR3YXJk IHNwaXJhbCBvZiBmbG93IGNvbnRyb2wsIHdoaWNoIGRpc3J1cHRzIG1ldGhvZCBjaGFpbnM6DQoN CiAgICBgYGBydWJ5DQogICAgIyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilJANCiAgICAjIOKUgiAgICAgIOKUjOKUgOKUgOKUgOKUgOKUkCAg ICAg4pSCDQogICAgIyDilrwgICAgICDilrwgICAg4pSCICAgICDilIINCiAgICBULm11c3QoVC5t dXN0KHRhc2spLm1haWxpbmdfcGFyYW1zKS5mZXRjaCgndGVtcGxhdGVfY29udGV4dCcpDQogICAg IyDilIIgICAgICDilIIgICAgICAgICAg4payICAgICAgICAgICAgICAg4payDQogICAgIyDilIIg ICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICAgICAgICAgICAgICDi lIINCiAgICAjIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU mA0KICAgIGBgYA0KDQogICAgY29tcGFyZSB0aGF0IGNvbnRyb2wgZmxvdyB3aXRoIHRoaXM6DQoN CiAgICBgYGBydWJ5DQogICAgIyDilIzilIDilIDilIDilIDilJDilIzilIDilIDilIDilIDilJDi lIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJDilIzilIDilIDilIDi lIDilJANCiAgICAjIOKUgiAgICDilrzilIIgICAg4pa84pSCICAgICAgICAgICAgIOKWvOKUgiAg ICDilrwNCiAgICAgIHRhc2subXVzdCEubWFpbGluZ19wYXJhbXMubXVzdCEuZmV0Y2goJ3RlbXBs YXRlX2NvbnRleHQnKQ0KICAgIGBgYA0KDQoyLiAgSXQgaXMgbm90IGEgbWV0aG9kLCBzbyB5b3Ug Y2FuJ3QgYG1hcGAgaXQgb3ZlciBhIGxpc3QgdXNpbmcgYFN5bWJvbCN0b19wcm9jYC4gSW5zdGVh ZCwgeW91IGhhdmUgdG8gZXhwYW5kIHRoZSBibG9jazoNCg0KICAgIGBgYHJ1YnkNCiAgICBhcnJh eV9vZl9pbnRlZ2VycyA9IGFycmF5X29mX25pbGFibGVfaW50ZWdlcnMubWFwIHt8eHwgVC5tdXN0 KHgpIH0NCiAgICBgYGANCg0KICAgIENvbXBhcmUgdGhhdCB3aXRoIHRoaXM6DQoNCiAgICBgYGBy dWJ5DQogICAgYXJyYXlfb2ZfaW50ZWdlcnMgPSBhcnJheV9vZl9uaWxhYmxlX2ludGVnZXJzLm1h cCgmOm11c3QhKQ0KICAgIGBgYA0KDQozLiAgSXQgaXMgaW4gYSBTb3JiZXQtc3BlY2lmaWMgZ2Vt LiBXZSBkbyBub3QgaW50ZW5kIGZvciBTb3JiZXQgdG8gYmUgdGhlIG9ubHkgdHlwZSBjaGVja2Vy Lg0KICAgIEl0IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBzdWNoIGEgbWV0aG9kIGluIHRoZSBSdWJ5 IHN0YW5kYXJkIGxpYnJhcnkgc28gdGhhdCBpdCBjYW4gYmUgc2hhcmVkIGJ5IGFsbCB0eXBlIGNo ZWNrZXJzLg0KDQo0LiAgVGhpcyBtZXRob2QgY2FuIG1ha2UgUnVieSBjb2RlYmFzZXMgdGhhdCAq KmRvbid0KiogdXNlIHR5cGUgY2hlY2tlcnMgbW9yZSByb2J1c3QhDQogICAgYEtlcm5lbCNtdXN0 IWAgY291bGQgYmUgYW4gZWFzeSB3YXkgdG8gYXNzZXJ0IGludmFyaWFudHMgZWFybHkuDQogICAg RmFpbGluZyBlYXJseSBtYWtlcyBpdCBtb3JlIGxpa2VseSB0aGF0IGEgdGVzdCB3aWxsIGZhaWws IHJhdGhlciB0aGFuIGdldHRpbmcgYFR5cGVFcnJvcmAncyBhbmQgYE5vTWV0aG9kRXJyb3JgJ3Mg aW4gcHJvZHVjdGlvbi4NCiAgICBUaGlzIG1ha2VzIGFsbCBSdWJ5IGNvZGUgYmV0dGVyLCBub3Qg anVzdCB0aGUgUnVieSBjb2RlIHVzaW5nIHR5cGVzLg0KDQoNCiMgUHJvcG9zYWwNCg0KV2Ugc2hv dWxkIGV4dGVuZCB0aGUgUnVieSBzdGFuZGFyZCBsaWJyYXJ5IHdpdGggc29tZXRoaW5nIGxpa2Ug dGhpczo6DQoNCmBgYHJ1YnkNCm1vZHVsZSBLZXJuZWwNCiAgZGVmIG11c3QhOyBzZWxmOyBlbmQN CmVuZA0KDQpjbGFzcyBOaWxDbGFzcw0KICBkZWYgbXVzdCENCiAgICByYWlzZSBUeXBlRXJyb3Iu bmV3KCJuaWwubXVzdCEiKQ0KICBlbmQNCmVuZA0KYGBgDQoNClRoZXNlIG1ldGhvZHMgd291bGQg Z2V0IHR5cGUgYW5ub3RhdGlvbnMgdGhhdCBsb29rIGxpa2UgdGhpczoNCih1c2luZyBTb3JiZXQn cyBSQkkgc3ludGF4LCBiZWNhdXNlIEkgZG9uJ3Qga25vdyBSQlMgd2VsbCB5ZXQpDQoNCmBgYHJ1 YnkNCm1vZHVsZSBLZXJuZWwNCiAgc2lnIHtyZXR1cm5zKFQuc2VsZl90eXBlKX0NCiAgZGVmIG11 c3QhOyBlbmQNCmVuZA0KDQpjbGFzcyBOaWxDbGFzcw0KICBzaWcge3JldHVybnMoVC5ub3JldHVy bil9DQogIGRlZiBtdXN0ITsgZW5kDQplbmQNCmBgYA0KDQpXaGF0IHRoZXNlIGFubm90YXRpb25z IHNheToNCg0KLSBJbiBgS2VybmVsI211c3QhYCwgdGhlIHJldHVybiB2YWx1ZSBpcyBgVC5zZWxm X3R5cGVgLCBvciAid2hhdGV2ZXIgdGhlIHR5cGUgb2YgdGhlIHJlY2VpdmVyIHdhcy4iDQogIFRo YXQgbWVhbnMgdGhhdCBgMC5tdXN0IWAgd2lsbCBoYXZlIHR5cGUgYEludGVnZXJgLCBgIiIubXVz dCFgIHdpbGwgaGF2ZSB0eXBlIGBTdHJpbmdgLCBldGMuDQoNCi0gSW4gYE5pbENsYXNzI211c3Qh YCwgdGhlcmUgaXMgYW4gb3ZlcnJpZGUgb2YgYEtlcm5lbCNtdXN0IWAgd2l0aCByZXR1cm4gdHlw ZSBgVC5ub3JldHVybmAuDQogIFRoaXMgaXMgYSBmYW5jeSB0eXBlIHRoYXQgc2F5cyAidGhpcyBj b2RlIGVpdGhlciBpbmZpbml0ZWx5IGxvb3BzIG9yIHJhaXNlcyBhbiBleGNlcHRpb24uIg0KICBU aGlzIGlzIHRoZSBuYW1lIGZvciBTb3JiZXQncyBbYm90dG9tIHR5cGVdKGh0dHBzOi8vZW4ud2lr aXBlZGlhLm9yZy93aWtpL0JvdHRvbV90eXBlKSwgaWYgeW91DQogIGFyZSBmYW1pbGlhciB3aXRo IHRoYXQgdGVybWlub2xvZ3kuDQoNCkhlcmUgaXMgYSBTb3JiZXQgZXhhbXBsZSB3aGVyZSB5b3Ug Y2FuIHNlZSBob3cgdGhlc2UgYW5ub3RhdGlvbnMgYmVoYXZlOg0KDQpb4oaSIFZpZXcgb24gc29y YmV0LnJ1bl0oaHR0cHM6Ly9zb3JiZXQucnVuLyMlMjMlMjB0eXBlZCUzQSUyMHRydWUlMEElMEFt b2R1bGUlMjBLZXJuZWwlMEElMjAlMjBUJTNBJTNBU2lnJTNBJTNBV2l0aG91dFJ1bnRpbWUuc2ln JTIwJTdCcmV0dXJucyhULnNlbGZfdHlwZSklN0QlMEElMjAlMjBkZWYlMjBtdXN0ISUzQiUyMHNl bGYlM0IlMjBlbmQlMEFlbmQlMEElMEFjbGFzcyUyME5pbENsYXNzJTBBJTIwJTIwVCUzQSUzQVNp ZyUzQSUzQVdpdGhvdXRSdW50aW1lLnNpZyUyMCU3QnJldHVybnMoVC5ub3JldHVybiklN0QlMEEl MjAlMjBkZWYlMjBtdXN0ISUwQSUyMCUyMCUyMCUyMHJhaXNlJTIwVHlwZUVycm9yLm5ldyglMjJu aWwubXVzdCElMjIpJTBBJTIwJTIwZW5kJTBBZW5kJTBBJTBBeHMlMjAlM0QlMjBUJTNBJTNBQXJy YXklNUJJbnRlZ2VyJTVELm5ldyglNUIwJTVEKSUwQVQucmV2ZWFsX3R5cGUoeHMuZmlyc3QpJTIw JTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwVC5uaWxhYmxlKEludGVnZXIpJTBBVC5yZXZlYWxfdHlw ZSh4cy5maXJzdC5tdXN0ISklMjAlMjMlMjBJbnRlZ2VyJTBBJTBBeXMlMjAlM0QlMjBUJTNBJTNB QXJyYXklNUJULm5pbGFibGUoSW50ZWdlciklNUQubmV3KCU1QjAlMkMlMjBuaWwlMkMlMjAxJTJD JTIwbmlsJTJDJTIwMiU1RCklMEFULnJldmVhbF90eXBlKHlzKSUyMCUyMCUyMCUyMCUyMCUyMCUy MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFQlM0ElM0FBcnJheSU1QlQubmlsYWJsZShJbnRl Z2VyKSU1RCUwQVQucmV2ZWFsX3R5cGUoeXMubWFwKCUyNiUzQW11c3QhKSklMjAlMjMlMjBUJTNB JTNBQXJyYXklNUJJbnRlZ2VyJTVEKQ0KDQojIEFsdGVybmF0aXZlcyBjb25zaWRlcmVkDQoNClRo ZXJlIHdhcyBzb21lIGRpc2N1c3Npb24gb2YgdGhpcyBmZWF0dXJlIGF0IHRoZSBGZWIgMjAyMCBS dWJ5IFR5cGVzIGRpc2N1c3Npb246DQoNClN1bW1hcml6aW5nOg0KDQotIFNvcmJldCB0ZWFtIGZy ZXF1ZW50bHkgcmVjb21tZW5kcyBwZW9wbGUgdG8gdXNlIGB4cy5mZXRjaCgwKWAgaW5zdGVhZCBv ZiBgVC5tdXN0KHhzWzBdKWANCiAgb24gYEFycmF5YCdzIGFuZCBgSGFzaGAncyBiZWNhdXNlIGl0 IGNoYWlucyBhbmQgcmVhZHMgYmV0dGVyLg0KICBgLmZldGNoYCBub3QgYXZhaWxhYmxlIG9uIG90 aGVyIGNsYXNzZXMuDQoNCi0gSXQncyBpbnRlbnRpb25hbCB0aGF0IGBULm11c3RgIHJlcXVpcmVz IGFzIG1hbnkgY2hhcmFjdGVycyBhcyBpdCBkb2VzLg0KICBNYWtpbmcgaXQgc2xpZ2h0bHkgYW5u b3lpbmcgdG8gdHlwZSBlbmNvdXJhZ2VzIGRldmVsb3BlcnMgdG8gcmVmYWN0b3IgdGhlaXIgY29k ZSBzbyB0aGF0IGBuaWxgIG5ldmVyIG9jY3Vycy4NCg0KLSBUaGVyZSB3YXMgYSBwcm9wb3NhbCB0 byBpbnRyb2R1Y2UgbmV3IHN5bnRheCBsaWtlIGB0aGluZy4hIWAuIFRoaXMgaXMgY3VycmVudGx5 IGEgc3ludGF4IGVycm9yLg0KDQogICoqUmVidXR0YWwqKjogVGhlcmUgaXMgYnVyZGVuIHRvIGlu dHJvZHVjaW5nIG5ldyBzeW50YXguIFRvb2xzIGxpa2UgUnVib2NvcCwgU29yYmV0LCBhbmQgc3lu dGF4IGhpZ2hsaWdodGluZw0KICBwbHVnaW5zIGhhdmUgdG8gYmUgdXBkYXRlZC4gQWxzbzogaXQg aXMgaGFyZCB0byBzZWFyY2ggZm9yIG9uIEdvb2dsZSAoYXMgYSBuZXcgUnVieSBkZXZlbG9wZXIp LiBBbHNvOiBpdA0KICBpcyB2ZXJ5IHNob3J04oCUaGF2aW5nIHNvbWV0aGluZyBzbGlnaHRseSBz aG9ydGVyIG1ha2VzIHBlb3BsZSB0aGluayBhYm91dCB3aGV0aGVyIHRoZXkgd2FudCB0byB0eXBl IGl0IG91dA0KICBpbnN0ZWFkIG9mIGNoYW5naW5nIHRoZSBjb2RlIHNvIHRoYXQgYG5pbGAgY2Fu J3Qgb2NjdXIuDQoNCkFub3RoZXIgYWx0ZXJuYXRpdmUgd291bGQgYmUgdG8gZGlzbWlzcyB0aGlz IGFzICJub3QgdXNlZnVsIC8gY29tbW9uIGVub3VnaCIuIEkgZG9uJ3QgdGhpbmsgdGhhdCdzIHRy dWUuDQpIZXJlIGFyZSBzb21lIHN0YXRpc3RpY3MgZnJvbSBTdHJpcGUncyBSdWJ5IG1vbm9saXRo ICh+MTAgbWlsbGlvbiBsaW5lcyBvZiBjb2RlKToNCg0KfCBtZXRob29kIHwgcGVyY2VudGFnZSBv ZiBmaWxlcyBtZW50aW9uaW5nIG1ldGhvZCB8IG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiBtZXRo b2QgfA0KfCAtLS0gfCAtLS0gfCAtLS0gfA0KfCBgLm5pbD9gIHwgMTYuNjklIHwgMzEzNDAgfA0K fCBgVC5tdXN0YCB8IDIzLjg5JSB8IDc0NzQyIHwNCg0KRnJvbSB0aGlzLCB3ZSBzZWUgdGhhdA0K DQotIGBULm11c3RgIGlzIGluIDEuNDN4IG1vcmUgZmlsZXMgdGhhbiBgLm5pbD9gDQotIGBULm11 c3RgIG9jY3VycyAyLjM4eCBtb3JlIG9mdGVuIHRoYW4gYC5uaWw/YA0KDQoNCiMgTmFtaW5nDQoN CkkgcHJlZmVyIGBtdXN0IWAgYmVjYXVzZSBpdCBpcyB3aGF0IHRoZSBtZXRob2QgaW4gU29yYmV0 IGlzIGFscmVhZHkgY2FsbGVkLg0KDQpJIGFtIG9wZW4gdG8gbmFtaW5nIHN1Z2dlc3Rpb25zLiBQ bGVhc2UgcHJvdmlkZSByZWFzb25pbmcuDQoNCg0KIyBEaXNjdXNzaW9uDQoNCkluIHRoZSBhYm92 ZSBleGFtcGxlLCBJIHVzZWQgYFQubXVzdGAgdHdpY2UuIEFuIGFsdGVybmF0aXZlIHdheSB0byBo YXZlIHdyaXR0ZW4gdGhhdCB3b3VsZCBoYXZlIGJlZW4gdXNpbmcgc2F2ZSBuYXZpZ2F0aW9uOg0K DQpgYGBydWJ5DQpULm11c3QodGFzayYubWFpbGluZ19wYXJhbXMpLmZldGNoKCd0ZW1wbGF0ZV9j b250ZXh0JykNCmBgYA0KDQpUaGlzIHdvcmtzIGFzIHdlbGwuIFRoZSBwcm9wb3NlZCBgLm11c3Qh YCBtZXRob2Qgd29ya3MganVzdCBhcyB3ZWxsIHdoZW4gY2hhaW5pbmcgbWV0aG9kcyB3aXRoIHNh ZmUgbmF2aWdhdGlvbjoNCg0KYGBgcnVieQ0KdGFzayYubWFpbGluZ19wYXJhbXMubXVzdCEuZmV0 Y2goJ3RlbXBsYXRlX2NvbnRleHQnKQ0KYGBgDQoNCkhvd2V2ZXIsIHRoZXJlIGlzIHN0aWxsIG1l cml0IGluIHVzaW5nIGBULm11c3RgIChvciBgLm11c3QhYCkgdHdpY2XigJRpdCBjYWxscyBvdXQg dGhhdCB0aGUgcHJvZ3JhbW1lcg0KaW50ZW5kZWQgbmVpdGhlciBsb2NhdGlvbiB0byBiZSBgbmls YC4gSW4gZmFjdCwgaWYgdGhpcyBtZXRob2QgaGFkIGJlZW4gY2hhaW5lZCBhY3Jvc3MgbXVsdGlw bGUgbGluZXMsDQp0aGUgYmFja3RyYWNlIHdvdWxkIGluY2x1ZGUgbGluZSBudW1iZXJzIHNheWlu ZyBzcGVjaWZpY2FsbHkgKip3aGljaCoqIGAubXVzdCFgIGZhaWxlZDoNCg0KDQpgYGBydWJ5DQp0 YXNrLm11c3QhDQogIC5tYWlsaW5nX3BhcmFtcy5tdXN0IQ0KICAuZmV0Y2goJ3RlbXBsYXRlX2Nv bnRleHQnKQ0KYGBgDQoNCg0KDQoNCi0tIA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvDQog X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogcnVieS1jb3Jl IG1haWxpbmcgbGlzdCAtLSBydWJ5LWNvcmVAbWwucnVieS1sYW5nLm9yZwogVG8gdW5zdWJzY3Jp YmUgc2VuZCBhbiBlbWFpbCB0byBydWJ5LWNvcmUtbGVhdmVAbWwucnVieS1sYW5nLm9yZwogcnVi eS1jb3JlIGluZm8gLS0gaHR0cHM6Ly9tbC5ydWJ5LWxhbmcub3JnL21haWxtYW4zL2xpc3RzL3J1 YnktY29yZS5tbC5ydWJ5LWxhbmcub3JnLw==