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 E5EBB1F910 for ; Tue, 15 Nov 2022 03:59:44 +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="G84X5yJX"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 45A46121397; Tue, 15 Nov 2022 12:59:37 +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 1F7BF121229 for ; Tue, 15 Nov 2022 12:59:34 +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=oGIXYjiU8z1AeCJ0kW4MY4PJhyUidwoipZEKWgUCAoU=; b=G84X5yJXIvnxKE+w5yC26k3D2msnBYAcOq8HkBvWpVftIPE5GLjFSK3VSp0I0bFtSnNt ZudyHakAUblsduElYereagVUBlHeKNupN0ZUPDxjIvbmNinGng4loBInLTEksxR+tYwYEa SPzcNN/X1LPL5XwbpaBm0bLtXA8wm3xh1vS0HddblOcEgb4/h53gXZ+BVov1z4A1aWy1u6 BeVWPnMnJo5hk7Rvge3KGCm0xP2kAc/Dfnbxb0Y75Req72h6xJ65ZlmBu/ILRdAC8/Zvp/ XXVX49ksIcVCsqABcJTFhOOR0BPfHFEFlRQxuw9wCjLCjXBVy+pxweJMrioJ5ybw== Received: by filterdrecv-857b658bc-x4bjn with SMTP id filterdrecv-857b658bc-x4bjn-1-63730E9F-12 2022-11-15 03:59:27.912124126 +0000 UTC m=+375318.258308944 Received: from herokuapp.com (unknown) by geopod-ismtpd-3-1 (SG) with ESMTP id lI3sDa3GQOaY3CjCWRLUuQ for ; Tue, 15 Nov 2022 03:59:27.816 +0000 (UTC) Date: Tue, 15 Nov 2022 03:59:27 +0000 (UTC) From: "kjtsanaktsidis (KJ Tsanaktsidis)" Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Bug X-Redmine-Issue-Id: 19119 X-Redmine-Issue-Author: kjtsanaktsidis X-Redmine-Sender: kjtsanaktsidis 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: 87210 X-SG-EID: =?us-ascii?Q?bpuAnwiv5wR3AMKfH76hNK7PI5khDDZ1kji5+D8yFrgaUvTZzAkIlQXnVriLYY?= =?us-ascii?Q?wZntoXP0DUH6R9LNgqzTU1esCZ4KY8M9zX8WDhO?= =?us-ascii?Q?VCp0C6LaIc5MwHZEk7o4ICdGCNosxThlr9UwxKC?= =?us-ascii?Q?8X0u6V3JcSrUARBl3vrZxO+JMAIG3orTTF8Dgwl?= =?us-ascii?Q?UTwXavPdmL6KREgdJXQBM6UnwBf4IJCi28LyN4q?= =?us-ascii?Q?Y7V=2Fbtu+i8C9IFKyeAfU2eF5v+qnjk7s5eL8dwk?= =?us-ascii?Q?jlnqqdYpuKIVPvfgFQ=2Fc=2F0GzcY0Oo1CtNN8QLun?= =?us-ascii?Q?ahk=3D?= To: ruby-core@neon.ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 110758 Subject: [ruby-core:110758] [Ruby master Bug#19119] Add an interface for out-of-process profiling tools to access Ruby information 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" SXNzdWUgIzE5MTE5IGhhcyBiZWVuIHVwZGF0ZWQgYnkga2p0c2FuYWt0c2lkaXMgKEtKIFRzYW5h a3RzaWRpcykuCgoKVGhhbmsgeW91IGZvciB5b3VyIGZlZWRiYWNrIQoKbWFtZSAoWXVzdWtlIEVu ZG9oKSB3cm90ZSBpbiAjbm90ZS0yOgo+IEkgdW5kZXJzdG9vZCB0aGlzIHRpY2tldCBhcyBmb2xs b3dzLgo+IAo+IC0tLQoKWWVzLCB5b3VyIHN1bW1hcnkgaXMgZXhhY3RseSByaWdodC4KCgo+IE9u ZSBpcyBvdmVyaGVhZC4gSXQgc2VlbXMgdmVyeSB3YXN0ZWZ1bCB0byBhbHdheXMgbWFuYWdlIHR3 byBkYXRhIHN0cnVjdHVyZXMgcmVwcmVzZW50aW5nIHRoZSBzdGFjayBmcmFtZXMuCgpZZXMsIG92 ZXJoZWFkIGlzIHRoZSB0aGluZyBJJ20gbW9zdCBjb25jZXJuZWQgYWJvdXQsIGVzcGVjaWFsbHkg YXMgdGhlIGV4dGVybmFsbHktYWNjZXNzaWJsZSBkYXRhIHN0cnVjdHVyZSB3b3VsZCBuZWVkIHRv IGJlIGtlcHQgdXAtdG8tZGF0ZSBhbGwgdGhlIHRpbWUgaW4gb3JkZXIgZm9yICJhdHRhY2ggdG8g YSBydW5uaW5nIHByb2Nlc3MiIHRvIHdvcmsuCgpJJ3ZlIGJlZW4gdXNpbmcgdGhlIFt5aml0LWJl bmNoXShodHRwczovL2dpdGh1Yi5jb20vU2hvcGlmeS95aml0LWJlbmNoKSB0b29saW5nIHRvIG1l YXN1cmUgdGhlIGltcGFjdCBvbiBteSBwcm9vZi1vZi1jb25jZXB0IGJyYW5jaC4gVGhlIHJlc3Vs dHMgZnJvbSB0aGlzIG5haXZlIGltcGxlbWVudGF0aW9uIGRpZG4ndCBzZWVtIGltbWVkaWF0ZWx5 IGRpc3F1YWxpZnlpbmcsIGJ1dCB0aGVyZSdzIHdheSBtb3JlIHdvcmsgdG8gZG8gYW5kIEkgaGF2 ZW4ndCBydW4gaXQgaW4gYSB0b3RhbGx5IHNjaWVudGlmaWMsIHN5c3RlbWF0aWMgd2F5IGZvciBz aGFyaW5nIHlldC4gSSB0aGluayB5aml0LWJlbmNoIHdvdWxkIGZvcm0gYSBnb29kIGJhc2lzIGZv ciBhIHllcy9ubyBkZWNpc2lvbiBvbiBtZXJnaW5nIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMg cHJvcG9zYWw/IChJIHdvdWxkIGlkZWFsbHkgbGlrZSB0byBydW4gaXQgaW4gYSByZWFsLXdvcmxk IFJhaWxzIGFwcCwgYnV0IHNhZGx5IFplbmRlc2sgKHdoZXJlIEkgd29yaykgaXMgc3RpbGwgb24g UnVieSAyLjcvUmFpbHMgNS4xLi4uIDovICkuCgpNeSBjdXJyZW50IHBsYW4gZm9yIGRvaW5nIHRo aXMgaW4gYSB3YXkgdGhhdCBtaW5pbWlzZXMgb3ZlcmhlYWQgaXMgdG86CgoqIENyZWF0ZSBhbGwg dGhlIHN0cmluZ3MvZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGV4dGVy bmFsbHkgdmlzaWJsZSBhdCBtZXRob2QtZGVmaW5pdGlvbiB0aW1lLCBhbmQgc3RvcmUgdGhlbSBv biB0aGUgYHJiX21ldGhvZF9lbnRyeV90YCBzdHJ1Y3R1cmUgKCYgc29tZXRoaW5nIHNpbWlsYXIg YXQgY29tcGlsZSB0aW1lIGZvciBpc2VxJ3Mgd2l0aG91dCBtZXRob2RzLCBJIHN1cHBvc2UpLgoq IEVtYmVkIHRoYXQgZXh0cmEgZGF0YSBzdHJ1Y3R1cmUgX2luc2lkZV8gYHJiX2NvbnRyb2xfZnJh bWVfdGA7IGVzc2VudGlhbGx5LCB3aGVuIHB1c2hpbmcgYSBuZXcgYHJiX2NvbnRyb2xfZnJhbWVf dGAgb250byB0aGUgVk0gc3RhY2ssIHdlIF9hbHNvXyBzZXQgaXRzICJleHRfZGVidWciIGZpZWxk IHRvIGNvbnRhaW4gdGhlIG5ldyBkYXRhIHN0cnVjdHVyZS4KKiBUaGVuLCBmb3IgZXh0ZXJuYWwg Y29kZSB0byBpbnNwZWN0IHRoZSBSdWJ5IHN0YWNrLCBpdCBqdXN0IG5lZWRzIHRvIHdhbGsgdGhy b3VnaCB0aGUgVk0gc3RhY2sgZnJhbWVzIGF0IHNvbWUga25vd24gb2Zmc2V0ICh3aGVyZSB0aGUg ImV4dF9kZWJ1ZyIgZmllbGQgbGl2ZXMpLiBUaGlzIG9mZnNldCBjYW4gYmUgZGlzY292ZXJlZCBh dCBydW50aW1lIGJ5IHRoZSBleHRlcm5hbCB0b29sLCBiZWNhdXNlIFJ1Ynkgd2lsbCBzdG9yZSBg c2l6ZW9mKHJiX2NvbnRyb2xfZnJhbWVfdClgIGFuZCBgb2Zmc2V0b2YocmJfY29udHJvbF9mcmFt ZV90LCBleHRfZGVidWcpYCBpbiB0aGUgcmJfZGVidWdfZXh0X3NlY3Rpb24gRUxGIHNlY3Rpb24u CgppLmUuIC0gdGhlIGRhdGEgc3RydWN0dXJlIGluIHRoZSBuZXcsIHJiX2RlYnVnX2V4dF9zZWN0 aW9uIHNlY3Rpb24gd2lsbCBjb250YWluIHBvaW50ZXJzIHRvIG90aGVyIHBhcnRzIG9mIFJ1Ynkn cyBtZW1vcnkuIEFuIGV4dGVybmFsIHRvb2wgd291bGQgbmVlZCB0byBiZSBhYmxlIHRvIHJlYWQg X2FueV8gb2YgUnVieSdzIG1lbW9yeSAod2l0aCBlLmcuIHB0cmFjZSkuIFRoZSBuZXcgc2VjdGlv biBqdXN0IGdpdmVzIHRoZSBleHRlcm5hbCB0b29sIGEgc3RhcnRpbmcgcG9pbnQgYW5kIHRoZSBr bm93bGVkZ2Ugb2YgX3doZXJlXyB0byBsb29rIGZvciBlLmcuIHRoZSBWTSBzdGFjayBmcmFtZXMu IEkga2luZCBvZiBmaWd1cmVkIGl0IG1pZ2h0IGJlIF9uaWNlXyB0byBoYXZlIGV2ZXJ5dGhpbmcg Y29waWVkIHRvIHRoZSBuZXcgc2VjdGlvbiwgYnV0IGl0IHdvdWxkIGJlIHByb2hpYml0aXZlbHkg c2xvdy4KCj4gVGhlIG90aGVyIGlzIGRhdGEgc3luY2hyb25pemF0aW9uLiBBbiBleHRlcm5hbCBw cm9jZXNzIG1heSBnZXQgY29ycnVwdGVkIGRhdGEgaWYgaXQgYXR0ZW1wdHMgdG8gcmVhZCBkdXJp bmcgYSBtZXRob2QgY2FsbCAoaS5lLiwgd2hlbiB0aGUgZGF0YSBvZiB0aGUgc3RhY2sgZnJhbWVz IGlzIGJlaW5nIHVwZGF0ZWQpLiBUbyBwcmV2ZW50IHRoaXMsIHRoZSBSdWJ5IGludGVycHJldGVy IHNob3VsZCBiZSBzdXNwZW5kZWQgYXQgYSBzYWZlIHBsYWNlIGJlZm9yZSByZWFkaW5nLiBIb3dl dmVyLCBzdWNoIGEgc3luY2hyb25pemF0aW9uIG1heSBpbmNyZWFzZSB0aGUgb3ZlcmhlYWQgZXZl biBtb3JlLgoKSSBfdGhpbmtfIHRoaXMgYWN0dWFsbHkgd29uJ3QgYmUgYSBwcm9ibGVtIChhbHRo b3VnaCBJIF9kZWZpbml0ZWx5XyBuZWVkIHRvIHByb3ZlIHRoaXMgd2l0aCBhbiBpbXBsZW1lbnRh dGlvbiBvZiBhbiBleHRlcm5hbCBwcm9maWxlciB1c2luZyB0aGlzIGludGVyZmFjZSkuIE15IGlk ZWEgaXMgdGhhdCBhZnRlciBwdXNoaW5nIGEgc3RhY2sgZnJhbWUgdG8gdGhlIFZNIHN0YWNrLCB3 ZSB3b3VsZCB0aGVuIGNoYW5nZSB0aGUgImN1cnJlbnQgc3RhY2sgZnJhbWUiIGluIHRoZSBleHRl cm5hbCBkZWJ1ZyBzZWN0aW9uIHRvIHBvaW50IHRvIHRoZSBuZXcgYGNmcC0+ZXh0X2RlYnVnYCBm aWVsZC4gU28gbG9uZyBhcyBfdGhhdF8gdXBkYXRlIHdhcyBkb25lIHdpdGggYW4gYXRvbWljLCB0 aGVuIGl0IHNob3VsZCBiZSBzYWZlIHRvIHN1c3BlbmQgdGhlIFJ1YnkgcHJvY2VzcyBhdCBsaXRl cmFsbHkgYW55IENQVSBpbnN0cnVjdGlvbiBhbmQgcmVhZCBhIGNvbnNpc3RlbnQgdmVyc2lvbiBv ZiB0aGUgbmV3IHN0YWNrIHJlcHJlc2VudGF0aW9uLgoKVGhhdCdzIHdoYXQncyBoYXBwZW5pbmcg b24gW3RoaXMgbGluZV0oaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzY3MDYvZmls ZXMjZGlmZi1mOGMxNzQzNDdlNmVhODg4OWI1MDM2MDY0YTFmZjRmZTVlN2M1M2E4MjFiZWZhOWJk YzVjY2JmMTc4MDBhNjQ5UjQxOCkgb2YgbXkgc2tldGNoLgoKCmJ5cm9vdCAoSmVhbiBCb3Vzc2ll cikgd3JvdGUgaW4gI25vdGUtMzoKPiB0aGUgcHJvYmxlbSB3aXRoIHRoaXMgaXMgdGhhdCBpdCB0 ZW5kIHRvIHNrZXcgdGhlIHByb2ZpbGluZyByZXN1bHRzIGFuZCBhdHRyaWJ1dGUgbW9yZSB3ZWln aHQgdG8gbWV0aG9kcyBpbXBsZW1lbnRlZCBpbiBDIHRoYW4gcmVndWxhciBtZXRob2RzLgoKTXkg aG9wZSBpcyBJIGNhbiBhdm9pZCB0aGlzIHByb2JsZW0gdG9vIGJ5IG1ha2luZyBpdCBPSyBmb3Ig dGhlIHByb2ZpbGVyIHRvIHN1c3BlbmQgUnVieSBhdCBhbnkgYXJiaXRyYXJ5IENQVSBpbnN0cnVj dGlvbiAtIHRoYXQncyBtb3N0IGxpa2VseSB0cnVlIGF0IHRoZSBtZXRob2QgbGV2ZWwsIGJ1dCBJ IGhhdmVuJ3QgMTAwJSBmaWd1cmVkIG91dCBob3cgdG8gZ2V0IGxpbmUtbGV2ZWwgaW5mb3JtYXRp b24uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJ1ZyAjMTkxMTk6 IEFkZCBhbiBpbnRlcmZhY2UgZm9yIG91dC1vZi1wcm9jZXNzIHByb2ZpbGluZyB0b29scyB0byBh Y2Nlc3MgUnVieSBpbmZvcm1hdGlvbgpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMv MTkxMTkjY2hhbmdlLTEwMDA5NwoKKiBBdXRob3I6IGtqdHNhbmFrdHNpZGlzIChLSiBUc2FuYWt0 c2lkaXMpCiogU3RhdHVzOiBPcGVuCiogUHJpb3JpdHk6IE5vcm1hbAoqIEJhY2twb3J0OiAyLjc6 IFVOS05PV04sIDMuMDogVU5LTk9XTiwgMy4xOiBVTktOT1dOCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KCldhcm5pbmc6IHRoaXMgaXMgYSB2ZXJ5IGxvbmcgcHJvcG9z YWwgOiggSSBkb24ndCByZWFsbHkga25vdyB3aGF0IHRoZSBtb3N0IHByb2R1Y3RpdmUgd2F5IHRv IGVuZ2FnZSB3aXRoIHRoZSBSdWJ5IGNvbW11bml0eSBhYm91dCB0aGlzIGlzIC0gaWYgdGhlcmUn cyBhIGJldHRlciBwbGFjZSB0byB0YWtlIHRoaXMsIHBsZWFzZSBsZXQgbWUga25vdyEKCkkgYWxz byB3YW50IHRvIGFja25vd2xlZGdlIEBpdm9hbmpvIGZvciBjb250cmlidXRpbmcgdG8gdGhpcyBw cm9wb3NhbCAtIEkgYm91bmNlZCBtYW55IGlkZWFzIGFib3V0IHByb2ZpbGluZyBvZmYgaGltIGFu ZCB0aGUgaW1wcm92ZWQtYmFja3RyYWNlIHN0dWZmIGlzIGFsbCBiYXNlZCBvbiBoaXMgW2JhY2t0 cmFjaWVdKGh0dHBzOi8vZ2l0aHViLmNvbS9pdm9hbmpvL2JhY2t0cmFjaWUpIGdlbS4KCiMjIE1v dGl2YXRpb24KCldoZW4gZGVhbGluZyB3aXRoIGxhcmdlIGFuZCBvbGQgUnVieSBhcHBzLCB0aGVy ZSBpcyBvZnRlbiBib3RoIGEgbmVlZCB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBzb21l IG9wZXJhdGlvbnMsIGFzIHdlbGwgYXMgYSBsYWNrIG9mIHVuZGVyc3RhbmRpbmcgYXMgdG8gaG93 LCBwcmVjaXNlbHksIHRoZSBjb2RlIHdvcmtzLCBhbmQgd2hhdCBhc3BlY3Qgb2YgaXQgaXMgYWN0 dWFsbHkgc2xvdy4gRnVydGhlcm1vcmUsIHRoZSBwZXJmb3JtYW5jZSBpc3N1ZXMgaW4gcXVlc3Rp b24gb2Z0ZW4gb25seSBhcHBlYXIgaW4gYSBsaXZlLCBwcm9kdWN0aW9uIGVudmlyb25tZW50LCB3 aGVyZSB0aGVyZSBpcyBzb21lIHRyYWZmaWMgcGF0dGVybiBvciB1c2VyIGRhdGEgY2F1c2luZyB0 aGUgcHJvYmxlbS4gSW4gc2l0dWF0aW9ucyBsaWtlIHRoaXMsIHByb2ZpbGluZyB0b29scyBjYW4g cHJvdmUgaW52YWx1YWJsZSBpbiBoZWxwaW5nIHRvIHVuZGVyc3RhbmQgYXBwbGljYXRpb24gcGVy Zm9ybWFuY2UgaW4tc2l0dSBpbiBwcm9kdWN0aW9uLgoKVGhlIHRoaW5ncyB3aGljaCBhbiBlbmdp bmVlciBtaWdodCB1c2UgYSBwcm9maWxlciB0byBtZWFzdXJlIGluY2x1ZGU6CiAgKiBXYWxsIGNs b2NrIHRpbWU7IGhvdyBsb25nIGRvIHBhcnRpY3VsYXIgbWV0aG9kIGNhbGxzIHRha2U/CiAgKiBD UFUgdGltZTsgb2YgdGhlIHRpbWUgYSBtZXRob2QgdGFrZXMsIGhvdyBsb25nIGlzIHNwZW50IGFj dHVhbGx5IF9ydW5uaW5nXyBvbiB0aGUgQ1BVLCBhbmQgaG93IG11Y2ggaXMgc3BlbnQgYmxvY2tl ZCB3YWl0aW5nIGZvciBlLmcuIGEgbmV0d29yayByZXNwb25zZT8KICAqIEdWTCBjb250ZW50aW9u OyBpcyBhbiBhcHBsaWNhdGlvbiB1c2luZyBsb3RzIG9mIHRocmVhZHMganVzdCB3YWl0aW5nIGZv ciB0aGUgR1ZMIHRvIGJlY29tZSBhdmFpbGFibGU/CiAgKiBHQyB0aW1lOyBpcyBhIHBhcnRpY3Vs YXIgcGllY2Ugb2YgY29kZSBfYWN0dWFsbHlfIHNsb3csIG9yIGlzIGl0cyBzbG93bmVzcyBqdXN0 IGEgcmVzdWx0IG9mIF9vdGhlcl8gY29kZSBjYXVzaW5nIHRoZSBHQyB0byBiZSBpbnZva2VkPwog ICogQWxsb2NhdGlvbnM7IGhvdyBtYW55IG9iamVjdHMgaXMgYSBwYXJ0aWN1bGFyIHBpZWNlIG9m IGNvZGUgYWxsb2NhdGluZywgYW5kIHdoYXQgaW1wYWN0IGlzIHRoaXMgaGF2aW5nIG9uIEdDPwog ICogSGVhcDsgb2YgdGhlIG9iamVjdHMgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUgYWxsb2Nh dGVkLCBob3cgbWFueSBvZiB0aGVtIGFyZSBzdGlsbCBsaXZlPyBJcyB0aGVyZSBzb21lIGtpbmQg b2YgbGVhaz8KCkdlbmVyYWxseSwgaW4gb3JkZXIgdG8gY29sbGVjdCB0aGlzIGluZm9ybWF0aW9u IGZyb20gcHJvZHVjdGlvbiBpbiBhIG1pbmltYWxseS1pbXBhY3RmdWwgd2F5LCBhIHNhbXBsaW5n IGFwcHJvYWNoIGlzIHVzZWQuIEEgcHJvZmlsaW5nIHRvb2wgcGVyaW9kaWNhbGx5IHRha2VzIGEg c25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgY2FsbC1zdGFjayBvZiBhIFJ1YnkgcHJvZ3JhbTsgZGVw ZW5kaW5nIG9uIHdoYXQgaXMgYmVpbmcgbWVhc3VyZWQsIHRoaXMgcGVyaW9kaWNpdHkgbWlnaHQg YmUgZS5nLiBzaW1wbHkgZXZlcnkgTiBtcyAoZm9yIHdhbGwtY2xvY2sgcHJvZmlsaW5nKSwgZXZl cnkgTiBhbGxvY2F0aW9ucyAoZm9yIGFsbG9jYXRpb24gcHJvZmlsaW5nKSwgZXRjLiBUaGVuLCB0 aGUgZGF0YSB3aWxsIGdlbmVyYWxseSBiZSBjb21iaW5lZCBhY3Jvc3MgbWFueSBpbnN0YW5jZXMg b2YgYSBwcm9ncmFtIHRvIGdldCBhbiBhZ2dyZWdhdGUgdmlldyAodGhyb3VnaCBlLmcuIGEgZmxh bWUgZ3JhcGgpLgoKSW4gYWRkaXRpb24gdG8gdGhpcyBmbGVldC13aWRlIGFnZ3JlZ2F0aW9uLCBp dCdzIHNvbWV0aW1lcyB1c2VmdWwgdG8gcHJvZmlsZSBhIHBhcnRpY3VsYXIgcHJvY2VzcyB3aGlj aCBoYXMgc3VkZGVubHkgc3RhcnRlZCBkaXNwbGF5aW5nIHNvbWUgcGF0aG9sb2d5IG9mIGludGVy ZXN0LiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhZCBhIHdlYnNlcnZlciBwcm9jZXNzIHRoYXQgaGFk IHN1ZGRlbmx5IGJlY29tZSBzdHVjaywgeW91IG1pZ2h0IHdhbnQgdG8gYXR0YWNoIGEgcHJvZmls ZXIgdG8gZmluZCBvdXQgX3doeV8uIEluIHNjZW5hcmlvcyBsaWtlIHRoaXMsIGl0J3Mgb2Z0ZW4g aW1wb3NzaWJsZSB0byBtYWtlIHNvbWUgYWRqdXN0bWVudCB0byB0aGUgcHJvZ3JhbSB0byBlbmFi bGUgcHJvZmlsaW5nIGFuZCByZXN0YXJ0IGl0OyB0aGUgYWN0IG9mIHJlc3RhcnRpbmcgaXQgd291 bGQgbWFrZSB0aGUgcHJvYmxlbSBnbyBhd2F5IChmb3Igbm93ISkuCgojIyBDdXJyZW50IHN0YXRl IG9mIHRoZSBhcnQKClRoaXMgcmVwcmVzZW50cyBteSBiZXN0IHVuZGVyc3RhbmRpbmcgb2YgdGhl IHdheXMgaW4gd2hpY2ggbW9zdCBSdWJ5IHByb2ZpbGluZyB0b29scyB3b3JrIHRvZGF5LiBJJ20g c3VyZSBJJ3ZlIG1pc3NlZCBzb21lIGltcG9ydGFudCBkZXRhaWxzIGFuZCBvdGhlciB0b29scywg Zm9yIHdoaWNoIEknbSBkZWVwbHkgc29ycnkuCgojIyMgU2lnbmFsLWJhc2VkIHByb2ZpbGluZwoK U2lnbmFsLWJhc2VkIHByb2ZpbGVycyBjYW4gYmUgdXNlZCB0byBtZWFzdXJlIENQVSBhbmQgd2Fs bCBjbG9jayB0aW1lLiBJbiB0aGlzIHNjaGVtZSwgYSBwcm9maWxlciAoaW4gdGhlIGZvcm0gb2Yg YW4gZXh0ZW5zaW9uIGdlbSkgc2V0cyB1cCBhIHNpZ25hbCBoYW5kbGVyIGZvciBTSUdQUk9GIGlu IEMsIGFuZCB0aGVuIGFycmFuZ2VzIGZvciBTSUdQUk9GIHRvIGJlIGRlbGl2ZXJlZCB0byB0aGUg cHJvY2VzcyByZXBlYXRlZGx5IGluIHNvbWUga2luZCBvZiBsb29wLiBUaGUgc2lnbmFsIGhhbmRs ZXIgdGhlbiBjYXB0dXJlcyBhIHN0YWNrIHRyYWNlIHVzaW5nIHRoZSBgcmJfcHJvZmlsZV9mcmFt ZXNgIEFQSSBmcm9tIHRoZSBDIGV4dGVuc2lvbiBhbmQgcmVjb3JkcyB0aGlzIGFzIGEgc2luZ2xl IHNhbXBsZS4KClRoaXMgaXMgdGhlIG1lY2hhbmlzbSB1c2VkIGZvciBDUFUvd2FsbCBjbG9jayBw cm9maWxpbmcgaW4gW1N0YWNrcHJvZl0oaHR0cHM6Ly9naXRodWIuY29tL3RtbTEvc3RhY2twcm9m KSwgdGhlIFtEYXRhZG9nIGNvbnRpbnVvdXMgcHJvZmlsZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9E YXRhRG9nL2RkLXRyYWNlLXJiKSwgYW5kIEknbSBzdXJlIG90aGVycy4gSXQncyBhbHNvIGEgd2Vs bC1rbm93biBtZWNoYW5pc20gdXNlZCBpbiBvdGhlciBub24tUnVieSB0b29scyBsaWtlIFtncGVy ZnRvb2xzXShodHRwczovL2dwZXJmdG9vbHMuZ2l0aHViLmlvL2dwZXJmdG9vbHMvY3B1cHJvZmls ZS5odG1sKQoKT25lIGJlbmVmaXQgb2YgdGhpcyBtZWNoYW5pc20gaXMgdGhhdCBpdCBzaG91bGQg YmUgcXVpdGUgZmFzdC4gVHJpZ2dlcmluZyB0aGUgc2lnbmFsIGNhdXNlcyBhIGNvbnRleHQgc3dp dGNoIGludG8gdGhlIGtlcm5lbCAmIGJhY2sgaW50byB0aGUgaGFuZGxlciwgYnV0IGV4ZWN1dGlv biBzdGF5cyBpbnNpZGUgdGhlIGN1cnJlbnQgcHJvZ3JhbTsgdGhlcmUncyBubyBuZWVkIGZvciB0 aGUgZXhlY3V0aW9uIHRvIHN3aXRjaCB0byBhbm90aGVyIHByb2dyYW0gKGFuZCBjb25zZXF1ZW50 bHkgY2hhbmdlIGFkZHJlc3Mgc3BhY2UpLgoKVGhlIGRvd25zaWRlIG9mIHRoaXMgYXBwcm9hY2gg aXMgdGhhdCBpdCByZXF1aXJlcyBzb21lIGxldmVsIG9mIGNvb3BlcmF0aW9uIGZyb20gdGhlIHBy b2dyYW0gYmVpbmcgcHJvZmlsZWQuIFNvbWV0aGluZyBpbnNpZGUgdGhlIHByb2Nlc3MgbXVzdCBp bnN0YWxsIHRoZSBTSUdQUk9GIGhhbmRsZXI7IGlmIHlvdSBoYXZlIHNvbWUgZXhpc3RpbmcsIHJ1 bm5pbmcgUnVieSBwcm9jZXNzIGZvciB3aGljaCBhIHByb2ZpbGVyIGlzIG5vdCBsb2FkZWQsIHlv dSBjYW5ub3QgYmVnaW4gcHJvZmlsaW5nIGl0IHdpdGhvdXQgcmVzdGFydGluZyBpdCAoYW5kIHVz aW5nIHNvbWUgbWVjaGFuaXNtIGxpa2UgYSBgLXJteV9wcm9maWxlci9hdXRvbG9hZGAgZmxhZyku CgpBbm90aGVyIHByb2JsZW0gd2l0aCB0aGlzIGFwcHJvYWNoIGlzIHRoZSBlZmZlY3QgdGhlc2Ug U0lHUFJPRiBzaWduYWxzIGhhdmUgb24gdGhlIGFwcGxpY2F0aW9uLiBOb3JtYWxseSwgdGhlIHBy b2ZpbGVyIGluc3RhbGxzIHRoZSBzaWduYWwgaGFuZGxlciB3aXRoIHRoZSBTQV9SRVNUQVJUIGZs YWc7IHRoaXMgX3Nob3VsZF8gbWVhbiB0aGF0IGFueSBpbi1wcm9ncmVzcyBzeXN0ZW0gY2FsbCB0 aGUgYXBwbGljYXRpb24gaXMgZG9pbmcgd2hlbiB0aGUgU0lHUFJPRiBhcnJpdmVzIGdldHMgdHJh bnNwYXJlbnRseSByZXN0YXJ0ZWQgd2hlbiB0aGUgaGFuZGxlciBmaW5pc2hlcyBjb2xsZWN0aW5n IGl0cyBzYW1wbGUuIEhvd2V2ZXIsIG9uIExpbnV4IGF0IGxlYXN0LCB0aGVyZSBhcmUgc29tZSBz eXN0ZW0gY2FsbHMgd2hpY2ggYXJlIF9OT1RfIHJlc3RhcnRlZCB3aGVuIFNBX1JFU1RBUlQgaGFw cGVucyAtIG5vdGFibHkgc29tZSBuZXR3b3JrIHJlbGF0ZWQgb25lcyBsaWtlIHBvbGwsIGVwb2xs LCBhbmQgc2VuZC9yZWN2IHdoZW4gYSBzb2NrZXQgdGltZW91dCBpcyBzZXQuIFRoZXNlIHN5c3Rl bSBjYWxscyB3aWxsIGluc3RlYWQgZmFpbCB3aXRoIEVJTlRSOyB3ZWxsIGJlaGF2ZWQgcHJvZ3Jh bXMgYW5kIGxpYnJhcmllcyBfU0hPVUxEXyByZXRyeSB0aGlzLgoKU2FkbHksIGhvd2V2ZXIsIHRo ZSByZXBlYXRlZCBkZWxpdmVyeSBvZiBTSUdQUk9GIHRlbnMgb3IgaHVuZHJlZHMgb2YgdGltZXMg cGVyIHNlY29uZCBkb2VzIGhhdmUgYSB3YXkgb2Ygc2hha2luZyBvdXQgY29ybmVyLWNhc2VzIGlu IGxpYnJhcmllcyB3aGVyZSB0aGlzIGlzbid0IGJlaW5nIGRvbmUgcHJvcGVybHkuIEZvciBleGFt cGxlLCBJIGhhdmUgcGVyc29uYWxseSBkaXNjb3ZlcmVkIHRoZSBoYXJkIHdheSB0aGF0IGxpYm15 c3FsY2xpZW50IHZlcnNpb24gNS43IGRvZXMgdGhpcyB3cm9uZyBpbiBvbmUgcGxhY2UsIHNvIGVu YWJsaW5nIGEgU0lHUFJPRi1iYXNlZCBwcm9maWxlciBjYW4gY2F1c2UgbGlibXlzcWxjbGllbnQg dG8gZXJyb25lb3VzbHkgdGhpbmsgdGhhdCBkYXRhYmFzZSBjb25uZWN0aW9ucyB3ZXJlIGNsb3Nl ZC4gVGhpcyBpcyB1bmRvdWJ0ZWRseSBhIGJ1ZyBpbiBsaWJteXNxbGNsaWVudCAod2hpY2gsIGJ5 IHRoZSB3YXksIHNlZW1zIHRvIGJlIGZpeGVkIGluIHZlcnNpb24gOCksIHRoYXQgX2NvdWxkXyBi ZSB0cmlnZ2VyZWQgYnkgYW55IG90aGVyIHNpZ25hbC4gVGhlcmUncyBubyBkZW55aW5nIHRob3Vn aCB0aGF0IFNJR1BST0YtYmFzZWQgcHJvZmlsaW5nIGlzIGEgcmVhbCB0b3J0dXJlLXRlc3QgZm9y IEVJTlRSIGhhbmRsaW5nLCBhbmQgdGhlcmUgdW5kb3VidGVkbHkgX2FyZV8gYnVnZ3kgbGlicmFy aWVzIG91dCB0aGVyZSBpbiB0aGUgd2lsZCB0aGF0IHBlb3BsZSBhcmUgdXNpbmcgaW4gdGhlaXIg YXBwbGljYXRpb25zLiBJdCB3b3VsZCBiZSBuaWNlIGlmIFJ1YnkgcHJvZmlsZXJzIGNvdWxkIHdv cmsgYXJvdW5kIHRoaXMgcHJvYmxlbS4KCiMjIyBSVUJZX0lOVEVSTkFMX0VWRU5UX05FV09CSiBw cm9maWxpbmcKCkNvbGxlY3Rpb24gb2Ygc3RhY2tzIGZyb20gU0lHUFJPRiB3b3JrcyBmb3IgQ1BV L3dhbGwgdGltZSBwcm9maWxpbmcsIGJ1dCBhIGRpZmZlcmVudCBhcHByb2FjaCBpcyBuZWVkZWQg Zm9yIGluLXByb2Nlc3MgcHJvZmlsZXJzIHRvIGNvbGxlY3QgYWxsb2NhdGlvbiBwcm9maWxlcy4g VGhpcyBpcyBub3JtYWxseSBkb25lIGJ5IHJlZ2lzdGVyaW5nIGEgdHJhY2Vwb2ludCBoYW5kbGVy IGZvciBSVUJZX0lOVEVSTkFMX0VWRU5UX05FV09CSiBpbiB0aGUgcHJvZmlsZXIgZXh0ZW5zaW9u IGdlbTsgdGhpcyBpcyBjYWxsZWQgZXZlcnkgdGltZSBhIFJ1Ynkgb2JqZWN0IGlzIGFsbG9jYXRl ZC4gRnJvbSB0aGlzIGhhbmRsZXIsIHRoZSBwcm9maWxlciBjYW4gdXNlIGByYl9wcm9maWxlX2Zy YW1lc2AgYWdhaW4gdG8gY29sbGVjdCBhIFJ1YnkgYmFja3RyYWNlIG9mIHRoZSBjb2RlIHJlc3Bv bnNpYmxlIGZvciBhbGxvY2F0aW5nIHRoaXMgb2JqZWN0LgoKIyMjIFB0cmFjZS1iYXNlZCBwcm9m aWxpbmcKCkFub3RoZXIgYXBwcm9hY2ggdGhhdCBoYXMgYmVlbiB1c2VkIGlzIHRvIGNvbnRyb2wg dGhlIFJ1YnkgcHJvZ3JhbSB0byBiZSBwcm9maWxlZCB3aXRoIGFub3RoZXIsIHNlcGFyYXRlIHBy b2Nlc3MsIHVzaW5nIGFuIGFwcHJvcHJpYXRlIHBsYXRmb3JtIEFQSSAoZS5nLiBwdHJhY2Ugb24g TGludXgpLiBQZXJpb2RpY2FsbHksIHRoZSBwcm9maWxlciBwcm9jZXNzIGNhbiB1c2UgcHRyYWNl IHRvIHN1c3BlbmQgZXhlY3V0aW9uIG9mIHRoZSB0YXJnZXQgUnVieSBwcm9ncmFtLCBhbmQgY29s bGVjdCBhIHN0YWNrIHRyYWNlIG9mIGl0LiBUaGlzIGlzIHRoZSBhcHByb2FjaCB1c2VkIGJ5IHRo ZSBbcmJzcHldKGh0dHBzOi8vZ2l0aHViLmNvbS9yYnNweS9yYnNweSkgcHJvZmlsZXIsIHdoaWNo IGlzIGl0c2VsZiBhY3R1YWxseSBhIFJ1c3QgcHJvZ3JhbS4KClRoZSBtYWluIHN0cmVuZ3RoIG9m IHRoaXMgYXBwcm9hY2ggaXMgdGhhdCBpdCBhbGxvd3Mgb25lIHRvIGJlZ2luIHRyYWNpbmcgYSBS dWJ5IHByb2dyYW0gd2hpY2ggaXMgYWxyZWFkeSBydW5uaW5nLCBfd2l0aG91dCByZXN0YXJ0aW5n IGl0XzsgcmJzcHkgY2FuIHB0cmFjZS1hdHRhY2ggdG8gYSBydW5uaW5nIHByb2Nlc3MgYW5kIGJl Z2luIGNvbGxlY3Rpbmcgc2FtcGxlcyBzdHJhaWdodCBhd2F5LiBUaGlzIGFsbG93cyBvbmUgdG8g Z2FpbiBpbnNpZ2h0IGludG8gaW50ZXJtaXR0ZW50IHByb2JsZW1zIG9uY2UgdGhleSBzdGFydCBo YXBwZW5pbmchCgpVbmZvcnR1bmF0ZWx5LCAiY29sbGVjdCBhIHN0YWNrIHRyYWNlIiBpcyBxdWl0 ZSB0cmlja3kgdG8gZG8gZnJvbSBvdXRzaWRlIHRoZSBwcm9jZXNzOyB3ZSB3YW50IHRoZSBfUnVi eV8gbGV2ZWwgc3RhY2sgdHJhY2UsIG5vdCAob3IgYXQgbGVhc3QsIGFzIHdlbGwgYXMpIHRoZSBt YWNoaW5lIHN0YWNrIHRyYWNlICh3aGljaCBjb3VsZCBiZSBjb2xsZWN0ZWQgZS5nLiB2aWEgRFdB UkYgdW53aW5kaW5nIG9yIGZyYW1lLXBvaW50ZXIgY2hhc2luZykuIFRvIGdldCB0aGUgUnVieSBz dGFjayB0cmFjZSByZXF1aXJlcyBydW1tYWdpbmcgYXJvdW5kIGluc2lkZSB0aGUgbWVtb3J5IG9m IHRoZSB0YXJnZXQgcHJvY2VzcyAoZS5nLiB3aXRoIGAvcHJvYy97cGlkfS9tZW1gIG9uIExpbnV4 KSwgdG8gZmluZCB0aGUgcmVsZXZhbnQgYHJiX2NvbnRyb2xfZnJhbWVfdGAgc3RydWN0dXJlcy4g UmJzcHkgY29udGFpbnMgYSBodWdlIGxpc3Qgb2Ygc3RydWN0dXJlIGRlZmluaXRpb25zIGZvciB2 YXJpb3VzIHZlcnNpb25zIG9mIFJ1YnkgdG8gbWFrZSB0aGlzIHBvc3NpYmxlLCBidXQgYW55IHRp bWUgYSBuZXcgdmVyc2lvbiBvZiBSdWJ5IGlzIHJlbGVhc2VkLCBhIG5ldyB2ZXJzaW9uIG9mIFJi c3B5IG11c3QgYWxzbyBiZSByZWxlYXNlZCB0byBhY2NvdW50IGZvciBhbnkgY2hhbmdlcyB0byB0 aGUgbGF5b3V0IG9mIFJ1YnkncyBpbnRlcm5hbCBzdHJ1Y3R1cmVzLgoKSW4gdGhlb3J5LCB0aGUg cHRyYWNlIGFwcHJvYWNoIGlzIGFsc28gd29yc2UgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0 aXZlOyB0byBjb2xsZWN0IGEgc2FtcGxlLCBleGVjdXRpb24gbXVzdCBzd2l0Y2ggZnJvbSB0aGUg cHJvY2VzcyB0byBiZSBwcm9maWxlZCB0byB0aGUgcHJvZmlsZXIgcHJvY2Vzcywgd2hpY2ggcmVx dWlyZXMgc3dpdGNoaW5nIG1lbW9yeSBtYXBwaW5ncy4gUmVjYWxsIHRoYXQgd2l0aCBpbi1wcm9j ZXNzIFNJR1BST0YgcHJvZmlsaW5nLCB0aGUgcHJvZmlsZXIgd29yayBpcyBkb25lIGluIHRoZSBz YW1lIHByb2Nlc3Mgd2l0aCB0aGUgc2FtZSBtZW1vcnkgbWFwcGluZ3MuIEhvd2V2ZXIsIHRoaXMg Y29uY2VybiBzZWVtcyB0byBiZSBsYXJnZWx5IHRoZW9yZXRpY2FsOyBJIGhhdmUgbm90IF9hY3R1 YWxseV8gc2VlbiBvciBoZWFyZCBvZiBhbnlib2R5IHNheWluZyB0aGF0IHRoaXMgaXMgbWFraW5n IHJic3B5IHRvbyBzbG93IGZvciB0aGVpciB1c2VjYXNlLgoKRmluYWxseSwgYWx0aG91Z2ggcHRy YWNlLWJhc2VkIHByb2ZpbGluZyBnZXRzIHVzIF9jbG9zZV8gdG8gdGhlIGlkZWFsIG9mIG5vdCBy ZXF1aXJpbmcgYW55IGZvcmVzaWdodCB0byBiZWdpbiBwcm9maWxpbmcgYSBydW5uaW5nIHByb2dy YW0sIHRoZXJlIGlzIF9vbmVfIHNtYWxsIHJlcXVpcmVtZW50IHdoaWNoIG11c3QgYmUgc2F0aXNm aWVkIGFoZWFkIG9mIHRpbWUgLSB0aGUgUnVieSBpbnRlcnByZXRlciBuZWVkcyB0byBoYXZlIG5v dCBoYWQgaXRzIHN5bWJvbHMgc3RyaXBwZWQgc28gdGhhdCByYnNweSBjYW4gZmluZCB0aGUgYHJ1 YnlfY3VycmVudF92bV9wdHJgIGdsb2JhbC4gSSBiZWxpZXZlIHJic3B5IG1ha2VzIGFuIF9hdHRl bXB0XyB0byBmaW5kIGl0IHdpdGhvdXQgdGhlIHN5bWJvbCBidXQgaXQgZG9lcyBub3QgY2xhaW0g dG8gYmUgcmVsaWFibGUuCgojIyMgQWxsb2NhdGlvbiBzYW1wbGluZyBmcm9tIHB0cmFjZS1iYXNl ZCBwcm9maWxpbmcKClRvIHBlcmZvcm0gYWxsb2NhdGlvbiBwcm9maWxpbmcgZnJvbSBvdXRzaWRl IHRoZSBSdWJ5IHByb2Nlc3MsIHdlIHdvdWxkIG5lZWQgc29tZSBhbmFsb2d1ZSB0byBSVUJZX0lO VEVSTkFMX0VWRU5UX05FV09CSi4gSSBiZWxpZXZlIHRoaXMgX2NvdWxkXyBiZSBhY2hpZXZlZCBi eSBjb21waWxpbmcgUnVieSB3aXRoIGR0cmFjZS9zeXN0ZW10YXAvVVNEVCBwcm9iZXMgZW5hYmxl ZCwgYW5kIGhhdmluZyB0aGUgcHJvZmlsZXIgcHJvY2VzcyB3cml0ZSBhIHRyYXAgaW5zdHJ1Y3Rp b24gb3ZlciB0aGUgdG9wIG9mIHRoZSBwcm9iZSAod2hpY2ggaXMgaG93IGUuZy4gZGVidWdnZXJz IHdvcmspLiBJIGRvbid0IGJlbGlldmUgcmJzcHkgb3IgYW55IG90aGVyIHByb2ZpbGVyIHRoYXQg SSBmb3VuZCBhY3R1YWxseSBkb2VzIHRoaXMgdGhvdWdoLgoKIyMjIFBlcmYtYmFzZWQgcHJvZmls aW5nCgpMaW51eCBoYXMgYSBkZWRpY2F0ZWQgc3Vic3lzdGVtIGNhbGxlZCBwZXJmIHdoaWNoIChh bW9uZ3N0IG1hbnkgb3RoZXIgdGhpbmdzKSBjYW4gZG8gbG93LW92ZXJoZWFkIHByb2ZpbGluZyBv ZiBhcmJpdHJhcnkgcHJvY2Vzc2VzLiBUaGUgc2FtcGxpbmcgaXMgZG9uZSBpbnNpZGUgdGhlIGtl cm5lbCwgc28gbGlrZSBTSUdQUk9GIChhbmQgdW5saWtlIHB0cmFjZSkgY29sbGVjdGluZyBhIHNh bXBsZSByZXF1aXJlcyBubyBzd2l0Y2ggb2YgYWRkcmVzcyBzcGFjZS4gSG93ZXZlciwgb2YgY291 cnNlLCBwZXJmIG9ubHkgdW5kZXJzdGFuZHMgdGhlIG1hY2hpbmUgc3RhY2ssIG5vdCB0aGUgUnVi eSBzdGFjaywgc28gdXNpbmcgcGVyZiB0byBwcm9maWxlIGEgUnVieSBwcm9ncmFtIGlzIG5vdCBj dXJyZW50bHkgZXh0cmFvcmRpbmFyaWx5IHVzZWZ1bCAodW5sZXNzIHlvdSdyZSBwcm9maWxpbmcg dGhlIFJ1YnkgVk0gaXRzZWxmIG9yIGEgQyBleHRlbnNpb24pLgoKUGVyZiBhY3R1YWxseSBoYXMg YSBbbWVjaGFuaXNtXShodHRwczovL3d3dy5icmVuZGFuZ3JlZ2cuY29tL3BlcmYuaHRtbCNKSVRf U3ltYm9scykgdG8gaGVscCBnaXZlIG1lYW5pbmdmdWwgc3RhY2sgdHJhY2VzIGZvciBsYW5ndWFn ZXMgd2l0aCBKSVRzOyB0aGUgYXBwbGljYXRpb24gaXMgZXhwZWN0ZWQgdG8gd3JpdGUgb3V0IGEg bWFwcGluZyBvZiBmdW5jdGlvbiBhZGRyZXNzIC0+IG5hbWUgdG8gYSBmaWxlIGAvdG1wL3BlcmYt JFBJRC5tYXBgOyBwZXJmIHdpbGwgdXNlIHRoaXMgZmlsZSB0byBzeW1ib2xpY2F0ZSBzdGFja3Mu IFB5dGhvbiBbcmVjZW50bHkgYWRkZWRdKGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2Rldi9ob3d0 by9wZXJmX3Byb2ZpbGluZy5odG1sKSBzdXBwb3J0IGZvciB0aGlzIG1lY2hhbmlzbSBhcyB3ZWxs OyBob3dldmVyLCBiZWNhdXNlIENQeXRob24gZG9lcyBub3QgaGF2ZSBhIEpJVCwgaXQgd29ya3Mg YnkgZ2VuZXJhdGluZyBhIG5hdGl2ZSB0cmFtcG9saW5lIGZvciBlYWNoIGZ1bmN0aW9uICh3aXRo IGEgdW5pcXVlIGFkZHJlc3MpLCBhbmQgY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgdHJhbXBvbGlu ZXMgZHVyaW5nIFB5dGhvbiBtZXRob2QgZXhlY3V0aW9uIHRvIG1ha2UgdGhlIG1hY2hpbmUgc3Rh Y2sgbWlycm9yIHRoZSBWTSBvbmUuIFRoaXMgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCBp biBDUnVieSBjdXJyZW50bHkuCgojIyBUaGUgcHJvcG9zYWw6IHByb3ZpZGUgYW4gImV4dGVybmFs IGRlYnVnIHNlY3Rpb24iCgpXZSBpZGVhbGx5IHdvdWxkIGxpa2UgdG8gaGF2ZSBhIHdheSB0byBw cm9maWxlIFJ1YnkgYXBwbGljYXRpb25zIHdoaWNoIGNvbWJpbmVzIHRoZSBiZW5lZml0cyBvZiB0 aGUgU0lHUFJPRiBtZWNoYW5pc20gKGVhc3ksIGRvY3VtZW50ZWQgYWNjZXNzIHRvIFJ1YnkgY2Fs bCBzdGFja3MpLCB0aGUgcHRyYWNlIG1lY2hhbmlzbSAodGhlIGFiaWxpdHkgdG8gYXR0YWNoIHRv IHJ1bm5pbmcgcHJvY2Vzc2VzIHdpdGggYSBtaW5pbXVtIG9mIGZvcmVzaWdodCByZXF1aXJlZCks IGFuZCB0aGUgcGVyZiBtZWNoYW5pc20gKGxvdyBvdmVyaGVhZCBzYW1wbGUgY29sbGVjdGlvbiB3 aXRob3V0IHJlcXVpcmluZyBhIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSBzd2l0Y2gpLiBUaGlzIHBy b3Bvc2FsIGFpbXMgdG8gcHJvdmlkZSBleGFjdGx5IHRoYXQuCgpUaGUgUnVieSBpbnRlcnByZXRl ciB3b3VsZCBoYXZlIGEgbmV3IGdsb2JhbCB2YXJpYWJsZSBgcmJfZGVidWdfZXh0X3NlY3Rpb25g LCB3aGljaCBpcyBkZWZpbmVkIHdpdGggYF9fYXR0cmlidXRlX18oKHNlY3Rpb24oInJiX2RlYnVn X2V4dCIpKSlgIHNvIHRoYXQgaXQgYXBwZWFyZWQgaW4gYSBzZXBhcmF0ZSBzZWN0aW9uIGluIHRo ZSBFTEYgYmluYXJ5LiBUaGlzIHZhcmlhYmxlIHdvdWxkIGJlIGNvbnN0YW50bHkga2VwdCBwb3B1 bGF0ZWQgd2l0aCB1cC10by1kYXRlIGluZm9ybWF0aW9uIGFib3V0IGFsbCB0aGUgY2FsbC1zdGFj a3Mgb2YgYWxsIHRocmVhZHMvZmliZXJzIGluIHRoZSBwcm9ncmFtLiBBbiBleHRlcm5hbCBkZWJ1 Z2dpbmcgdG9vbCBjb3VsZCBlYXNpbHkgKCJlYXNpbHkiKSBwdHJhY2UgYSBydW5uaW5nIFJ1Ynkg cHJvZ3JhbSwgYW5kIGZpbmQgdGhlIGFkZHJlc3Mgb2YgdGhpcyBzZWN0aW9uIGluIGl0cyBydW5u aW5nIG1lbW9yeSwgZXZlbiBpZiBzeW1ib2xzIGhhdmUgYmVlbiBzdHJpcHBlZC4gT25jZSBhbiBl eHRlcm5hbCB0b29sIGhhcyBmb3VuZCB0aGlzIHZhcmlhYmxlLCBpdCBuZWVkcyB0byBtYWtlIHNl bnNlIG9mIGl0LiBSdWJ5IHdvdWxkIHByb3ZpZGUgYSBuZXcgaGVhZGVyIGZpbGUgYGluY2x1ZGUv cnVieS9kZWJ1Z19leHRlcm5hbC5oYCB3aGljaCBkZXNjcmliZWQgdGhlIGxheW91dCBvZiB0aGlz IHN0cnVjdHVyZS4KClRoZSBzaW1wbGUsIHNsb3cgdmVyc2lvbiBvZiBhbiBleHRlcm5hbCBwcm9m aWxlciB1c2luZyB0aGlzIGludGVyZmFjZSB3b3VsZCBiZSBhIGxvdCBsaWtlIHJic3B5OyBpdCB3 b3VsZCB1c2UgcHRyYWNlIHRvIHBlcmlvZGljYWxseSBzdG9wIHRoZSBSdWJ5IHByb2Nlc3MsIGFu ZCB0aGVuIHVzZSB0aGUgY29udGVudHMgb2YgYHJiX2RlYnVnX2V4dF9zZWN0aW9uYCB0byBjb2xs ZWN0IFJ1YnkgYmFja3RyYWNlcyBmb3IgQ1BVL3dhbGwtY2xvY2sgcHJvZmlsaW5nLiBUaGUgYmVu ZWZpdCwgb2YgY291cnNlLCBpcyB0aGF0IGl0J3MgdXNpbmcgYSBkb2N1bWVudGVkIGludGVyZmFj ZSB0aGF0IGNhbiBiZSB2ZXJzaW9uZWQgYW5kIGtlcHQgYmFja3dhcmRzIGNvbXBhdGlibGUsIHJh dGhlciB0aGFuIGhhdmluZyB0byBjb25zdGFudGx5IGNoYXNlIGJyZWFraW5nIGNoYW5nZXMgdG8g aW50ZXJuYWwgUnVieSBWTSBzdHJ1Y3R1cmVzLgoKSG93ZXZlciwgdGhlIGJlbmVmaXQgb2YgdGhp cyBhcHByb2FjaCBpcyB0aGF0IHdlIGNhbiBkbyBiZXR0ZXIhIFRoZSBwZXJmIHN1YnN5c3RlbSBv biBMaW51eCBpcyBhYmxlIHRvIGludm9rZSBhbiBlQlBGIHByb2dyYW0gdG8gYWN0dWFsbHkgY29s bGVjdCBzYW1wbGVzICh1c2luZywgSSB0aGluaywgYFBFUkZfRVZFTlRfSU9DX1NFVF9CUEZgIGJ1 dCBJJ20gbm90IDEwMCUgc3VyZSkgYW5kIHdyaXRlIHRoZW0gdG8gYSByaW5nLWJ1ZmZlci4gVGhl IGVCUEYgcHJvZ3JhbSBjYW4gYWN0dWFsbHkgdXNlIHRoZSBgZGVidWdfZXh0ZXJuYWwuaGAgaGVh ZGVyIGZpbGUgdG8gZmlndXJlIG91dCB0aGUgY3VycmVudCBSdWJ5IHN0YWNrIHRyYWNlKHMpIGl0 c2VsZiwgd2l0aG91dCBuZWVkaW5nIHRvIHN3aXRjaCBiYWNrIGludG8gdGhlIHByb2ZpbGVyIGFk ZHJlc3Mgc3BhY2UhIFRoZSBwcm9maWxlciBwcm9ncmFtIG9ubHkgbmVlZHMgdG8gcnVuIHBlcmlv ZGljYWxseSB0byBlbXB0eSB0aGUgcmluZy1idWZmZXIgYW5kIHdyaXRlIHNhbXBsZXMgdG8gZGlz ay4KCiMjIFRoZSByaWRlcjogYmV0dGVyIHN0YWNrIHRyYWNlIG91dHB1dAoKU28gZmFyLCB3ZSd2 ZSBtZW50aW9uZWQgdGhhdCB0aGUgcHJvZmlsZXIgcHJvY2VzcyB3aWxsIGV4dHJhY3QgYSBzdGFj ayB0cmFjZSBvdXQgb2YgYHJiX2RlYnVnX2V4dF9zZWN0aW9uYC4gTGV0J3MgdHVybiBvdXIgYXR0 ZW50aW9uIHRvIHdoYXQgdGhhdCBzdGFjayB0cmFjZSB3b3VsZCBhY3R1YWxseSBfYmVfLgoKVHJh ZGl0aW9uYWwgcHJvZmlsaW5nIHRvb2xzIGZvciBub24tZHluYW1pYyBsYW5ndWFnZXMgdXN1YWxs eSB3b3JrIGJ5IGNhcHR1cmluZyBtZW1vcnkgYWRkcmVzc2VzIGZvciBmdW5jdGlvbnMsIGFuZCB0 aGVuIGRlZmVycmluZyB0aGUgdHJhbnNsYXRpb24gb2YgYWRkcmVzc2VzIC0+IG5hbWVzIHVudGls IGxhdGVyIChwb3NzaWJseSBldmVuIG9uIGEgZGlmZmVyZW50IG1hY2hpbmUpLiBSdWJ5LCBob3dl dmVyLCBpcyBJIGJlbGlldmUgbXVjaCB0b28gZHluYW1pYyBmb3IgYSBzaW1pbGFyIGFwcHJvYWNo LiBNZXRob2RzIGFuZCBjbGFzc2VzIGNhbiBiZSBkZWZpbmVkIGFuZCB1bmRlZmluZWQgZHluYW1p Y2FsbHkgb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2dyYW0uIEluc3RydWN0aW9uIHNlcXVl bmNlcyBjYW4gYmUgY3JlYXRlZCBhbmQgR0MnZCBhcyBhIHJlc3VsdCBvZiB1c2luZyB0aGluZ3Mg bGlrZSBgZXZhbGAuIEEgbWVtb3J5IGFkZHJlc3Mgb2NjdXBpZWQgYnkgb25lIGNsYXNzIG9yIGlz ZXEgbWlnaHQgbGF0ZXIgYmUgb2NjdXBpZWQgYnkgYSBkaWZmZXJlbnQgb25lIC0gZXNwZWNpYWxs eSBiZWNhdXNlIHdlIG5vdyBoYXZlIEdDIGNvbXBhY3Rpb24uCgpUaHVzLCBJIHRoaW5rIHRoZSBv bmx5IHNlbnNpYmxlIHRoaW5nIHRvIGRvIGlzIHRvIHN0b3JlIHN0cmluZ3MgaW4gdGhlIGByYl9k ZWJ1Z19leHRfc2VjdGlvbmAgc3RydWN0dXJlLiBUaGVzZSBzdHJpbmdzIG5lZWQgdG8gYmUgdmFs aWQsIGVzc2VudGlhbGx5LCB3aGlsc3QgdGhlIGNhbGxlZCBtZXRob2QvaXNlcSBpcyBzdGlsbCBv biB0aGUgc3RhY2sgLSB0aGVyZSdzIG5vIHJlcXVpcmVtZW50IHRvIHJldGFpbiB0aGVtIHVudGls IGxhdGVyLiBUaGUgZXh0ZXJuYWwgdG9vbCB3b3VsZCBuZWVkIHRvIGNvcHkgdGhlc2Ugc3RyaW5n cyBpbnRvIGl0cyBvd24gcHJvY2Vzcy4KCldoYXQgc2hvdWxkIHRob3NlIGFjdHVhbGx5IF9jb250 YWluXz8gQSB0cmFkaXRpb25hbCBSdWJ5IGJhY2t0cmFjZSBjb250YWlucyBhIGZpbGUsIGxpbmUg bnVtYmVyLCBhIG1ldGhvZCBuYW1lIChpZiBhdmFpbGFibGUpLCBhbmQgc29tZSBvdGhlciBkZXRh aWxzIGFib3V0IHRoZSBpc2VxIGlmIHByZXNlbnQgKGUuZy4gd2hldGhlciBpdCdzIGEgYmxvY2sg b3IgZXZhbCwgd2hldGhlciBpdCdzIDxtYWluPiwgZXRjKS4KCmBgYHJ1YnkKaXJiIzEobWFpbik6 MDAzOjA+IGRlZiBmb287IHJhaXNlICJvaCBubyI7IGVuZDsKPT4gOmZvbwppcmIjMShtYWluKTow MDQ6MD4gZm9vCihpcmIjMSk6MzppbiBgZm9vJzogb2ggbm8gKFJ1bnRpbWVFcnJvcikKCWZyb20g KGlyYiMxKTo0OmluIGA8bWFpbj4nCmBgYAoKSSBkbyBub3QgYmVsaWV2ZSB0aGlzIGlzIHRoZSBt b3N0IHVzZWZ1bCB3YXkgdG8gcHJlc2VudCB0aGlzIGluZm9ybWF0aW9uIGZyb20gYSBwcm9maWxp bmcgcGVyc3BlY3RpdmUsIGhvd2V2ZXIuIFdoZW4gZGVhbGluZyB3aXRoIGEgbGFyZ2UgbW9ub2xp dGhpYyBhcHBsaWNhdGlvbiwgcHJvZmlsZXMgd2lsbCBiZSBjb2xsZWN0ZWQgcHJvY2Vzcy13aWRl IGFuZCBhZ2dyZWdhdGVkIG9uIHNvbWUga2luZCBvZiBjZW50cmFsIGRhc2hib2FyZDsgdGhlcmUg Y291bGQgYmUgbWFueSBtZXRob2RzIGNhbGxlZCB0aGUgc2FtZSB0aGluZyAodGhpbmsgYGRlZiBj cmVhdGVgIGluIGEgUmFpbHMgY29udHJvbGxlciwgZm9yIGV4YW1wbGUpLiBUaGUgZmlsZW5hbWUg Y2FuIGhlbHAgZGlzYW1iaWd1YXRlIGluIGNpcmN1bXN0YW5jZXMgbGlrZSB0aGlzLCBidXQgQyBm dW5jdGlvbnMgZG9uJ3QgZXZlbiBfaGF2ZV8gYSBmaWxlbmFtZSwgc28ganVzdCBwcmludCB0aGUg ZmlsZW5hbWUgb2YgdGhlIHRoaW5nIHRoYXQgY2FsbGVkIHRoZW06CgpgYGBydWJ5CmlyYiMxKG1h aW4pOjAwNTowPiAxLnRpbWVzIHsgcmFpc2UgIm9oIG5vIiB9CihpcmIjMSk6NTppbiBgYmxvY2sg aW4gPG1haW4+Jzogb2ggbm8gKFJ1bnRpbWVFcnJvcikKCWZyb20gKGlyYiMxKTo1OmluIGB0aW1l cycgIyBJIGRpZCBub3QgZGVmaW5lIEludGVnZXIjdGltZXMgaW4gSVJCIQoJZnJvbSAoaXJiIzEp OjU6aW4gYDxtYWluPicKYGBgCgpBbGwgb2YgdGhpcyBjYW4gYmUgZ2VuZXJhbGx5IGZpZ3VyZWQg b3V0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvZGUsIGJ1dCBvZnRlbiB3aGVuIHdlJ3JlIGxvb2tpbmcg YXQgZS5nLiBhIHByb2ZpbGluZyBkYXNoYm9hcmQsIGhhdmluZyB0byBrZWVwIGxvb2tpbmcgYmV0 d2VlbiB0aGUgZmxhbWUgZ3JhcGggYW5kIHRoZSBjb2RlIGNhbiBiZSByYXRoZXIgYW5ub3lpbmcu CgpJdCB3b3VsZCBiZSBuaWNlIGlmIGluc3RlYWQsIG91ciBwcm9maWxlcyBjb250YWluZWQgdGhl IG5hbWUgb2YgdGhlIGNsYXNzIG9uIHdoaWNoIGEgbWV0aG9kIGlzIGRlZmluZWQ7IHNvbWV0aGlu ZyBsaWtlIGBGb29DbGFzcyN0aGVfbWV0aG9kYC4gUnVieSBoYXMgYSBtZXRob2QgYHJiX3Byb2Zp bGVfZnJhbWVfcXVhbGlmaWVkX21ldGhvZF9uYW1lYCB3aGljaCBjYW4gZ2l2ZSB1c2VmdWwgb3V0 cHV0IGxpa2UgdGhpcyBpbiBtYW55IGNhc2VzLiBIb3dldmVyLCBpbiBtYW55IGNvbW1vbiBjYXNl cyBsaWtlIGUuZy4gYW5vbnltb3VzIGNsYXNzZXMsIGl0IHdpbGwgcHJlc2VudCB0aGUgbmFtZSBv ZiB0aGUgY2xhc3MgYXMgc29tZXRoaW5nIGxpa2UgIiM8Q2xhc3M6MHgwMDAwMDAwMDAwZGI0OGUw PiIuIFRoaXMgaXMgd29yc2UgdGhhbiB1c2VsZXNzIGZvciBwcm9maWxpbmc7IHRoYXQgYWRkcmVz cyB3aWxsIGJlIGRpZmZlcmVudCBhbW9uZ3N0IGRpZmZlcmVudCBwcm9jZXNzZXMgYmVpbmcgcHJv ZmlsZWQsIHNvIG11bHRpcGxlIHByb2ZpbGVzIGNhbid0IGJlIGFnZ3JlZ2F0ZWQgdG9nZXRoZXIu IEluIGZhY3QsIHRoYXQgYWRkcmVzcyBpc24ndCBldmVuIGd1YXJhbnRlZWQgdG8gYmUgY29uc3Rh bnQgd2l0aGluIHRoZSBzYW1lIHByb2Nlc3MgYW55bW9yZSwgYmVjYXVzZSBvZiBjb21wYWN0aW9u LgoKSSB3b3VsZCBwcm9wb3NlIHRoYXQgd2UgaGF2ZSBhIG5ldyB3YXkgb2YgbmFtaW5nIG1ldGhv ZHMgd2hpY2ggcHJvZHVjZXMgdXNlZnVsIHN0cmluZ3MgaW4gYWxsIGNhc2VzLCB3aXRob3V0IGFu eSBhZGRyZXNzZXMgaW4gdGhlbS4gVGhlIHJ1bGVzIEkgaGF2ZSBjb21lIHVwIHdpdGggc28gZmFy IGFyZToKCiogYCIjPHJlZmluZW1lbnQgRm9vIG9mIEJhcj4iYCBmb3IgYSByZWZpbmVtZW50IG1v ZHVsZSBhZGRpbmcgbWV0aG9kcyB0bwogIEJhcgoqIGAiIzxpbnN0YW5jZSBvZiBGb28+ImAgZm9y IGEgcGFydGljdWxhciBpbnN0YW5jZSBvZiBGb28KKiBgIiM8c2luZ2xldG9uIG9mIEZvbz4iYCBm b3IgRm9vJ3Mgc2luZ2xldG9uIGNsYXNzLgoqIGAiIzxhbm9ueW1vdXMgc3ViY2xhc3Mgb2YgRm9v PiJgIGZvciBhbiBhbm9ueW1vdXMgc3ViY2xhc3MKKiBUaGUgdXN1YWwgY2xhc3NwYXRoIHN0cmlu ZyBvdGhlcndpc2UKCk5vdGUgdGhhdCBuZXN0aW5nIGlzIE9LIHRvbyAtIHNvIGEgbWV0aG9kIGRl ZmluZWQgb24gdGhlIHNpbmdsZXRvbiBjbGFzcyBvZiBhIHBhcnRpY3VsYXIgRm9vIG9iamVjdCB3 b3VsZCBiZSAiIzxzaW5nbGV0b24gb2YgIzxpbnN0YW5jZSBvZiBGb28+PiN0aGVfbWV0aG9kIi4K ClNvLCBteSBwcm9wb3NhbCBpcyB0aGF0IHRoaXMgaXMgdGhlIGZvcm1hdCBvZiB0aGUgbWV0aG9k IG5hbWUgdGhhdCBhcHBlYXJzIGluIHRoZSBgcmJfZGVidWdfZXh0X3NlY3Rpb25gIHN0cnVjdHVy ZS4KCiMjIFdoZXJlIGhhdmUgSSBnb3QgdG8gc28gZmFyPwoKT0ssIHNvIEkgaGF2ZSBhIGRyYWZ0 IFBSIHVwIHdoaWNoIHNob3VsZCBob3BlZnVsbHkgaGVscCBtYWtlIHNvbWUgb2YgdGhpcyBjbGVh cmVyOiBodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjcwNi4gSXQgaXMgb2YgY291 cnNlIGluIG5vIHdheSBldmVuIGNsb3NlIHRvIG1lcmdlIHJlYWR5LCBidXQgSSdtIGhvcGluZyBp dCBoZWxwcyBpbGx1c3RyYXRlIHNvbWUgb2YgbXkgaWRlYXMgaGVyZToKCiogW1RoZSBkZWJ1Z19l eHRlcm5hbC5oIGZpbGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NzA2L2Zp bGVzI2RpZmYtNjYxZjkyNjkwMDllYzgyNzE4NWVhZmE1ZWUwNWJkNzI1MWJiZTBhNTVkZWMzNjFj OWM1YzI1YmIyYTQzYTA5OCkgdGhhdCBkZWZpbmVzIHRoZSBleHRlcm5hbGx5LXZpc2libGUgc3Ry dWN0dXJlcwoqIFdoZXJlIHRocmVhZHMgYXJlIFthZGRlZF0oaHR0cHM6Ly9naXRodWIuY29tL3J1 YnkvcnVieS9wdWxsLzY3MDYvZmlsZXMjZGlmZi1hYTJhZGRiOTI5NzQ5YTRhMDMzMGI5M2NlZWNl YzViYzU0ODU3NTFhMzYyNTI0ZjVjYjM3YmYyMmRmZjE5MzZlUjY1KSBhbmQgW3JlbW92ZWRdKGh0 dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NzA2L2ZpbGVzI2RpZmYtYWEyYWRkYjky OTc0OWE0YTAzMzBiOTNjZWVjZWM1YmM1NDg1NzUxYTM2MjUyNGY1Y2IzN2JmMjJkZmYxOTM2ZVIx MTApIGZyb20gdGhlIGByYl9kZWJ1Z19leHRfc2VjdGlvbmAgc3RydWN0dXJlCiogV2hlcmUgZnJh bWVzIGFyZSBbcHVzaGVkXShodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjcwNi9m aWxlcyNkaWZmLWY4YzE3NDM0N2U2ZWE4ODg5YjUwMzYwNjRhMWZmNGZlNWU3YzUzYTgyMWJlZmE5 YmRjNWNjYmYxNzgwMGE2NDlSNDA3KSBhbmQgW3BvcHBlZF0oaHR0cHM6Ly9naXRodWIuY29tL3J1 YnkvcnVieS9wdWxsLzY3MDYvZmlsZXMjZGlmZi1mOGMxNzQzNDdlNmVhODg4OWI1MDM2MDY0YTFm ZjRmZTVlN2M1M2E4MjFiZWZhOWJkYzVjY2JmMTc4MDBhNjQ5UjQzNykgZnJvbSB0aGUgYHJiX2Rl YnVnX2V4dF9zZWN0aW9uYCBzdHJ1Y3R1cmUKKiBUaGUgW3Rlc3RzXShodHRwczovL2dpdGh1Yi5j b20vcnVieS9ydWJ5L3B1bGwvNjcwNi9maWxlcyNkaWZmLTg5YTY3YTRkNWIzNDhhYzZmOWNhYmU1 NmQyODQ3NTQ1YmU2NzgwOWIwMWQ4NTZiMzU0MWU5NjQ3MTAxNGJkOTlSNTczKSBpbGx1c3RyYXRl IHdoYXQgdGhlIG5ldyBxdWFsaWZpZWQgbWV0aG9kIG5hbWUgb3V0cHV0IGxvb2tzIGxpa2UuCgoj IyBXaGF0IGRvIEkgd2FudCBmZWVkYmFjayBvbj8KClRoaXMgd2hvbGUgcHJvamVjdCBpcyBvYnZp b3VzbHkgc3RpbGwgYWJvdXQgMjAlIGNvb2tlZCwgc28sIGFueXRoaW5nIGFuZCBldmVyeXRoaW5n LiBCdXQgbW9yZSBzcGVjaWZpY2FsbHksIHRoZXNlIGFyZSB0aGUgcXVlc3Rpb25zIEkgd291bGQg cmVhbGx5IGxpa2Ugc29tZSBoZWxwIHdpdGggOikKCiogRG9lcyB0aGlzIF9hcHByb2FjaF8gc2Vl bSBzZW5zaWJsZT8gSXMgdGhlIGJhc2ljIF9pZGVhXyBvZiAiZXhwb3NlIHNvbWUgZG9jdW1lbnRl ZCBkYXRhIHN0cnVjdHVyZSB0byBvdGhlciBwcm9jZXNzZXMgdGhhdCBhcmUgYWJsZSB0byByZWFk IG15IG1lbW9yeSIgYSBzb3VuZCBvbmU/CiogV2hhdCBzaG91bGQgSSBkbyB3aXRoIHRoZSBxdWFs aWZpZWQtbWV0aG9kLW5hbWUtd2l0aG91dC1hZGRyZXNzZXMgd29yaz8gQXQgdGhlIG1vbWVudCBJ IGV4cG9zZWQgdGhhdCBsb2dpYyBiZWhpbmQgbmV3IG1ldGhvZHMgYE1ldGhvZCNkZWJ1Z19uYW1l YCBhbmQgYFRocmVhZDo6QmFja3RyYWNlOjpFeHRlcm5hbCNkZWJ1Z19sYWJlbGAuIElzIHRoZXJl IHNvbWUgYXBwZXRpdGUgdG8gb3BlbiBhIHByb3Bvc2FsIHRvIGhhdmUgdGhhdCBpbiBDUnVieT8K KiBTaG91bGQgd2UgZXZlbiBjb25zaWRlciBfY2hhbmdpbmcgdGhlIGRlZmF1bHQgb3V0cHV0XyBv ZiB0aHJlYWQgYmFja3RyYWNlcyB0byBwcmludCB0aGVzZSBxdWFsaWZpZWQgbmFtZXM/CiogVGhl cmUgYXJlIHNvbWUgJ2luZnJhc3RydWN0dXJhbCcgY29tbWl0cyBvbiB0aGF0IGJyYW5jaCBvZiBt aW5lIC0gb25lIHRvIFtmaW5kIHNvbWUgZXh0cmEgc3BhY2UgaW4gYHJiX21ldGhvZF9lbnRyeV90 YF0oaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzY3MDYvY29tbWl0cy9mNDQ2ZjUy ODFmNThlODc2MWQxODI2YjZiMWM0YTk4ZmFjZDA0NzJlKSBhbmQgb25lIHRvIFthZGQgc29tZSBu ZXcgYXRvbWljIGhlbHBlcnNdKGBodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjcw Ni9jb21taXRzLzE3ZDRiMTU2Y2ZlOGYwYzMyOTEwOTA4ODUzYzE4YzdmYzgwMTIxZWNgKS4gSXMg dGhpcyB0aGUgc29ydCBvZiB0aGluZyB0aGF0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gdHJ5IGFuZCBs YW5kIG5vdyBvciBvbmx5IHdoZW4gdGhpcyBpcyBhbGwgY2xvc2VyIHRvIGRvbmU/CiogSSBoYXZl bid0IHlldCBhY3R1YWxseSBpbXBsZW1lbnRlZCBhbnl0aGluZyB0byB0cnkgYW5kIF9yZWFkXyB0 aGlzIGV4dGVybmFsIGRlYnVnIHNlY3Rpb24uIFNob3VsZCBpdCBiZQogIDEpIHNvbWUgZXh0ZXJu YWwgcmVwbywgaW4gYSBub24tUnVieSBsYW5ndWFnZSBlLmcuIFJ1c3Qgb3Igc29tZXRoaW5nPwog IDIpIEEgUnVieSBnZW0sIHdpdGggYSBDIGV4dGVuc2lvbiB0byBoYW5kbGUgYWxsIHRoZSBwdHJh Y2UvYnBmJ3kgYml0cz8KICAzKSBUaGUgZ2VtLCBidXQgaW5zaWRlIHRoZSBDUnVieSBzb3VyY2Ug dHJlZT8KICBJJ20gbGVhbmluZyB0b3dhcmRzIDIsIGJ1dCBub3QgcmVhbGx5IHN1cmUuCgpUaGFu ayB5b3UsIHRvIGFueWJvZHkgd2hvIGFjdHVhbGx5IGdvdCB0byB0aGUgYm90dG9tIG9mIHRoaXMg d2FsbCBvZiB0ZXh0LCBhbmQgdGhhbmtzIGRvdWJseSB0byBhbnlib2R5IHdobyBwcm92aWRlcyBm ZWVkYmFjayEKCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwo=