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.6 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=ham 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 DCD08202AA for ; Wed, 27 Feb 2019 23:59:30 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 9934E121E15; Thu, 28 Feb 2019 08:59:26 +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 1F726121D35 for ; Thu, 28 Feb 2019 08:59:23 +0900 (JST) Received: by filter0043p3iad2.sendgrid.net with SMTP id filter0043p3iad2-28689-5C772458-28 2019-02-27 23:59:21.147846555 +0000 UTC m=+322562.553142878 Received: from herokuapp.com (ec2-54-91-101-91.compute-1.amazonaws.com [54.91.101.91]) by ismtpd0002p1iad1.sendgrid.net (SG) with ESMTP id 93iwutaKR0ax2xYNR_R4xg for ; Wed, 27 Feb 2019 23:59:20.806 +0000 (UTC) Date: Wed, 27 Feb 2019 23:59:22 +0000 (UTC) From: tad.a.digger@gmail.com To: ruby-core@ruby-lang.org Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 67087 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 15626 X-Redmine-Issue-Author: tenderlovemaking X-Redmine-Sender: tad 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: ync6xU2WACa70kv/Ymy4QrNMhiuLXJG8OTL2vJD1yS5gZIpGZIIBd7DAROF+XVxGnRXwdKY19oaPTK n/ItdtxEzaogN649EVzWYDvczzvQlf2HyrATqoSZXS/S5Rf9ydqvdE/xsVkwLtSUmUbp4UWUErmEq0 4sg2WZ8TrwvF+kAgzWl2H+rx8xHqiVV8oWT01HidVpcdu8UcIBgCaPHt7A== X-ML-Name: ruby-core X-Mail-Count: 91637 Subject: [ruby-core:91637] [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" SXNzdWUgIzE1NjI2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgdGFkIChUYWRhc2hpIFNhaXRvKS4NCg0K DQpSZWFsbHkgaW50ZXJlc3RpbmcsIGJ1dCB3aGF0IGFyZSB0aGUgYmVuZWZpdHMgZm9yIHVzZXJz IHdobyB3cml0ZXMgUnVieT8NCg0KRGlkIHRoZSBSYWlscyBhcHAgZ2V0IGZhc3RlciBlbm91Z2g/ ICBPciB5b3UgaGF2ZSBzb21lIG90aGVyIG1vdGl2YXRpb25zPw0KDQotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpGZWF0dXJlICMxNTYyNjogTWFudWFsIENvbXBhY3Rp b24gZm9yIE1SSSdzIEdDIChgR0MuY29tcGFjdGApDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9y Zy9pc3N1ZXMvMTU2MjYjY2hhbmdlLTc2OTAzDQoNCiogQXV0aG9yOiB0ZW5kZXJsb3ZlbWFraW5n IChBYXJvbiBQYXR0ZXJzb24pDQoqIFN0YXR1czogT3Blbg0KKiBQcmlvcml0eTogTm9ybWFsDQoq IEFzc2lnbmVlOiANCiogVGFyZ2V0IHZlcnNpb246IA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KSGksDQoNCkkndmUgYXR0YWNoZWQgYSBwYXRjaCB0aGF0IGltcGxl bWVudHMgYSBjb21wYWN0b3IgZm9yIE1SSS4gIEknbGwgdHJ5IHRvIGRlc2NyaWJlIHRoZSBwYXRj aCBpbiBkZXRhaWwgYmVsb3csIGJ1dCB0aGUgYmlnZ2VzdCB1c2VyIGZhY2luZyBjaGFuZ2VzIGFy ZToNCg0KMS4gQSBuZXcgbWV0aG9kIGBHQy5jb21wYWN0YCB0aGF0IGNhbiBiZSBjYWxsZWQgZnJv bSBSdWJ5DQoyLiBDIGV4dGVuc2lvbnMgaGF2ZSBhIG5ldyAiYWZ0ZXIgY29tcGFjdGlvbiIgY2Fs bGJhY2sgdGhleSBjYW4gcmVnaXN0ZXINCjMuIEludHJvZHVjdGlvbiBvZiBuZXcgbWFya2luZyBm dW5jdGlvbnMgdGhhdCBhbGxvdyBvYmplY3RzIHRvIGJlIG1hcmtlZCwgYnV0IG5vdCAicGlubmVk IiB0byB0aGUgc2FtZSBsb2NhdGlvbg0KNC4gQSBmdW5jdGlvbiB0byBnZXQgdGhlIG5ldyBsb2Nh dGlvbiBvZiBhbiBvYmplY3QgKHRvIGJlIHVzZWQgZnJvbSB0aGUgImFmdGVyIGNvbXBhY3Rpb24i IGNhbGxiYWNrKQ0KDQojIENvbXBhY3RvciBmb3IgUkdlbkdDDQoNClRoaXMgZG9jdW1lbnQgZGVz Y3JpYmVzIHRoZSBjb21wYWN0b3IgaW1wbGVtZW50YXRpb24gZm9yIFJHZW5HQy4gIFRoaXMgcGF0 Y2gNCmFkZHMgYSBuZXcgbWV0aG9kIHRvIFJ1YnksIGBHQy5jb21wYWN0YCB3aGljaCB3aWxsIGNv bXBhY3QgdGhlIG9iamVjdHMgaW4gdGhlDQpoZWFwLiAgV2hhdCBmb2xsb3dzIGlzIGEgZGVzY3Jp cHRpb24gb2YgdGhlIGFsZ29yaXRobSwgYWxvbmcgd2l0aCBhY2hpZXZlbWVudHMNCmFuZCB0ZWNo bmljYWwgY2hhbGxlbmdlcy4NCg0KIyMgU3RlcHMgZm9yIENvbXBhY3Rpb24NCg0KVGhlc2UgYXJl IHRoZSBoaWdoIGxldmVsIHN0ZXBzIHRha2VuIGluIGBHQy5jb21wYWN0YCBhcmUgYXMgZm9sbG93 czoNCg0KMS4gRnVsbCBHQw0KMi4gTW92ZSBvYmplY3RzDQozLiBVcGRhdGUgcmVmZXJlbmNlcw0K NC4gRnVsbCBHQw0KDQojIyMgU3RlcCBPbmUsIEZ1bGwgR0MNCg0KTm90IGFsbCBvYmplY3RzIGlu IFJ1YnkncyBoZWFwIGNhbiBtb3ZlLiAgSW4gcGFydGljdWxhciwgQyBleHRlbnNpb25zIG1heSBo b2xkDQpyZWZlcmVuY2VzIHRvIFZBTFVFIHBvaW50ZXJzLiAgSWYgdGhlIFZBTFVFIHBvaW50ZXJz IG1vdmUsIHRoZSBDIGV4dGVuc2lvbiBtYXkNCm5vdCBiZSBhYmxlIHRvIGZpbmQgdGhlbSBhbmQg d2lsbCBnZXQgYSBTRUdWIG9yIHBvc3NpYmx5IHdyb25nIGRhdGEuDQoNClRvIHByZXZlbnQgdGhp cywgYSBuZXcgInBpbm5pbmciIHRhYmxlIHdhcyBpbnRyb2R1Y2VkLiAgQW55IG9iamVjdCBtYXJr ZWQgdmlhDQpgcmJfZ2NfbWFya2AgaXMgInBpbm5lZCIgYW5kIGlzIG5vdCBhbGxvd2VkIHRvIG1v dmUuICBDIGV4dGVuc2lvbnMgbXVzdCBtYXJrDQp0aGVpciByZWZlcmVuY2VzIGluIG9yZGVyIHRv IGtlZXAgdGhlbSBhbGl2ZS4gIFNpbmNlIEMgZXh0ZW5zaW9ucyB1c2UNCmByYl9nY19tYXJrYCB0 byBtYXJrIGEgcmVmZXJlbmNlLCB3ZSBrbm93IG5vdCB0byBtb3ZlIHRoYXQgcmVmZXJlbmNlLiAg SW4gb3JkZXINCnRvIGVuc3VyZSBhbGwgcmVmZXJlbmNlcyBnZXQgbWFya2VkLCB3ZSBwZXJmb3Jt IGEgZnVsbCBHQy4NCg0KTmV3IGZ1bmN0aW9ucywgYHJiX2djX21hcmtfbm9fcGluYCwgZXRjIHdl cmUgaW50cm9kdWNlZCBhbmQgdXNlZCBpbnRlcm5hbGx5Lg0KVGhlc2UgZnVuY3Rpb25zIGtlZXBz IHRoZSBvYmplY3QgYWxpdmUgYnV0IHdpdGhvdXQgcGlubmluZyB0aGUgcmVmZXJlbmNlLg0KDQpT dW1tYXJ5OiBQZXJmb3JtIGEgZnVsbCBHQyBzbyB0aGF0IG9iamVjdHMgbWFya2VkIHdpdGggYHJi X2djX21hcmtgIGRvIG5vdCBtb3ZlLg0KDQojIyMgU3RlcCBUd28sIE1vdmUgT2JqZWN0cw0KDQpU aGlzIGNvbXBhY3RvciB1c2VzIGEgInR3byBmaW5nZXIiIGFsZ29yaXRobSB3aGljaCB3YXMgaW50 cm9kdWNlZCBpbiAiVGhlDQpQcm9ncmFtbWluZyBMYW5ndWFnZSBMSVNQOiBJdHMgT3BlcmF0aW9u IGFuZCBBcHBsaWNhdGlvbnMiIChwYWdlIDIyOClbXjFdLiAgVHdvDQpwb2ludGVycyBwb2ludCBh dCBlYWNoIHNpZGUgb2YgdGhlIGhlYXAsIGlmIG9uZSBzbG90IGlzIGVtcHR5LCBhbmQgdGhlIG90 aGVyIGlzDQptb3ZlYWJsZSwgaXQgc3dhcHMgcGxhY2VzIGFuZCBsZWF2ZXMgYSBgVF9NT1ZFRGAg b2JqZWN0IHRoYXQgY29udGFpbnMgYQ0KZm9yd2FyZGluZyBhZGRyZXNzLg0KDQpJbiBSdWJ5LCB0 aGUgYWxnb3JpdGhtIGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6DQoNCmBgYHJ1YnkNCmRlZiBj b21wYWN0DQogIGhlYXAgPSBbIC4uLiBdICMgbWFueSBzbG90cw0KICBsZWZ0ICA9IDANCiAgcmln aHQgPSBoZWFwLmxlbmd0aCAtIDENCg0KICB3aGlsZSBsZWZ0IDwgcmlnaHQNCiAgICBsZWZ0X3Ns b3QgPSBoZWFwW2xlZnRdDQogICAgcmlnaHRfc2xvdCA9IGhlYXBbcmlnaHRdDQoNCiAgICBpZiBp c19lbXB0eT8obGVmdF9zbG90KSAmJiAhaXNfZW1wdHk/KHJpZ2h0X3Nsb3QpICYmIGNhbl9tb3Zl PyhyaWdodF9zbG90KQ0KICAgICAgc3dhcChsZWZ0LCByaWdodCkNCiAgICAgIGhlYXBbcmlnaHRd ID0gVF9NT1ZFRC5uZXcobGVmdCkgIyBsZWF2ZSBmb3J3YXJkaW5nIGFkZHJlc3MNCiAgICBlbmQN Cg0KICAgIHdoaWxlICFpc19lbXB0eT8oaGVhcFtsZWZ0XSkNCiAgICAgIGxlZnQgKz0gMQ0KICAg IGVuZA0KDQogICAgd2hpbGUgaXNfZW1wdHk/KGhlYXBbcmlnaHRdKSB8fCAhY2FuX21vdmU/KGhl YXBbcmlnaHRdKQ0KICAgICAgcmlnaHQgLT0gMQ0KICAgIGVuZA0KICBlbmQNCmVuZA0KYGBgDQoN CklmIHdlIGhhdmUgYSBoZWFwIHdpdGggNiBzbG90cywgYmVmb3JlIGNvbXBhY3Rpb24gaXQgbWln aHQgbG9vayBzb21ldGhpbmcgbGlrZQ0KdGhpczoNCg0KYGBgDQogICAgICAgICAgICAgICAgICAg ICDilIwg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAg DQogICAgICAgICAgICAgICAgICAgICAgICBCZWZvcmUgQ29tcGFjdGlvbiAgIOKUgiAgICAgICAN CiAgICAgICAgICAgICAgICAgICAgIOKUlCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSA IOKUgCDilIAg4pSAICAgICAgICANCiAgICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKU rOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKU gOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUkA0KIFNsb3QgSW5kZXggICAg4pSCICAx ICDilIIgIDIgIOKUgiAgMyAg4pSCICA0ICDilIIgIDUgIOKUgiAgNiAg4pSCDQogICAgICAgICAg ICAgICDilJzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDi lIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDi lKQNClNsb3QgQ29udGVudHMgIOKUgiAgQSAg4pSCICBCICDilIJFbXB0eeKUgkVtcHR54pSCICBD ICDilIIgIEQgIOKUgg0KICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSC ICAgICDilIIgICAgIOKUgiAgICAg4pSCDQogICAgICAgICAgICAgICDilJTilIDilIDilIDilIDi lIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDi lLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilJgNCmBgYA0KDQpBZnRlciBjb21w YWN0aW9uLCBidXQgYmVmb3JlIHJlZmVyZW5jZSB1cGRhdGUsIGl0IHdpbGwgbG9vayBsaWtlIHRo aXM6DQoNCmBgYA0KICAgICAgICAgICAgICAgICAgICAg4pSMIOKUgCDilIAg4pSAIOKUgCDilIAg 4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAg IEFmdGVyIENvbXBhY3Rpb24gICDilIIgICAgICAgDQogICAgICAgICAgICAgICAgICAgICDilJQg 4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAg ICAgICAgICAgICDilIzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDi lIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDi lIDilIDilJANCiBTbG90IEluZGV4ICAgIOKUgiAgMSAg4pSCICAyICDilIIgIDMgIOKUgiAgNCAg 4pSCICA1ICDilIIgIDYgIOKUgg0KICAgICAgICAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pS8 4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA 4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSkDQpTbG90IENvbnRlbnRzICDilIIgIEEg IOKUgiAgQiAg4pSCICBEICDilIIgIEMgIOKUgk1PVkVE4pSCTU9WRUTilIINCiAgICAgICAgICAg ICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCVE8gNCDilIJUTyAzIOKUgg0K ICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA 4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA 4pSA4pSA4pSA4pSYDQpgYGANCg0KU2xvdHMgNSBhbmQgNiBjb250YWluIGBUX01PVkVEYCBvYmpl Y3RzIHRoYXQgcG9pbnQgdG8gdGhlIG5ldyBsb2NhdGlvbnMgb2YgRCBhbmQNCkMgb2JqZWN0cy4N Cg0KIyMjIFN0ZXAgVGhyZWUsIFVwZGF0ZSBSZWZlcmVuY2VzDQoNCkFmdGVyIG9iamVjdHMgaGF2 ZSBtb3ZlZCwgcmVmZXJlbmNlcyBhcmUgdXBkYXRlZC4gIFRoaXMgaXMgYSBtYXR0ZXIgb2YgdXBk YXRpbmcNCmFueSByZWZlcmVuY2VzIHRvIHVzZSB0aGUgZm9yd2FyZGluZyBhZGRyZXNzIHJhdGhl ciB0aGFuIHRoZSBvcmlnaW5hbCBsb2NhdGlvbi4NCg0KRm9yIGV4YW1wbGUsIGlmIG9iamVjdCBB IGhhcyBhIHJlZmVyZW5jZSB0byBDLCBhbmQgQiBhIHJlZmVyZW5jZSB0byBEOg0KDQpgYGANCiAg ICAgICAgICAgICAgICAgICAgIOKUjCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKU gCDilIAg4pSAICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBDb21wYWN0 aW9uICAg4pSCICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAg4pSUIOKUgCDilIAg4pSAIOKU gCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAg4pSM 4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA 4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xv dCBJbmRleCAgICDilIIgIDEgIOKUgiAgMiAg4pSCICAzICDilIIgIDQgIOKUgiAgNSAg4pSCICA2 ICDilIINCiAgICAgICAgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKU gOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKU vOKUgOKUgOKUgOKUgOKUgOKUpA0KU2xvdCBDb250ZW50cyAg4pSCICBBICDilIIgIEIgIOKUgkVt cHR54pSCRW1wdHnilIIgIEMgIOKUgiAgRCAg4pSCDQogICAgICAgICAgICAgICDilIIgICAgIOKU giAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIINCiAgICAgICAgICAgICAg IOKUlOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKU tOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0K ICAgICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgICAgICAgICAgICAgIOKWsiAgICAg4pay ICAgDQogICAgICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAgICAgICAgICAgICAg4pSCICAg ICDilIIgICANCiAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAg4pSCICAg DQogICAgICAgICAgICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICANCmBgYA0KDQpB ZnRlciBjb21wYWN0aW9uLCBidXQgYmVmb3JlIHVwZGF0aW5nIHJlZmVyZW5jZXMsIHRoZSBoZWFw IHdpbGwgbG9vayBsaWtlIHRoaXM6DQoNCmBgYA0KICAgICAgICAgICAgICAgICAgICAg4pSMIOKU gCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAg ICAgICAgICAgICAgICAgICAgIEFmdGVyIENvbXBhY3Rpb24gICDilIIgICAgICAgDQogICAgICAg ICAgICAgICAgICAgICDilJQg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSA IOKUgCAgICAgICAgDQogICAgICAgICAgICAgICDilIzilIDilIDilIDilIDilIDilKzilIDilIDi lIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDi lIDilIDilKzilIDilIDilIDilIDilIDilJANCiBTbG90IEluZGV4ICAgIOKUgiAgMSAg4pSCICAy ICDilIIgIDMgIOKUgiAgNCAg4pSCICA1ICDilIIgIDYgIOKUgg0KICAgICAgICAgICAgICAg4pSc 4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA 4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSkDQpTbG90 IENvbnRlbnRzICDilIIgIEEgIOKUgiAgQiAg4pSCICBEICDilIIgIEMgIOKUgk1PVkVE4pSCTU9W RUTilIINCiAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSC VE8gNCDilIJUTyAzIOKUgg0KICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS04pSA 4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA 4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSYDQogICAgICAgICAgICAgICAgICDilIIgICAg IOKUgiAgICAgICAgICAgICAgICAg4payICAgICDilrIgICANCiAgICAgICAgICAgICAgICAgIOKU giAgICAg4pSCICAgICAgICAgICAgICAgICDilIIgICAgIOKUgiAgIA0KICAgICAgICAgICAgICAg ICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICDilIIgICANCiAgICAgICAgICAgICAgICAgICAgICAg IOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUmCAgIA0KYGBgDQoNClRoZSB1cGRhdGUgcmVmZXJlbmNlcyBzdGVw IGxvb2tzIGF0IGVhY2ggb2JqZWN0IGluIHRoZSBoZWFwLCBjaGVja3MgdG8gc2VlIGlmIGl0DQpy ZWZlcmVuY2VzIGFueSBtb3ZlZCBzbG90cywgdGhlbiB1cGRhdGVzIHRoZSByZWZlcmVuY2UgdG8g dXNlIHRoZSBuZXcgbG9jYXRpb24uDQpJbiBSdWJ5LCBpdCBsb29rcyBsaWtlIHRoaXM6DQoNCmBg YHJ1YnkNCmRlZiB1cGRhdGVfcmVmZXJlbmNlcw0KICBoZWFwLmVhY2ggZG8gfHNsb3R8DQogICAg bmV4dCBpZiBpc19lbXB0eT8oc2xvdCkgfHwgaXNfbW92ZWQ/KHNsb3QpDQoNCiAgICBzbG90LnJl ZmVyZW5jZXMuZWFjaF93aXRoX2luZGV4IGRvIHxjaGlsZCwgaXwNCiAgICAgIGlmIGlzX21vdmVk PyhjaGlsZCkNCiAgICAgICAgc2xvdC5zZXRfcmVmZXJlbmNlKGksIGNoaWxkLm5ld19sb2NhdGlv bikNCiAgICAgIGVuZA0KICAgIGVuZA0KICBlbmQNCmVuZA0KYGBgDQoNCkFmdGVyIHJlZmVyZW5j ZSB1cGRhdGVzLCB0aGUgaGVhcCB3aWxsIGxvb2sgbGlrZSB0aGlzOg0KDQpgYGANCiAgICAgICAg ICAgICAgICAgICAgIOKUjCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg 4pSAICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIFJlZiBVcGRhdGVzICAg 4pSCICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAg4pSUIOKUgCDilIAg4pSAIOKUgCDilIAg 4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAg4pSM4pSA4pSA 4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA 4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJbmRl eCAgICDilIIgIDEgIOKUgiAgMiAg4pSCICAzICDilIIgIDQgIOKUgiAgNSAg4pSCICA2ICDilIIN CiAgICAgICAgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKU gOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKU gOKUgOKUgOKUgOKUpA0KU2xvdCBDb250ZW50cyAg4pSCICBBICDilIIgIEIgIOKUgiAgRCAg4pSC ICBDICDilIJNT1ZFROKUgk1PVkVE4pSCDQogICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAg 4pSCICAgICDilIIgICAgIOKUglRPIDQg4pSCVE8gMyDilIINCiAgICAgICAgICAgICAgIOKUlOKU gOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKU gOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0KICAgICAg ICAgICAgICAgICAg4pSCICAgICDilIIgICAgIOKWsiAgICAg4payICAgICAgICAgICAgICAgDQog ICAgICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgICAgICAgICAg ICANCiAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKU gOKUvOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAg ICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSYICAgICAgICAgICAgICAgICAgICAgDQpgYGANCg0K IyMjIFN0ZXAgRm91ciwgRnVsbCBHQw0KDQpBZnRlciByZWZlcmVuY2VzIGhhdmUgYmVlbiB1cGRh dGVkLCBhIGZ1bGwgR0MgaXMgcGVyZm9ybWVkLiAgVGhpcyBjb252ZXJ0cyB0aGUNCmBUX01PVkVE YCBzbG90cyBiYWNrIGluIHRvIGBUX0VNUFRZYCBzbG90cy4gIFRoZSBHQyBhdXRvbWF0aWNhbGx5 IHRha2VzIGNhcmUgb2YNCnRoaXMgYmVjYXVzZSBubyBvYmplY3Qgc2hvdWxkIHJlZmVyZW5jZSBh IGBUX01PVkVEYCBzbG90Lg0KDQojIyBOb24gTW92aW5nIE9iamVjdHMNCg0KTm9uIG1vdmluZyBv YmplY3RzIGFyZToNCg0KMS4gT2JqZWN0cyBvbiB0aGUgc3RhY2sNCjIuIE9iamVjdHMgbWFya2Vk IHdpdGggYHJiX2djX21hcmtgDQozLiBIYXNoIGtleSBvYmplY3RzDQoNCiMjIyBPYmplY3RzIG9u IHRoZSBzdGFjaw0KDQpUaGUgc3RhY2sgc2hvdWxkIG5vdCBiZSBtdXRhdGVkLCBzbyB0aGVzZSBh cmUgcGlubmVkLg0KDQojIyMgT2JqZWN0cyBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFya2ANCg0KQXMg bWVudGlvbmVkIGVhcmxpZXIsIGFueSBvYmplY3QgbWFya2VkIHdpdGggYHJiX2djX21hcmtgIG1h eSBub3QgbW92ZSBiZWNhdXNlIGENCkMgZXh0ZW5zaW9uIG1heSBob2xkIGEgcmVmZXJlbmNlLiAg SGVyZSBpcyBhbiBleGNlcnB0IGZyb20gWWFqbCwgYSBKU09OIHBhcnNlci4NClRoaXMgaXMgdGhl IG1hcmsgZnVuY3Rpb24gaXQgdXNlczoNCg0KYGBgYw0Kc3RhdGljIHZvaWQgeWFqbF9lbmNvZGVy X3dyYXBwZXJfbWFyayh2b2lkICogd3JhcHBlcikgew0KICAgIHlhamxfZW5jb2Rlcl93cmFwcGVy ICogdyA9IHdyYXBwZXI7DQogICAgaWYgKHcpIHsNCiAgICAgICAgcmJfZ2NfbWFyayh3LT5vbl9w cm9ncmVzc19jYWxsYmFjayk7DQogICAgICAgIHJiX2djX21hcmsody0+dGVybWluYXRvcik7DQog ICAgfQ0KfQ0KDQoNCm9iaiA9IERhdGFfTWFrZV9TdHJ1Y3Qoa2xhc3MsIHlhamxfZW5jb2Rlcl93 cmFwcGVyLCB5YWpsX2VuY29kZXJfd3JhcHBlcl9tYXJrLCB5YWpsX2VuY29kZXJfd3JhcHBlcl9m cmVlLCB3cmFwcGVyKTsNCmBgYA0KDQpUaGUgdmFsdWVzIGluIHRoaXMgbWFyayBmdW5jdGlvbiBg dy0+b25fcHJvZ3Jlc3NfY2FsbGJhY2tgIGFuZCBgdy0+dGVybWluYXRvcmANCndpbGwgbm90IG1v dmUgc2luY2UgdGhleSBhcmUgcGlubmVkIGJ5IGByYl9nY19tYXJrYC4NCg0KIyMjIEhhc2gga2V5 IG9iamVjdHMNCg0KQ2VydGFpbiBoYXNoIGtleXMgd2lsbCBub3QgbW92ZS4gIE1vc3Qgb2JqZWN0 cyB1c2UgdGhlaXIgYWRkcmVzcyBhcyB0aGUgaGFzaA0KdmFsdWUuICBJZiB0aGUgb2JqZWN0IG1v dmVzLCB0aGUgaGFzaCB2YWx1ZSBjb3VsZCBjaGFuZ2UsIHNvIGhhc2gga2V5cyBhcmUgbm90DQph bGxvd2VkIHRvIG1vdmUuDQoNClRoZXJlIGlzIGFuIGV4Y2VwdGlvbiBmb3Igc3RyaW5nIG9iamVj dHMuICBTdHJpbmcgb2JqZWN0cyBjYWxjdWxhdGUgdGhlaXIgaGFzaA0KYmFzZWQgb24gdGhlIGJ5 dGVzIGluIHRoZSBzdHJpbmcuICBTaW5jZSB0aGUgYnl0ZXMgaW4gdGhlIHN0cmluZyBkbyBub3Qg Y2hhbmdlDQphZnRlciBtb3ZlLCB0aGV5IGFyZSBhbGxvd2VkIHRvIG1vdmUuICBNb3N0IGhhc2gg a2V5cyBpbiBsYXJnZSBwcm9ncmFtcyBhcmUNCnN0cmluZ3MsIHNvIG9ubHkgYWxsb3dpbmcgc3Ry aW5nIGtleXMgdG8gbW92ZSBzZWVtZWQgZW5vdWdoLg0KDQojIyBTcGVjaWFsIENvbnNpZGVyYXRp b25zDQoNCiMjIyBPYmplY3QgSUQNCg0KYE9iamVjdCNvYmplY3RfaWRgIGJhc2VzIGl0cyB2YWx1 ZSBmcm9tIHRoZSBhZGRyZXNzIG9mIHRoZSBvYmplY3QuICBGb3IgZXhhbXBsZToNCg0KYGBgcnVi eQ0KeCA9IE9iamVjdC5uZXcNCmlkID0geC5vYmplY3RfaWQNCkdDLmNvbXBhY3QgICAgICAgICMg YHhgIG1vdmVzDQppZCA9PSB4Lm9iamVjdF9pZCAjIGBpZGAgc2hvdWxkIGJlIHNhbWUgYXMgYHgu b2JqZWN0X2lkYA0KYGBgDQoNCldlIGV4cGVjdCB0aGUgb2JqZWN0IGlkIHRvIHJlbWFpbiB0aGUg c2FtZSByZWdhcmRsZXNzIG9mIGNvbXBhY3Rpb24uICBUbyBkZWFsDQp3aXRoIGBvYmplY3RfaWRg LCB0d28gaGFzaGVzIHdlcmUgaW50cm9kdWNlZC4gIE9uZSBoYXNoIGNvbnRhaW5zIGEgbWFwIG9m IHRoZQ0Kb2JqZWN0IHRvIHRoZSAqc2Vlbiogb2JqZWN0IGlkLiAgVGhlIHNlY29uZCBtYXAgY29u dGFpbnMgYWxsIHNlZW4gb2JqZWN0IGlkcy4NClRoZSBtYXBzIGFyZSB1cGRhdGVkIGFueSB0aW1l IGBvYmplY3RfaWRgIGlzIGNhbGxlZCwgYW4gb2JqZWN0IG1vdmVzLCBvciBhbg0Kb2JqZWN0IGlz IGZyZWVkLg0KDQpvYmplY3RfaWQgaW1wbGVtZW50YXRpb24gaW4gUnVieToNCg0KYGBgcnVieQ0K JG9ial90b19pZCA9IHt9DQokaWRfdG9fb2JqID0ge30NCg0KY2xhc3MgT2JqZWN0DQogIGRlZiBv YmplY3RfaWQNCiAgICBpZiAkb2JqX3RvX2lkLmtleT8oYWRkcmVzcykNCiAgICAgICMgU2Vjb25k IGNhbGwgdG8gb2JqZWN0X2lkIG9uIHRoaXMgb2JqZWN0DQogICAgICByZXR1cm4gJG9ial90b19p ZFthZGRyZXNzXQ0KICAgIGVsc2UNCiAgICAgICMgRmlyc3QgY2FsbCB0byBvYmplY3RfaWQgb24g dGhpcyBvYmplY3QNCg0KICAgICAgYWRkciA9IHNlbGYuYWRkcmVzcw0KDQogICAgICBsb29wIGRv DQogICAgICAgIGlmICRzZWVuX2lkcy5rZXk/KGFkZHIpDQogICAgICAgICAgIyBSZXNvbHZlIGNv bmZsaWN0DQogICAgICAgICAgYWRkciArPSBzaXplb2YoUlZBTFVFKQ0KICAgICAgICBlbHNlDQog ICAgICAgICAgJG9ial90b19pZFtzZWxmLmFkZHJlc3NdID0gYWRkcg0KICAgICAgICAgICRpZF90 b19vYmpbYWRkcl0gICAgICAgICA9IHNlbGYNCiAgICAgICAgICByZXR1cm4gYWRkcg0KICAgICAg ICBlbmQNCiAgICAgIGVuZA0KICAgIGVuZA0KICBlbmQNCg0KICBwcml2YXRlDQoNCiAgZGVmIGFk ZHJlc3MNCiAgICAjIHJldHVybnMgYWRkcmVzcyBpbiBtZW1vcnkgb2Ygb2JqZWN0DQogIGVuZA0K ZW5kDQpgYGANCg0KRHVyaW5nIGNvbXBhY3Rpb246DQoNCmBgYHJ1YnkNCmRlZiBjb21wYWN0DQog IGhlYXAgPSBbIC4uLiBdICMgbWFueSBzbG90cw0KDQogIHdoaWxlIGxlZnQgPCByaWdodA0KICAg IGRlc3Rfc2xvdCA9IGhlYXBbbGVmdF0NCiAgICBzb3VyY2Vfc2xvdCA9IGhlYXBbcmlnaHRdDQoN CiAgICBpZiBtb3Zpbmc/KHNvdXJjZV9zbG90KQ0KICAgICAgaWYgJG9ial90b19pZC5rZXk/KHNv dXJjZV9zbG90LmFkZHJlc3MpDQogICAgICAgIGlkID0gJG9ial90b19pZC5kZWxldGUoc291cmNl X3Nsb3QuYWRkcmVzcykNCiAgICAgICAgJG9ial90b19pZFtkZXN0X3Nsb3QuYWRkcmVzc10gPSBp ZA0KICAgICAgICAkaWRfdG9fb2JqW2lkXSAgICAgICAgICAgICAgICA9IGRlc3Rfc2xvdC5hZGRy ZXNzDQogICAgICBlbmQNCg0KICAgICAgIyBldGMNCiAgICBlbmQNCiAgZW5kDQplbmQNCmBgYA0K DQpEdXJpbmcgRnJlZToNCg0KYGBgcnVieQ0KZGVmIGZyZWUob2JqKQ0KICBpZiAkb2JqX3RvX2lk LmtleT8ob2JqLmFkZHJlc3MpDQogICAgJHNlZW5faWRzLmRlbGV0ZSgkb2JqX3RvX2lkLmRlbGV0 ZShvYmouYWRkcmVzcykpDQogIGVuZA0KZW5kDQpgYGANCg0KIyMjIE9iamVjdFNwYWNlLl9pZDJy ZWYNCg0KV2hlbiBnZW5lcmF0aW5nIGFuIG9iamVjdCBpZCwgaW4gdGhlIGNhc2Ugb2YgYSBjb2xs aXNpb24sIHRoZSBhZGRyZXNzIGlzDQppbmNyZW1lbnRlZCBieSA0MC4gIFRoaXMgZW5hYmxlcyBg X2lkMnJlZmAgdG8gZGV0ZXJtaW5lIHRoZXJlIGlzIGEgVkFMVUUgcG9pbnRlcg0KYW5kIHJvdW5k IHRyaXAgdGhlIG9iamVjdCBjb3JyZWN0bHkuDQoNCiMjIENvbXBhY3Rpb24gU3VwcG9ydCBmb3Ig QyBleHRlbnNpb25zDQoNCkFueSBvYmplY3QgbWFya2VkIHdpdGggYHJiX2djX21hcmtgIHdpbGwg YmUgInBpbm5lZCIgYW5kIGNhbm5vdCBtb3ZlLiAgQw0KZXh0ZW5zaW9ucyBtYXJrIG9iamVjdHMg dmlhIGByYl9nY19tYXJrYCwgc28gdGhpcyBlbnN1cmVzIHRoYXQgcG9pbnRlcnMgaW4gQw0Kc3Rh eSB2YWxpZC4NCg0KSG93ZXZlciwgc29tZSBDIGV4dGVuc2lvbnMgbWF5IHdhbnQgdG8gc3VwcG9y dCByZWZlcmVuY2UgbW92ZW1lbnQuDQoNCiMjIyBSZWZlcmVuY2UgTW92ZW1lbnQgaW4gQyBleHRl bnNpb25zDQoNCkluIG9yZGVyIHRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBp ZiBhIEMgZXh0ZW5zaW9uIGhvbGRzIGEgcmVmZXJlbmNlDQp0byBhIFZBTFVFLCB0aGUgVkFMVUUg c2hvdWxkIG5vdCBtb3ZlLiAgR29pbmcgZm9yd2FyZCwgQyBleHRlbnNpb25zIGNhbiBzdXBwb3J0 DQptb3ZpbmcgVkFMVUVzLiAgVG8gc3VwcG9ydCBtb3ZpbmcgVkFMVUVzLCBhIEMgZXh0ZW5zaW9u IHNob3VsZCBjaGFuZ2UNCmByYl9nY19tYXJrYCB0byBgcmJfZ2NfbWFya19ub19waW5gLCB0aGVu IGltcGxlbWVudCBhIG5ldyBjYWxsYmFjayB0aGF0IGlzDQpjYWxsZWQgZHVyaW5nIGNvbXBhY3Rp b24gdGhhdCBnaXZlcyB0aGUgZXh0ZW5zaW9uIGFuIG9wcG9ydHVuaXR5IHRvIHVwZGF0ZSBpdHMN Cm93biByZWZlcmVuY2VzLiAgQSBuZXcgZnVuY3Rpb24gYHJiX2djX25ld19sb2NhdGlvbmAgd2ls bCByZXR1cm4gdGhlIG5ldw0KbG9jYXRpb24gZm9yIGEgcGFydGljdWxhciBWQUxVRS4NCg0KSGVy ZSBpcyBhbiBleGFtcGxlIGZvciBhdXRvbG9hZCBmcm9tIGB2YXJpYWJsZS5jYC4gIEEgbmV3IGNv bXBhY3Rpb24gY2FsbGJhY2sgaXMNCnJlZ2lzdGVyZWQsIGBhdXRvbG9hZF9pX2NvbXBhY3RgOg0K DQpgYGBjDQpzdGF0aWMgY29uc3QgcmJfZGF0YV90eXBlX3QgYXV0b2xvYWRfZGF0YV9pX3R5cGUg PSB7DQogICAgImF1dG9sb2FkX2kiLA0KICAgIHthdXRvbG9hZF9pX21hcmssIGF1dG9sb2FkX2lf ZnJlZSwgYXV0b2xvYWRfaV9tZW1zaXplLCBhdXRvbG9hZF9pX2NvbXBhY3R9LA0KICAgIDAsIDAs IFJVQllfVFlQRURfRlJFRV9JTU1FRElBVEVMWQ0KfTsNCmBgYA0KDQpUaGUgbWFyayBmdW5jdGlv biBjaGFuZ2VzIHRvICptYXJrKiByZWZlcmVuY2VzLCBidXQgKm5vdCogcGluIHRoZW06DQoNCmBg YGMNCnN0YXRpYyB2b2lkDQphdXRvbG9hZF9pX21hcmsodm9pZCAqcHRyKQ0Kew0KICAgIHN0cnVj dCBhdXRvbG9hZF9kYXRhX2kgKnAgPSBwdHI7DQoNCiAgICByYl9nY19tYXJrX25vX3BpbihwLT5m ZWF0dXJlKTsNCg0KICAgIC8qIGFsbG93IEdDIHRvIGZyZWUgdXMgaWYgbm8gbW9kdWxlcyByZWZl ciB0byB0aGlzIHZpYSBhdXRvbG9hZF9jb25zdC5hZCAqLw0KICAgIGlmIChsaXN0X2VtcHR5KCZw LT5jb25zdGFudHMpKSB7DQogICAgICAgIHJiX2hhc2hfZGVsZXRlKGF1dG9sb2FkX2ZlYXR1cmVt YXAsIHAtPmZlYXR1cmUpOw0KICAgIH0NCn0NCmBgYA0KDQpBZnRlciB0aGUgaGVhcCBpcyBjb21w YWN0ZWQsIGFueSBDIGV4dGVuc2lvbnMgdGhhdCByZWdpc3RlcmVkIGEgImNvbXBhY3Rpb24iDQpj YWxsYmFjayB3aWxsIGJlIGNhbGxlZCBhbmQgaGF2ZSBhIGNoYW5jZSB0byB1cGRhdGUgaW50ZXJu YWwgcmVmZXJlbmNlcy4gIFRoZQ0KYXV0b2xvYWQgY29tcGFjdGlvbiBmdW5jdGlvbiBpcyBsaWtl IHRoaXM6DQoNCmBgYGMNCnN0YXRpYyB2b2lkDQphdXRvbG9hZF9pX2NvbXBhY3Qodm9pZCAqcHRy KQ0Kew0KICAgIHN0cnVjdCBhdXRvbG9hZF9kYXRhX2kgKnAgPSBwdHI7DQogICAgcC0+ZmVhdHVy ZSA9IHJiX2djX25ld19sb2NhdGlvbihwLT5mZWF0dXJlKTsNCmBgYA0KDQpUaGUgY29tcGFjdGlv biBjYWxsYmFjayBhc2tzIGZvciB0aGUgbmV3IGxvY2F0aW9uIGZvciB0aGUgYHAtPmZlYXR1cmVg DQpyZWZlcmVuY2UuICBgcmJfZ2NfbmV3X2xvY2F0aW9uYCB3aWxsIGVpdGhlciByZXR1cm4gdGhl IGN1cnJlbnQgdmFsdWUgb2YNCmBwLT5mZWF0dXJlYCAoaW4gdGhlIGNhc2UgdGhlIFZBTFVFIGRp ZCBub3QgbW92ZSksIG9yIHRoZSBuZXcgbG9jYXRpb24uDQoNCiMjIFJlZmVyZW5jZSBWZXJpZmlj YXRpb24gYW5kIFRlc3RpbmcNCg0KQWZ0ZXIgY29tcGFjdGlvbiwgb2JqZWN0cyB0aGF0IGhhdmUg bW92ZWQgYXJlIGNoYW5nZWQgdG8gYFRfTU9WRURgIG9iamVjdHMgd2l0aA0KZm9yd2FyZGluZyBh ZGRyZXNzZXMuICBPbmNlIGFsbCByZWZlcmVuY2VzIGFyZSB1cGRhdGVkLCBubyBvYmplY3Qgc2hv dWxkIHBvaW50DQp0byBhIGBUX01PVkVEYCBzbG90LiAgV2UgY2FuIHNheSB0aGF0IGJlZm9yZSBh bmQgYWZ0ZXIgY29tcGFjdGlvbiwgbm8gb2JqZWN0DQpzaG91bGQgZXZlciBwb2ludCBhdCBhIGBU X01PVkVEYCBzbG90LiAgU28gaWYgYSBgVF9NT1ZFRGAgb2JqZWN0IGlzIGV2ZXIgcHVzaGVkDQpv biB0byB0aGUgbWFyayBxdWV1ZSwgdGhlcmUgaXMgYSBidWcuICBgcHVzaF9tYXJrX3N0YWNrYCBo YXMgYSBjaGVjayBmb3INCmBUX01PVkVEYCBvYmplY3RzLCBhbmQgd2lsbCBjcmFzaCBpZiBhIGBU X01PVkVEYCBvYmplY3QgaXMgZXZlciBwdXNoZWQgb24gdG8gdGhlDQptYXJrIHN0YWNrLg0KDQpB IG1ldGhvZCBgR0MudmVyaWZ5X2NvbXBhY3Rpb25fcmVmZXJlbmNlc2Agd2FzIGFkZGVkIHRoYXQg ZG91YmxlcyB0aGUgYXZhaWxhYmxlDQpoZWFwIHNpemUsIHRoZW4gY29tcGFjdHMgdGhlIGhlYXAu ICBTaW5jZSB0aGUgaGVhcCBoYXMgZG91YmxlZCBpbiBzaXplLCBhbnkNCm9iamVjdCB0aGF0IGNh biBtb3ZlIHdpbGwgbW92ZS4gIEFueSByZWZlcmVuY2VzIHRvIGBUX01PVkVEYCBvYmplY3RzIHdp bGwgYmUNCmNhdWdodCBkdXJpbmcgdGhlIEdDIHBoYXNlIGFmdGVyIGNvbXBhY3Rpb24uDQoNCiMj IEtub3duIElzc3VlDQoNClNhZmV0eSBmb3IgQyBleHRlbnNpb25zIGRlcGVuZHMgZW50aXJlbHkg b24gQyBleHRlbnNpb25zIG1hcmtpbmcgdGhlaXINCnJlZmVyZW5jZXMuICBJZiBhIEMgZXh0ZW5z aW9uIGRvZXMgbm90IG1hcmsgYSByZWZlcmVuY2UsIHRoZSBjb21wYWN0b3IgYXNzdW1lcw0KdGhh dCB0aGUgb2JqZWN0IGlzIHNhZmUgdG8gbW92ZS4gIFRoaXMgY2FuIGNhdXNlIGFuIGVycm9yIGlu IHRoZSBmb2xsb3dpbmcNCnNpdHVhdGlvbiwgd2hlbiB0aGVyZSBpcyBhbiBvYmplY3QgZ3JhcGgg bGlrZSB0aGlzOg0KDQoNCmBgYA0KIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUkCAgICAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilJAgDQog4pSCICBSdWJ5IE9iamVjdCAg4pSCICAgICAgIOKUgiAgUnVi eSBPYmplY3QgIOKUgiANCiDilIIgIEltcGxlbWVudGVkICDilIIgICAgICAg4pSCICBJbXBsZW1l bnRlZCAg4pSCIA0KIOKUgiAgICBpbiBSdWJ5ICAgIOKUgiAgICAgICDilIIgICAgIGluIEMgICAg ICDilIIgDQog4pSCICAgICAgICAgICAgICAg4pSCICAgICAgIOKUgiAgICAgICAgICAgICAgIOKU giANCiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgg ICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSY IA0KICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICANCiAgICAg ICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAg4pSCICAg ICAgICAgICAgICAgICAgICAgICDilIIgICBOT1QgICANCiBNYXJrZWQgIOKUgiAgICAgICAgICAg ICAgICAgICAgICAgICAgTWFya2VkIA0KICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAg ICDilIIgICAgICAgICANCiAgICAgICAgIOKUgiAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAgICAgICANCiAgICAgICAgIOKUgiAgIOKU giAgICAgICAgICAgICAgIOKUgiAgIOKUgiAgICAgICAgIA0KICAgICAgICAg4pSCICAg4pSCICBS dWJ5IE9iamVjdCAg4pSCICAgICAgICAgICAgIA0KICAgICAgICAg4pSU4pSA4pSA4pa24pSCICAg ICAgICAgICAgICAg4pSC4peA4pSAIOKUmCAgICAgICAgIA0KICAgICAgICAgICAgIOKUgiAgICAg ICAgICAgICAgIOKUgiAgICAgICAgICAgICANCiAgICAgICAgICAgICDilJTilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICAgICAgICAgICAgDQpgYGANCg0K SWYgdGhlIEMgZXh0ZW5zaW9uIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCwgYnV0 IGV4cGVjdHMgdGhlIG9iamVjdA0Kbm90IHRvIG1vdmUgYmVjYXVzZSBhIFJ1Ynkgb2JqZWN0IGNv bnRhaW5zIGEgcmVmZXJlbmNlLCB0aGVuIHRoZSB0YXJnZXQgUnVieQ0Kb2JqZWN0ICptYXkqIG1v dmUgYW5kIHRoZSByZWZlcmVuY2UgaW4gdGhlIEMgZXh0ZW5zaW9uIHdpbGwgYmUgd3JvbmcuICBJ IGxpa2UgdG8NCmNhbGwgdGhlc2UgImdob3N0IHJlZmVyZW5jZXMiIGJlY2F1c2UgdGhlIEdDIGNh bm5vdCBzZWUgdGhlbSBidXQgdGhleSB3aWxsIGNvbWUNCmJhY2sgdG8gaGF1bnQgeW91Lg0KDQpU aGUgc29sdXRpb24gdG8gdGhpcyBpcyBlaXRoZXI6DQoNCjEuIENoYW5nZSB0aGUgQyBleHRlbnNp b24gdG8gYHJiX2djX21hcmtgIHRoZSBvYmplY3QNCjIuIFJlbW92ZSB0aGUgcmVmZXJlbmNlIGZy b20gdGhlIEMgZXh0ZW5zaW9uDQoNCk9uZSBleGFtcGxlIG9mIHRoaXMgc2l0dWF0aW9uIHdhcyBm aXhlZCBoZXJlOg0KDQogIGh0dHBzOi8vZ2l0aHViLmNvbS9tc2dwYWNrL21zZ3BhY2stcnVieS9p c3N1ZXMvMTMzDQoNCiMjIFN1bW1hcnkNCg0KQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBD IGV4dGVuc2lvbnMgaXMgbWFpbnRhaW5lZCBieSAicGlubmluZyIgYW55DQpyZWZlcmVuY2VzIG1h cmtlZCB3aXRoIGByYl9nY19tYXJrYC4gIEEgZnVsbCBtYXJrICptdXN0KiBiZSBkb25lIGJlZm9y ZQ0KY29tcGFjdGluZyB0byBkaXNjb3ZlciBhbGwgcGlubmVkIHJlZmVyZW5jZXMuDQoNCkEgbmV3 IGNhbGxiYWNrIGZvciBDIGV4dGVuc2lvbnMgaXMgaW50cm9kdWNlZCBzbyB0aGF0IEMgZXh0ZW5z aW9ucyBjYW4gc3VwcG9ydA0KY29tcGFjdGlvbi4gIEMgZXh0ZW5zaW9ucyB0aGF0IHdpc2ggdG8g c3VwcG9ydCBjb21wYWN0aW9uIG11c3QgdXNlIHRoZSBuZXcNCmNhbGxiYWNrLCBgcmJfZ2NfbWFy a19ub19waW5gLCBhbmQgYHJiX2djX25ld19sb2NhdGlvbmAuDQoNCkMgZXh0ZW5zaW9ucyB0aGF0 IG1haW50YWluIHBvaW50ZXJzIGJ1dCBkbyBub3QgbWFyayB0aG9zZSBwb2ludGVycyBtYXkgU0VH Vi4gIFdlDQpjYW4gdXNlIGBHQy52ZXJpZnlfY29tcGFjdGlvbl9yZWZlcmVuY2VzYCB0byBkaXNj b3ZlciB0aGVzZSBpc3N1ZXMuDQoNClteMV06IFNlZSBhbHNvICJUaGUgR2FyYmFnZSBDb2xsZWN0 aW9uIEhhbmRib29rIiBwYWdlIDMyDQoNCg0KLS0tRmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KYmVmb3JlX2NvbXBhY3QtMC5wbmcgKDExMSBLQikNCmFmdGVyX2NvbXBhY3Qt MC5wbmcgKDgwLjYgS0IpDQpiZWZvcmVfY29tcGFjdC0xLnBuZyAoODEuMiBLQikNCmFmdGVyX2Nv bXBhY3QtMS5wbmcgKDc5LjQgS0IpDQowMDAxLUdDLUNvbXBhY3Rpb24tZm9yLU1SSS5wYXRjaCAo NzcuNCBLQikNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0K