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 CE3BD20248 for ; Tue, 26 Mar 2019 03:00:14 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 750191218F6; Tue, 26 Mar 2019 12:00:08 +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 EB541121887 for ; Tue, 26 Mar 2019 12:00:04 +0900 (JST) Received: by filter0102p3iad2.sendgrid.net with SMTP id filter0102p3iad2-31845-5C9995B1-3D 2019-03-26 03:00:01.97742982 +0000 UTC m=+634002.612302433 Received: from herokuapp.com (unknown [18.209.111.39]) by ismtpd0003p1iad1.sendgrid.net (SG) with ESMTP id TNLtmNsnRmmSzxDoLxOhHQ for ; Tue, 26 Mar 2019 03:00:01.833 +0000 (UTC) Date: Tue, 26 Mar 2019 03:00:02 +0000 (UTC) From: the.codefolio.guy@gmail.com Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 67473 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?o6uoTwtpmjv23mMhdNNpXULj2Iv4FzF2HjbNth30aFvgVOITkPEywGz4IrEQZV?= =?us-ascii?Q?6WdVsnTnhFNiwuYrPZAy5n+miWXuG7WAUFoU5Q+?= =?us-ascii?Q?YRbrJjMb6PRNL11Fr5+hIi5n4bBt1HavX6xPN0E?= =?us-ascii?Q?p2ulwFigvYx4vBA06hb3PKk4feOAvrmLfHHYEzF?= =?us-ascii?Q?LWLFMtB8qLgR+449DKMBdkE7kmJjFhWxlIQ=3D=3D?= To: ruby-core@ruby-lang.org X-ML-Name: ruby-core X-Mail-Count: 91987 Subject: [ruby-core:91987] [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 Cg0KDQpJJ20gdHJ5aW5nIHRvIHJ1biB0aGlzIGFuZCBjaGVjayBzcGVlZCBhbmQgc3RhYmlsaXR5 IHdpdGggUmFpbHMgUnVieSBCZW5jaC4gSSdtIGhhdmluZyBhbiBvZGQgYnVnIHdoZW4gSSB0cnkg dG8gdXNlIEdDLmNvbXBhY3QuIEJ1dCBpdCBtYXkgYmUgbXkgZmF1bHQgc28gSSB3b24ndCBwb3N0 IGl0ICh5ZXQpLg0KDQpIb3dldmVyLCBJICpkbyogbm90aWNlIGEgc3BlZWQgcmVncmVzc2lvbiB3 aGVuIHJ1bm5pbmcgdy8geW91ciBwYXRjaCBmcm9tIHJlY2VudCBoZWFkLW9mLW1hc3RlciAoU0hB IGM5MmMwYTU5MzU5M2RhMmViMWZmOTRkODNkODBmNzFlN2FlNTM0M2MgYmVmb3JlIHBhdGNoaW5n LikNCg0KSSdtIHNlZWluZyB1bnBhdGNoZWQgcGVyZm9ybWFuY2Ugb2YgMTg3LjQgcmVxL3NlYyB3 aXRoIHZhcmlhbmNlIDMuOC4gQnV0IHdpdGggeW91ciBwYXRjaCwgSSdtIHNlZWluZyAxNzguOCBy ZXEvc2VjIHdpdGggdmFyaWFuY2UgNC43LiBUaGF0J3MgY2xvc2UgZW5vdWdoIGl0ICpjb3VsZCog YmUgbWVhc3VyZW1lbnQgZXJyb3IgaWYgSSB3YXMgdW5sdWNreSwgYW5kIEknbGwgdHJ5IHJ1bm5p bmcgaXQgYWdhaW4uIEJ1dCBJIHRoaW5rIHRoaXMgbWF5IGN1cnJlbnRseSByZWR1Y2UgcGVyZm9y bWFuY2UgZXZlbiB3aXRob3V0IGNhbGxpbmcgR0MuY29tcGFjdC4NCg0KRHVlIHRvIHRoZSB3YXkg bXkgYmVuY2htYXJrIHdvcmtzLCBpbmNyZWFzZWQgbWVtb3J5IHVzYWdlIGNhbiBhbHNvIG1hbmlm ZXN0IGFzIHJlZHVjZWQgc3BlZWQgLS0gSSBkb24ndCBoYXZlIGFuIGVhc3kgd2F5IHRvIHRlYXNl IHRob3NlIGFwYXJ0IHdpdGggUlJCLiBCdXQgb25lIG9yIHRoZSBvdGhlciBzZWVtcyBsaWtlbHku DQoNCk9uIHRoZSBwbHVzIHNpZGUsIEkgZGlkICpub3QqIHNlZSBhbnkgc2VnZmF1bHRzLCBhbmQg UlJCIGlzIGEgcHJldHR5IGdvb2Qgc3RhYmlsaXR5IHRvcnR1cmUtdGVzdCBmb3IgY3Jhc2hlcy4g SSByYW4gdGhpcyB3aXRoIDMwIGJhdGNoZXMgb2YgMzAsMDAwIEhUVFAgcmVxdWVzdHMgcGVyIFJ1 YnkgdmVyc2lvbiAodW5wYXRjaGVkIHZzIHBhdGNoZWQuKQ0KDQotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpGZWF0dXJlICMxNTYyNjogTWFudWFsIENvbXBhY3Rpb24g Zm9yIE1SSSdzIEdDIChgR0MuY29tcGFjdGApDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9p c3N1ZXMvMTU2MjYjY2hhbmdlLTc3MzE5DQoNCiogQXV0aG9yOiB0ZW5kZXJsb3ZlbWFraW5nIChB YXJvbiBQYXR0ZXJzb24pDQoqIFN0YXR1czogT3Blbg0KKiBQcmlvcml0eTogTm9ybWFsDQoqIEFz c2lnbmVlOiANCiogVGFyZ2V0IHZlcnNpb246IA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KSGksDQoNCkkndmUgYXR0YWNoZWQgYSBwYXRjaCB0aGF0IGltcGxlbWVu dHMgYSBjb21wYWN0b3IgZm9yIE1SSS4gIEknbGwgdHJ5IHRvIGRlc2NyaWJlIHRoZSBwYXRjaCBp biBkZXRhaWwgYmVsb3csIGJ1dCB0aGUgYmlnZ2VzdCB1c2VyIGZhY2luZyBjaGFuZ2VzIGFyZToN Cg0KMS4gQSBuZXcgbWV0aG9kIGBHQy5jb21wYWN0YCB0aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSBS dWJ5DQoyLiBDIGV4dGVuc2lvbnMgaGF2ZSBhIG5ldyAiYWZ0ZXIgY29tcGFjdGlvbiIgY2FsbGJh Y2sgdGhleSBjYW4gcmVnaXN0ZXINCjMuIEludHJvZHVjdGlvbiBvZiBuZXcgbWFya2luZyBmdW5j dGlvbnMgdGhhdCBhbGxvdyBvYmplY3RzIHRvIGJlIG1hcmtlZCwgYnV0IG5vdCAicGlubmVkIiB0 byB0aGUgc2FtZSBsb2NhdGlvbg0KNC4gQSBmdW5jdGlvbiB0byBnZXQgdGhlIG5ldyBsb2NhdGlv biBvZiBhbiBvYmplY3QgKHRvIGJlIHVzZWQgZnJvbSB0aGUgImFmdGVyIGNvbXBhY3Rpb24iIGNh bGxiYWNrKQ0KDQojIENvbXBhY3RvciBmb3IgUkdlbkdDDQoNClRoaXMgZG9jdW1lbnQgZGVzY3Jp YmVzIHRoZSBjb21wYWN0b3IgaW1wbGVtZW50YXRpb24gZm9yIFJHZW5HQy4gIFRoaXMgcGF0Y2gN CmFkZHMgYSBuZXcgbWV0aG9kIHRvIFJ1YnksIGBHQy5jb21wYWN0YCB3aGljaCB3aWxsIGNvbXBh Y3QgdGhlIG9iamVjdHMgaW4gdGhlDQpoZWFwLiAgV2hhdCBmb2xsb3dzIGlzIGEgZGVzY3JpcHRp b24gb2YgdGhlIGFsZ29yaXRobSwgYWxvbmcgd2l0aCBhY2hpZXZlbWVudHMNCmFuZCB0ZWNobmlj YWwgY2hhbGxlbmdlcy4NCg0KIyMgU3RlcHMgZm9yIENvbXBhY3Rpb24NCg0KVGhlc2UgYXJlIHRo ZSBoaWdoIGxldmVsIHN0ZXBzIHRha2VuIGluIGBHQy5jb21wYWN0YCBhcmUgYXMgZm9sbG93czoN Cg0KMS4gRnVsbCBHQw0KMi4gTW92ZSBvYmplY3RzDQozLiBVcGRhdGUgcmVmZXJlbmNlcw0KNC4g RnVsbCBHQw0KDQojIyMgU3RlcCBPbmUsIEZ1bGwgR0MNCg0KTm90IGFsbCBvYmplY3RzIGluIFJ1 YnkncyBoZWFwIGNhbiBtb3ZlLiAgSW4gcGFydGljdWxhciwgQyBleHRlbnNpb25zIG1heSBob2xk DQpyZWZlcmVuY2VzIHRvIFZBTFVFIHBvaW50ZXJzLiAgSWYgdGhlIFZBTFVFIHBvaW50ZXJzIG1v dmUsIHRoZSBDIGV4dGVuc2lvbiBtYXkNCm5vdCBiZSBhYmxlIHRvIGZpbmQgdGhlbSBhbmQgd2ls bCBnZXQgYSBTRUdWIG9yIHBvc3NpYmx5IHdyb25nIGRhdGEuDQoNClRvIHByZXZlbnQgdGhpcywg YSBuZXcgInBpbm5pbmciIHRhYmxlIHdhcyBpbnRyb2R1Y2VkLiAgQW55IG9iamVjdCBtYXJrZWQg dmlhDQpgcmJfZ2NfbWFya2AgaXMgInBpbm5lZCIgYW5kIGlzIG5vdCBhbGxvd2VkIHRvIG1vdmUu ICBDIGV4dGVuc2lvbnMgbXVzdCBtYXJrDQp0aGVpciByZWZlcmVuY2VzIGluIG9yZGVyIHRvIGtl ZXAgdGhlbSBhbGl2ZS4gIFNpbmNlIEMgZXh0ZW5zaW9ucyB1c2UNCmByYl9nY19tYXJrYCB0byBt YXJrIGEgcmVmZXJlbmNlLCB3ZSBrbm93IG5vdCB0byBtb3ZlIHRoYXQgcmVmZXJlbmNlLiAgSW4g b3JkZXINCnRvIGVuc3VyZSBhbGwgcmVmZXJlbmNlcyBnZXQgbWFya2VkLCB3ZSBwZXJmb3JtIGEg ZnVsbCBHQy4NCg0KTmV3IGZ1bmN0aW9ucywgYHJiX2djX21hcmtfbm9fcGluYCwgZXRjIHdlcmUg aW50cm9kdWNlZCBhbmQgdXNlZCBpbnRlcm5hbGx5Lg0KVGhlc2UgZnVuY3Rpb25zIGtlZXBzIHRo ZSBvYmplY3QgYWxpdmUgYnV0IHdpdGhvdXQgcGlubmluZyB0aGUgcmVmZXJlbmNlLg0KDQpTdW1t YXJ5OiBQZXJmb3JtIGEgZnVsbCBHQyBzbyB0aGF0IG9iamVjdHMgbWFya2VkIHdpdGggYHJiX2dj X21hcmtgIGRvIG5vdCBtb3ZlLg0KDQojIyMgU3RlcCBUd28sIE1vdmUgT2JqZWN0cw0KDQpUaGlz IGNvbXBhY3RvciB1c2VzIGEgInR3byBmaW5nZXIiIGFsZ29yaXRobSB3aGljaCB3YXMgaW50cm9k dWNlZCBpbiAiVGhlDQpQcm9ncmFtbWluZyBMYW5ndWFnZSBMSVNQOiBJdHMgT3BlcmF0aW9uIGFu ZCBBcHBsaWNhdGlvbnMiIChwYWdlIDIyOClbXjFdLiAgVHdvDQpwb2ludGVycyBwb2ludCBhdCBl YWNoIHNpZGUgb2YgdGhlIGhlYXAsIGlmIG9uZSBzbG90IGlzIGVtcHR5LCBhbmQgdGhlIG90aGVy IGlzDQptb3ZlYWJsZSwgaXQgc3dhcHMgcGxhY2VzIGFuZCBsZWF2ZXMgYSBgVF9NT1ZFRGAgb2Jq ZWN0IHRoYXQgY29udGFpbnMgYQ0KZm9yd2FyZGluZyBhZGRyZXNzLg0KDQpJbiBSdWJ5LCB0aGUg YWxnb3JpdGhtIGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6DQoNCmBgYHJ1YnkNCmRlZiBjb21w YWN0DQogIGhlYXAgPSBbIC4uLiBdICMgbWFueSBzbG90cw0KICBsZWZ0ICA9IDANCiAgcmlnaHQg PSBoZWFwLmxlbmd0aCAtIDENCg0KICB3aGlsZSBsZWZ0IDwgcmlnaHQNCiAgICBsZWZ0X3Nsb3Qg PSBoZWFwW2xlZnRdDQogICAgcmlnaHRfc2xvdCA9IGhlYXBbcmlnaHRdDQoNCiAgICBpZiBpc19l bXB0eT8obGVmdF9zbG90KSAmJiAhaXNfZW1wdHk/KHJpZ2h0X3Nsb3QpICYmIGNhbl9tb3ZlPyhy aWdodF9zbG90KQ0KICAgICAgc3dhcChsZWZ0LCByaWdodCkNCiAgICAgIGhlYXBbcmlnaHRdID0g VF9NT1ZFRC5uZXcobGVmdCkgIyBsZWF2ZSBmb3J3YXJkaW5nIGFkZHJlc3MNCiAgICBlbmQNCg0K ICAgIHdoaWxlICFpc19lbXB0eT8oaGVhcFtsZWZ0XSkNCiAgICAgIGxlZnQgKz0gMQ0KICAgIGVu ZA0KDQogICAgd2hpbGUgaXNfZW1wdHk/KGhlYXBbcmlnaHRdKSB8fCAhY2FuX21vdmU/KGhlYXBb cmlnaHRdKQ0KICAgICAgcmlnaHQgLT0gMQ0KICAgIGVuZA0KICBlbmQNCmVuZA0KYGBgDQoNCklm IHdlIGhhdmUgYSBoZWFwIHdpdGggNiBzbG90cywgYmVmb3JlIGNvbXBhY3Rpb24gaXQgbWlnaHQg bG9vayBzb21ldGhpbmcgbGlrZQ0KdGhpczoNCg0KYGBgDQogICAgICAgICAgICAgICAgICAgICDi lIwg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQog ICAgICAgICAgICAgICAgICAgICAgICBCZWZvcmUgQ29tcGFjdGlvbiAgIOKUgiAgICAgICANCiAg ICAgICAgICAgICAgICAgICAgIOKUlCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKU gCDilIAg4pSAICAgICAgICANCiAgICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUrOKU gOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKU gOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUkA0KIFNsb3QgSW5kZXggICAg4pSCICAxICDi lIIgIDIgIOKUgiAgMyAg4pSCICA0ICDilIIgIDUgIOKUgiAgNiAg4pSCDQogICAgICAgICAgICAg ICDilJzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDi lLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilKQN ClNsb3QgQ29udGVudHMgIOKUgiAgQSAg4pSCICBCICDilIJFbXB0eeKUgkVtcHR54pSCICBDICDi lIIgIEQgIOKUgg0KICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAg ICDilIIgICAgIOKUgiAgICAg4pSCDQogICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDi lLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTi lIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilJgNCmBgYA0KDQpBZnRlciBjb21wYWN0 aW9uLCBidXQgYmVmb3JlIHJlZmVyZW5jZSB1cGRhdGUsIGl0IHdpbGwgbG9vayBsaWtlIHRoaXM6 DQoNCmBgYA0KICAgICAgICAgICAgICAgICAgICAg4pSMIOKUgCDilIAg4pSAIOKUgCDilIAg4pSA IOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgIEFm dGVyIENvbXBhY3Rpb24gICDilIIgICAgICAgDQogICAgICAgICAgICAgICAgICAgICDilJQg4pSA IOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAg ICAgICAgICDilIzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDi lIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDi lIDilJANCiBTbG90IEluZGV4ICAgIOKUgiAgMSAg4pSCICAyICDilIIgIDMgIOKUgiAgNCAg4pSC ICA1ICDilIIgIDYgIOKUgg0KICAgICAgICAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pS84pSA 4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA 4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSkDQpTbG90IENvbnRlbnRzICDilIIgIEEgIOKU giAgQiAg4pSCICBEICDilIIgIEMgIOKUgk1PVkVE4pSCTU9WRUTilIINCiAgICAgICAgICAgICAg IOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCVE8gNCDilIJUTyAzIOKUgg0KICAg ICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA 4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA 4pSA4pSA4pSYDQpgYGANCg0KU2xvdHMgNSBhbmQgNiBjb250YWluIGBUX01PVkVEYCBvYmplY3Rz IHRoYXQgcG9pbnQgdG8gdGhlIG5ldyBsb2NhdGlvbnMgb2YgRCBhbmQNCkMgb2JqZWN0cy4NCg0K IyMjIFN0ZXAgVGhyZWUsIFVwZGF0ZSBSZWZlcmVuY2VzDQoNCkFmdGVyIG9iamVjdHMgaGF2ZSBt b3ZlZCwgcmVmZXJlbmNlcyBhcmUgdXBkYXRlZC4gIFRoaXMgaXMgYSBtYXR0ZXIgb2YgdXBkYXRp bmcNCmFueSByZWZlcmVuY2VzIHRvIHVzZSB0aGUgZm9yd2FyZGluZyBhZGRyZXNzIHJhdGhlciB0 aGFuIHRoZSBvcmlnaW5hbCBsb2NhdGlvbi4NCg0KRm9yIGV4YW1wbGUsIGlmIG9iamVjdCBBIGhh cyBhIHJlZmVyZW5jZSB0byBDLCBhbmQgQiBhIHJlZmVyZW5jZSB0byBEOg0KDQpgYGANCiAgICAg ICAgICAgICAgICAgICAgIOKUjCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDi lIAg4pSAICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBDb21wYWN0aW9u ICAg4pSCICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAg4pSUIOKUgCDilIAg4pSAIOKUgCDi lIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAg4pSM4pSA 4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA 4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJ bmRleCAgICDilIIgIDEgIOKUgiAgMiAg4pSCICAzICDilIIgIDQgIOKUgiAgNSAg4pSCICA2ICDi lIINCiAgICAgICAgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKU vOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKU gOKUgOKUgOKUgOKUgOKUpA0KU2xvdCBDb250ZW50cyAg4pSCICBBICDilIIgIEIgIOKUgkVtcHR5 4pSCRW1wdHnilIIgIEMgIOKUgiAgRCAg4pSCDQogICAgICAgICAgICAgICDilIIgICAgIOKUgiAg ICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIINCiAgICAgICAgICAgICAgIOKU lOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKU gOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0KICAg ICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgICAgICAgICAgICAgIOKWsiAgICAg4payICAg DQogICAgICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAgICAgICAgICAgICAg4pSCICAgICDi lIIgICANCiAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAg4pSCICAgDQog ICAgICAgICAgICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICANCmBgYA0KDQpBZnRl ciBjb21wYWN0aW9uLCBidXQgYmVmb3JlIHVwZGF0aW5nIHJlZmVyZW5jZXMsIHRoZSBoZWFwIHdp bGwgbG9vayBsaWtlIHRoaXM6DQoNCmBgYA0KICAgICAgICAgICAgICAgICAgICAg4pSMIOKUgCDi lIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAgICAg ICAgICAgICAgICAgICAgIEFmdGVyIENvbXBhY3Rpb24gICDilIIgICAgICAgDQogICAgICAgICAg ICAgICAgICAgICDilJQg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKU gCAgICAgICAgDQogICAgICAgICAgICAgICDilIzilIDilIDilIDilIDilIDilKzilIDilIDilIDi lIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDi lIDilKzilIDilIDilIDilIDilIDilJANCiBTbG90IEluZGV4ICAgIOKUgiAgMSAg4pSCICAyICDi lIIgIDMgIOKUgiAgNCAg4pSCICA1ICDilIIgIDYgIOKUgg0KICAgICAgICAgICAgICAg4pSc4pSA 4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA 4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSkDQpTbG90IENv bnRlbnRzICDilIIgIEEgIOKUgiAgQiAg4pSCICBEICDilIIgIEMgIOKUgk1PVkVE4pSCTU9WRUTi lIINCiAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCVE8g NCDilIJUTyAzIOKUgg0KICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA 4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA 4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSYDQogICAgICAgICAgICAgICAgICDilIIgICAgIOKU giAgICAgICAgICAgICAgICAg4payICAgICDilrIgICANCiAgICAgICAgICAgICAgICAgIOKUgiAg ICAg4pSCICAgICAgICAgICAgICAgICDilIIgICAgIOKUgiAgIA0KICAgICAgICAgICAgICAgICAg 4pSU4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSYICAgICDilIIgICANCiAgICAgICAgICAgICAgICAgICAgICAgIOKU lOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUmCAgIA0KYGBgDQoNClRoZSB1cGRhdGUgcmVmZXJlbmNlcyBzdGVwIGxv b2tzIGF0IGVhY2ggb2JqZWN0IGluIHRoZSBoZWFwLCBjaGVja3MgdG8gc2VlIGlmIGl0DQpyZWZl cmVuY2VzIGFueSBtb3ZlZCBzbG90cywgdGhlbiB1cGRhdGVzIHRoZSByZWZlcmVuY2UgdG8gdXNl IHRoZSBuZXcgbG9jYXRpb24uDQpJbiBSdWJ5LCBpdCBsb29rcyBsaWtlIHRoaXM6DQoNCmBgYHJ1 YnkNCmRlZiB1cGRhdGVfcmVmZXJlbmNlcw0KICBoZWFwLmVhY2ggZG8gfHNsb3R8DQogICAgbmV4 dCBpZiBpc19lbXB0eT8oc2xvdCkgfHwgaXNfbW92ZWQ/KHNsb3QpDQoNCiAgICBzbG90LnJlZmVy ZW5jZXMuZWFjaF93aXRoX2luZGV4IGRvIHxjaGlsZCwgaXwNCiAgICAgIGlmIGlzX21vdmVkPyhj aGlsZCkNCiAgICAgICAgc2xvdC5zZXRfcmVmZXJlbmNlKGksIGNoaWxkLm5ld19sb2NhdGlvbikN CiAgICAgIGVuZA0KICAgIGVuZA0KICBlbmQNCmVuZA0KYGBgDQoNCkFmdGVyIHJlZmVyZW5jZSB1 cGRhdGVzLCB0aGUgaGVhcCB3aWxsIGxvb2sgbGlrZSB0aGlzOg0KDQpgYGANCiAgICAgICAgICAg ICAgICAgICAgIOKUjCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSA ICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIFJlZiBVcGRhdGVzICAg4pSC ICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAg4pSUIOKUgCDilIAg4pSAIOKUgCDilIAg4pSA IOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA 4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA 4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJbmRleCAg ICDilIIgIDEgIOKUgiAgMiAg4pSCICAzICDilIIgIDQgIOKUgiAgNSAg4pSCICA2ICDilIINCiAg ICAgICAgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKU gOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKU gOKUgOKUgOKUpA0KU2xvdCBDb250ZW50cyAg4pSCICBBICDilIIgIEIgIOKUgiAgRCAg4pSCICBD ICDilIJNT1ZFROKUgk1PVkVE4pSCDQogICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAg4pSC ICAgICDilIIgICAgIOKUglRPIDQg4pSCVE8gMyDilIINCiAgICAgICAgICAgICAgIOKUlOKUgOKU gOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKU gOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0KICAgICAgICAg ICAgICAgICAg4pSCICAgICDilIIgICAgIOKWsiAgICAg4payICAgICAgICAgICAgICAgDQogICAg ICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgICAgICAgICAgICAN CiAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKU vOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAg ICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSYICAgICAgICAgICAgICAgICAgICAgDQpgYGANCg0KIyMj IFN0ZXAgRm91ciwgRnVsbCBHQw0KDQpBZnRlciByZWZlcmVuY2VzIGhhdmUgYmVlbiB1cGRhdGVk LCBhIGZ1bGwgR0MgaXMgcGVyZm9ybWVkLiAgVGhpcyBjb252ZXJ0cyB0aGUNCmBUX01PVkVEYCBz bG90cyBiYWNrIGluIHRvIGBUX0VNUFRZYCBzbG90cy4gIFRoZSBHQyBhdXRvbWF0aWNhbGx5IHRh a2VzIGNhcmUgb2YNCnRoaXMgYmVjYXVzZSBubyBvYmplY3Qgc2hvdWxkIHJlZmVyZW5jZSBhIGBU X01PVkVEYCBzbG90Lg0KDQojIyBOb24gTW92aW5nIE9iamVjdHMNCg0KTm9uIG1vdmluZyBvYmpl Y3RzIGFyZToNCg0KMS4gT2JqZWN0cyBvbiB0aGUgc3RhY2sNCjIuIE9iamVjdHMgbWFya2VkIHdp dGggYHJiX2djX21hcmtgDQozLiBIYXNoIGtleSBvYmplY3RzDQoNCiMjIyBPYmplY3RzIG9uIHRo ZSBzdGFjaw0KDQpUaGUgc3RhY2sgc2hvdWxkIG5vdCBiZSBtdXRhdGVkLCBzbyB0aGVzZSBhcmUg cGlubmVkLg0KDQojIyMgT2JqZWN0cyBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFya2ANCg0KQXMgbWVu dGlvbmVkIGVhcmxpZXIsIGFueSBvYmplY3QgbWFya2VkIHdpdGggYHJiX2djX21hcmtgIG1heSBu b3QgbW92ZSBiZWNhdXNlIGENCkMgZXh0ZW5zaW9uIG1heSBob2xkIGEgcmVmZXJlbmNlLiAgSGVy ZSBpcyBhbiBleGNlcnB0IGZyb20gWWFqbCwgYSBKU09OIHBhcnNlci4NClRoaXMgaXMgdGhlIG1h cmsgZnVuY3Rpb24gaXQgdXNlczoNCg0KYGBgYw0Kc3RhdGljIHZvaWQgeWFqbF9lbmNvZGVyX3dy YXBwZXJfbWFyayh2b2lkICogd3JhcHBlcikgew0KICAgIHlhamxfZW5jb2Rlcl93cmFwcGVyICog dyA9IHdyYXBwZXI7DQogICAgaWYgKHcpIHsNCiAgICAgICAgcmJfZ2NfbWFyayh3LT5vbl9wcm9n cmVzc19jYWxsYmFjayk7DQogICAgICAgIHJiX2djX21hcmsody0+dGVybWluYXRvcik7DQogICAg fQ0KfQ0KDQoNCm9iaiA9IERhdGFfTWFrZV9TdHJ1Y3Qoa2xhc3MsIHlhamxfZW5jb2Rlcl93cmFw cGVyLCB5YWpsX2VuY29kZXJfd3JhcHBlcl9tYXJrLCB5YWpsX2VuY29kZXJfd3JhcHBlcl9mcmVl LCB3cmFwcGVyKTsNCmBgYA0KDQpUaGUgdmFsdWVzIGluIHRoaXMgbWFyayBmdW5jdGlvbiBgdy0+ b25fcHJvZ3Jlc3NfY2FsbGJhY2tgIGFuZCBgdy0+dGVybWluYXRvcmANCndpbGwgbm90IG1vdmUg c2luY2UgdGhleSBhcmUgcGlubmVkIGJ5IGByYl9nY19tYXJrYC4NCg0KIyMjIEhhc2gga2V5IG9i amVjdHMNCg0KQ2VydGFpbiBoYXNoIGtleXMgd2lsbCBub3QgbW92ZS4gIE1vc3Qgb2JqZWN0cyB1 c2UgdGhlaXIgYWRkcmVzcyBhcyB0aGUgaGFzaA0KdmFsdWUuICBJZiB0aGUgb2JqZWN0IG1vdmVz LCB0aGUgaGFzaCB2YWx1ZSBjb3VsZCBjaGFuZ2UsIHNvIGhhc2gga2V5cyBhcmUgbm90DQphbGxv d2VkIHRvIG1vdmUuDQoNClRoZXJlIGlzIGFuIGV4Y2VwdGlvbiBmb3Igc3RyaW5nIG9iamVjdHMu ICBTdHJpbmcgb2JqZWN0cyBjYWxjdWxhdGUgdGhlaXIgaGFzaA0KYmFzZWQgb24gdGhlIGJ5dGVz IGluIHRoZSBzdHJpbmcuICBTaW5jZSB0aGUgYnl0ZXMgaW4gdGhlIHN0cmluZyBkbyBub3QgY2hh bmdlDQphZnRlciBtb3ZlLCB0aGV5IGFyZSBhbGxvd2VkIHRvIG1vdmUuICBNb3N0IGhhc2gga2V5 cyBpbiBsYXJnZSBwcm9ncmFtcyBhcmUNCnN0cmluZ3MsIHNvIG9ubHkgYWxsb3dpbmcgc3RyaW5n IGtleXMgdG8gbW92ZSBzZWVtZWQgZW5vdWdoLg0KDQojIyBTcGVjaWFsIENvbnNpZGVyYXRpb25z DQoNCiMjIyBPYmplY3QgSUQNCg0KYE9iamVjdCNvYmplY3RfaWRgIGJhc2VzIGl0cyB2YWx1ZSBm cm9tIHRoZSBhZGRyZXNzIG9mIHRoZSBvYmplY3QuICBGb3IgZXhhbXBsZToNCg0KYGBgcnVieQ0K eCA9IE9iamVjdC5uZXcNCmlkID0geC5vYmplY3RfaWQNCkdDLmNvbXBhY3QgICAgICAgICMgYHhg IG1vdmVzDQppZCA9PSB4Lm9iamVjdF9pZCAjIGBpZGAgc2hvdWxkIGJlIHNhbWUgYXMgYHgub2Jq ZWN0X2lkYA0KYGBgDQoNCldlIGV4cGVjdCB0aGUgb2JqZWN0IGlkIHRvIHJlbWFpbiB0aGUgc2Ft ZSByZWdhcmRsZXNzIG9mIGNvbXBhY3Rpb24uICBUbyBkZWFsDQp3aXRoIGBvYmplY3RfaWRgLCB0 d28gaGFzaGVzIHdlcmUgaW50cm9kdWNlZC4gIE9uZSBoYXNoIGNvbnRhaW5zIGEgbWFwIG9mIHRo ZQ0Kb2JqZWN0IHRvIHRoZSAqc2Vlbiogb2JqZWN0IGlkLiAgVGhlIHNlY29uZCBtYXAgY29udGFp bnMgYWxsIHNlZW4gb2JqZWN0IGlkcy4NClRoZSBtYXBzIGFyZSB1cGRhdGVkIGFueSB0aW1lIGBv YmplY3RfaWRgIGlzIGNhbGxlZCwgYW4gb2JqZWN0IG1vdmVzLCBvciBhbg0Kb2JqZWN0IGlzIGZy ZWVkLg0KDQpvYmplY3RfaWQgaW1wbGVtZW50YXRpb24gaW4gUnVieToNCg0KYGBgcnVieQ0KJG9i al90b19pZCA9IHt9DQokaWRfdG9fb2JqID0ge30NCg0KY2xhc3MgT2JqZWN0DQogIGRlZiBvYmpl Y3RfaWQNCiAgICBpZiAkb2JqX3RvX2lkLmtleT8oYWRkcmVzcykNCiAgICAgICMgU2Vjb25kIGNh bGwgdG8gb2JqZWN0X2lkIG9uIHRoaXMgb2JqZWN0DQogICAgICByZXR1cm4gJG9ial90b19pZFth ZGRyZXNzXQ0KICAgIGVsc2UNCiAgICAgICMgRmlyc3QgY2FsbCB0byBvYmplY3RfaWQgb24gdGhp cyBvYmplY3QNCg0KICAgICAgYWRkciA9IHNlbGYuYWRkcmVzcw0KDQogICAgICBsb29wIGRvDQog ICAgICAgIGlmICRzZWVuX2lkcy5rZXk/KGFkZHIpDQogICAgICAgICAgIyBSZXNvbHZlIGNvbmZs aWN0DQogICAgICAgICAgYWRkciArPSBzaXplb2YoUlZBTFVFKQ0KICAgICAgICBlbHNlDQogICAg ICAgICAgJG9ial90b19pZFtzZWxmLmFkZHJlc3NdID0gYWRkcg0KICAgICAgICAgICRpZF90b19v YmpbYWRkcl0gICAgICAgICA9IHNlbGYNCiAgICAgICAgICByZXR1cm4gYWRkcg0KICAgICAgICBl bmQNCiAgICAgIGVuZA0KICAgIGVuZA0KICBlbmQNCg0KICBwcml2YXRlDQoNCiAgZGVmIGFkZHJl c3MNCiAgICAjIHJldHVybnMgYWRkcmVzcyBpbiBtZW1vcnkgb2Ygb2JqZWN0DQogIGVuZA0KZW5k DQpgYGANCg0KRHVyaW5nIGNvbXBhY3Rpb246DQoNCmBgYHJ1YnkNCmRlZiBjb21wYWN0DQogIGhl YXAgPSBbIC4uLiBdICMgbWFueSBzbG90cw0KDQogIHdoaWxlIGxlZnQgPCByaWdodA0KICAgIGRl c3Rfc2xvdCA9IGhlYXBbbGVmdF0NCiAgICBzb3VyY2Vfc2xvdCA9IGhlYXBbcmlnaHRdDQoNCiAg ICBpZiBtb3Zpbmc/KHNvdXJjZV9zbG90KQ0KICAgICAgaWYgJG9ial90b19pZC5rZXk/KHNvdXJj ZV9zbG90LmFkZHJlc3MpDQogICAgICAgIGlkID0gJG9ial90b19pZC5kZWxldGUoc291cmNlX3Ns b3QuYWRkcmVzcykNCiAgICAgICAgJG9ial90b19pZFtkZXN0X3Nsb3QuYWRkcmVzc10gPSBpZA0K ICAgICAgICAkaWRfdG9fb2JqW2lkXSAgICAgICAgICAgICAgICA9IGRlc3Rfc2xvdC5hZGRyZXNz DQogICAgICBlbmQNCg0KICAgICAgIyBldGMNCiAgICBlbmQNCiAgZW5kDQplbmQNCmBgYA0KDQpE dXJpbmcgRnJlZToNCg0KYGBgcnVieQ0KZGVmIGZyZWUob2JqKQ0KICBpZiAkb2JqX3RvX2lkLmtl eT8ob2JqLmFkZHJlc3MpDQogICAgJHNlZW5faWRzLmRlbGV0ZSgkb2JqX3RvX2lkLmRlbGV0ZShv YmouYWRkcmVzcykpDQogIGVuZA0KZW5kDQpgYGANCg0KIyMjIE9iamVjdFNwYWNlLl9pZDJyZWYN Cg0KV2hlbiBnZW5lcmF0aW5nIGFuIG9iamVjdCBpZCwgaW4gdGhlIGNhc2Ugb2YgYSBjb2xsaXNp b24sIHRoZSBhZGRyZXNzIGlzDQppbmNyZW1lbnRlZCBieSA0MC4gIFRoaXMgZW5hYmxlcyBgX2lk MnJlZmAgdG8gZGV0ZXJtaW5lIHRoZXJlIGlzIGEgVkFMVUUgcG9pbnRlcg0KYW5kIHJvdW5kIHRy aXAgdGhlIG9iamVjdCBjb3JyZWN0bHkuDQoNCiMjIENvbXBhY3Rpb24gU3VwcG9ydCBmb3IgQyBl eHRlbnNpb25zDQoNCkFueSBvYmplY3QgbWFya2VkIHdpdGggYHJiX2djX21hcmtgIHdpbGwgYmUg InBpbm5lZCIgYW5kIGNhbm5vdCBtb3ZlLiAgQw0KZXh0ZW5zaW9ucyBtYXJrIG9iamVjdHMgdmlh IGByYl9nY19tYXJrYCwgc28gdGhpcyBlbnN1cmVzIHRoYXQgcG9pbnRlcnMgaW4gQw0Kc3RheSB2 YWxpZC4NCg0KSG93ZXZlciwgc29tZSBDIGV4dGVuc2lvbnMgbWF5IHdhbnQgdG8gc3VwcG9ydCBy ZWZlcmVuY2UgbW92ZW1lbnQuDQoNCiMjIyBSZWZlcmVuY2UgTW92ZW1lbnQgaW4gQyBleHRlbnNp b25zDQoNCkluIG9yZGVyIHRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBpZiBh IEMgZXh0ZW5zaW9uIGhvbGRzIGEgcmVmZXJlbmNlDQp0byBhIFZBTFVFLCB0aGUgVkFMVUUgc2hv dWxkIG5vdCBtb3ZlLiAgR29pbmcgZm9yd2FyZCwgQyBleHRlbnNpb25zIGNhbiBzdXBwb3J0DQpt b3ZpbmcgVkFMVUVzLiAgVG8gc3VwcG9ydCBtb3ZpbmcgVkFMVUVzLCBhIEMgZXh0ZW5zaW9uIHNo b3VsZCBjaGFuZ2UNCmByYl9nY19tYXJrYCB0byBgcmJfZ2NfbWFya19ub19waW5gLCB0aGVuIGlt cGxlbWVudCBhIG5ldyBjYWxsYmFjayB0aGF0IGlzDQpjYWxsZWQgZHVyaW5nIGNvbXBhY3Rpb24g dGhhdCBnaXZlcyB0aGUgZXh0ZW5zaW9uIGFuIG9wcG9ydHVuaXR5IHRvIHVwZGF0ZSBpdHMNCm93 biByZWZlcmVuY2VzLiAgQSBuZXcgZnVuY3Rpb24gYHJiX2djX25ld19sb2NhdGlvbmAgd2lsbCBy ZXR1cm4gdGhlIG5ldw0KbG9jYXRpb24gZm9yIGEgcGFydGljdWxhciBWQUxVRS4NCg0KSGVyZSBp cyBhbiBleGFtcGxlIGZvciBhdXRvbG9hZCBmcm9tIGB2YXJpYWJsZS5jYC4gIEEgbmV3IGNvbXBh Y3Rpb24gY2FsbGJhY2sgaXMNCnJlZ2lzdGVyZWQsIGBhdXRvbG9hZF9pX2NvbXBhY3RgOg0KDQpg YGBjDQpzdGF0aWMgY29uc3QgcmJfZGF0YV90eXBlX3QgYXV0b2xvYWRfZGF0YV9pX3R5cGUgPSB7 DQogICAgImF1dG9sb2FkX2kiLA0KICAgIHthdXRvbG9hZF9pX21hcmssIGF1dG9sb2FkX2lfZnJl ZSwgYXV0b2xvYWRfaV9tZW1zaXplLCBhdXRvbG9hZF9pX2NvbXBhY3R9LA0KICAgIDAsIDAsIFJV QllfVFlQRURfRlJFRV9JTU1FRElBVEVMWQ0KfTsNCmBgYA0KDQpUaGUgbWFyayBmdW5jdGlvbiBj aGFuZ2VzIHRvICptYXJrKiByZWZlcmVuY2VzLCBidXQgKm5vdCogcGluIHRoZW06DQoNCmBgYGMN CnN0YXRpYyB2b2lkDQphdXRvbG9hZF9pX21hcmsodm9pZCAqcHRyKQ0Kew0KICAgIHN0cnVjdCBh dXRvbG9hZF9kYXRhX2kgKnAgPSBwdHI7DQoNCiAgICByYl9nY19tYXJrX25vX3BpbihwLT5mZWF0 dXJlKTsNCg0KICAgIC8qIGFsbG93IEdDIHRvIGZyZWUgdXMgaWYgbm8gbW9kdWxlcyByZWZlciB0 byB0aGlzIHZpYSBhdXRvbG9hZF9jb25zdC5hZCAqLw0KICAgIGlmIChsaXN0X2VtcHR5KCZwLT5j b25zdGFudHMpKSB7DQogICAgICAgIHJiX2hhc2hfZGVsZXRlKGF1dG9sb2FkX2ZlYXR1cmVtYXAs IHAtPmZlYXR1cmUpOw0KICAgIH0NCn0NCmBgYA0KDQpBZnRlciB0aGUgaGVhcCBpcyBjb21wYWN0 ZWQsIGFueSBDIGV4dGVuc2lvbnMgdGhhdCByZWdpc3RlcmVkIGEgImNvbXBhY3Rpb24iDQpjYWxs YmFjayB3aWxsIGJlIGNhbGxlZCBhbmQgaGF2ZSBhIGNoYW5jZSB0byB1cGRhdGUgaW50ZXJuYWwg cmVmZXJlbmNlcy4gIFRoZQ0KYXV0b2xvYWQgY29tcGFjdGlvbiBmdW5jdGlvbiBpcyBsaWtlIHRo aXM6DQoNCmBgYGMNCnN0YXRpYyB2b2lkDQphdXRvbG9hZF9pX2NvbXBhY3Qodm9pZCAqcHRyKQ0K ew0KICAgIHN0cnVjdCBhdXRvbG9hZF9kYXRhX2kgKnAgPSBwdHI7DQogICAgcC0+ZmVhdHVyZSA9 IHJiX2djX25ld19sb2NhdGlvbihwLT5mZWF0dXJlKTsNCmBgYA0KDQpUaGUgY29tcGFjdGlvbiBj YWxsYmFjayBhc2tzIGZvciB0aGUgbmV3IGxvY2F0aW9uIGZvciB0aGUgYHAtPmZlYXR1cmVgDQpy ZWZlcmVuY2UuICBgcmJfZ2NfbmV3X2xvY2F0aW9uYCB3aWxsIGVpdGhlciByZXR1cm4gdGhlIGN1 cnJlbnQgdmFsdWUgb2YNCmBwLT5mZWF0dXJlYCAoaW4gdGhlIGNhc2UgdGhlIFZBTFVFIGRpZCBu b3QgbW92ZSksIG9yIHRoZSBuZXcgbG9jYXRpb24uDQoNCiMjIFJlZmVyZW5jZSBWZXJpZmljYXRp b24gYW5kIFRlc3RpbmcNCg0KQWZ0ZXIgY29tcGFjdGlvbiwgb2JqZWN0cyB0aGF0IGhhdmUgbW92 ZWQgYXJlIGNoYW5nZWQgdG8gYFRfTU9WRURgIG9iamVjdHMgd2l0aA0KZm9yd2FyZGluZyBhZGRy ZXNzZXMuICBPbmNlIGFsbCByZWZlcmVuY2VzIGFyZSB1cGRhdGVkLCBubyBvYmplY3Qgc2hvdWxk IHBvaW50DQp0byBhIGBUX01PVkVEYCBzbG90LiAgV2UgY2FuIHNheSB0aGF0IGJlZm9yZSBhbmQg YWZ0ZXIgY29tcGFjdGlvbiwgbm8gb2JqZWN0DQpzaG91bGQgZXZlciBwb2ludCBhdCBhIGBUX01P VkVEYCBzbG90LiAgU28gaWYgYSBgVF9NT1ZFRGAgb2JqZWN0IGlzIGV2ZXIgcHVzaGVkDQpvbiB0 byB0aGUgbWFyayBxdWV1ZSwgdGhlcmUgaXMgYSBidWcuICBgcHVzaF9tYXJrX3N0YWNrYCBoYXMg YSBjaGVjayBmb3INCmBUX01PVkVEYCBvYmplY3RzLCBhbmQgd2lsbCBjcmFzaCBpZiBhIGBUX01P VkVEYCBvYmplY3QgaXMgZXZlciBwdXNoZWQgb24gdG8gdGhlDQptYXJrIHN0YWNrLg0KDQpBIG1l dGhvZCBgR0MudmVyaWZ5X2NvbXBhY3Rpb25fcmVmZXJlbmNlc2Agd2FzIGFkZGVkIHRoYXQgZG91 YmxlcyB0aGUgYXZhaWxhYmxlDQpoZWFwIHNpemUsIHRoZW4gY29tcGFjdHMgdGhlIGhlYXAuICBT aW5jZSB0aGUgaGVhcCBoYXMgZG91YmxlZCBpbiBzaXplLCBhbnkNCm9iamVjdCB0aGF0IGNhbiBt b3ZlIHdpbGwgbW92ZS4gIEFueSByZWZlcmVuY2VzIHRvIGBUX01PVkVEYCBvYmplY3RzIHdpbGwg YmUNCmNhdWdodCBkdXJpbmcgdGhlIEdDIHBoYXNlIGFmdGVyIGNvbXBhY3Rpb24uDQoNCiMjIEtu b3duIElzc3VlDQoNClNhZmV0eSBmb3IgQyBleHRlbnNpb25zIGRlcGVuZHMgZW50aXJlbHkgb24g QyBleHRlbnNpb25zIG1hcmtpbmcgdGhlaXINCnJlZmVyZW5jZXMuICBJZiBhIEMgZXh0ZW5zaW9u IGRvZXMgbm90IG1hcmsgYSByZWZlcmVuY2UsIHRoZSBjb21wYWN0b3IgYXNzdW1lcw0KdGhhdCB0 aGUgb2JqZWN0IGlzIHNhZmUgdG8gbW92ZS4gIFRoaXMgY2FuIGNhdXNlIGFuIGVycm9yIGluIHRo ZSBmb2xsb3dpbmcNCnNpdHVhdGlvbiwgd2hlbiB0aGVyZSBpcyBhbiBvYmplY3QgZ3JhcGggbGlr ZSB0aGlzOg0KDQoNCmBgYA0KIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUkCAgICAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilJAgDQog4pSCICBSdWJ5IE9iamVjdCAg4pSCICAgICAgIOKUgiAgUnVieSBP YmplY3QgIOKUgiANCiDilIIgIEltcGxlbWVudGVkICDilIIgICAgICAg4pSCICBJbXBsZW1lbnRl ZCAg4pSCIA0KIOKUgiAgICBpbiBSdWJ5ICAgIOKUgiAgICAgICDilIIgICAgIGluIEMgICAgICDi lIIgDQog4pSCICAgICAgICAgICAgICAg4pSCICAgICAgIOKUgiAgICAgICAgICAgICAgIOKUgiAN CiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICAg ICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYIA0K ICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICANCiAgICAgICAg IOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAg4pSCICAgICAg ICAgICAgICAgICAgICAgICDilIIgICBOT1QgICANCiBNYXJrZWQgIOKUgiAgICAgICAgICAgICAg ICAgICAgICAgICAgTWFya2VkIA0KICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICDi lIIgICAgICAgICANCiAgICAgICAgIOKUgiAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAgICAgICANCiAgICAgICAgIOKUgiAgIOKUgiAg ICAgICAgICAgICAgIOKUgiAgIOKUgiAgICAgICAgIA0KICAgICAgICAg4pSCICAg4pSCICBSdWJ5 IE9iamVjdCAg4pSCICAgICAgICAgICAgIA0KICAgICAgICAg4pSU4pSA4pSA4pa24pSCICAgICAg ICAgICAgICAg4pSC4peA4pSAIOKUmCAgICAgICAgIA0KICAgICAgICAgICAgIOKUgiAgICAgICAg ICAgICAgIOKUgiAgICAgICAgICAgICANCiAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICAgICAgICAgICAgDQpgYGANCg0KSWYg dGhlIEMgZXh0ZW5zaW9uIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCwgYnV0IGV4 cGVjdHMgdGhlIG9iamVjdA0Kbm90IHRvIG1vdmUgYmVjYXVzZSBhIFJ1Ynkgb2JqZWN0IGNvbnRh aW5zIGEgcmVmZXJlbmNlLCB0aGVuIHRoZSB0YXJnZXQgUnVieQ0Kb2JqZWN0ICptYXkqIG1vdmUg YW5kIHRoZSByZWZlcmVuY2UgaW4gdGhlIEMgZXh0ZW5zaW9uIHdpbGwgYmUgd3JvbmcuICBJIGxp a2UgdG8NCmNhbGwgdGhlc2UgImdob3N0IHJlZmVyZW5jZXMiIGJlY2F1c2UgdGhlIEdDIGNhbm5v dCBzZWUgdGhlbSBidXQgdGhleSB3aWxsIGNvbWUNCmJhY2sgdG8gaGF1bnQgeW91Lg0KDQpUaGUg c29sdXRpb24gdG8gdGhpcyBpcyBlaXRoZXI6DQoNCjEuIENoYW5nZSB0aGUgQyBleHRlbnNpb24g dG8gYHJiX2djX21hcmtgIHRoZSBvYmplY3QNCjIuIFJlbW92ZSB0aGUgcmVmZXJlbmNlIGZyb20g dGhlIEMgZXh0ZW5zaW9uDQoNCk9uZSBleGFtcGxlIG9mIHRoaXMgc2l0dWF0aW9uIHdhcyBmaXhl ZCBoZXJlOg0KDQogIGh0dHBzOi8vZ2l0aHViLmNvbS9tc2dwYWNrL21zZ3BhY2stcnVieS9pc3N1 ZXMvMTMzDQoNCiMjIFN1bW1hcnkNCg0KQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBDIGV4 dGVuc2lvbnMgaXMgbWFpbnRhaW5lZCBieSAicGlubmluZyIgYW55DQpyZWZlcmVuY2VzIG1hcmtl ZCB3aXRoIGByYl9nY19tYXJrYC4gIEEgZnVsbCBtYXJrICptdXN0KiBiZSBkb25lIGJlZm9yZQ0K Y29tcGFjdGluZyB0byBkaXNjb3ZlciBhbGwgcGlubmVkIHJlZmVyZW5jZXMuDQoNCkEgbmV3IGNh bGxiYWNrIGZvciBDIGV4dGVuc2lvbnMgaXMgaW50cm9kdWNlZCBzbyB0aGF0IEMgZXh0ZW5zaW9u cyBjYW4gc3VwcG9ydA0KY29tcGFjdGlvbi4gIEMgZXh0ZW5zaW9ucyB0aGF0IHdpc2ggdG8gc3Vw cG9ydCBjb21wYWN0aW9uIG11c3QgdXNlIHRoZSBuZXcNCmNhbGxiYWNrLCBgcmJfZ2NfbWFya19u b19waW5gLCBhbmQgYHJiX2djX25ld19sb2NhdGlvbmAuDQoNCkMgZXh0ZW5zaW9ucyB0aGF0IG1h aW50YWluIHBvaW50ZXJzIGJ1dCBkbyBub3QgbWFyayB0aG9zZSBwb2ludGVycyBtYXkgU0VHVi4g IFdlDQpjYW4gdXNlIGBHQy52ZXJpZnlfY29tcGFjdGlvbl9yZWZlcmVuY2VzYCB0byBkaXNjb3Zl ciB0aGVzZSBpc3N1ZXMuDQoNClteMV06IFNlZSBhbHNvICJUaGUgR2FyYmFnZSBDb2xsZWN0aW9u IEhhbmRib29rIiBwYWdlIDMyDQoNCg0KLS0tRmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KYmVmb3JlX2NvbXBhY3QtMC5wbmcgKDExMSBLQikNCmFmdGVyX2NvbXBhY3QtMC5w bmcgKDgwLjYgS0IpDQpiZWZvcmVfY29tcGFjdC0xLnBuZyAoODEuMiBLQikNCmFmdGVyX2NvbXBh Y3QtMS5wbmcgKDc5LjQgS0IpDQowMDAxLUdDLUNvbXBhY3Rpb24tZm9yLU1SSS5wYXRjaCAoNzcu NCBLQikNCnJ1YnlfMjAxOS0wMy0yMi0xNzE4MzlfUGlrYWNodUVYRXMtTUJQLTIwMTguY3Jhc2gg KDcxLjQgS0IpDQpydWJ5XzIwMTktMDMtMjItMTcxODM5LTFfUGlrYWNodUVYRXMtTUJQLTIwMTgu Y3Jhc2ggKDcxLjQgS0IpDQoNCg0KLS0gDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NCg==