From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS4713 221.184.0.0/13 X-Spam-Status: No, score=-3.0 required=3.0 tests=AWL,BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_BL_SPAMCOP_NET, RCVD_IN_DNSWL_MED,SPF_HELO_PASS,SPF_PASS,UNPARSEABLE_RELAY shortcircuit=no autolearn=no autolearn_force=no version=3.4.2 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id 5E5D61F910 for ; Wed, 16 Nov 2022 07:37:46 +0000 (UTC) Authentication-Results: dcvr.yhbt.net; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=ruby-lang.org header.i=@ruby-lang.org header.b="RK/W7z92"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id A838E120FD6; Wed, 16 Nov 2022 16:37:41 +0900 (JST) Received: from xtrwkhkc.outbound-mail.sendgrid.net (xtrwkhkc.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id 32F48120FAF for ; Wed, 16 Nov 2022 16:37:37 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ruby-lang.org; h=from:references:subject:mime-version:content-type: content-transfer-encoding:list-id:to:cc; s=s1; bh=uu2gKHUtNuQb7aVYifMt9N1oMZgliAdfkYW8LsfTG98=; b=RK/W7z92xW0ZBYLBVIKmaml/H8OdSfgSqvjr7jRJ1cm06WS6oVhFQ2YWaPo2LRjzNnl6 XpGY6BL1Vnjm42odC5QeaWaws7l8o8glB9WfwRld42yDzWHOXTAF+TIx5taYPqkZRCy0Qr UTkh5cpeuFPKP7WUHilg6AVT4b6ZZVYc61eGLqfXY1wuovqeATh60qhB4w3DpAVt8BGxp1 aPi8wtkfV8nGHloB30bjh0zugBUoPqkiSuV6XJwQTjMFxxotqsCnBQ/GqsStg7gvEVPWLP G0T7CImzP6gi690NViRw8XqFQwphsS1nET8JHWULGyfU8RpU+6jE3QJi1zOU/YPA== Received: by filterdrecv-6df5cf8469-jhk7j with SMTP id filterdrecv-6df5cf8469-jhk7j-1-63749336-14 2022-11-16 07:37:26.862415815 +0000 UTC m=+474634.802426821 Received: from herokuapp.com (unknown) by geopod-ismtpd-4-0 (SG) with ESMTP id S7CUIR4RRYSPj2x0l-MJvw for ; Wed, 16 Nov 2022 07:37:26.746 +0000 (UTC) Date: Wed, 16 Nov 2022 07:37:26 +0000 (UTC) From: "byroot (Jean Boussier)" Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 19104 X-Redmine-Issue-Author: make_now_just X-Redmine-Sender: byroot X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-Redmine-MailingListIntegration-Message-Ids: 87226 X-SG-EID: =?us-ascii?Q?Dq8GNIcVqP8cs5uR+EIAabfg3LE9XdC6dZ5KYNrMpf6VzBWG6HqArcu5raQjXL?= =?us-ascii?Q?IGTFdxKHUt7++67+KD54pNYXheirMcsUIf3sdgF?= =?us-ascii?Q?Riq06jzXttYNWdc66U63DAkWTuY5NROV=2FQIOCfu?= =?us-ascii?Q?ERxLVReqFHUSN66dCrzsONKo2qh4beC11oT4MUQ?= =?us-ascii?Q?F9VUYI6GJ33NXBOex+nO0r7zMwBf4CjJhx22UZU?= =?us-ascii?Q?B1GWTfVqKfZ72TC8gSNRofI=2Fl2vnvGSlkn50RX+?= =?us-ascii?Q?0aXlfE6UJ5baXQACYOX+g=3D=3D?= To: ruby-core@neon.ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 110773 Subject: [ruby-core:110773] [Ruby master Feature#19104] Introduce the cache-based optimization for Regexp matching X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Reply-To: Ruby developers Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" SXNzdWUgIzE5MTA0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgYnlyb290IChKZWFuIEJvdXNzaWVyKS4N Cg0KDQpJIGJlbGlldmUgdGhpcyBjaGFuZ2UgbWF5IGhhdmUgaW50cm9kdWNlZCBhIHdlaXJkIGJ1 ZyB3aGljaCBpcyBjYXVzaW5nIHRoZSBgc2Fzc2AgZ2VtIHRvIGZhaWwgaW4gdW5wcmVkaWN0YWJs ZSB3YXlzLiBJIHdhcyBhYmxlIHRvIHByb2R1Y2UgYSBzaG9ydCByZXByb2R1Y3Rpb24gc2NyaXB0 Og0KDQpgYGBydWJ5DQptb2R1bGUgU2Fzcw0KICBIICAgICAgICA9IC9bMC05YS1mQS1GXS8NCiAg VU5JQ09ERSAgPSAvXFwje0h9ezEsNn1bIFx0XHJcblxmXT8vDQogIHMgPSAnXHV7ODB9LVx1e0Q3 RkZ9XHV7RTAwMH0tXHV7RkZGRH1cdXsxMDAwMH0tXHV7MTBGRkZGfScNCiAgTk9OQVNDSUkgPSAv WyN7c31dLw0KICBFU0NBUEUgICA9IC8je1VOSUNPREV9fFxcW14wLTlhLWZBLUZcclxuXGZdLw0K ICBOTVNUQVJUICA9IC9bX2EtekEtWl18I3tOT05BU0NJSX18I3tFU0NBUEV9Lw0KICBOTUNIQVIg ICA9IC9bYS16QS1aMC05Xy1dfCN7Tk9OQVNDSUl9fCN7RVNDQVBFfS8NCiAgVkFMSURfVU5JVCA9 IC8je05NU1RBUlR9I3tOTUNIQVJ9fCUqLw0KDQogIDEwMF8wMDAudGltZXMgZG8NCiAgICBwcmlu dCAnLicNCiAgICByYWlzZSAiV1RGPyIgaWYgIiUiICF+IFZBTElEX1VOSVQNCiAgZW5kDQplbmQN CmBgYA0KDQpUaGUgYWJvdmUgcmVnZXhwIHdpbGwgc29tZXRpbWUgbm90IG1hdGNoIGFmdGVyIGEg cmFuZG9tIG51bWJlciBvZiBpdGVyYXRpb25zLg0KDQpjYyBAbWFtZSANCg0KLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRmVhdHVyZSAjMTkxMDQ6IEludHJvZHVjZSB0 aGUgY2FjaGUtYmFzZWQgb3B0aW1pemF0aW9uIGZvciBSZWdleHAgbWF0Y2hpbmcNCmh0dHBzOi8v YnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xOTEwNCNjaGFuZ2UtMTAwMTE4DQoNCiogQXV0aG9y OiBtYWtlX25vd19qdXN0IChLaXRzdW5lIFRTVVlVU0FUTykNCiogU3RhdHVzOiBPcGVuDQoqIFBy aW9yaXR5OiBOb3JtYWwNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N ClJlZ2V4cCBtYXRjaGluZyBjYXVzZXMgYSB0aW1lLWNvbXBsZXhpdHkgZXhwbG9zaW9uIHByb2Js ZW0gYXMga25vd24gYXMgUmVEb1MgKFtodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZURv U10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmVEb1MpKS4gUmVEb1MgaGFzIGJlY29t ZSBzZXJpb3VzIHZ1bG5lcmFiaWxpdHkgaW4gbWFueSBwbGFjZXMgaW4gcmVjZW50IHllYXJzLCBh bmQgUnVieSBpcyBubyBleGNlcHRpb24uIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGluY29tcGxldGUg bGlzdCBvZiBzdWNoIHZ1bG5lcmFiaWxpdHkgcmVwb3J0czoNCg0KLSBbaHR0cHM6Ly9naXRodWIu Y29tL3NpbmF0cmEvc2luYXRyYS9wdWxsLzE4MjNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5hdHJh L3NpbmF0cmEvcHVsbC8xODIzKQ0KLSBbaHR0cHM6Ly9naXRodWIuY29tL2xvc3Rpc2xhbmQvZmFy YWRheS1uZXRfaHR0cC9wdWxsLzI3XShodHRwczovL2dpdGh1Yi5jb20vbG9zdGlzbGFuZC9mYXJh ZGF5LW5ldF9odHRwL3B1bGwvMjcpDQoNClRoZXNlIHJlcG9ydHMgaGF2ZSBiZWVuIGFkZHJlc3Nl ZCBieSBmaXhpbmcgdGhlIGxpYnJhcnkvc29mdHdhcmUgaW1wbGVtZW50YXRpb24uIEJ1dCwgaWYg dGhlIGxhbmd1YWdl4oCZcyBSZWdleHAgaW1wbGVtZW50YXRpb24gYmVjb21lcyBzYWZlLCB0aGUg dnVsbmVyYWJpbGl0eSBpcyBmdW5kYW1lbnRhbGx5IGFyY2hpdmVkLg0KDQpGb3IgYSBmZXcgbW9u dGhzLCBSdWJ5IGhhcyBpbXBsZW1lbnRlZCBhIFJlZ2V4cCBtYXRjaGluZyB0aW1lb3V0IChbaHR0 cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE3ODM3XShodHRwczovL2J1Z3MucnVieS1s YW5nLm9yZy9pc3N1ZXMvMTc4MzcpKS4gSXQgaXMgb25lIG9mIHRoZSB1c2VmdWwgbWV0aG9kcyBm b3IgcHJldmVudGluZyBSZURvUyB2dWxuZXJhYmlsaXR5LCBidXQgaXQgaXMgYSBwcm9ibGVtIHRo YXQgc2V0dGluZyBhIGNvcnJlY3QgdGltZW91dCB2YWx1ZSBpcyBoYXJkLiBUaGlzIHZhbHVlIGlz IGRlcGVuZGluZyBvbiBpbnB1dCBsZW5ndGgsIGVudmlyb25tZW50LCBuZXR3b3JrIHN0YXR1cywg c3lzdGVtIGxvYWQsIGV0Yy4gV2hlbiB0aGUgdmFsdWUgaXMgdG9vIHNtYWxsLCBhIHN5c3RlbSBt YXkgYmUgYnJva2VuLCBidXQgd2hlbiB0aGUgdmFsdWUgaXMgdG9vIGxhcmdlLCBpdCBpcyBub3Qg dXNlZnVsIGZvciBwcmV2ZW50aW5nIFJlRG9TLg0KDQpUaGVyZWZvcmUsIGFzIGEgbmV3IHdheSB0 byBwcmV2ZW50IFJlRG9TLCB3ZSBwcm9wb3NlIHRvIGludHJvZHVjZSBjYWNoZS1iYXNlZCBvcHRp bWl6YXRpb24gZm9yIFJlZ2V4cCBtYXRjaGluZy4gQXMgQ1MgZnVuZGFtZW50YWwga25vd2xlZGdl LCBhdXRvbWF0b24gbWF0Y2hpbmcgcmVzdWx0IGRlcGVuZHMgb24gdGhlIHBvc2l0aW9uIG9mIGlu cHV0IGFuZCBzdGF0ZS4gSW4gYWRkaXRpb24sIG1hdGNoaW5nIHRpbWUgZXhwbG9zaW9uIGlzIGNh dXNlZCBmb3IgcmVwZWF0aW5nIHRvIGFycml2ZSBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhbmQgc3Rh dGUgbWFueSB0aW1lcy4gVGhlbiwgUmVEb1MgY2FuIGJlIHByZXZlbnRlZCB3aGVuIHBhaXJzIG9m IHBvc2l0aW9uLCBhbmQgc3RhdGUgYXJyaXZlZCBvbmNlIGlzIHJlY29yZGVkIChjYWNoZWQpLiBJ biBmYWN0LCB1bmRlciBzdWNoIGFuIG9wdGltaXphdGlvbiwgaXQgaXMga25vd24gYXMgdGhlIG1h dGNoaW5nIHRpbWUgY29tcGxleGl0eSBpcyBsaW5lYXIgYWdhaW5zdCBpbnB1dCBzaXplIFsxXS4N Cg0KWzFdOiBEYXZpcywgSmFtZXMgQy4sIEZyYW5jaXNjbyBTZXJ2YW50LCBhbmQgRG9uZ3lvb24g TGVlLiAiVXNpbmcgc2VsZWN0aXZlIG1lbW9pemF0aW9uIHRvIGRlZmVhdCByZWd1bGFyIGV4cHJl c3Npb24gZGVuaWFsIG9mIHNlcnZpY2UgKFJlRG9TKS4iICoyMDIxIElFRUUgc3ltcG9zaXVtIG9u IHNlY3VyaXR5IGFuZCBwcml2YWN5IChTUCkqLiBJRUVFLCAyMDIxLiBbaHR0cHM6Ly93d3cuY29t cHV0ZXIub3JnL2NzZGwvcHJvY2VlZGluZ3MtYXJ0aWNsZS9zcC8yMDIxLzg5MzQwMGE1NDMvMW9h azk4OFRodk9dKGh0dHBzOi8vd3d3LmNvbXB1dGVyLm9yZy9jc2RsL3Byb2NlZWRpbmdzLWFydGlj bGUvc3AvMjAyMS84OTM0MDBhNTQzLzFvYWs5ODhUaHZPKQ0KDQpTZWUgdGhlIGZvbGxvd2luZyBl eGFtcGxlLg0KDQpgYGBiYXNoDQokIHJ1YnkgLS12ZXJzaW9uDQpydWJ5IDMuMi4wcHJldmlldzIg KDIwMjItMDktMDkgbWFzdGVyIDM1Y2ZjOWEzYmIpIFthcm02NC1kYXJ3aW4yMV0NCg0KJCB0aW1l IHJ1YnkgLWUgJy9eKGF8YSkqJC8gPX4gImEiICogMjggKyAiYiInDQpydWJ5IC1lICcvXihhfGEp KiQvID1+ICJhIiAqIDI4ICsgImIiJyAgOC40OXMgdXNlciAwLjA0cyBzeXN0ZW0gOTglIGNwdSA4 LjY2MyB0b3RhbA0KDQokIC4vbWluaXJ1YnkgLS12ZXJzaW9uDQpydWJ5IDMuMi4wZGV2ICgyMDIy LTEwLTI3VDEzOjM5OjU2WiByZWNhY2hlIGJjNTliN2NjMWUpIFthcm02NC1kYXJ3aW4yMV0NCg0K JCB0aW1lIC4vbWluaXJ1YnkgLWUgJy9eKGF8YSkqJC8gPX4gImEiICogMjggKyAiYiInDQouL21p bmlydWJ5IC1lICcvXihhfGEpKiQvID1+ICJhIiAqIDI4ICsgImIiJyAgMC4wMXMgdXNlciAwLjAx cyBzeXN0ZW0gOCUgY3B1IDAuMzEwIHRvdGFsDQpgYGANCg0KSW4gdGhpcyBleGFtcGxlLCB1c2lu ZyBydWJ5IHYzLjIuMC1wcmV2aWV3MiwgbWF0Y2hpbmcgYC9eKGF8YSkqJC9gIGFnYWluc3QgYCJh IiAqIDI4ICsgImIiYCB0YWtlcyA4LjYgc2Vjb25kcyBiZWNhdXNlIG1hdGNoaW5nIHRpbWUgb2Yg dGhpcyBSZWdleHAgdGFrZXMgZXhwb25lbnRpYWxseSBhZ2FpbnN0IGAiYSIgKiBOICsgImIiYCBm b3JtIHN0cmluZy4gQnV0LCB1c2luZyB0aGUgcGF0Y2hlZCB2ZXJzaW9uIG9mIHJ1YnksIGl0IHRh a2VzIDAuMDEgc2Vjb25kcy4gSW5jcmVkaWJseSBpdCBpcyA4NjAgdGltZXMgZmFzdGVyIGJlY2F1 c2UgbWF0Y2hpbmcgaXMgZG9uZSBpbiBsaW5lYXIgdGltZS4NCg0KQnkgdGhpcyBvcHRpbWl6YXRp b24sIHRoZSBtYXRjaGluZyB0aW1lIGlzIGxpbmVhciB0byB0aGUgaW5wdXQgc2l6ZS4gSXQgc291 bmRzIHNlY3VyZSBhbmQgZ29vZC4gVW5mb3J0dW5hdGVseSwgd2hlbiBSZWdleHAgdXNlcyBzb21l IGV4dGVuc2lvbiAoZS5nLiBsb29rLWFyb3VuZCwgYmFjay1yZWZlcmVuY2UsIHN1YmV4cHJlc3Np b24gY2FsbCksIHRoZSBvcHRpbWl6YXRpb24gaXMgbm90IGFwcGxpZWQuIEFsc28sIHRoZSBvcHRp bWl6YXRpb24gbmVlZHMgYSBiaXQgbW9yZSBtZW1vcnkgZm9yIGNhY2hpbmcuIEhvd2V2ZXIsIHdl IGhhdmUgYWxyZWFkeSBpbnZlc3RpZ2F0ZWQgdGhhdCB0aGV5IGFyZSBub3Qgc28gdGhlIG1ham9y IHByb2JsZW1zIChTZWUgdGhlICJMaW1pdGF0aW9uIiBzZWN0aW9uKS4NCg0KIyMgSW1wbGVtZW50 YXRpb24NCg0KVGhlIGJhc2ljIGNhY2hlIGltcGxlbWVudGF0aW9uIGlzIGNvbXBsZXRlIGF0IHRo aXMgdGltZSBhbmQgY2FuIGJlIGZvdW5kIGluIHRoZSBmb2xsb3dpbmcgUHVsbCBSZXF1ZXN0Lg0K DQpbaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzY0ODZdKGh0dHBzOi8vZ2l0aHVi LmNvbS9ydWJ5L3J1YnkvcHVsbC82NDg2KQ0KDQpTb21lIHRlc3RzIHNlZW0gdG8gYmUgZmFpbGVk LCBidXQgaXQgaXMgbm8gcHJvYmxlbSEgQmVjYXVzZSB0aGUgZmFpbGVkIHRlc3RzIGFyZSBmb3Ig UmVnZXhwIHRpbWVvdXQsIG9wdGltaXphdGlvbiB3b3JrcyBjb3JyZWN0bHkgYW5kIHNvIHRoZXkg ZmFpbGVkIGFzIGV4cGVjdGVkLiBPZiBjb3Vyc2UsIHdlIG5lZWQgdG8gZml4IHRoZXNlIHRlc3Rz IGJlZm9yZSBtZXJnaW5nLg0KDQpJbXBsZW1lbnRhdGlvbiBub3RlczoNCg0KLSBBIG51bGwtY2hl Y2sgb24gbG9vcCBjYXVzZXMgbm9uLWxpbmVhciBiZWhhdmlvciwgc28gdGhlIGZpZWxkIHRvIGlu ZGV4IHRoZSBsYXRlc3QgbnVsbC1jaGVjayBpdGVtIG9uIHRoZSBzdGFjayBpcyBhZGRlZCB0byBP bmlnU3RhY2tUeXBlLiAoW2h0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NDg2L2Zp bGVzI2RpZmYtNDM0NzQ2MGUzNzljZDk3MGJhMGI4OGI0YWNiMjE1ZWE2MGNiYWUzMDgxMjQ2NzVk ZTg4MTFlZWQzNzczNjdhYVI4MzFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82 NDg2L2ZpbGVzI2RpZmYtNDM0NzQ2MGUzNzljZDk3MGJhMGI4OGI0YWNiMjE1ZWE2MGNiYWUzMDgx MjQ2NzVkZTg4MTFlZWQzNzczNjdhYVI4MzEpKQ0KLSBXaGVuIHRoZSBsb29wIGlzIG51bGwgYW5k IHRoaXMgbG9vcCBoYXMgYSBjYXB0dXJlLCBtYXRjaGluZyBiZWhhdmVzIGFzIGEgbW9ub21hbmlh Yy4gVG8gcmVwcm9kdWNlIHRoaXMgYmVoYXZpb3IsIGNhY2hlcyBpbiB0aGUgbG9vcCBpcyBjbGVh cmVkIGFzIG5lY2Vzc2FyeS4gKFtodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjQ4 Ni9maWxlcyNkaWZmLWMzY2ZlMTllZmZmMGNjNTE4MTM4NDc0MTM4NjA2N2I4MWVhZGIyNTA1Yjhi OWIzZjk4MGQxMGY4MTUwMzczOTVSMzQzM10oaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9w dWxsLzY0ODYvZmlsZXMjZGlmZi1jM2NmZTE5ZWZmZjBjYzUxODEzODQ3NDEzODYwNjdiODFlYWRi MjUwNWI4YjliM2Y5ODBkMTBmODE1MDM3Mzk1UjM0MzMpKQ0KTGlrZSBhIGZsaXAtZmxvcCBvcGVy YXRvciwgd2UgaG9wZSB0byBkcm9wIHRoaXMgaWYgcG9zc2libGUuIEJ1dCBpdCBzdGlsbCByZW1h aW5zIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuDQoNCiMjIyBMaW1pdGF0aW9uDQoNCkNhY2hlLWJh c2VkIG9wdGltaXphdGlvbiBpcyBub3QgYXBwbGllZCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOg0K DQoxLiBSZWdleHAgdXNpbmcgc29tZSBleHRlbnNpb25zIChiYWNrLXJlZmVyZW5jZSBhbmQgc3Vi ZXhwcmVzc2lvbiBjYWxsLCBsb29rLWFyb3VuZCwgYXRvbWljLCBhYnNlbnQgb3BlcmF0b3JzKSBp cyBub3Qgb3B0aW1pemVkIGJlY2F1c2UgaXQgaXMgaW1wb3NzaWJsZSBvciBoYXJkLiBIb3dldmVy LCBpdCBtYXkgYmUgcG9zc2libGUgZm9yIGxvb2stYXJvdW5kIG9wZXJhdG9ycy4NCjIuIEEgYm91 bmRlZCBvciBmaXhlZCB0aW1lcyByZXBldGl0aW9uIG5lc3RpbmcgaW4gYW5vdGhlciByZXBldGl0 aW9uIChlLmcuIGAvKGF7MiwzfSkqL2ApLiBJdCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBpc3N1ZSBl bnRpcmVseSwgYnV0IHdlIGJlbGlldmUgaXQgaXMgaGFyZCB0byBzdXBwb3J0IHRoaXMgY2FzZSBj b3JyZWN0bHkuDQozLiBCb3VuZGVkIG9yIGZpeGVkIHRpbWVzIHJlcGV0aXRpb24gaXMgdG9vIGxh cmdlIChlLmcuIGAvKGF8Yil7MTAwMDAwLDIwMDAwMH0vYCkuIFRoZSBjYWNoZSB0YWJsZSBzaXpl IGlzIHByb3BvcnRpb25hbCB0byB0aGUgcHJvZHVjdCBvZiB0aGUgbnVtYmVyIG9mIGNhY2hlIHBv aW50cyBvZiByZWdleCBhbmQgaW5wdXQgc2l6ZS4gSW4gdGhpcyBjYXNlLCBzaW5jZSB0aGUgbnVt YmVyIG9mIGNhY2hlIHBvaW50cyBiZWNvbWVzIHRvbyBsYXJnZSwgdGhlIG9wdGltaXphdGlvbiBj YW5ub3QgYmUgYXBwbGllZC4NCg0KRXhwZXJpbWVudHMgd2VyZSBjb25kdWN0ZWQgdG8gaW52ZXN0 aWdhdGUgaG93IHRoZXNlIGxpbWl0YXRpb25zIGFyZSBwcm9ibGVtYXRpYyBpbiBwcmFjdGljZS4g V2UgdXNlZCBPYmplY3RTcGFjZSB0byBjb2xsZWN0IFJlZ2V4cHMgYW5kIGludmVzdGlnYXRlIHdo ZXRoZXIgdGhleSBjb3VsZCBiZSBvcHRpbWl6ZWQgYW5kIHRoZSBudW1iZXIgb2YgY2FjaGUgcG9p bnRzLiBSZWdleHBzIHdlcmUgY29sbGVjdGVkIGZyb20gdGhlIHN0YW5kYXJkIGxpYnJhcnksIFdl YnJpY2ssIGFuZCBSYWlscy4gU2VlIHRoZSBmb2xsb3dpbmcgZ2lzdCBmb3IgdGhlIGRldGFpbHMg KFtodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tYWtlbm93anVzdC84M2UxZTc1YTJkN2RlOGI5NTZl OTNiZGFjMDA0YTA2Yl0oaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbWFrZW5vd2p1c3QvODNlMWU3 NWEyZDdkZThiOTU2ZTkzYmRhYzAwNGEwNmIpKS4NCg0KVGhlIGV4cGVyaW1lbnRzIHJlc3VsdCBp cyBzaG93biBpbiB0aGUgZm9sbG93aW5nIHRhYmxlLg0KDQp8IENvbGxlY3RlZCBmcm9tIHwgIyBS ZWdleHAgfCAjIG5vbi1vcHRpbWl6YWJsZSB8IE1heGltdW0gbnVtYmVyIG9mIGNhY2hlIHBvaW50 cyB8DQp8IC0tLSB8IC0tLSB8IC0tLSB8IC0tLSB8DQp8IHN0ZGxpYiB8IDEwMDkgfCA4NiAoOC41 MiUpIHwgODEgfA0KfCBXZWJyaWNrIHwgMzU2IHwgNDQgKDEyLjM2JSkgfCAyMCB8DQp8IFJhaWxz IHwgNzU5IHwgNzQgKDcuNzUlKSB8IDI3IHwNCnwgVG90YWwgPGJyPiAoRHVwbGljYXRpb25zIGFy ZSByZWR1Y2VkKSB8IDE1MDYgfCAxMTggKDcuODQlKSB8IDgxIHwNCg0KVGhpcyByZXN1bHQgc2hv d3MgdGhhdCB0aGUgcGVyY2VudGFnZSBvZiBub24tb3B0aW1pemFibGUgUmVnZXhwIGlzIGxlc3Mg dGhhbiAxMCUsIGFuZCB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGZvciBvcHRpbWl6YXRpb24g aXMgYWJvdXQgMTAgdGltZXMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nICg4MS84LCBmb3IgYSBi aXQgYXJyYXkpIGF0IHdvcnN0IGluIHRoaXMgY2FzZS4gSXQgaXMgY29uc2lkZXJlZCB0aGF0IGEg c3VmZmljaWVudCBudW1iZXIgb2YgUmVnZXhwIGNhbiBiZSBvcHRpbWl6ZWQgaW4gcHJhY3RpY2Uu DQoNCiMjIFNwZWNpZmljYXRpb24NCg0KVGhlIGRldGFpbGVkIHNwZWNpZmljYXRpb24gaGFzIGJl ZW4gZml4ZWQgeWV0LiBXZSBoYXZlIHNvbWUgaWRlYXMgYW5kIHdlIHdvdWxkIGxpa2UgdG8gZGlz Y3VzcyB0aGVtLg0KDQotIFdoZW4gaXMgb3B0aW1pemF0aW9uIGVuYWJsZWQ/IEN1cnJlbnRseSwg aXQgdHVybnMgb24gd2hlbiB0aGUgYmFja3RyYWNrIGNhdXNlcyBhcyBtYW55IGFzIHRoZSBpbnB1 dCBsZW5ndGguDQotIEhvdyB0aGUgbnVtYmVyIG9mIGNhY2hlIHBvaW50cyBpcyBhbGxvd2VkLCBh bmQgaG93IG1lbW9yeSBjYW4gYmUgYWxsb2NhdGVkPyBJdCBpcyBub3QgZGV0ZXJtaW5lZCBmb3Ig bm93Lg0KLSBJZiB0aGUgYWJvdmUgcGFyYW1ldGVycyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHVzZXJz LCBob3cgYXJlIHRoZXkgc3BlY2lmaWVkPyAodmlhIGNvbW1hbmQtbGluZSBmbGFncywgb3Igc3Rh dGljIC8gaW5zdGFuY2UgcGFyYW1ldGVycyBsaWtlIGBSZWdleHAjLnRpbWVvdXQ9YCBhbmQgYFJl Z2V4cCN0aW1lb3V0PWApDQotIFVubGVzcyB0aGUgaW5wdXQgc2l6ZSBpcyB0b28gbGFyZ2UsIHRo ZSBhdmFpbGFiaWxpdHkgb2Ygb3B0aW1pemF0aW9uIGNhbiBiZSBkZXRlcm1pbmVkIG9uIGNvbXBp bGUtdGltZS4gU28sIHdlIHdvdWxkIGxpa2UgdG8gYWRkIGEgbmV3IGZsYWcgdG8gUmVnZXhwIHRv IGRldGVybWluZSB3aGV0aGVyIGEgY2FjaGUgaXMgYXZhaWxhYmxlLiBJdCBiZWNvbWVzIG9uZSBv ZiB0aGUgY3JpdGVyaWEgZm9yIHdoZXRoZXIgUmVnZXhwIGlzIGVmZmljaWVudGx5IGV4ZWN1dGFi bGUgb3Igbm90LiBXZSBiZWxpZXZlIGl0IGhlbHBzIHVzZXJzLiBUaHVzLCB3aGljaCBsZXR0ZXIg aXMgcHJlZmVycmVkIGZvciB0aGlzIHB1cnBvc2U/IGBsYCAobGluZWFyKSBvciBgcmAgKHJlZ3Vs YXIpIHNvdW5kcyBnb29kLCBidXQgSSBhbSBub3Qgc3VyZSB3aGljaCBpcyB0aGUgYmVzdC4NCg0K VGhhbmsgeW91Lg0KDQoNCg0KLS0gDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NCg==