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=-1.3 required=3.0 tests=BAYES_00,BODY_8BITS, DKIM_ADSP_CUSTOM_MED,FORGED_GMAIL_RCVD,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,SPF_PASS 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 9ADC520248 for ; Mon, 25 Mar 2019 01:54:52 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 18630120EE6; Mon, 25 Mar 2019 10:54:47 +0900 (JST) Received: from o1678916x28.outbound-mail.sendgrid.net (o1678916x28.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id 93D4D120927 for ; Mon, 25 Mar 2019 10:54:43 +0900 (JST) Received: by filter0080p3mdw1.sendgrid.net with SMTP id filter0080p3mdw1-26853-5C9834E0-C 2019-03-25 01:54:40.384694346 +0000 UTC m=+543632.989727156 Received: from herokuapp.com (unknown [3.87.70.209]) by ismtpd0039p1iad1.sendgrid.net (SG) with ESMTP id YMPOkNpzTUqWBQarmIYn-g for ; Mon, 25 Mar 2019 01:54:40.311 +0000 (UTC) Date: Mon, 25 Mar 2019 01:54:40 +0000 (UTC) From: the.codefolio.guy@gmail.com Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 67456 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 15626 X-Redmine-Issue-Author: tenderlovemaking X-Redmine-Sender: noahgibbs 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-SG-EID: =?us-ascii?Q?o6uoTwtpmjv23mMhdNNpXULj2Iv4FzF2HjbNth30aFu7WshFaCUXGgtWbKKKCB?= =?us-ascii?Q?u3qNMGWG1lSQw8YZDqBmA6Nz7OaQBirPDKvCyKF?= =?us-ascii?Q?lMU=2FOqCafXNvVzUtfq2Alw0JJefNQavjL=2FtDRBH?= =?us-ascii?Q?MVo4ugZlx2UN5IpzjBt0yNOni00z0=2F=2FI5yJwthP?= =?us-ascii?Q?k8CHCamR7CXDc4u8UuV33nSgxOeIQgGDyeQ=3D=3D?= To: ruby-core@ruby-lang.org X-ML-Name: ruby-core X-Mail-Count: 91970 Subject: [ruby-core:91970] [Ruby trunk Feature#15626] Manual Compaction for MRI's GC (`GC.compact`) X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" SXNzdWUgIzE1NjI2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgbm9haGdpYmJzIChOb2FoIEdpYmJzKS4N Cg0KDQpAZHVlcnN0OiBsb29rcyBsaWtlIGhlJ3MgdXBkYXRlZCBoaXMgYXBwcm9hY2ggYSBiaXQg c2luY2UgSSBsYXN0IHNhdyB0aGUgdGFsayAocXVpdGUgYXdoaWxlIGFnbyEpIEJ1dCBoZXJlJ3Mg YSAyMDE3IHZlcnNpb246IGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9cHRHNUh0bXZR eDgNCg0KQXQgYXJvdW5kIDE5OjQ1IGhlJ3MgdGFsa2luZyBhYm91dCBjb21wYWN0aW5nIGJlZm9y ZSBmb3JrLg0KDQpXaGVuIEkgc2F3IGFuIG9sZGVyIHRhbGssIGhlIHdhcyB0YWxraW5nIGFib3V0 IChJIGJlbGlldmUpIHJ1bm5pbmcgYSBsYXJnZSBSYWlscyBhcHAgZm9yIGF3aGlsZSBhbmQgdGhl biBqdXN0IHNob3dpbmcgdGhhdCBtb3ZpbmcgYXJvdW5kIGxvbmctbGl2ZWQgYmxvY2tzIG9mIG1l bW9yeSByZWR1Y2VkIGZyYWdtZW50YXRpb24uIEJ1dCBJIG1heSByZW1lbWJlciB3cm9uZy4NCg0K LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRmVhdHVyZSAjMTU2MjY6 IE1hbnVhbCBDb21wYWN0aW9uIGZvciBNUkkncyBHQyAoYEdDLmNvbXBhY3RgKQ0KaHR0cHM6Ly9i dWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE1NjI2I2NoYW5nZS03NzMwMg0KDQoqIEF1dGhvcjog dGVuZGVybG92ZW1ha2luZyAoQWFyb24gUGF0dGVyc29uKQ0KKiBTdGF0dXM6IE9wZW4NCiogUHJp b3JpdHk6IE5vcm1hbA0KKiBBc3NpZ25lZTogDQoqIFRhcmdldCB2ZXJzaW9uOiANCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkhpLA0KDQpJJ3ZlIGF0dGFjaGVkIGEg cGF0Y2ggdGhhdCBpbXBsZW1lbnRzIGEgY29tcGFjdG9yIGZvciBNUkkuICBJJ2xsIHRyeSB0byBk ZXNjcmliZSB0aGUgcGF0Y2ggaW4gZGV0YWlsIGJlbG93LCBidXQgdGhlIGJpZ2dlc3QgdXNlciBm YWNpbmcgY2hhbmdlcyBhcmU6DQoNCjEuIEEgbmV3IG1ldGhvZCBgR0MuY29tcGFjdGAgdGhhdCBj YW4gYmUgY2FsbGVkIGZyb20gUnVieQ0KMi4gQyBleHRlbnNpb25zIGhhdmUgYSBuZXcgImFmdGVy IGNvbXBhY3Rpb24iIGNhbGxiYWNrIHRoZXkgY2FuIHJlZ2lzdGVyDQozLiBJbnRyb2R1Y3Rpb24g b2YgbmV3IG1hcmtpbmcgZnVuY3Rpb25zIHRoYXQgYWxsb3cgb2JqZWN0cyB0byBiZSBtYXJrZWQs IGJ1dCBub3QgInBpbm5lZCIgdG8gdGhlIHNhbWUgbG9jYXRpb24NCjQuIEEgZnVuY3Rpb24gdG8g Z2V0IHRoZSBuZXcgbG9jYXRpb24gb2YgYW4gb2JqZWN0ICh0byBiZSB1c2VkIGZyb20gdGhlICJh ZnRlciBjb21wYWN0aW9uIiBjYWxsYmFjaykNCg0KIyBDb21wYWN0b3IgZm9yIFJHZW5HQw0KDQpU aGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgY29tcGFjdG9yIGltcGxlbWVudGF0aW9uIGZvciBS R2VuR0MuICBUaGlzIHBhdGNoDQphZGRzIGEgbmV3IG1ldGhvZCB0byBSdWJ5LCBgR0MuY29tcGFj dGAgd2hpY2ggd2lsbCBjb21wYWN0IHRoZSBvYmplY3RzIGluIHRoZQ0KaGVhcC4gIFdoYXQgZm9s bG93cyBpcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBhbGdvcml0aG0sIGFsb25nIHdpdGggYWNoaWV2 ZW1lbnRzDQphbmQgdGVjaG5pY2FsIGNoYWxsZW5nZXMuDQoNCiMjIFN0ZXBzIGZvciBDb21wYWN0 aW9uDQoNClRoZXNlIGFyZSB0aGUgaGlnaCBsZXZlbCBzdGVwcyB0YWtlbiBpbiBgR0MuY29tcGFj dGAgYXJlIGFzIGZvbGxvd3M6DQoNCjEuIEZ1bGwgR0MNCjIuIE1vdmUgb2JqZWN0cw0KMy4gVXBk YXRlIHJlZmVyZW5jZXMNCjQuIEZ1bGwgR0MNCg0KIyMjIFN0ZXAgT25lLCBGdWxsIEdDDQoNCk5v dCBhbGwgb2JqZWN0cyBpbiBSdWJ5J3MgaGVhcCBjYW4gbW92ZS4gIEluIHBhcnRpY3VsYXIsIEMg ZXh0ZW5zaW9ucyBtYXkgaG9sZA0KcmVmZXJlbmNlcyB0byBWQUxVRSBwb2ludGVycy4gIElmIHRo ZSBWQUxVRSBwb2ludGVycyBtb3ZlLCB0aGUgQyBleHRlbnNpb24gbWF5DQpub3QgYmUgYWJsZSB0 byBmaW5kIHRoZW0gYW5kIHdpbGwgZ2V0IGEgU0VHViBvciBwb3NzaWJseSB3cm9uZyBkYXRhLg0K DQpUbyBwcmV2ZW50IHRoaXMsIGEgbmV3ICJwaW5uaW5nIiB0YWJsZSB3YXMgaW50cm9kdWNlZC4g IEFueSBvYmplY3QgbWFya2VkIHZpYQ0KYHJiX2djX21hcmtgIGlzICJwaW5uZWQiIGFuZCBpcyBu b3QgYWxsb3dlZCB0byBtb3ZlLiAgQyBleHRlbnNpb25zIG11c3QgbWFyaw0KdGhlaXIgcmVmZXJl bmNlcyBpbiBvcmRlciB0byBrZWVwIHRoZW0gYWxpdmUuICBTaW5jZSBDIGV4dGVuc2lvbnMgdXNl DQpgcmJfZ2NfbWFya2AgdG8gbWFyayBhIHJlZmVyZW5jZSwgd2Uga25vdyBub3QgdG8gbW92ZSB0 aGF0IHJlZmVyZW5jZS4gIEluIG9yZGVyDQp0byBlbnN1cmUgYWxsIHJlZmVyZW5jZXMgZ2V0IG1h cmtlZCwgd2UgcGVyZm9ybSBhIGZ1bGwgR0MuDQoNCk5ldyBmdW5jdGlvbnMsIGByYl9nY19tYXJr X25vX3BpbmAsIGV0YyB3ZXJlIGludHJvZHVjZWQgYW5kIHVzZWQgaW50ZXJuYWxseS4NClRoZXNl IGZ1bmN0aW9ucyBrZWVwcyB0aGUgb2JqZWN0IGFsaXZlIGJ1dCB3aXRob3V0IHBpbm5pbmcgdGhl IHJlZmVyZW5jZS4NCg0KU3VtbWFyeTogUGVyZm9ybSBhIGZ1bGwgR0Mgc28gdGhhdCBvYmplY3Rz IG1hcmtlZCB3aXRoIGByYl9nY19tYXJrYCBkbyBub3QgbW92ZS4NCg0KIyMjIFN0ZXAgVHdvLCBN b3ZlIE9iamVjdHMNCg0KVGhpcyBjb21wYWN0b3IgdXNlcyBhICJ0d28gZmluZ2VyIiBhbGdvcml0 aG0gd2hpY2ggd2FzIGludHJvZHVjZWQgaW4gIlRoZQ0KUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgTElT UDogSXRzIE9wZXJhdGlvbiBhbmQgQXBwbGljYXRpb25zIiAocGFnZSAyMjgpW14xXS4gIFR3bw0K cG9pbnRlcnMgcG9pbnQgYXQgZWFjaCBzaWRlIG9mIHRoZSBoZWFwLCBpZiBvbmUgc2xvdCBpcyBl bXB0eSwgYW5kIHRoZSBvdGhlciBpcw0KbW92ZWFibGUsIGl0IHN3YXBzIHBsYWNlcyBhbmQgbGVh dmVzIGEgYFRfTU9WRURgIG9iamVjdCB0aGF0IGNvbnRhaW5zIGENCmZvcndhcmRpbmcgYWRkcmVz cy4NCg0KSW4gUnVieSwgdGhlIGFsZ29yaXRobSBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOg0K DQpgYGBydWJ5DQpkZWYgY29tcGFjdA0KICBoZWFwID0gWyAuLi4gXSAjIG1hbnkgc2xvdHMNCiAg bGVmdCAgPSAwDQogIHJpZ2h0ID0gaGVhcC5sZW5ndGggLSAxDQoNCiAgd2hpbGUgbGVmdCA8IHJp Z2h0DQogICAgbGVmdF9zbG90ID0gaGVhcFtsZWZ0XQ0KICAgIHJpZ2h0X3Nsb3QgPSBoZWFwW3Jp Z2h0XQ0KDQogICAgaWYgaXNfZW1wdHk/KGxlZnRfc2xvdCkgJiYgIWlzX2VtcHR5PyhyaWdodF9z bG90KSAmJiBjYW5fbW92ZT8ocmlnaHRfc2xvdCkNCiAgICAgIHN3YXAobGVmdCwgcmlnaHQpDQog ICAgICBoZWFwW3JpZ2h0XSA9IFRfTU9WRUQubmV3KGxlZnQpICMgbGVhdmUgZm9yd2FyZGluZyBh ZGRyZXNzDQogICAgZW5kDQoNCiAgICB3aGlsZSAhaXNfZW1wdHk/KGhlYXBbbGVmdF0pDQogICAg ICBsZWZ0ICs9IDENCiAgICBlbmQNCg0KICAgIHdoaWxlIGlzX2VtcHR5PyhoZWFwW3JpZ2h0XSkg fHwgIWNhbl9tb3ZlPyhoZWFwW3JpZ2h0XSkNCiAgICAgIHJpZ2h0IC09IDENCiAgICBlbmQNCiAg ZW5kDQplbmQNCmBgYA0KDQpJZiB3ZSBoYXZlIGEgaGVhcCB3aXRoIDYgc2xvdHMsIGJlZm9yZSBj b21wYWN0aW9uIGl0IG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2UNCnRoaXM6DQoNCmBgYA0KICAg ICAgICAgICAgICAgICAgICAg4pSMIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSA IOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgQmVmb3JlIENvbXBhY3Rp b24gICDilIIgICAgICAgDQogICAgICAgICAgICAgICAgICAgICDilJQg4pSAIOKUgCDilIAg4pSA IOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICDilIzi lIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDi lIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilJANCiBTbG90 IEluZGV4ICAgIOKUgiAgMSAg4pSCICAyICDilIIgIDMgIOKUgiAgNCAg4pSCICA1ICDilIIgIDYg IOKUgg0KICAgICAgICAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA 4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS8 4pSA4pSA4pSA4pSA4pSA4pSkDQpTbG90IENvbnRlbnRzICDilIIgIEEgIOKUgiAgQiAg4pSCRW1w dHnilIJFbXB0eeKUgiAgQyAg4pSCICBEICDilIINCiAgICAgICAgICAgICAgIOKUgiAgICAg4pSC ICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgg0KICAgICAgICAgICAgICAg 4pSU4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS0 4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSYDQpg YGANCg0KQWZ0ZXIgY29tcGFjdGlvbiwgYnV0IGJlZm9yZSByZWZlcmVuY2UgdXBkYXRlLCBpdCB3 aWxsIGxvb2sgbGlrZSB0aGlzOg0KDQpgYGANCiAgICAgICAgICAgICAgICAgICAgIOKUjCDilIAg 4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAgICAg ICAgICAgICAgICAgICAgICBBZnRlciBDb21wYWN0aW9uICAg4pSCICAgICAgIA0KICAgICAgICAg ICAgICAgICAgICAg4pSUIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDi lIAgICAgICAgIA0KICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA 4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA 4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJbmRleCAgICDilIIgIDEgIOKUgiAgMiAg 4pSCICAzICDilIIgIDQgIOKUgiAgNSAg4pSCICA2ICDilIINCiAgICAgICAgICAgICAgIOKUnOKU gOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKU gOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUpA0KU2xvdCBD b250ZW50cyAg4pSCICBBICDilIIgIEIgIOKUgiAgRCAg4pSCICBDICDilIJNT1ZFROKUgk1PVkVE 4pSCDQogICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUglRP IDQg4pSCVE8gMyDilIINCiAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKU gOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKU gOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0KYGBgDQoNClNsb3RzIDUgYW5kIDYgY29udGFp biBgVF9NT1ZFRGAgb2JqZWN0cyB0aGF0IHBvaW50IHRvIHRoZSBuZXcgbG9jYXRpb25zIG9mIEQg YW5kDQpDIG9iamVjdHMuDQoNCiMjIyBTdGVwIFRocmVlLCBVcGRhdGUgUmVmZXJlbmNlcw0KDQpB ZnRlciBvYmplY3RzIGhhdmUgbW92ZWQsIHJlZmVyZW5jZXMgYXJlIHVwZGF0ZWQuICBUaGlzIGlz IGEgbWF0dGVyIG9mIHVwZGF0aW5nDQphbnkgcmVmZXJlbmNlcyB0byB1c2UgdGhlIGZvcndhcmRp bmcgYWRkcmVzcyByYXRoZXIgdGhhbiB0aGUgb3JpZ2luYWwgbG9jYXRpb24uDQoNCkZvciBleGFt cGxlLCBpZiBvYmplY3QgQSBoYXMgYSByZWZlcmVuY2UgdG8gQywgYW5kIEIgYSByZWZlcmVuY2Ug dG8gRDoNCg0KYGBgDQogICAgICAgICAgICAgICAgICAgICDilIwg4pSAIOKUgCDilIAg4pSAIOKU gCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAg ICBCZWZvcmUgQ29tcGFjdGlvbiAgIOKUgiAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIOKU lCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAg ICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKU gOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKU gOKUgOKUgOKUkA0KIFNsb3QgSW5kZXggICAg4pSCICAxICDilIIgIDIgIOKUgiAgMyAg4pSCICA0 ICDilIIgIDUgIOKUgiAgNiAg4pSCDQogICAgICAgICAgICAgICDilJzilIDilIDilIDilIDilIDi lLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzi lIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilKQNClNsb3QgQ29udGVudHMgIOKUgiAg QSAg4pSCICBCICDilIJFbXB0eeKUgkVtcHR54pSCICBDICDilIIgIEQgIOKUgg0KICAgICAgICAg ICAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSC DQogICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTi lIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDi lIDilIDilIDilIDilJgNCiAgICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICAgICAgICAg ICAgICDilrIgICAgIOKWsiAgIA0KICAgICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgICAg ICAgICAgICAgIOKUgiAgICAg4pSCICAgDQogICAgICAgICAgICAgICAgICDilJTilIDilIDilIDi lIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilJggICAgIOKUgiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSYICAgDQpgYGANCg0KQWZ0ZXIgY29tcGFjdGlvbiwgYnV0IGJlZm9yZSB1cGRhdGluZyByZWZl cmVuY2VzLCB0aGUgaGVhcCB3aWxsIGxvb2sgbGlrZSB0aGlzOg0KDQpgYGANCiAgICAgICAgICAg ICAgICAgICAgIOKUjCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSA ICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciBDb21wYWN0aW9uICAg4pSC ICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAg4pSUIOKUgCDilIAg4pSAIOKUgCDilIAg4pSA IOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA 4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA 4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJbmRleCAg ICDilIIgIDEgIOKUgiAgMiAg4pSCICAzICDilIIgIDQgIOKUgiAgNSAg4pSCICA2ICDilIINCiAg ICAgICAgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKU gOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKU gOKUgOKUgOKUpA0KU2xvdCBDb250ZW50cyAg4pSCICBBICDilIIgIEIgIOKUgiAgRCAg4pSCICBD ICDilIJNT1ZFROKUgk1PVkVE4pSCDQogICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAg4pSC ICAgICDilIIgICAgIOKUglRPIDQg4pSCVE8gMyDilIINCiAgICAgICAgICAgICAgIOKUlOKUgOKU gOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKU gOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0KICAgICAgICAg ICAgICAgICAg4pSCICAgICDilIIgICAgICAgICAgICAgICAgIOKWsiAgICAg4payICAgDQogICAg ICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAN CiAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAg4pSCICAgDQogICAgICAg ICAgICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICANCmBgYA0KDQpUaGUgdXBkYXRl IHJlZmVyZW5jZXMgc3RlcCBsb29rcyBhdCBlYWNoIG9iamVjdCBpbiB0aGUgaGVhcCwgY2hlY2tz IHRvIHNlZSBpZiBpdA0KcmVmZXJlbmNlcyBhbnkgbW92ZWQgc2xvdHMsIHRoZW4gdXBkYXRlcyB0 aGUgcmVmZXJlbmNlIHRvIHVzZSB0aGUgbmV3IGxvY2F0aW9uLg0KSW4gUnVieSwgaXQgbG9va3Mg bGlrZSB0aGlzOg0KDQpgYGBydWJ5DQpkZWYgdXBkYXRlX3JlZmVyZW5jZXMNCiAgaGVhcC5lYWNo IGRvIHxzbG90fA0KICAgIG5leHQgaWYgaXNfZW1wdHk/KHNsb3QpIHx8IGlzX21vdmVkPyhzbG90 KQ0KDQogICAgc2xvdC5yZWZlcmVuY2VzLmVhY2hfd2l0aF9pbmRleCBkbyB8Y2hpbGQsIGl8DQog ICAgICBpZiBpc19tb3ZlZD8oY2hpbGQpDQogICAgICAgIHNsb3Quc2V0X3JlZmVyZW5jZShpLCBj aGlsZC5uZXdfbG9jYXRpb24pDQogICAgICBlbmQNCiAgICBlbmQNCiAgZW5kDQplbmQNCmBgYA0K DQpBZnRlciByZWZlcmVuY2UgdXBkYXRlcywgdGhlIGhlYXAgd2lsbCBsb29rIGxpa2UgdGhpczoN Cg0KYGBgDQogICAgICAgICAgICAgICAgICAgICDilIwg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg 4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBBZnRl ciBSZWYgVXBkYXRlcyAgIOKUgiAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIOKUlCDilIAg 4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAgICAg ICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKU gOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKU gOKUkA0KIFNsb3QgSW5kZXggICAg4pSCICAxICDilIIgIDIgIOKUgiAgMyAg4pSCICA0ICDilIIg IDUgIOKUgiAgNiAg4pSCDQogICAgICAgICAgICAgICDilJzilIDilIDilIDilIDilIDilLzilIDi lIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDi lIDilIDilIDilLzilIDilIDilIDilIDilIDilKQNClNsb3QgQ29udGVudHMgIOKUgiAgQSAg4pSC ICBCICDilIIgIEQgIOKUgiAgQyAg4pSCTU9WRUTilIJNT1ZFROKUgg0KICAgICAgICAgICAgICAg 4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIJUTyA0IOKUglRPIDMg4pSCDQogICAg ICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDi lIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDi lIDilIDilJgNCiAgICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICDilrIgICAgIOKWsiAg ICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg 4pSCICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDi lLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilJggICAgICAgICAgICAgICANCiAg ICAgICAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAgICAgICAg ICAgICAgIA0KYGBgDQoNCiMjIyBTdGVwIEZvdXIsIEZ1bGwgR0MNCg0KQWZ0ZXIgcmVmZXJlbmNl cyBoYXZlIGJlZW4gdXBkYXRlZCwgYSBmdWxsIEdDIGlzIHBlcmZvcm1lZC4gIFRoaXMgY29udmVy dHMgdGhlDQpgVF9NT1ZFRGAgc2xvdHMgYmFjayBpbiB0byBgVF9FTVBUWWAgc2xvdHMuICBUaGUg R0MgYXV0b21hdGljYWxseSB0YWtlcyBjYXJlIG9mDQp0aGlzIGJlY2F1c2Ugbm8gb2JqZWN0IHNo b3VsZCByZWZlcmVuY2UgYSBgVF9NT1ZFRGAgc2xvdC4NCg0KIyMgTm9uIE1vdmluZyBPYmplY3Rz DQoNCk5vbiBtb3Zpbmcgb2JqZWN0cyBhcmU6DQoNCjEuIE9iamVjdHMgb24gdGhlIHN0YWNrDQoy LiBPYmplY3RzIG1hcmtlZCB3aXRoIGByYl9nY19tYXJrYA0KMy4gSGFzaCBrZXkgb2JqZWN0cw0K DQojIyMgT2JqZWN0cyBvbiB0aGUgc3RhY2sNCg0KVGhlIHN0YWNrIHNob3VsZCBub3QgYmUgbXV0 YXRlZCwgc28gdGhlc2UgYXJlIHBpbm5lZC4NCg0KIyMjIE9iamVjdHMgbWFya2VkIHdpdGggYHJi X2djX21hcmtgDQoNCkFzIG1lbnRpb25lZCBlYXJsaWVyLCBhbnkgb2JqZWN0IG1hcmtlZCB3aXRo IGByYl9nY19tYXJrYCBtYXkgbm90IG1vdmUgYmVjYXVzZSBhDQpDIGV4dGVuc2lvbiBtYXkgaG9s ZCBhIHJlZmVyZW5jZS4gIEhlcmUgaXMgYW4gZXhjZXJwdCBmcm9tIFlhamwsIGEgSlNPTiBwYXJz ZXIuDQpUaGlzIGlzIHRoZSBtYXJrIGZ1bmN0aW9uIGl0IHVzZXM6DQoNCmBgYGMNCnN0YXRpYyB2 b2lkIHlhamxfZW5jb2Rlcl93cmFwcGVyX21hcmsodm9pZCAqIHdyYXBwZXIpIHsNCiAgICB5YWps X2VuY29kZXJfd3JhcHBlciAqIHcgPSB3cmFwcGVyOw0KICAgIGlmICh3KSB7DQogICAgICAgIHJi X2djX21hcmsody0+b25fcHJvZ3Jlc3NfY2FsbGJhY2spOw0KICAgICAgICByYl9nY19tYXJrKHct PnRlcm1pbmF0b3IpOw0KICAgIH0NCn0NCg0KDQpvYmogPSBEYXRhX01ha2VfU3RydWN0KGtsYXNz LCB5YWpsX2VuY29kZXJfd3JhcHBlciwgeWFqbF9lbmNvZGVyX3dyYXBwZXJfbWFyaywgeWFqbF9l bmNvZGVyX3dyYXBwZXJfZnJlZSwgd3JhcHBlcik7DQpgYGANCg0KVGhlIHZhbHVlcyBpbiB0aGlz IG1hcmsgZnVuY3Rpb24gYHctPm9uX3Byb2dyZXNzX2NhbGxiYWNrYCBhbmQgYHctPnRlcm1pbmF0 b3JgDQp3aWxsIG5vdCBtb3ZlIHNpbmNlIHRoZXkgYXJlIHBpbm5lZCBieSBgcmJfZ2NfbWFya2Au DQoNCiMjIyBIYXNoIGtleSBvYmplY3RzDQoNCkNlcnRhaW4gaGFzaCBrZXlzIHdpbGwgbm90IG1v dmUuICBNb3N0IG9iamVjdHMgdXNlIHRoZWlyIGFkZHJlc3MgYXMgdGhlIGhhc2gNCnZhbHVlLiAg SWYgdGhlIG9iamVjdCBtb3ZlcywgdGhlIGhhc2ggdmFsdWUgY291bGQgY2hhbmdlLCBzbyBoYXNo IGtleXMgYXJlIG5vdA0KYWxsb3dlZCB0byBtb3ZlLg0KDQpUaGVyZSBpcyBhbiBleGNlcHRpb24g Zm9yIHN0cmluZyBvYmplY3RzLiAgU3RyaW5nIG9iamVjdHMgY2FsY3VsYXRlIHRoZWlyIGhhc2gN CmJhc2VkIG9uIHRoZSBieXRlcyBpbiB0aGUgc3RyaW5nLiAgU2luY2UgdGhlIGJ5dGVzIGluIHRo ZSBzdHJpbmcgZG8gbm90IGNoYW5nZQ0KYWZ0ZXIgbW92ZSwgdGhleSBhcmUgYWxsb3dlZCB0byBt b3ZlLiAgTW9zdCBoYXNoIGtleXMgaW4gbGFyZ2UgcHJvZ3JhbXMgYXJlDQpzdHJpbmdzLCBzbyBv bmx5IGFsbG93aW5nIHN0cmluZyBrZXlzIHRvIG1vdmUgc2VlbWVkIGVub3VnaC4NCg0KIyMgU3Bl Y2lhbCBDb25zaWRlcmF0aW9ucw0KDQojIyMgT2JqZWN0IElEDQoNCmBPYmplY3Qjb2JqZWN0X2lk YCBiYXNlcyBpdHMgdmFsdWUgZnJvbSB0aGUgYWRkcmVzcyBvZiB0aGUgb2JqZWN0LiAgRm9yIGV4 YW1wbGU6DQoNCmBgYHJ1YnkNCnggPSBPYmplY3QubmV3DQppZCA9IHgub2JqZWN0X2lkDQpHQy5j b21wYWN0ICAgICAgICAjIGB4YCBtb3Zlcw0KaWQgPT0geC5vYmplY3RfaWQgIyBgaWRgIHNob3Vs ZCBiZSBzYW1lIGFzIGB4Lm9iamVjdF9pZGANCmBgYA0KDQpXZSBleHBlY3QgdGhlIG9iamVjdCBp ZCB0byByZW1haW4gdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiBjb21wYWN0aW9uLiAgVG8gZGVhbA0K d2l0aCBgb2JqZWN0X2lkYCwgdHdvIGhhc2hlcyB3ZXJlIGludHJvZHVjZWQuICBPbmUgaGFzaCBj b250YWlucyBhIG1hcCBvZiB0aGUNCm9iamVjdCB0byB0aGUgKnNlZW4qIG9iamVjdCBpZC4gIFRo ZSBzZWNvbmQgbWFwIGNvbnRhaW5zIGFsbCBzZWVuIG9iamVjdCBpZHMuDQpUaGUgbWFwcyBhcmUg dXBkYXRlZCBhbnkgdGltZSBgb2JqZWN0X2lkYCBpcyBjYWxsZWQsIGFuIG9iamVjdCBtb3Zlcywg b3IgYW4NCm9iamVjdCBpcyBmcmVlZC4NCg0Kb2JqZWN0X2lkIGltcGxlbWVudGF0aW9uIGluIFJ1 Ynk6DQoNCmBgYHJ1YnkNCiRvYmpfdG9faWQgPSB7fQ0KJGlkX3RvX29iaiA9IHt9DQoNCmNsYXNz IE9iamVjdA0KICBkZWYgb2JqZWN0X2lkDQogICAgaWYgJG9ial90b19pZC5rZXk/KGFkZHJlc3Mp DQogICAgICAjIFNlY29uZCBjYWxsIHRvIG9iamVjdF9pZCBvbiB0aGlzIG9iamVjdA0KICAgICAg cmV0dXJuICRvYmpfdG9faWRbYWRkcmVzc10NCiAgICBlbHNlDQogICAgICAjIEZpcnN0IGNhbGwg dG8gb2JqZWN0X2lkIG9uIHRoaXMgb2JqZWN0DQoNCiAgICAgIGFkZHIgPSBzZWxmLmFkZHJlc3MN Cg0KICAgICAgbG9vcCBkbw0KICAgICAgICBpZiAkc2Vlbl9pZHMua2V5PyhhZGRyKQ0KICAgICAg ICAgICMgUmVzb2x2ZSBjb25mbGljdA0KICAgICAgICAgIGFkZHIgKz0gc2l6ZW9mKFJWQUxVRSkN CiAgICAgICAgZWxzZQ0KICAgICAgICAgICRvYmpfdG9faWRbc2VsZi5hZGRyZXNzXSA9IGFkZHIN CiAgICAgICAgICAkaWRfdG9fb2JqW2FkZHJdICAgICAgICAgPSBzZWxmDQogICAgICAgICAgcmV0 dXJuIGFkZHINCiAgICAgICAgZW5kDQogICAgICBlbmQNCiAgICBlbmQNCiAgZW5kDQoNCiAgcHJp dmF0ZQ0KDQogIGRlZiBhZGRyZXNzDQogICAgIyByZXR1cm5zIGFkZHJlc3MgaW4gbWVtb3J5IG9m IG9iamVjdA0KICBlbmQNCmVuZA0KYGBgDQoNCkR1cmluZyBjb21wYWN0aW9uOg0KDQpgYGBydWJ5 DQpkZWYgY29tcGFjdA0KICBoZWFwID0gWyAuLi4gXSAjIG1hbnkgc2xvdHMNCg0KICB3aGlsZSBs ZWZ0IDwgcmlnaHQNCiAgICBkZXN0X3Nsb3QgPSBoZWFwW2xlZnRdDQogICAgc291cmNlX3Nsb3Qg PSBoZWFwW3JpZ2h0XQ0KDQogICAgaWYgbW92aW5nPyhzb3VyY2Vfc2xvdCkNCiAgICAgIGlmICRv YmpfdG9faWQua2V5Pyhzb3VyY2Vfc2xvdC5hZGRyZXNzKQ0KICAgICAgICBpZCA9ICRvYmpfdG9f aWQuZGVsZXRlKHNvdXJjZV9zbG90LmFkZHJlc3MpDQogICAgICAgICRvYmpfdG9faWRbZGVzdF9z bG90LmFkZHJlc3NdID0gaWQNCiAgICAgICAgJGlkX3RvX29ialtpZF0gICAgICAgICAgICAgICAg PSBkZXN0X3Nsb3QuYWRkcmVzcw0KICAgICAgZW5kDQoNCiAgICAgICMgZXRjDQogICAgZW5kDQog IGVuZA0KZW5kDQpgYGANCg0KRHVyaW5nIEZyZWU6DQoNCmBgYHJ1YnkNCmRlZiBmcmVlKG9iaikN CiAgaWYgJG9ial90b19pZC5rZXk/KG9iai5hZGRyZXNzKQ0KICAgICRzZWVuX2lkcy5kZWxldGUo JG9ial90b19pZC5kZWxldGUob2JqLmFkZHJlc3MpKQ0KICBlbmQNCmVuZA0KYGBgDQoNCiMjIyBP YmplY3RTcGFjZS5faWQycmVmDQoNCldoZW4gZ2VuZXJhdGluZyBhbiBvYmplY3QgaWQsIGluIHRo ZSBjYXNlIG9mIGEgY29sbGlzaW9uLCB0aGUgYWRkcmVzcyBpcw0KaW5jcmVtZW50ZWQgYnkgNDAu ICBUaGlzIGVuYWJsZXMgYF9pZDJyZWZgIHRvIGRldGVybWluZSB0aGVyZSBpcyBhIFZBTFVFIHBv aW50ZXINCmFuZCByb3VuZCB0cmlwIHRoZSBvYmplY3QgY29ycmVjdGx5Lg0KDQojIyBDb21wYWN0 aW9uIFN1cHBvcnQgZm9yIEMgZXh0ZW5zaW9ucw0KDQpBbnkgb2JqZWN0IG1hcmtlZCB3aXRoIGBy Yl9nY19tYXJrYCB3aWxsIGJlICJwaW5uZWQiIGFuZCBjYW5ub3QgbW92ZS4gIEMNCmV4dGVuc2lv bnMgbWFyayBvYmplY3RzIHZpYSBgcmJfZ2NfbWFya2AsIHNvIHRoaXMgZW5zdXJlcyB0aGF0IHBv aW50ZXJzIGluIEMNCnN0YXkgdmFsaWQuDQoNCkhvd2V2ZXIsIHNvbWUgQyBleHRlbnNpb25zIG1h eSB3YW50IHRvIHN1cHBvcnQgcmVmZXJlbmNlIG1vdmVtZW50Lg0KDQojIyMgUmVmZXJlbmNlIE1v dmVtZW50IGluIEMgZXh0ZW5zaW9ucw0KDQpJbiBvcmRlciB0byBtYWludGFpbiBiYWNrd2FyZHMg Y29tcGF0aWJpbGl0eSwgaWYgYSBDIGV4dGVuc2lvbiBob2xkcyBhIHJlZmVyZW5jZQ0KdG8gYSBW QUxVRSwgdGhlIFZBTFVFIHNob3VsZCBub3QgbW92ZS4gIEdvaW5nIGZvcndhcmQsIEMgZXh0ZW5z aW9ucyBjYW4gc3VwcG9ydA0KbW92aW5nIFZBTFVFcy4gIFRvIHN1cHBvcnQgbW92aW5nIFZBTFVF cywgYSBDIGV4dGVuc2lvbiBzaG91bGQgY2hhbmdlDQpgcmJfZ2NfbWFya2AgdG8gYHJiX2djX21h cmtfbm9fcGluYCwgdGhlbiBpbXBsZW1lbnQgYSBuZXcgY2FsbGJhY2sgdGhhdCBpcw0KY2FsbGVk IGR1cmluZyBjb21wYWN0aW9uIHRoYXQgZ2l2ZXMgdGhlIGV4dGVuc2lvbiBhbiBvcHBvcnR1bml0 eSB0byB1cGRhdGUgaXRzDQpvd24gcmVmZXJlbmNlcy4gIEEgbmV3IGZ1bmN0aW9uIGByYl9nY19u ZXdfbG9jYXRpb25gIHdpbGwgcmV0dXJuIHRoZSBuZXcNCmxvY2F0aW9uIGZvciBhIHBhcnRpY3Vs YXIgVkFMVUUuDQoNCkhlcmUgaXMgYW4gZXhhbXBsZSBmb3IgYXV0b2xvYWQgZnJvbSBgdmFyaWFi bGUuY2AuICBBIG5ldyBjb21wYWN0aW9uIGNhbGxiYWNrIGlzDQpyZWdpc3RlcmVkLCBgYXV0b2xv YWRfaV9jb21wYWN0YDoNCg0KYGBgYw0Kc3RhdGljIGNvbnN0IHJiX2RhdGFfdHlwZV90IGF1dG9s b2FkX2RhdGFfaV90eXBlID0gew0KICAgICJhdXRvbG9hZF9pIiwNCiAgICB7YXV0b2xvYWRfaV9t YXJrLCBhdXRvbG9hZF9pX2ZyZWUsIGF1dG9sb2FkX2lfbWVtc2l6ZSwgYXV0b2xvYWRfaV9jb21w YWN0fSwNCiAgICAwLCAwLCBSVUJZX1RZUEVEX0ZSRUVfSU1NRURJQVRFTFkNCn07DQpgYGANCg0K VGhlIG1hcmsgZnVuY3Rpb24gY2hhbmdlcyB0byAqbWFyayogcmVmZXJlbmNlcywgYnV0ICpub3Qq IHBpbiB0aGVtOg0KDQpgYGBjDQpzdGF0aWMgdm9pZA0KYXV0b2xvYWRfaV9tYXJrKHZvaWQgKnB0 cikNCnsNCiAgICBzdHJ1Y3QgYXV0b2xvYWRfZGF0YV9pICpwID0gcHRyOw0KDQogICAgcmJfZ2Nf bWFya19ub19waW4ocC0+ZmVhdHVyZSk7DQoNCiAgICAvKiBhbGxvdyBHQyB0byBmcmVlIHVzIGlm IG5vIG1vZHVsZXMgcmVmZXIgdG8gdGhpcyB2aWEgYXV0b2xvYWRfY29uc3QuYWQgKi8NCiAgICBp ZiAobGlzdF9lbXB0eSgmcC0+Y29uc3RhbnRzKSkgew0KICAgICAgICByYl9oYXNoX2RlbGV0ZShh dXRvbG9hZF9mZWF0dXJlbWFwLCBwLT5mZWF0dXJlKTsNCiAgICB9DQp9DQpgYGANCg0KQWZ0ZXIg dGhlIGhlYXAgaXMgY29tcGFjdGVkLCBhbnkgQyBleHRlbnNpb25zIHRoYXQgcmVnaXN0ZXJlZCBh ICJjb21wYWN0aW9uIg0KY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgYW5kIGhhdmUgYSBjaGFuY2Ug dG8gdXBkYXRlIGludGVybmFsIHJlZmVyZW5jZXMuICBUaGUNCmF1dG9sb2FkIGNvbXBhY3Rpb24g ZnVuY3Rpb24gaXMgbGlrZSB0aGlzOg0KDQpgYGBjDQpzdGF0aWMgdm9pZA0KYXV0b2xvYWRfaV9j b21wYWN0KHZvaWQgKnB0cikNCnsNCiAgICBzdHJ1Y3QgYXV0b2xvYWRfZGF0YV9pICpwID0gcHRy Ow0KICAgIHAtPmZlYXR1cmUgPSByYl9nY19uZXdfbG9jYXRpb24ocC0+ZmVhdHVyZSk7DQpgYGAN Cg0KVGhlIGNvbXBhY3Rpb24gY2FsbGJhY2sgYXNrcyBmb3IgdGhlIG5ldyBsb2NhdGlvbiBmb3Ig dGhlIGBwLT5mZWF0dXJlYA0KcmVmZXJlbmNlLiAgYHJiX2djX25ld19sb2NhdGlvbmAgd2lsbCBl aXRoZXIgcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mDQpgcC0+ZmVhdHVyZWAgKGluIHRoZSBj YXNlIHRoZSBWQUxVRSBkaWQgbm90IG1vdmUpLCBvciB0aGUgbmV3IGxvY2F0aW9uLg0KDQojIyBS ZWZlcmVuY2UgVmVyaWZpY2F0aW9uIGFuZCBUZXN0aW5nDQoNCkFmdGVyIGNvbXBhY3Rpb24sIG9i amVjdHMgdGhhdCBoYXZlIG1vdmVkIGFyZSBjaGFuZ2VkIHRvIGBUX01PVkVEYCBvYmplY3RzIHdp dGgNCmZvcndhcmRpbmcgYWRkcmVzc2VzLiAgT25jZSBhbGwgcmVmZXJlbmNlcyBhcmUgdXBkYXRl ZCwgbm8gb2JqZWN0IHNob3VsZCBwb2ludA0KdG8gYSBgVF9NT1ZFRGAgc2xvdC4gIFdlIGNhbiBz YXkgdGhhdCBiZWZvcmUgYW5kIGFmdGVyIGNvbXBhY3Rpb24sIG5vIG9iamVjdA0Kc2hvdWxkIGV2 ZXIgcG9pbnQgYXQgYSBgVF9NT1ZFRGAgc2xvdC4gIFNvIGlmIGEgYFRfTU9WRURgIG9iamVjdCBp cyBldmVyIHB1c2hlZA0Kb24gdG8gdGhlIG1hcmsgcXVldWUsIHRoZXJlIGlzIGEgYnVnLiAgYHB1 c2hfbWFya19zdGFja2AgaGFzIGEgY2hlY2sgZm9yDQpgVF9NT1ZFRGAgb2JqZWN0cywgYW5kIHdp bGwgY3Jhc2ggaWYgYSBgVF9NT1ZFRGAgb2JqZWN0IGlzIGV2ZXIgcHVzaGVkIG9uIHRvIHRoZQ0K bWFyayBzdGFjay4NCg0KQSBtZXRob2QgYEdDLnZlcmlmeV9jb21wYWN0aW9uX3JlZmVyZW5jZXNg IHdhcyBhZGRlZCB0aGF0IGRvdWJsZXMgdGhlIGF2YWlsYWJsZQ0KaGVhcCBzaXplLCB0aGVuIGNv bXBhY3RzIHRoZSBoZWFwLiAgU2luY2UgdGhlIGhlYXAgaGFzIGRvdWJsZWQgaW4gc2l6ZSwgYW55 DQpvYmplY3QgdGhhdCBjYW4gbW92ZSB3aWxsIG1vdmUuICBBbnkgcmVmZXJlbmNlcyB0byBgVF9N T1ZFRGAgb2JqZWN0cyB3aWxsIGJlDQpjYXVnaHQgZHVyaW5nIHRoZSBHQyBwaGFzZSBhZnRlciBj b21wYWN0aW9uLg0KDQojIyBLbm93biBJc3N1ZQ0KDQpTYWZldHkgZm9yIEMgZXh0ZW5zaW9ucyBk ZXBlbmRzIGVudGlyZWx5IG9uIEMgZXh0ZW5zaW9ucyBtYXJraW5nIHRoZWlyDQpyZWZlcmVuY2Vz LiAgSWYgYSBDIGV4dGVuc2lvbiBkb2VzIG5vdCBtYXJrIGEgcmVmZXJlbmNlLCB0aGUgY29tcGFj dG9yIGFzc3VtZXMNCnRoYXQgdGhlIG9iamVjdCBpcyBzYWZlIHRvIG1vdmUuICBUaGlzIGNhbiBj YXVzZSBhbiBlcnJvciBpbiB0aGUgZm9sbG93aW5nDQpzaXR1YXRpb24sIHdoZW4gdGhlcmUgaXMg YW4gb2JqZWN0IGdyYXBoIGxpa2UgdGhpczoNCg0KDQpgYGANCiDilIzilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQIA0KIOKUgiAgUnVieSBPYmplY3QgIOKU giAgICAgICDilIIgIFJ1YnkgT2JqZWN0ICDilIIgDQog4pSCICBJbXBsZW1lbnRlZCAg4pSCICAg ICAgIOKUgiAgSW1wbGVtZW50ZWQgIOKUgiANCiDilIIgICAgaW4gUnVieSAgICDilIIgICAgICAg 4pSCICAgICBpbiBDICAgICAg4pSCIA0KIOKUgiAgICAgICAgICAgICAgIOKUgiAgICAgICDilIIg ICAgICAgICAgICAgICDilIIgDQog4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSYICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUmCANCiAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAg4pSC ICAgICAgICAgDQogICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAN CiAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgTk9UICAgDQogTWFya2Vk ICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtlZCANCiAgICAgICAgIOKUgiAgICAg ICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgDQogICAgICAgICDilIIgICDilIzilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgICAgICAgICAgDQog ICAgICAgICDilIIgICDilIIgICAgICAgICAgICAgICDilIIgICDilIIgICAgICAgICANCiAgICAg ICAgIOKUgiAgIOKUgiAgUnVieSBPYmplY3QgIOKUgiAgICAgICAgICAgICANCiAgICAgICAgIOKU lOKUgOKUgOKWtuKUgiAgICAgICAgICAgICAgIOKUguKXgOKUgCDilJggICAgICAgICANCiAgICAg ICAgICAgICDilIIgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgDQogICAgICAgICAgICAg 4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICAg ICAgICAgIA0KYGBgDQoNCklmIHRoZSBDIGV4dGVuc2lvbiBjb250YWlucyBhIHJlZmVyZW5jZSB0 byBhbiBvYmplY3QsIGJ1dCBleHBlY3RzIHRoZSBvYmplY3QNCm5vdCB0byBtb3ZlIGJlY2F1c2Ug YSBSdWJ5IG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSwgdGhlbiB0aGUgdGFyZ2V0IFJ1YnkN Cm9iamVjdCAqbWF5KiBtb3ZlIGFuZCB0aGUgcmVmZXJlbmNlIGluIHRoZSBDIGV4dGVuc2lvbiB3 aWxsIGJlIHdyb25nLiAgSSBsaWtlIHRvDQpjYWxsIHRoZXNlICJnaG9zdCByZWZlcmVuY2VzIiBi ZWNhdXNlIHRoZSBHQyBjYW5ub3Qgc2VlIHRoZW0gYnV0IHRoZXkgd2lsbCBjb21lDQpiYWNrIHRv IGhhdW50IHlvdS4NCg0KVGhlIHNvbHV0aW9uIHRvIHRoaXMgaXMgZWl0aGVyOg0KDQoxLiBDaGFu Z2UgdGhlIEMgZXh0ZW5zaW9uIHRvIGByYl9nY19tYXJrYCB0aGUgb2JqZWN0DQoyLiBSZW1vdmUg dGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBDIGV4dGVuc2lvbg0KDQpPbmUgZXhhbXBsZSBvZiB0aGlz IHNpdHVhdGlvbiB3YXMgZml4ZWQgaGVyZToNCg0KICBodHRwczovL2dpdGh1Yi5jb20vbXNncGFj ay9tc2dwYWNrLXJ1YnkvaXNzdWVzLzEzMw0KDQojIyBTdW1tYXJ5DQoNCkJhY2t3YXJkcyBjb21w YXRpYmlsaXR5IHdpdGggQyBleHRlbnNpb25zIGlzIG1haW50YWluZWQgYnkgInBpbm5pbmciIGFu eQ0KcmVmZXJlbmNlcyBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFya2AuICBBIGZ1bGwgbWFyayAqbXVz dCogYmUgZG9uZSBiZWZvcmUNCmNvbXBhY3RpbmcgdG8gZGlzY292ZXIgYWxsIHBpbm5lZCByZWZl cmVuY2VzLg0KDQpBIG5ldyBjYWxsYmFjayBmb3IgQyBleHRlbnNpb25zIGlzIGludHJvZHVjZWQg c28gdGhhdCBDIGV4dGVuc2lvbnMgY2FuIHN1cHBvcnQNCmNvbXBhY3Rpb24uICBDIGV4dGVuc2lv bnMgdGhhdCB3aXNoIHRvIHN1cHBvcnQgY29tcGFjdGlvbiBtdXN0IHVzZSB0aGUgbmV3DQpjYWxs YmFjaywgYHJiX2djX21hcmtfbm9fcGluYCwgYW5kIGByYl9nY19uZXdfbG9jYXRpb25gLg0KDQpD IGV4dGVuc2lvbnMgdGhhdCBtYWludGFpbiBwb2ludGVycyBidXQgZG8gbm90IG1hcmsgdGhvc2Ug cG9pbnRlcnMgbWF5IFNFR1YuICBXZQ0KY2FuIHVzZSBgR0MudmVyaWZ5X2NvbXBhY3Rpb25fcmVm ZXJlbmNlc2AgdG8gZGlzY292ZXIgdGhlc2UgaXNzdWVzLg0KDQpbXjFdOiBTZWUgYWxzbyAiVGhl IEdhcmJhZ2UgQ29sbGVjdGlvbiBIYW5kYm9vayIgcGFnZSAzMg0KDQoNCi0tLUZpbGVzLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmJlZm9yZV9jb21wYWN0LTAucG5nICgxMTEgS0Ip DQphZnRlcl9jb21wYWN0LTAucG5nICg4MC42IEtCKQ0KYmVmb3JlX2NvbXBhY3QtMS5wbmcgKDgx LjIgS0IpDQphZnRlcl9jb21wYWN0LTEucG5nICg3OS40IEtCKQ0KMDAwMS1HQy1Db21wYWN0aW9u LWZvci1NUkkucGF0Y2ggKDc3LjQgS0IpDQpydWJ5XzIwMTktMDMtMjItMTcxODM5X1Bpa2FjaHVF WEVzLU1CUC0yMDE4LmNyYXNoICg3MS40IEtCKQ0KcnVieV8yMDE5LTAzLTIyLTE3MTgzOS0xX1Bp a2FjaHVFWEVzLU1CUC0yMDE4LmNyYXNoICg3MS40IEtCKQ0KDQoNCi0tIA0KaHR0cHM6Ly9idWdz LnJ1YnktbGFuZy5vcmcvDQo=