From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=104.47.1.54; helo=eur01-ve1-obe.outbound.protection.outlook.com; envelope-from=sami.mujawar@arm.com; receiver=edk2-devel@lists.01.org Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on0054.outbound.protection.outlook.com [104.47.1.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id CF5E12202E480 for ; Thu, 15 Mar 2018 11:42:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=f3ktLBB1qFBH38PTmu9nUbRsGWF/0qFyFEWOPY0/8L4=; b=p2p0COClPBNM/DBoOrdYQTWo9nbdRi1lJLdiEP2ZL6JOjZELn9U+i2rGSpOoiibSJcZYsQB5hRlcmObcGzCXq6KCTWjn/LsIV4wRDlDl6u844diN4hJ8y+ScPoHYMF4thOo8zS5KOEsf3HNF4ex42GlnpQKOI8RgmDfwUS2v+cc= Received: from DB5PR0801MB2710.eurprd08.prod.outlook.com (10.166.170.155) by DB5PR0801MB1429.eurprd08.prod.outlook.com (10.167.229.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.588.14; Thu, 15 Mar 2018 18:48:15 +0000 Received: from DB5PR0801MB2710.eurprd08.prod.outlook.com ([10.166.170.155]) by DB5PR0801MB2710.eurprd08.prod.outlook.com ([10.166.170.155]) with mapi id 15.20.0588.013; Thu, 15 Mar 2018 18:48:15 +0000 From: Sami Mujawar To: "jaben.carsey@intel.com" , "ruiyu.ni@intel.com" CC: "leif.lindholm@linaro.org" , "Stephanie Hughes-Fitt" , "jiewen.yao@intel.com" , "edk2-devel@lists.01.org" , nd Thread-Topic: [edk2] [PATCH v5] ShellPkg: Add acpiview tool to dump ACPI tables Thread-Index: AQHTtvo4TGAq9DsloUubW+/i0xc63qPRrGYw Date: Thu, 15 Mar 2018 18:48:15 +0000 Message-ID: References: <20180308162602.28152-1-sami.mujawar@arm.com> In-Reply-To: <20180308162602.28152-1-sami.mujawar@arm.com> Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Sami.Mujawar@arm.com; x-originating-ip: [217.140.96.140] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB5PR0801MB1429; 7:Nh8h8KIvtBG0O7nh5HjAfCKPgHxOwCCWArPhPnGzt0AO1lSP2y3JMQPpWHKiozMW4D4J8Aj/TT6xRx27qI5Wm5Dt7gDYhPvXafbzcMOTvjrgdzdlSgqQFC9HviYx6yQ45WVP5ZXWogEiLTj+j4i5xwt+he8LaUpUvB42M4sKl4LV5G8PEmvCOD3JRUiK7oQod6ubBOVQYYD9nczyWvSL+VqeW/8YMhLSlvtSekFhOofDu7yJB2n6Tz3eMUADQag/ x-ms-exchange-antispam-srfa-diagnostics: SSOS;SSOR; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 2c15c259-09ce-4679-ac45-08d58aa54fd2 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(3008032)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DB5PR0801MB1429; x-ms-traffictypediagnostic: DB5PR0801MB1429: nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(158342451672863)(180628864354917)(166708455590820)(131327999870524)(162533806227266)(265313219721884)(211171220733660)(228905959029699)(17755550239193); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(10201501046)(3231221)(944501244)(52105095)(93006095)(93001095)(3002001)(6055026)(6041310)(20161123562045)(20161123560045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:DB5PR0801MB1429; BCL:0; PCL:0; RULEID:; SRVR:DB5PR0801MB1429; x-forefront-prvs: 0612E553B4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(376002)(346002)(366004)(39380400002)(396003)(13464003)(51444003)(189003)(199004)(105586002)(3660700001)(25786009)(74316002)(305945005)(66066001)(7736002)(45080400002)(3280700002)(6436002)(2950100002)(5660300001)(478600001)(2906002)(229853002)(575784001)(33656002)(16799955002)(97736004)(15188155005)(86362001)(3846002)(53366004)(59450400001)(16200700003)(54906003)(6246003)(6116002)(6306002)(4326008)(53946003)(9686003)(2900100001)(110136005)(53546011)(55016002)(6506007)(106356001)(102836004)(316002)(81166006)(53936002)(966005)(68736007)(14454004)(8676002)(186003)(72206003)(26005)(53376002)(77096007)(81156014)(2501003)(99286004)(8936002)(76176011)(7696005)(579004)(559001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR0801MB1429; H:DB5PR0801MB2710.eurprd08.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: zo/5IiM3jpdg4a7BGYQnh3Sj6WkbI3rOLXgNmg7x06FqOxZr13iWsnYUSD/Aecv4u86b3fUfHVCY9JZx2PtjRsr8tyX4imHayXRquk9gGMgrwMtlVy2j9KIPKkqxEXw+wD4EFT5v4KHQRjfXfCPxkke9TbZNZzQn5BEfLzQWWo3fb+G/1hAzLDZPxGPPq+b/A1WO20wEOxFv7Hz5F1TBH4AUXOTlif5/vX0pBvNqw356+KId3ifhdnA7qP1eHl8/v35oL6WCkjF2X5d0Ph0SeCFsQ+ocaytkzZmeBu9LRImKaVAd3mJGirpwWjsbFhAgVuEfFed21XXkwlryT6s8Qw== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2c15c259-09ce-4679-ac45-08d58aa54fd2 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Mar 2018 18:48:15.4518 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR0801MB1429 Subject: Re: [PATCH v5] ShellPkg: Add acpiview tool to dump ACPI tables X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Mar 2018 18:42:08 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGksDQoNClBsZWFzZSBsZXQgbWUga25vdyBpZiB0aGVyZSBpcyBhbnl0aGluZyBtb3JlIHlvdSBu ZWVkIGZyb20gbWUgYmVmb3JlIHlvdSBjYW4gYWNjZXB0IHRoaXMgcGF0Y2guDQoNClJlZ2FyZHMs DQoNClNhbWkgTXVqYXdhcg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogZWRr Mi1kZXZlbCBbbWFpbHRvOmVkazItZGV2ZWwtYm91bmNlc0BsaXN0cy4wMS5vcmddIE9uIEJlaGFs ZiBPZiBTYW1pIE11amF3YXINClNlbnQ6IDA4IE1hcmNoIDIwMTggMDQ6MjYgUE0NClRvOiBlZGsy LWRldmVsQGxpc3RzLjAxLm9yZw0KQ2M6IHJ1aXl1Lm5pQGludGVsLmNvbTsgbGVpZi5saW5kaG9s bUBsaW5hcm8ub3JnOyBTdGVwaGFuaWUgSHVnaGVzLUZpdHQgPFN0ZXBoYW5pZS5IdWdoZXMtRml0 dEBhcm0uY29tPjsgamlld2VuLnlhb0BpbnRlbC5jb207IGphYmVuLmNhcnNleUBpbnRlbC5jb207 IG5kIDxuZEBhcm0uY29tPg0KU3ViamVjdDogW2VkazJdIFtQQVRDSCB2NV0gU2hlbGxQa2c6IEFk ZCBhY3BpdmlldyB0b29sIHRvIGR1bXAgQUNQSSB0YWJsZXMNCg0KW1RoaXMgc2VuZGVyIGZhaWxl ZCBvdXIgZnJhdWQgZGV0ZWN0aW9uIGNoZWNrcyBhbmQgbWF5IG5vdCBiZSB3aG8gdGhleSBhcHBl YXIgdG8gYmUuIExlYXJuIGFib3V0IHNwb29maW5nIGF0IGh0dHA6Ly9ha2EubXMvTGVhcm5BYm91 dFNwb29maW5nXQ0KDQpUaGlzIHByb2dyYW0gaXMgcHJvdmlkZWQgdG8gYWxsb3cgZXhhbWluYXRp b24gb2YgQUNQSSB0YWJsZSBjb250ZW50cw0KZnJvbSB0aGUgVUVGSSBTaGVsbC4gIFRoaXMgY2Fu IGhlbHAgd2l0aCBpbnZlc3RpZ2F0aW9ucywgZXNwZWNpYWxseSBhdA0KdGhhdCBzdGFnZSB3aGVy ZSB0aGUgdGFibGVzIGFyZSBub3QgZW5hYmxpbmcgYW4gT1MgdG8gYm9vdC4NClRoZSBwcm9ncmFt IGlzIG5vdCBleGhhdXN0aXZlLCBhbmQgb25seSBlbmNhcHN1bGF0ZXMgZGV0YWlsZWQga25vd2xl ZGdlDQpvZiBhIGxpbWl0ZWQgbnVtYmVyIG9mIHRhYmxlIHR5cGVzLg0KDQpEZWZhdWx0IGJlaGF2 aW91ciBpcyB0byBkaXNwbGF5IHRoZSBjb250ZW50IG9mIGFsbCB0YWJsZXMgaW5zdGFsbGVkLg0K J0tub3duJyB0YWJsZSB0eXBlcyB3aWxsIGJlIHBhcnNlZCBhbmQgZGlzcGxheWVkIHdpdGggZGVz Y3JpcHRpb25zIGFuZA0KZmllbGQgdmFsdWVzLiAgV2hlcmUgYXBwcm9wcmlhdGUgYSBkZWdyZWUg b2YgY29uc2lzdGVuY3kgY2hlY2tpbmcgaXMNCmRvbmUgYW5kIGVycm9ycyBtYXkgYmUgcmVwb3J0 ZWQgaW4gdGhlIG91dHB1dC4NCk90aGVyIHRhYmxlIHR5cGVzIHdpbGwgYmUgZGlzcGxheWVkIGFz IGFuIGFycmF5IG9mIEhleGFkZWNpbWFsIGJ5dGVzLg0KDQpUbyBmYWNpbGl0YXRlIGRlYnVnZ2lu ZywgdGhlIC1zIGFuZCAtZCBvcHRpb25zIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGENCmJpbmFy eSBmaWxlIGltYWdlIG9mIGEgdGFibGUgdGhhdCBjYW4gYmUgY29waWVkIGVsc2V3aGVyZSBmb3IN CmludmVzdGlnYXRpb24gdXNpbmcgdG9vbHMgc3VjaCBhcyB0aG9zZSBwcm92aWRlZCBieSBhY3Bp Y2Eub3JnLiAgVGhpcyBpcw0KZXNwZWNpYWxseSByZWxldmFudCBmb3IgQU1MIHR5cGUgdGFibGVz IGxpa2UgRFNEVCBhbmQgU1NEVC4NCg0KVGhlIGluc3BpcmF0aW9uIGZvciB0aGlzIGlzIHRoZSBl eGlzdGluZyBzbWJpb3N2aWV3IERlYnVnMSBTaGVsbA0KY29tbWFuZC4NCg0KTWFueSB0YWJsZXMg YXJlIG5vdCBleHBsaWNpdGx5IGhhbmRsZWQsIGluIHBhcnQgYmVjYXVzZSBubyBleGFtcGxlcyBh cmUNCmF2YWlsYWJsZSBmb3Igb3VyIHRlc3RpbmcuDQoNClRoZSBwcm9ncmFtIGlzIGRlc2lnbmVk IHRvIGJlIGV4dGVuZGVkIHRvIG5ldyB0YWJsZXMgd2l0aCBtaW5pbWFsDQplZmZvcnQsIGFuZCBj b250cmlidXRpb25zIGFyZSBpbnZpdGVkLg0KDQpDb250cmlidXRlZC11bmRlcjogVGlhbm9Db3Jl IENvbnRyaWJ1dGlvbiBBZ3JlZW1lbnQgMS4xDQpTaWduZWQtb2ZmLWJ5OiBTYW1pIE11amF3YXIg PHNhbWkubXVqYXdhckBhcm0uY29tPg0KU2lnbmVkLW9mZi1ieTogRXZhbiBMbG95ZCA8ZXZhbi5s bG95ZEBhcm0uY29tPg0KUmV2aWV3ZWQtYnk6IEphYmVuIENhcnNleSA8amFiZW4uY2Fyc2V5QGlu dGVsLmNvbT4NCi0tLQ0KDQpUaGUgdXBkYXRlZCBjaGFuZ2VzIGNhbiBiZSB2aWV3ZWQgYXQ6DQog aHR0cHM6Ly9naXRodWIuY29tL3NhbWltdWphd2FyL2VkazIvdHJlZS8xODhfYWNwaXZpZXdfdjUN Cg0KTm90ZXM6DQogICAgdjU6DQogICAgLSBCdXQgZm9yIG5vdywgbGV0J3MgcmVtb3ZlIGFueSBw dWJsaWMgbGlicmFyeSBBUElzLg0KICAgICAgQWRkaW5nIHB1YmxpYyBBUElzIGlzIHZlcnkgZWFz eS4gQnV0IHJlbW92aW5nIHRoZW0gaXMNCiAgICAgIGFsbW9zdCBpbXBvc3NpYmxlLg0KICAgICAg SWYgd2UgdGhpbmsgaXQncyB2YWx1YWJsZSB0byBhZGQgdGhlbSwgd2UgY2FuIGFkZCB0aGVtDQog ICAgICBpbiBmdXR1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFtSQVldDQogICAgLSBSZW1vdmVkIHB1YmxpYyBsaWJyYXJ5IEFQSSdzLiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NBTUldDQoNCiAgICB2NDoNCiAgICAt IEZpcnN0bHksIHB1YmxpYyBsaWJyYXJ5IEFQSXMgc2hvdWxkIGhhdmUgIkVGSUFQSSIgZGVjb3Jh dG9yLiAgICAgW1JBWV0NCiAgICAtIFJlc3VibWl0dGluZyB1cGRhdGVkIHBhdGNoIHdpdGggIkVG SUFQSSIgZGVjb3JhdG9yLiAgICAgICAgICAgICBbU0FNSV0NCg0KICAgIC0gU2Vjb25kbHksIEkg YW0gd29uZGVyaW5nIGlmIGl0J3MgcG9zc2libGUgdG8gbm90IGV4cG9zZSBhbnkNCiAgICAgIGxp YnJhcnkgY2xhc3NlcyBmb3IgaGFuZGxpbmcgb2YgbW9yZSBBQ1BJIHRhYmxlcy4NCiAgICAgIEkg YWdyZWUgdG8gaW1wbGVtZW50IFVlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYiBpbiBhIHdheSBm b3IgZWFzeQ0KICAgICAgZXh0ZW5zaW9uIGZvciBoYW5kbGluZyBvZiBtb3JlIEFDUEkgdGFibGVz LCBidXQgSSBwcmVmZXIgdG8ga2VlcCB0aGUNCiAgICAgIGludGVyZmFjZXMgaW50ZXJuYWxseSBp bnNpZGUgdGhlIFVlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi4gICAgW1JBWV0NCiAgICAtIFVw ZGF0ZWQgYXMgc3VnZ2VzdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBbU0FNSV0NCg0KICAgIHYzOg0KICAgIC0gQ2FuIHRoZSBpbmRpdmlkdWFsICJjaGlsZCIg bGlicmFyaWVzIGJlIHBsYWNlZCBpbnRvDQogICAgICBzdWJkaXJlY3RvcmllcyB1bmRlciBVZWZp U2hlbGxBY3BpVmlld0NvbW1hbmRMaWIgZGlyZWN0b3J5DQogICAgICBmb3IgY2xlYXIgc2VwYXJh dGlvbj8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSkFCRU5dDQog ICAgLSBQYXRjaCB1cGRhdGVkIHRvIG1vdmUgaW5kaXZpZHVhbCAiY2hpbGQiIGxpYnJhcmllcyBp bnRvDQogICAgICBzdWJkaXJlY3Rvcmllcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgW1NBTUldDQoNCiAgICAtIEluIFVlZmlTaGVsbEFjcGlWaWV3Q29t bWFuZExpYixjIHdoYXQncyB0aGUgbW90aXZhdGlvbiBmb3IgYWxsDQogICAgICB0aGUgd3JhcHBl cnMgYXJvdW5kIHByaW50PyBJIHNlZSB0aGF0IHNvbWUgYXJlIGZvciBtZW1vcnkgYWNjZXNzDQog ICAgICByZXN0cmljdGlvbnMsIGJ1dCB0aGUgcmVzdD8gIFByaW50R3VpZCwgbG9va3MgdGhlIHNh bWUgYXMgdXNpbmcNCiAgICAgICVnIHdpdGggUHJpbnQoKS4uLiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFtKQUJFTl0NCiAgICAtIFRoZSBwcmludCB3cmFwcGVy cyBlbmFibGUgYSBjb21tb24gc3R5bGVkIGZvcm1hdHRlZCBwcmludGluZyBmb3INCiAgICAgIHRo ZSBBQ1BJIGZpZWxkcy4gVGhlIEFDUEl2aWV3IHRhYmxlIHBhcnNpbmcgZnJhbWV3b3JrIHV0aWxp emVzIGENCiAgICAgIHRhYmxlLWRyaXZlbiBhcHByb2FjaCBmb3IgcGFyc2luZyB0aGUgdGFibGVz IGFuZCB0aGVzZSBmdW5jdGlvbnMNCiAgICAgIGFyZSBpbnZva2VkIGJ5IHRoZSBmcmFtZXdvcmsg YmFzZWQgb24gdGhlIGZpZWxkIHNpemUgYW5kIHR5cGUuDQogICAgICBIb3dldmVyIHlvdSBhcmUg cmlnaHQsIGl0IGlzIHN1cGVyZmx1b3VzIGluIHRoZSBjYXNlIG9mIFByaW50R3VpZA0KICAgICAg KFdoaWNoIGhhcyBub3cgYmVlbiByZW1vdmVkIGluIHRoZSB1cGRhdGVkIHBhdGNoKS4gICAgICAg ICAgICAgIFtTQU1JXQ0KDQogICAgLSBEbyB3ZSB3YW50IHRvIGNoYW5nZSB0aGUgbWFpbiBlbnRy eXBvaW50IHRvIGEgRHluYW1pY0NvbW1hbmQNCiAgICAgIHNpbmNlIHRoaXMgY29tbWFuZCBpcyBu b3QgaW4gdGhlIHNoZWxsIHNwZWM/IElmIHllcywgZG8gd2Ugd2FudA0KICAgICAgdG8gZG8gdGhh dCBmaXJzdCBvciBhZnRlcj8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0pB QkVOXQ0KICAgIC0gVGhlIEVDUiAxNzg0IGZvciBBQ1BJdmlldyBhcHBlYXJzIHRvIGJlICdBcHBy b3ZlZCBhcyBuZXcgY29udGVudA0KICAgICAgZm9yIHRoZSBTaGVsbCBTcGVjLicgaW4gTWFudGlz LA0KICAgICAgc2VlIGh0dHBzOi8vbWFudGlzLnVlZmkub3JnL21hbnRpcy92aWV3LnBocD9pZD0x Nzg0Lg0KICAgICAgQXMgSSB1bmRlcnN0YW5kIGl0LCB0aGUgRUNSIGNoYW5nZSBuZWVkcyB0byBi ZSBwcm9wYWdhdGVkIHRvIHRoZQ0KICAgICAgU2hlbGwgc3BlY2lmaWNhdGlvbiBhbmQgaXMgcGVu ZGluZy4gSW4gbGlnaHQgb2YgdGhlIGFib3ZlLCBJIHRoaW5rDQogICAgICB0aGF0IGFkZGluZyBE eW5hbWljQ29tbWFuZCBzdXBwb3J0IGlzIG5vdCBuZWNlc3NhcnkuIFBsZWFzZSBsZXQgbWUNCiAg ICAgIGtub3cgaWYgeW91IGZlZWwgb3RoZXJ3aXNlLiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBbU0FNSV0NCg0KIFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdD b21tYW5kTGliL0FjcGlQYXJzZXIuYyAgICAgICAgICAgICAgICAgICAgfCA2NjIgKysrKysrKysr KysrKysrKysNCiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9B Y3BpUGFyc2VyLmggICAgICAgICAgICAgICAgICAgIHwgNzU5ICsrKysrKysrKysrKysrKysrKysr DQogU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvQWNwaVRhYmxl UGFyc2VyLmMgICAgICAgICAgICAgICB8IDIxNSArKysrKysNCiBTaGVsbFBrZy9MaWJyYXJ5L1Vl ZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9BY3BpVGFibGVQYXJzZXIuaCAgICAgICAgICAgICAg IHwgMTI2ICsrKysNCiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExp Yi9BY3BpVmlldy5jICAgICAgICAgICAgICAgICAgICAgIHwgNjAxICsrKysrKysrKysrKysrKysN CiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9BY3BpVmlldy5o ICAgICAgICAgICAgICAgICAgICAgIHwgMTAzICsrKw0KIFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNo ZWxsQWNwaVZpZXdDb21tYW5kTGliL1BhcnNlcnMvQmdydC9CZ3J0UGFyc2VyLmMgICAgICAgfCAg NjkgKysNCiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9QYXJz ZXJzL0RiZzIvRGJnMlBhcnNlci5jICAgICAgIHwgMjQyICsrKysrKysNCiBTaGVsbFBrZy9MaWJy YXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9QYXJzZXJzL0RzZHQvRHNkdFBhcnNlci5j ICAgICAgIHwgIDQ3ICsrDQogU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1h bmRMaWIvUGFyc2Vycy9GYWR0L0ZhZHRQYXJzZXIuYyAgICAgICB8IDI2MSArKysrKysrDQogU2hl bGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvUGFyc2Vycy9HdGR0L0d0 ZHRQYXJzZXIuYyAgICAgICB8IDI5MyArKysrKysrKw0KIFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNo ZWxsQWNwaVZpZXdDb21tYW5kTGliL1BhcnNlcnMvSW9ydC9Jb3J0UGFyc2VyLmMgICAgICAgfCA3 MDAgKysrKysrKysrKysrKysrKysrDQogU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmll d0NvbW1hbmRMaWIvUGFyc2Vycy9NYWR0L01hZHRQYXJzZXIuYyAgICAgICB8IDMxMyArKysrKysr Kw0KIFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL1BhcnNlcnMv TWNmZy9NY2ZnUGFyc2VyLmMgICAgICAgfCAgOTQgKysrDQogU2hlbGxQa2cvTGlicmFyeS9VZWZp U2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvUGFyc2Vycy9Sc2RwL1JzZHBQYXJzZXIuYyAgICAgICB8 IDE2OSArKysrKw0KIFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGli L1BhcnNlcnMvU2xpdC9TbGl0UGFyc2VyLmMgICAgICAgfCAxNDIgKysrKw0KIFNoZWxsUGtnL0xp YnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL1BhcnNlcnMvU3Bjci9TcGNyUGFyc2Vy LmMgICAgICAgfCAxNjggKysrKysNCiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3 Q29tbWFuZExpYi9QYXJzZXJzL1NyYXQvU3JhdFBhcnNlci5jICAgICAgIHwgMzMwICsrKysrKysr Kw0KIFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL1BhcnNlcnMv U3NkdC9Tc2R0UGFyc2VyLmMgICAgICAgfCAgNDcgKysNCiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlT aGVsbEFjcGlWaWV3Q29tbWFuZExpYi9QYXJzZXJzL1hzZHQvWHNkdFBhcnNlci5jICAgICAgIHwg MTUzICsrKysNCiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9V ZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIuYyAgIHwgMTY3ICsrKysrDQogU2hlbGxQa2cvTGli cmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5k TGliLmggICB8ICAzMiArDQogU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1h bmRMaWIvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliLmluZiB8ICA3NCArKw0KIFNoZWxsUGtn L0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL1VlZmlTaGVsbEFjcGlWaWV3Q29t bWFuZExpYi51bmkgfCAxMjcgKysrKw0KIFNoZWxsUGtnL1NoZWxsUGtnLmRlYyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKy0NCiAy NSBmaWxlcyBjaGFuZ2VkLCA1ODk2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCg0KZGlm ZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL0Fj cGlQYXJzZXIuYyBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGli L0FjcGlQYXJzZXIuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxOGYzODZmZGExNjUxNDZiYWQ0OWY5ZWRiYzEx MWQ0ZTIxOGRiOTgNCi0tLSAvZGV2L251bGwNCisrKyBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNo ZWxsQWNwaVZpZXdDb21tYW5kTGliL0FjcGlQYXJzZXIuYw0KQEAgLTAsMCArMSw2NjIgQEANCisv KioNCisgIEFDUEkgcGFyc2VyDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMTYgLSAyMDE4LCBBUk0g TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFj Y29tcGFueWluZyBtYXRlcmlhbHMNCisgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUg dW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KKyAgd2hp Y2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBs aWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2Vz L2JzZC1saWNlbnNlLnBocA0KKw0KKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIg VEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorICBXSVRIT1VUIFdBUlJBTlRJ RVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBM SUVELg0KKyoqLw0KKw0KKyNpbmNsdWRlIDxVZWZpLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvVWVm aUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0K KyNpbmNsdWRlICJBY3BpUGFyc2VyLmgiDQorI2luY2x1ZGUgIkFjcGlWaWV3LmgiDQorDQorU1RB VElDIFVJTlQzMiAgIGdJbmRlbnQ7DQorU1RBVElDIFVJTlQzMiAgIG1UYWJsZUVycm9yQ291bnQ7 DQorU1RBVElDIFVJTlQzMiAgIG1UYWJsZVdhcm5pbmdDb3VudDsNCisNCisvKiogVGhpcyBmdW5j dGlvbiByZXNldHMgdGhlIEFDUEkgdGFibGUgZXJyb3IgY291bnRlciB0byBaZXJvLg0KKyovDQor Vk9JRA0KK1Jlc2V0RXJyb3JDb3VudCAoDQorICBWT0lEDQorICApDQorew0KKyAgbVRhYmxlRXJy b3JDb3VudCA9IDA7DQorfQ0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIEFDUEkg dGFibGUgZXJyb3IgY291bnQuDQorDQorICBAcmV0dmFsIFJldHVybnMgdGhlIGNvdW50IG9mIGVy cm9ycyBkZXRlY3RlZCBpbiB0aGUgQUNQSSB0YWJsZXMuDQorKi8NCitVSU5UMzINCitHZXRFcnJv ckNvdW50ICgNCisgIFZPSUQNCisgICkNCit7DQorICByZXR1cm4gbVRhYmxlRXJyb3JDb3VudDsN Cit9DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gcmVzZXRzIHRoZSBBQ1BJIHRhYmxlIHdhcm5pbmcg Y291bnRlciB0byBaZXJvLg0KKyovDQorVk9JRA0KK1Jlc2V0V2FybmluZ0NvdW50ICgNCisgIFZP SUQNCisgICkNCit7DQorICBtVGFibGVXYXJuaW5nQ291bnQgPSAwOw0KK30NCisNCisvKiogVGhp cyBmdW5jdGlvbiByZXR1cm5zIHRoZSBBQ1BJIHRhYmxlIHdhcm5pbmcgY291bnQuDQorDQorICBA cmV0dmFsIFJldHVybnMgdGhlIGNvdW50IG9mIHdhcm5pbmcgZGV0ZWN0ZWQgaW4gdGhlIEFDUEkg dGFibGVzLg0KKyovDQorVUlOVDMyDQorR2V0V2FybmluZ0NvdW50ICgNCisgIFZPSUQNCisgICkN Cit7DQorICByZXR1cm4gbVRhYmxlV2FybmluZ0NvdW50Ow0KK30NCisNCisvKiogVGhpcyBmdW5j dGlvbiBpbmNyZW1lbnRzIHRoZSBBQ1BJIHRhYmxlIGVycm9yIGNvdW50ZXIuDQorKi8NCitWT0lE DQorRUZJQVBJDQorSW5jcmVtZW50RXJyb3JDb3VudCAoDQorICBWT0lEDQorICApDQorew0KKyAg bVRhYmxlRXJyb3JDb3VudCsrOw0KK30NCisNCisvKiogVGhpcyBmdW5jdGlvbiBpbmNyZW1lbnRz IHRoZSBBQ1BJIHRhYmxlIHdhcm5pbmcgY291bnRlci4NCisqLw0KK1ZPSUQNCitFRklBUEkNCitJ bmNyZW1lbnRXYXJuaW5nQ291bnQgKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIG1UYWJsZVdhcm5p bmdDb3VudCsrOw0KK30NCisNCisvKiogVGhpcyBmdW5jdGlvbiB2ZXJpZmllcyB0aGUgQUNQSSB0 YWJsZSBjaGVja3N1bS4NCisNCisgIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgdGhlIGNoZWNrc3Vt IGZvciB0aGUgQUNQSSB0YWJsZSBhbmQgb3B0aW9uYWxseQ0KKyAgcHJpbnRzIHRoZSBzdGF0dXMu DQorDQorICBAcGFyYW0gW2luXSBMb2cgICAgIElmIFRSVUUgbG9nIHRoZSBzdGF0dXMgb2YgdGhl IGNoZWNrc3VtLg0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBv ZiB0aGUgdGFibGUgYnVmZmVyLg0KKyAgQHBhcmFtIFtpbl0gTGVuZ3RoICBUaGUgbGVuZ3RoIG9m IHRoZSBidWZmZXIuDQorDQorICBAcmV0dmFsIFRSVUUgICAgICAgIFRoZSBjaGVja3N1bSBpcyBP Sy4NCisgIEByZXR2YWwgRkFMU0UgICAgICAgVGhlIGNoZWNrc3VtIGZhaWxlZC4NCisqLw0KK0JP T0xFQU4NCitFRklBUEkNCitWZXJpZnlDaGVja3N1bSAoDQorICBJTiBCT09MRUFOIExvZywNCisg IElOIFVJTlQ4KiAgUHRyLA0KKyAgSU4gVUlOVDMyICBMZW5ndGgNCisgICkNCit7DQorICBVSU5U TiBCeXRlQ291bnQgPSAwOw0KKyAgVUlOVDggQ2hlY2tzdW0gPSAwOw0KKyAgVUlOVE4gT3JpZ2lu YWxBdHRyaWJ1dGU7DQorDQorICB3aGlsZSAoQnl0ZUNvdW50IDwgTGVuZ3RoKSB7DQorICAgIENo ZWNrc3VtICs9ICooUHRyKyspOw0KKyAgICBCeXRlQ291bnQrKzsNCisgIH0NCisNCisgIGlmIChM b2cpIHsNCisgICAgT3JpZ2luYWxBdHRyaWJ1dGUgPSBnU1QtPkNvbk91dC0+TW9kZS0+QXR0cmli dXRlOw0KKyAgICBpZiAoQ2hlY2tzdW0gPT0gMCkgew0KKyAgICAgIGlmIChHZXRDb2xvdXJIaWdo bGlnaHRpbmcgKCkpIHsNCisgICAgICAgIGdTVC0+Q29uT3V0LT5TZXRBdHRyaWJ1dGUgKA0KKyAg ICAgICAgICAgICAgICAgICAgICAgZ1NULT5Db25PdXQsDQorICAgICAgICAgICAgICAgICAgICAg ICBFRklfVEVYVF9BVFRSIChFRklfR1JFRU4sDQorICAgICAgICAgICAgICAgICAgICAgICAgICgo T3JpZ2luYWxBdHRyaWJ1dGUmKEJJVDR8QklUNXxCSVQ2KSk+PjQpKQ0KKyAgICAgICAgICAgICAg ICAgICAgICAgKTsNCisgICAgICB9DQorICAgICAgUHJpbnQgKEwiXG5cblRhYmxlIENoZWNrc3Vt IDogT0tcblxuIik7DQorICAgIH0gZWxzZSB7DQorICAgICAgSW5jcmVtZW50RXJyb3JDb3VudCAo KTsNCisgICAgICBpZiAoR2V0Q29sb3VySGlnaGxpZ2h0aW5nICgpKSB7DQorICAgICAgICBnU1Qt PkNvbk91dC0+U2V0QXR0cmlidXRlICgNCisgICAgICAgICAgICAgICAgICAgICAgIGdTVC0+Q29u T3V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgRUZJX1RFWFRfQVRUUiAoRUZJX1JFRCwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgKChPcmlnaW5hbEF0dHJpYnV0ZSYoQklUNHxCSVQ1fEJJ VDYpKT4+NCkpDQorICAgICAgICAgICAgICAgICAgICAgICApOw0KKyAgICAgIH0NCisgICAgICBQ cmludCAoTCJcblxuVGFibGUgQ2hlY2tzdW0gOiBGQUlMRUQgKDB4JVgpXG5cbiIsIENoZWNrc3Vt KTsNCisgICAgfQ0KKyAgICBpZiAoR2V0Q29sb3VySGlnaGxpZ2h0aW5nICgpKSB7DQorICAgICAg Z1NULT5Db25PdXQtPlNldEF0dHJpYnV0ZSAoZ1NULT5Db25PdXQsIE9yaWdpbmFsQXR0cmlidXRl KTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgcmV0dXJuIChDaGVja3N1bSA9PSAwKTsNCit9DQorDQor LyoqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSByYXcgZGF0YSBkdW1wIG9mIHRoZSBBQ1BJIHRh YmxlLg0KKw0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0 aGUgdGFibGUgYnVmZmVyLg0KKyAgQHBhcmFtIFtpbl0gTGVuZ3RoICBUaGUgbGVuZ3RoIG9mIHRo ZSBidWZmZXIuDQorKi8NCitWT0lEDQorRUZJQVBJDQorRHVtcFJhdyAoDQorICBJTiBVSU5UOCog UHRyLA0KKyAgSU4gVUlOVDMyIExlbmd0aA0KKyAgKQ0KK3sNCisgIFVJTlROIEJ5dGVDb3VudCA9 IDA7DQorICBVSU5UTiBQYXJ0TGluZUNoYXJzOw0KKyAgVUlOVE4gQXNjaWlCdWZmZXJJbmRleCA9 IDA7DQorICBDSEFSOCBBc2NpaUJ1ZmZlclsxN107DQorDQorICBQcmludCAoTCJBZGRyZXNzICA6 IDB4JXBcbiIsIFB0cik7DQorICBQcmludCAoTCJMZW5ndGggICA6ICVkXG4iLCBMZW5ndGgpOw0K Kw0KKyAgd2hpbGUgKEJ5dGVDb3VudCA8IExlbmd0aCkgew0KKyAgICBpZiAoKEJ5dGVDb3VudCAm IDB4MEYpID09IDApIHsNCisgICAgICBBc2NpaUJ1ZmZlcltBc2NpaUJ1ZmZlckluZGV4XSA9ICdc MCc7DQorICAgICAgUHJpbnQgKEwiICAlYVxuJTA4WCA6ICIsIEFzY2lpQnVmZmVyLCBCeXRlQ291 bnQpOw0KKyAgICAgIEFzY2lpQnVmZmVySW5kZXggPSAwOw0KKyAgICB9IGVsc2UgaWYgKChCeXRl Q291bnQgJiAweDA3KSA9PSAwKSB7DQorICAgICAgUHJpbnQgKEwiLSAiKTsNCisgICAgfQ0KKw0K KyAgICBpZiAoKCpQdHIgPj0gJyAnKSAmJiAoKlB0ciA8IDB4N0YpKSB7DQorICAgICAgQXNjaWlC dWZmZXJbQXNjaWlCdWZmZXJJbmRleCsrXSA9ICpQdHI7DQorICAgIH0gZWxzZSB7DQorICAgICAg QXNjaWlCdWZmZXJbQXNjaWlCdWZmZXJJbmRleCsrXSA9ICcuJzsNCisgICAgfQ0KKw0KKyAgICBQ cmludCAoTCIlMDJYICIsICpQdHIrKyk7DQorDQorICAgIEJ5dGVDb3VudCsrOw0KKyAgfQ0KKw0K KyAgLy8gSnVzdGlmeSB0aGUgZmluYWwgbGluZSB1c2luZyBzcGFjZXMgYmVmb3JlIHByaW50aW5n DQorICAvLyB0aGUgQVNDSUkgZGF0YS4NCisgIFBhcnRMaW5lQ2hhcnMgPSAoTGVuZ3RoICYgMHgw Rik7DQorICBpZiAoUGFydExpbmVDaGFycyAhPSAwKSB7DQorICAgIFBhcnRMaW5lQ2hhcnMgPSA0 OCAtIChQYXJ0TGluZUNoYXJzICogMyk7DQorICAgIGlmICgoTGVuZ3RoICYgMHgwRikgPD0gOCkg ew0KKyAgICAgIFBhcnRMaW5lQ2hhcnMgKz0gMjsNCisgICAgfQ0KKyAgICB3aGlsZSAoUGFydExp bmVDaGFycyA+IDApIHsNCisgICAgICBQcmludCAoTCIgIik7DQorICAgICAgUGFydExpbmVDaGFy cy0tOw0KKyAgICB9DQorICB9DQorDQorICAvLyBQcmludCBBU0NJSSBkYXRhIGZvciB0aGUgZmlu YWwgbGluZS4NCisgIEFzY2lpQnVmZmVyW0FzY2lpQnVmZmVySW5kZXhdID0gJ1wwJzsNCisgIFBy aW50IChMIiAgJWEiLCBBc2NpaUJ1ZmZlcik7DQorfQ0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHRy YWNlcyAxIGJ5dGUgb2YgZGF0YSBhcyBzcGVjaWZpZWQgaW4gdGhlDQorICAgIGZvcm1hdCBzdHJp bmcuDQorDQorICBAcGFyYW0gW2luXSBGb3JtYXQgIFRoZSBmb3JtYXQgc3RyaW5nIGZvciB0cmFj aW5nIHRoZSBkYXRhLg0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICBQb2ludGVyIHRvIHRoZSBzdGFy dCBvZiB0aGUgYnVmZmVyLg0KKyovDQorVk9JRA0KK0VGSUFQSQ0KK0R1bXBVaW50OCAoDQorICBJ TiBDT05TVCBDSEFSMTYqIEZvcm1hdCwNCisgIElOIFVJTlQ4KiAgICAgICAgUHRyDQorICApDQor ew0KKyAgUHJpbnQgKEZvcm1hdCwgKlB0cik7DQorfQ0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHRy YWNlcyAyIGJ5dGVzIG9mIGRhdGEgYXMgc3BlY2lmaWVkIGluIHRoZQ0KKyAgICBmb3JtYXQgc3Ry aW5nLg0KKw0KKyAgQHBhcmFtIFtpbl0gRm9ybWF0ICBUaGUgZm9ybWF0IHN0cmluZyBmb3IgdHJh Y2luZyB0aGUgZGF0YS4NCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgUG9pbnRlciB0byB0aGUgc3Rh cnQgb2YgdGhlIGJ1ZmZlci4NCisqLw0KK1ZPSUQNCitFRklBUEkNCitEdW1wVWludDE2ICgNCisg IElOIENPTlNUIENIQVIxNiogRm9ybWF0LA0KKyAgSU4gVUlOVDgqICAgICAgICBQdHINCisgICkN Cit7DQorICBQcmludCAoRm9ybWF0LCAqKFVJTlQxNiopUHRyKTsNCit9DQorDQorLyoqIFRoaXMg ZnVuY3Rpb24gdHJhY2VzIDQgYnl0ZXMgb2YgZGF0YSBhcyBzcGVjaWZpZWQgaW4gdGhlDQorICAg IGZvcm1hdCBzdHJpbmcuDQorDQorICBAcGFyYW0gW2luXSBGb3JtYXQgIFRoZSBmb3JtYXQgc3Ry aW5nIGZvciB0cmFjaW5nIHRoZSBkYXRhLg0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICBQb2ludGVy IHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLg0KKyovDQorVk9JRA0KK0VGSUFQSQ0KK0R1bXBV aW50MzIgKA0KKyAgSU4gQ09OU1QgQ0hBUjE2KiBGb3JtYXQsDQorICBJTiBVSU5UOCogICAgICAg IFB0cg0KKyAgKQ0KK3sNCisgIFByaW50IChGb3JtYXQsICooVUlOVDMyKilQdHIpOw0KK30NCisN CisvKiogVGhpcyBmdW5jdGlvbiB0cmFjZXMgOCBieXRlcyBvZiBkYXRhIGFzIHNwZWNpZmllZCBi eSB0aGUNCisgICAgZm9ybWF0IHN0cmluZy4NCisNCisgIEBwYXJhbSBbaW5dIEZvcm1hdCAgVGhl IGZvcm1hdCBzdHJpbmcgZm9yIHRyYWNpbmcgdGhlIGRhdGEuDQorICBAcGFyYW0gW2luXSBQdHIg ICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorKi8NCitWT0lEDQorRUZJ QVBJDQorRHVtcFVpbnQ2NCAoDQorICBJTiBDT05TVCBDSEFSMTYqIEZvcm1hdCwNCisgIElOIFVJ TlQ4KiAgICAgICAgUHRyDQorICApDQorew0KKyAgLy8gU29tZSBmaWVsZHMgYXJlIG5vdCBhbGln bmVkIGFuZCB0aGlzIGNhdXNlcyBhbGlnbm1lbnQgZmF1bHRzDQorICAvLyBvbiBBUk0gcGxhdGZv cm1zIGlmIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgTERSRCBpbnN0cnVjdGlvbnMuDQorICAvLyBQ ZXJmb3JtIHdvcmQgYWNjZXNzIHNvIHRoYXQgTERSRCBpbnN0cnVjdGlvbnMgYXJlIG5vdCBnZW5l cmF0ZWQuDQorICBVSU5UNjQgVmFsID0gKihVSU5UMzIqKShQdHIgKyBzaXplb2YgKFVJTlQzMikp Ow0KKyAgVmFsIDw8PSAzMjsNCisgIFZhbCB8PSAqKFVJTlQzMiopUHRyOw0KKw0KKyAgUHJpbnQg KEZvcm1hdCwgVmFsKTsNCit9DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gdHJhY2VzIDMgY2hhcmFj dGVycyB3aGljaCBjYW4gYmUgb3B0aW9uYWxseQ0KKyAgIGZvcm1hdGVkIHVzaW5nIHRoZSBmb3Jt YXQgc3RyaW5nIGlmIHNwZWNpZmllZC4NCisNCisgIElmIG5vIGZvcm1hdCBzdHJpbmcgaXMgc3Bl Y2lmaWVkIHRoZSBGb3JtYXQgbXVzdCBiZSBOVUxMLg0KKw0KKyAgQHBhcmFtIFtpbl0gRm9ybWF0 ICBPcHRpb25hbCBmb3JtYXQgc3RyaW5nIGZvciB0cmFjaW5nIHRoZSBkYXRhLg0KKyAgQHBhcmFt IFtpbl0gUHRyICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLg0KKyovDQor Vk9JRA0KK0VGSUFQSQ0KK0R1bXAzQ2hhcnMgKA0KKyAgSU4gQ09OU1QgQ0hBUjE2KiBGb3JtYXQg T1BUSU9OQUwsDQorICBJTiBVSU5UOCogICAgICAgIFB0cg0KKyAgKQ0KK3sNCisgIFByaW50ICgN CisgICAgKEZvcm1hdCAhPSBOVUxMKSA/IEZvcm1hdCA6IEwiJWMlYyVjIiwNCisgICAgUHRyWzBd LA0KKyAgICBQdHJbMV0sDQorICAgIFB0clsyXQ0KKyAgICApOw0KK30NCisNCisvKiogVGhpcyBm dW5jdGlvbiB0cmFjZXMgNCBjaGFyYWN0ZXJzIHdoaWNoIGNhbiBiZSBvcHRpb25hbGx5DQorICAg Zm9ybWF0ZWQgdXNpbmcgdGhlIGZvcm1hdCBzdHJpbmcgaWYgc3BlY2lmaWVkLg0KKw0KKyAgSWYg bm8gZm9ybWF0IHN0cmluZyBpcyBzcGVjaWZpZWQgdGhlIEZvcm1hdCBtdXN0IGJlIE5VTEwuDQor DQorICBAcGFyYW0gW2luXSBGb3JtYXQgIE9wdGlvbmFsIGZvcm1hdCBzdHJpbmcgZm9yIHRyYWNp bmcgdGhlIGRhdGEuDQorICBAcGFyYW0gW2luXSBQdHIgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0 IG9mIHRoZSBidWZmZXIuDQorKi8NCitWT0lEDQorRUZJQVBJDQorRHVtcDRDaGFycyAoDQorICBJ TiBDT05TVCBDSEFSMTYqIEZvcm1hdCBPUFRJT05BTCwNCisgIElOIFVJTlQ4KiAgICAgICAgUHRy DQorICApDQorew0KKyAgUHJpbnQgKA0KKyAgICAoRm9ybWF0ICE9IE5VTEwpID8gRm9ybWF0IDog TCIlYyVjJWMlYyIsDQorICAgIFB0clswXSwNCisgICAgUHRyWzFdLA0KKyAgICBQdHJbMl0sDQor ICAgIFB0clszXQ0KKyAgICApOw0KK30NCisNCisvKiogVGhpcyBmdW5jdGlvbiB0cmFjZXMgNiBj aGFyYWN0ZXJzIHdoaWNoIGNhbiBiZSBvcHRpb25hbGx5DQorICAgZm9ybWF0ZWQgdXNpbmcgdGhl IGZvcm1hdCBzdHJpbmcgaWYgc3BlY2lmaWVkLg0KKw0KKyAgSWYgbm8gZm9ybWF0IHN0cmluZyBp cyBzcGVjaWZpZWQgdGhlIEZvcm1hdCBtdXN0IGJlIE5VTEwuDQorDQorICBAcGFyYW0gW2luXSBG b3JtYXQgIE9wdGlvbmFsIGZvcm1hdCBzdHJpbmcgZm9yIHRyYWNpbmcgdGhlIGRhdGEuDQorICBA cGFyYW0gW2luXSBQdHIgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQor Ki8NCitWT0lEDQorRUZJQVBJDQorRHVtcDZDaGFycyAoDQorICBJTiBDT05TVCBDSEFSMTYqIEZv cm1hdCBPUFRJT05BTCwNCisgIElOIFVJTlQ4KiAgICAgICAgUHRyDQorICApDQorew0KKyAgUHJp bnQgKA0KKyAgICAoRm9ybWF0ICE9IE5VTEwpID8gRm9ybWF0IDogTCIlYyVjJWMlYyVjJWMiLA0K KyAgICBQdHJbMF0sDQorICAgIFB0clsxXSwNCisgICAgUHRyWzJdLA0KKyAgICBQdHJbM10sDQor ICAgIFB0cls0XSwNCisgICAgUHRyWzVdDQorICAgICk7DQorfQ0KKw0KKy8qKiBUaGlzIGZ1bmN0 aW9uIHRyYWNlcyA4IGNoYXJhY3RlcnMgd2hpY2ggY2FuIGJlIG9wdGlvbmFsbHkNCisgICBmb3Jt YXRlZCB1c2luZyB0aGUgZm9ybWF0IHN0cmluZyBpZiBzcGVjaWZpZWQuDQorDQorICBJZiBubyBm b3JtYXQgc3RyaW5nIGlzIHNwZWNpZmllZCB0aGUgRm9ybWF0IG11c3QgYmUgTlVMTC4NCisNCisg IEBwYXJhbSBbaW5dIEZvcm1hdCAgT3B0aW9uYWwgZm9ybWF0IHN0cmluZyBmb3IgdHJhY2luZyB0 aGUgZGF0YS4NCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2Yg dGhlIGJ1ZmZlci4NCisqLw0KK1ZPSUQNCitFRklBUEkNCitEdW1wOENoYXJzICgNCisgIElOIENP TlNUIENIQVIxNiogRm9ybWF0IE9QVElPTkFMLA0KKyAgSU4gVUlOVDgqICAgICAgICBQdHINCisg ICkNCit7DQorICBQcmludCAoDQorICAgIChGb3JtYXQgIT0gTlVMTCkgPyBGb3JtYXQgOiBMIiVj JWMlYyVjJWMlYyVjJWMiLA0KKyAgICBQdHJbMF0sDQorICAgIFB0clsxXSwNCisgICAgUHRyWzJd LA0KKyAgICBQdHJbM10sDQorICAgIFB0cls0XSwNCisgICAgUHRyWzVdLA0KKyAgICBQdHJbNl0s DQorICAgIFB0cls3XQ0KKyAgICApOw0KK30NCisNCisvKiogVGhpcyBmdW5jdGlvbiBpbmRlbnRz IGFuZCBwcmludHMgdGhlIEFDUEkgdGFibGUgRmllbGQgTmFtZS4NCisNCisgIEBwYXJhbSBbaW5d IEluZGVudCAgICAgIE51bWJlciBvZiBzcGFjZXMgdG8gYWRkIHRvIHRoZSBnbG9iYWwgdGFibGUg aW5kZW50Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdsb2JhbCB0YWJsZSBpbmRl bnQgaXMgMCBieSBkZWZhdWx0OyBob3dldmVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGlzIHZhbHVlIGlzIHVwZGF0ZWQgb24gZW50cnkgdG8gdGhlIFBhcnNlQWNwaSgpDQorICAgICAg ICAgICAgICAgICAgICAgICAgICBieSBhZGRpbmcgdGhlIGluZGVudCB2YWx1ZSBwcm92aWRlZCB0 byBQYXJzZUFjcGkoKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJlc3RvcmVkIGJh Y2sgb24gZXhpdC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZXJlZm9yZSB0aGUgdG90 YWwgaW5kZW50IGluIHRoZSBvdXRwdXQgaXMNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRl cGVuZGVudCBvbiBmcm9tIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLg0KKyAgQHBhcmFt IFtpbl0gRmllbGROYW1lICAgUG9pbnRlciB0byB0aGUgRmllbGQgTmFtZS4NCisqLw0KK1ZPSUQN CitFRklBUEkNCitQcmludEZpZWxkTmFtZSAoDQorICBJTiBVSU5UMzIgICAgICAgICBJbmRlbnQs DQorICBJTiBDT05TVCBDSEFSMTYqICBGaWVsZE5hbWUNCispDQorew0KKyAgUHJpbnQgKA0KKyAg ICBMIiUqYSUtKnMgOiAiLA0KKyAgICBnSW5kZW50ICsgSW5kZW50LA0KKyAgICAiIiwNCisgICAg KE9VVFBVVF9GSUVMRF9DT0xVTU5fV0lEVEggLSBnSW5kZW50IC0gSW5kZW50KSwNCisgICAgRmll bGROYW1lDQorICAgICk7DQorfQ0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFy c2UgYW4gQUNQSSB0YWJsZSBidWZmZXIuDQorDQorICBUaGUgQUNQSSB0YWJsZSBidWZmZXIgaXMg cGFyc2VkIHVzaW5nIHRoZSBBQ1BJIHRhYmxlIHBhcnNlciBpbmZvcm1hdGlvbg0KKyAgc3BlY2lm aWVkIGJ5IGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBBQ1BJX1BBUlNFUiBlbGVtZW50cy4gVGhp cyBwYXJzZXINCisgIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggZWFjaCBpdGVtIG9uIHRoZSBB Q1BJX1BBUlNFUiBhcnJheSBhbmQgbG9ncyB0aGUNCisgIEFDUEkgdGFibGUgZmllbGRzLg0KKw0K KyAgVGhpcyBmdW5jdGlvbiBjYW4gb3B0aW9uYWxseSBiZSB1c2VkIHRvIHBhcnNlIEFDUEkgdGFi bGVzIGFuZCBmZXRjaCBzcGVjaWZpYw0KKyAgZmllbGQgdmFsdWVzLiBUaGUgSXRlbVB0ciBtZW1i ZXIgb2YgdGhlIEFDUElfUEFSU0VSIHN0cnVjdHVyZSAod2hlcmUgdXNlZCkNCisgIGlzIHVwZGF0 ZWQgYnkgdGhpcyBwYXJzZXIgZnVuY3Rpb24gdG8gcG9pbnQgdG8gdGhlIHNlbGVjdGVkIGZpZWxk IGRhdGENCisgIChlLmcuIHVzZWZ1bCBmb3IgdmFyaWFibGUgbGVuZ3RoIG5lc3RlZCBmaWVsZHMp Lg0KKw0KKyAgQHBhcmFtIFtpbl0gVHJhY2UgICAgICAgIFRyYWNlIHRoZSBBQ1BJIGZpZWxkcyBU UlVFIGVsc2Ugb25seSBwYXJzZSB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJs ZS4NCisgIEBwYXJhbSBbaW5dIEluZGVudCAgICAgICBOdW1iZXIgb2Ygc3BhY2VzIHRvIGluZGVu dCB0aGUgb3V0cHV0Lg0KKyAgQHBhcmFtIFtpbl0gQXNjaWlOYW1lICAgIE9wdGlvbmFsIHBvaW50 ZXIgdG8gYW4gQVNDSUkgc3RyaW5nIHRoYXQgZGVzY3JpYmVzDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhlIHRhYmxlIGJlaW5nIHBhcnNlZC4NCisgIEBwYXJhbSBbaW5dIFB0ciAgICAg ICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLg0KKyAgQHBhcmFtIFtpbl0g TGVuZ3RoICAgICAgIExlbmd0aCBvZiB0aGUgYnVmZmVyIHBvaW50ZWQgYnkgUHRyLg0KKyAgQHBh cmFtIFtpbl0gUGFyc2VyICAgICAgIFBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgQUNQSV9QQVJTRVIg c3RydWN0dXJlIHRoYXQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmliZXMgdGhl IHRhYmxlIGJlaW5nIHBhcnNlZC4NCisgIEBwYXJhbSBbaW5dIFBhcnNlckl0ZW1zICBOdW1iZXIg b2YgaXRlbXMgaW4gdGhlIEFDUElfUEFSU0VSIGFycmF5Lg0KKw0KKyAgQHJldHZhbCBOdW1iZXIg b2YgYnl0ZXMgcGFyc2VkLg0KKyovDQorVUlOVDMyDQorRUZJQVBJDQorUGFyc2VBY3BpICgNCisg IElOIEJPT0xFQU4gICAgICAgICAgICBUcmFjZSwNCisgIElOIFVJTlQzMiAgICAgICAgICAgICBJ bmRlbnQsDQorICBJTiBDT05TVCBDSEFSOCogICAgICAgQXNjaWlOYW1lIE9QVElPTkFMLA0KKyAg SU4gVUlOVDgqICAgICAgICAgICAgIFB0ciwNCisgIElOIFVJTlQzMiAgICAgICAgICAgICBMZW5n dGgsDQorICBJTiBDT05TVCBBQ1BJX1BBUlNFUiogUGFyc2VyLA0KKyAgSU4gVUlOVDMyICAgICAg ICAgICAgIFBhcnNlckl0ZW1zDQorKQ0KK3sNCisgIFVJTlQzMiAgSW5kZXg7DQorICBVSU5UMzIg IE9mZnNldCA9IDA7DQorDQorICAvLyBJbmNyZW1lbnQgdGhlIEluZGVudA0KKyAgZ0luZGVudCAr PSBJbmRlbnQ7DQorDQorICBpZiAoVHJhY2UgJiYgKEFzY2lpTmFtZSAhPSBOVUxMKSl7DQorICAg IEJPT0xFQU4gSGlnaExpZ2h0ID0gR2V0Q29sb3VySGlnaGxpZ2h0aW5nICgpOw0KKyAgICBVSU5U TiAgIE9yaWdpbmFsQXR0cmlidXRlOw0KKw0KKyAgICBpZiAoSGlnaExpZ2h0KSB7DQorICAgICAg T3JpZ2luYWxBdHRyaWJ1dGUgPSBnU1QtPkNvbk91dC0+TW9kZS0+QXR0cmlidXRlOw0KKyAgICAg IGdTVC0+Q29uT3V0LT5TZXRBdHRyaWJ1dGUgKA0KKyAgICAgICAgICAgICAgICAgICAgIGdTVC0+ Q29uT3V0LA0KKyAgICAgICAgICAgICAgICAgICAgIEVGSV9URVhUX0FUVFIoRUZJX1lFTExPVywN CisgICAgICAgICAgICAgICAgICAgICAgICgoT3JpZ2luYWxBdHRyaWJ1dGUmKEJJVDR8QklUNXxC SVQ2KSk+PjQpKQ0KKyAgICAgICAgICAgICAgICAgICAgICk7DQorICAgIH0NCisgICAgUHJpbnQg KA0KKyAgICAgIEwiJSphJS0qYSA6XG4iLA0KKyAgICAgIGdJbmRlbnQsDQorICAgICAgIiIsDQor ICAgICAgKE9VVFBVVF9GSUVMRF9DT0xVTU5fV0lEVEggLSBnSW5kZW50KSwNCisgICAgICBBc2Np aU5hbWUNCisgICAgICApOw0KKyAgICBpZiAoSGlnaExpZ2h0KSB7DQorICAgICAgZ1NULT5Db25P dXQtPlNldEF0dHJpYnV0ZSAoZ1NULT5Db25PdXQsIE9yaWdpbmFsQXR0cmlidXRlKTsNCisgICAg fQ0KKyAgfQ0KKw0KKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUGFyc2VySXRlbXM7IEluZGV4 KyspIHsNCisgICAgaWYgKChPZmZzZXQgKyBQYXJzZXJbSW5kZXhdLkxlbmd0aCkgPiBMZW5ndGgp IHsNCisgICAgICAvLyBXZSBkb24ndCBwYXJzZSBwYXN0IHRoZSBlbmQgb2YgdGhlIG1heCBsZW5n dGggc3BlY2lmaWVkDQorICAgICAgYnJlYWs7DQorICAgIH0NCisNCisgICAgaWYgKE9mZnNldCAh PSBQYXJzZXJbSW5kZXhdLk9mZnNldCkgew0KKyAgICAgIEluY3JlbWVudEVycm9yQ291bnQgKCk7 DQorICAgICAgUHJpbnQgKA0KKyAgICAgICAgTCJcbkVSUk9SOiAlYTogT2Zmc2V0IE1pc21hdGNo IGZvciAlc1xuIg0KKyAgICAgICAgICAiQ3VycmVudE9mZnNldCA9ICVkIEZpZWxkT2Zmc2V0ID0g JWRcbiIsDQorICAgICAgICBBc2NpaU5hbWUsDQorICAgICAgICBQYXJzZXJbSW5kZXhdLk5hbWVT dHIsDQorICAgICAgICBPZmZzZXQsDQorICAgICAgICBQYXJzZXJbSW5kZXhdLk9mZnNldA0KKyAg ICAgICAgKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoVHJhY2UpIHsNCisgICAgICAvLyBpZiB0aGVy ZSBpcyBhIEZvcm1hdHRlciBmdW5jdGlvbiBsZXQgdGhlIGZ1bmN0aW9uIGhhbmRsZQ0KKyAgICAg IC8vIHRoZSBwcmludGluZyBlbHNlIGlmIGEgRm9ybWF0IGlzIHNwZWNpZmllZCBpbiB0aGUgdGFi bGUgdXNlDQorICAgICAgLy8gdGhlIEZvcm1hdCBmb3IgcHJpbnRpbmcNCisgICAgICBQcmludEZp ZWxkTmFtZSAoMiwgUGFyc2VyW0luZGV4XS5OYW1lU3RyKTsNCisgICAgICBpZiAoUGFyc2VyW0lu ZGV4XS5QcmludEZvcm1hdHRlciAhPSBOVUxMKSB7DQorICAgICAgICBQYXJzZXJbSW5kZXhdLlBy aW50Rm9ybWF0dGVyIChQYXJzZXJbSW5kZXhdLkZvcm1hdCwgUHRyKTsNCisgICAgICB9IGVsc2Ug aWYgKFBhcnNlcltJbmRleF0uRm9ybWF0ICE9IE5VTEwpIHsNCisgICAgICAgIHN3aXRjaCAoUGFy c2VyW0luZGV4XS5MZW5ndGgpIHsNCisgICAgICAgICAgY2FzZSAxOg0KKyAgICAgICAgICAgIER1 bXBVaW50OCAoUGFyc2VyW0luZGV4XS5Gb3JtYXQsIFB0cik7DQorICAgICAgICAgICAgYnJlYWs7 DQorICAgICAgICAgIGNhc2UgMjoNCisgICAgICAgICAgICBEdW1wVWludDE2IChQYXJzZXJbSW5k ZXhdLkZvcm1hdCwgUHRyKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSA0 Og0KKyAgICAgICAgICAgIER1bXBVaW50MzIgKFBhcnNlcltJbmRleF0uRm9ybWF0LCBQdHIpOw0K KyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIDg6DQorICAgICAgICAgICAgRHVt cFVpbnQ2NCAoUGFyc2VyW0luZGV4XS5Gb3JtYXQsIFB0cik7DQorICAgICAgICAgICAgYnJlYWs7 DQorICAgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgUHJpbnQgKA0KKyAgICAgICAgICAg ICAgTCJcbkVSUk9SOiAlYTogQ0FOTk9UIFBBUlNFIFRISVMgRklFTEQsIEZpZWxkIExlbmd0aCA9 ICVkXG4iLA0KKyAgICAgICAgICAgICAgQXNjaWlOYW1lLA0KKyAgICAgICAgICAgICAgUGFyc2Vy W0luZGV4XS5MZW5ndGgNCisgICAgICAgICAgICAgICk7DQorICAgICAgICB9IC8vIHN3aXRjaA0K Kw0KKyAgICAgICAgLy8gVmFsaWRhdGluZyBvbmx5IG1ha2VzIHNlbnNlIGlmIHdlIGFyZSB0cmFj aW5nDQorICAgICAgICAvLyB0aGUgcGFyc2VkIHRhYmxlIGVudHJpZXMsIHRvIHJlcG9ydCBieSB0 YWJsZSBuYW1lLg0KKyAgICAgICAgaWYgKFBhcnNlcltJbmRleF0uRmllbGRWYWxpZGF0b3IgIT0g TlVMTCkgew0KKyAgICAgICAgICBQYXJzZXJbSW5kZXhdLkZpZWxkVmFsaWRhdG9yIChQdHIsIFBh cnNlcltJbmRleF0uQ29udGV4dCk7DQorICAgICAgICB9DQorICAgICAgfQ0KKyAgICAgIFByaW50 IChMIlxuIik7DQorICAgIH0gLy8gaWYgKFRyYWNlKQ0KKw0KKyAgICBpZiAoUGFyc2VyW0luZGV4 XS5JdGVtUHRyICE9IE5VTEwpIHsNCisgICAgICAqUGFyc2VyW0luZGV4XS5JdGVtUHRyID0gKFZP SUQqKVB0cjsNCisgICAgfQ0KKw0KKyAgICBQdHIgKz0gUGFyc2VyW0luZGV4XS5MZW5ndGg7DQor ICAgIE9mZnNldCArPSBQYXJzZXJbSW5kZXhdLkxlbmd0aDsNCisgIH0gLy8gZm9yDQorDQorICAv LyBEZWNyZW1lbnQgdGhlIEluZGVudA0KKyAgZ0luZGVudCAtPSBJbmRlbnQ7DQorICByZXR1cm4g T2Zmc2V0Ow0KK30NCisNCisvKiogQW4gYXJyYXkgZGVzY3JpYmluZyB0aGUgQUNQSSBHZW5lcmlj IEFkZHJlc3MgU3RydWN0dXJlLg0KKyAgVGhlIEdhc1BhcnNlciBhcnJheSBpcyB1c2VkIGJ5IHRo ZSBQYXJzZUFjcGkgZnVuY3Rpb24gdG8gcGFyc2UgYW5kL29yIHRyYWNlDQorICB0aGUgR0FTIHN0 cnVjdHVyZS4NCisqLw0KK1NUQVRJQyBDT05TVCBBQ1BJX1BBUlNFUiBHYXNQYXJzZXJbXSA9IHsN CisgIHtMIkFkZHJlc3MgU3BhY2UgSUQiLCAxLCAwLCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMfSwNCisgIHtMIlJlZ2lzdGVyIEJpdCBXaWR0aCIsIDEsIDEsIEwiMHgleCIsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUmVnaXN0ZXIgQml0IE9mZnNldCIsIDEsIDIsIEwi MHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiQWRkcmVzcyBTaXplIiwgMSwg MywgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJBZGRyZXNzIiwgOCwg NCwgTCIweCVseCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9DQorfTsNCisNCisvKiogVGhpcyBm dW5jdGlvbiBpbmRlbnRzIGFuZCB0cmFjZXMgdGhlIEdBUyBzdHJ1Y3R1cmUgYXMgZGVzY3JpYmVk DQorICAgIGJ5IHRoZSBHYXNQYXJzZXIuDQorDQorICBAcGFyYW0gW2luXSBQdHIgICAgIFBvaW50 ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorICBAcGFyYW0gW2luXSBJbmRlbnQgIE51 bWJlciBvZiBzcGFjZXMgdG8gaW5kZW50IHRoZSBvdXRwdXQuDQorKi8NCitWT0lEDQorRUZJQVBJ DQorRHVtcEdhc1N0cnVjdCAoDQorICBJTiBVSU5UOCogICAgICAgIFB0ciwNCisgIElOIFVJTlQz MiAgICAgICAgSW5kZW50DQorICApDQorew0KKyAgUHJpbnQgKEwiXG4iKTsNCisgIFBhcnNlQWNw aSAoDQorICAgIFRSVUUsDQorICAgIEluZGVudCwNCisgICAgTlVMTCwNCisgICAgUHRyLA0KKyAg ICBHQVNfTEVOR1RILA0KKyAgICBQQVJTRVJfUEFSQU1TIChHYXNQYXJzZXIpDQorICAgICk7DQor fQ0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHRyYWNlcyB0aGUgR0FTIHN0cnVjdHVyZSBhcyBkZXNj cmliZWQgYnkgdGhlIEdhc1BhcnNlci4NCisNCisgIEBwYXJhbSBbaW5dIEZvcm1hdCAgT3B0aW9u YWwgZm9ybWF0IHN0cmluZyBmb3IgdHJhY2luZyB0aGUgZGF0YS4NCisgIEBwYXJhbSBbaW5dIFB0 ciAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4NCisqLw0KK1ZPSUQNCitF RklBUEkNCitEdW1wR2FzICgNCisgIElOIENPTlNUIENIQVIxNiogRm9ybWF0IE9QVElPTkFMLA0K KyAgSU4gVUlOVDgqICAgICAgICBQdHINCisgICkNCit7DQorICBEdW1wR2FzU3RydWN0IChQdHIs IDIpOw0KK30NCisNCisvKiogVGhpcyBmdW5jdGlvbiB0cmFjZXMgdGhlIEFDUEkgaGVhZGVyIGFz IGRlc2NyaWJlZCBieSB0aGUgQWNwaUhlYWRlclBhcnNlci4NCisNCisgIEBwYXJhbSBbaW5dIFB0 ciAgICAgICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLg0KKw0KKyAgQHJl dHZhbCBOdW1iZXIgb2YgYnl0ZXMgcGFyc2VkLg0KKyovDQorVUlOVDMyDQorRUZJQVBJDQorRHVt cEFjcGlIZWFkZXIgKA0KKyAgSU4gVUlOVDgqIFB0cg0KKyAgKQ0KK3sNCisgIEFDUElfREVTQ1JJ UFRJT05fSEVBREVSX0lORk8gQWNwaUhkckluZm87DQorICBBQ1BJX1BBUlNFUiBBY3BpSGVhZGVy UGFyc2VyW10gPSB7DQorICAgIFBBUlNFX0FDUElfSEVBREVSICgmQWNwaUhkckluZm8pDQorICB9 Ow0KKw0KKyAgcmV0dXJuIFBhcnNlQWNwaSAoDQorICAgICAgICAgICBUUlVFLA0KKyAgICAgICAg ICAgMCwNCisgICAgICAgICAgICJBQ1BJIFRhYmxlIEhlYWRlciIsDQorICAgICAgICAgICBQdHIs DQorICAgICAgICAgICBBQ1BJX0RFU0NSSVBUSU9OX0hFQURFUl9MRU5HVEgsDQorICAgICAgICAg ICBQQVJTRVJfUEFSQU1TIChBY3BpSGVhZGVyUGFyc2VyKQ0KKyAgICAgICAgICAgKTsNCit9DQor DQorLyoqIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBBQ1BJIGhlYWRlciBhcyBkZXNjcmliZWQg YnkgdGhlIEFjcGlIZWFkZXJQYXJzZXIuDQorDQorICBUaGlzIGZ1bmN0aW9uIG9wdGlvbmFsbHkg cmV0dXJucyB0aGUgc2lnbmF0dXJlLCBsZW5ndGggYW5kIHJldmlzaW9uIG9mIHRoZQ0KKyAgQUNQ SSB0YWJsZS4NCisNCisgIEBwYXJhbSBbaW5dICBQdHIgICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0 YXJ0IG9mIHRoZSBidWZmZXIuDQorICBAcGFyYW0gW291dF0gU2lnbmF0dXJlICBHZXRzIGxvY2F0 aW9uIG9mIHRoZSBBQ1BJIHRhYmxlIHNpZ25hdHVyZS4NCisgIEBwYXJhbSBbb3V0XSBMZW5ndGgg ICAgIEdldHMgbG9jYXRpb24gb2YgdGhlIGxlbmd0aCBvZiB0aGUgQUNQSSB0YWJsZS4NCisgIEBw YXJhbSBbb3V0XSBSZXZpc2lvbiAgIEdldHMgbG9jYXRpb24gb2YgdGhlIHJldmlzaW9uIG9mIHRo ZSBBQ1BJIHRhYmxlLg0KKw0KKyAgQHJldHZhbCBOdW1iZXIgb2YgYnl0ZXMgcGFyc2VkLg0KKyov DQorVUlOVDMyDQorRUZJQVBJDQorUGFyc2VBY3BpSGVhZGVyICgNCisgIElOICBVSU5UOCogICAg ICAgICBQdHIsDQorICBPVVQgQ09OU1QgVUlOVDMyKiogU2lnbmF0dXJlLA0KKyAgT1VUIENPTlNU IFVJTlQzMioqIExlbmd0aCwNCisgIE9VVCBDT05TVCBVSU5UOCoqICBSZXZpc2lvbg0KKyAgKQ0K K3sNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVzUGFyc2VkOw0KKyAgQUNQ SV9ERVNDUklQVElPTl9IRUFERVJfSU5GTyAgQWNwaUhkckluZm87DQorICBBQ1BJX1BBUlNFUiBB Y3BpSGVhZGVyUGFyc2VyW10gPSB7DQorICAgIFBBUlNFX0FDUElfSEVBREVSICgmQWNwaUhkcklu Zm8pDQorICB9Ow0KKw0KKyAgQnl0ZXNQYXJzZWQgPSBQYXJzZUFjcGkgKA0KKyAgICAgICAgICAg ICAgICAgIEZBTFNFLA0KKyAgICAgICAgICAgICAgICAgIDAsDQorICAgICAgICAgICAgICAgICAg TlVMTCwNCisgICAgICAgICAgICAgICAgICBQdHIsDQorICAgICAgICAgICAgICAgICAgQUNQSV9E RVNDUklQVElPTl9IRUFERVJfTEVOR1RILA0KKyAgICAgICAgICAgICAgICAgIFBBUlNFUl9QQVJB TVMgKEFjcGlIZWFkZXJQYXJzZXIpDQorICAgICAgICAgICAgICAgICAgKTsNCisNCisgICpTaWdu YXR1cmUgPSBBY3BpSGRySW5mby5TaWduYXR1cmU7DQorICAqTGVuZ3RoID0gQWNwaUhkckluZm8u TGVuZ3RoOw0KKyAgKlJldmlzaW9uID0gQWNwaUhkckluZm8uUmV2aXNpb247DQorDQorICByZXR1 cm4gQnl0ZXNQYXJzZWQ7DQorfQ0KZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNo ZWxsQWNwaVZpZXdDb21tYW5kTGliL0FjcGlQYXJzZXIuaCBiL1NoZWxsUGtnL0xpYnJhcnkvVWVm aVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL0FjcGlQYXJzZXIuaA0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkYWRk NGQxMDQyM2NiNjBjYTE3YzFiMWQyODVjNTVlMmU1OGEwZTANCi0tLSAvZGV2L251bGwNCisrKyBi L1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL0FjcGlQYXJzZXIu aA0KQEAgLTAsMCArMSw3NTkgQEANCisvKioNCisgIEhlYWRlciBmaWxlIGZvciBBQ1BJIHBhcnNl cg0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDE2IC0gMjAxOCwgQVJNIExpbWl0ZWQuIEFsbCByaWdo dHMgcmVzZXJ2ZWQuDQorICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJp YWxzDQorICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBh bmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UNCisgIHdoaWNoIGFjY29tcGFuaWVzIHRo aXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91 bmQgYXQNCisgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAN CisNCisgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBP TiBBTiAiQVMgSVMiIEJBU0lTLA0KKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFU SU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCisqKi8NCisNCisj aWZuZGVmIEFDUElQQVJTRVJfSF8NCisjZGVmaW5lIEFDUElQQVJTRVJfSF8NCisNCisjZGVmaW5l IE9VVFBVVF9GSUVMRF9DT0xVTU5fV0lEVEggIDM2DQorDQorLy8vIFRoZSBSU0RQIHRhYmxlIHNp Z25hdHVyZSBpcyAiUlNEIFBUUiAiICg4IGJ5dGVzKQ0KKy8vLyBIb3dldmVyIFRoZSBzaWduYXR1 cmUgZm9yIEFDUEkgdGFibGVzIGlzIDQgYnl0ZXMuDQorLy8vIFRvIHdvcmsgYXJvdW5kIHRoaXMg b2RkaXR5IGRlZmluZSBhIHNpZ25hdHVyZSB0eXBlDQorLy8vIHRoYXQgYWxsb3dzIHVzIHRvIHBy b2Nlc3MgdGhlIGxvZyBvcHRpb25zLg0KKyNkZWZpbmUgUlNEUF9UQUJMRV9JTkZPICBTSUdOQVRV UkVfMzIoJ1InLCAnUycsICdEJywgJ1AnKQ0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIGluY3JlbWVu dHMgdGhlIEFDUEkgdGFibGUgZXJyb3IgY291bnRlci4NCisqLw0KK1ZPSUQNCitFRklBUEkNCitJ bmNyZW1lbnRFcnJvckNvdW50ICgNCisgIFZPSUQNCisgICk7DQorDQorLyoqIFRoaXMgZnVuY3Rp b24gaW5jcmVtZW50cyB0aGUgQUNQSSB0YWJsZSB3YXJuaW5nIGNvdW50ZXIuDQorKi8NCitWT0lE DQorRUZJQVBJDQorSW5jcmVtZW50V2FybmluZ0NvdW50ICgNCisgIFZPSUQNCisgICk7DQorDQor LyoqIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgdGhlIEFDUEkgdGFibGUgY2hlY2tzdW0uDQorDQor ICBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIHRoZSBjaGVja3N1bSBmb3IgdGhlIEFDUEkgdGFibGUg YW5kIG9wdGlvbmFsbHkNCisgIHByaW50cyB0aGUgc3RhdHVzLg0KKw0KKyAgQHBhcmFtIFtpbl0g TG9nICAgICBJZiBUUlVFIGxvZyB0aGUgc3RhdHVzIG9mIHRoZSBjaGVja3N1bS4NCisgIEBwYXJh bSBbaW5dIFB0ciAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIHRhYmxlIGJ1ZmZlci4N CisgIEBwYXJhbSBbaW5dIExlbmd0aCAgVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLg0KKw0KKyAg QHJldHZhbCBUUlVFICAgICAgICAgVGhlIGNoZWNrc3VtIGlzIE9LLg0KKyAgQHJldHZhbCBGQUxT RSAgICAgICAgVGhlIGNoZWNrc3VtIGZhaWxlZC4NCisqLw0KK0JPT0xFQU4NCitFRklBUEkNCitW ZXJpZnlDaGVja3N1bSAoDQorICBJTiBCT09MRUFOIExvZywNCisgIElOIFVJTlQ4KiAgUHRyLA0K KyAgSU4gVUlOVDMyICBMZW5ndGgNCisgICk7DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gcGVyZm9y bXMgYSByYXcgZGF0YSBkdW1wIG9mIHRoZSBBQ1BJIHRhYmxlLg0KKw0KKyAgQHBhcmFtIFtpbl0g UHRyICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgdGFibGUgYnVmZmVyLg0KKyAgQHBh cmFtIFtpbl0gTGVuZ3RoICBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIuDQorKi8NCitWT0lEDQor RUZJQVBJDQorRHVtcFJhdyAoDQorICBJTiBVSU5UOCogUHRyLA0KKyAgSU4gVUlOVDMyIExlbmd0 aA0KKyAgKTsNCisNCisvKiogVGhpcyBmdW5jdGlvbiB0cmFjZXMgMSBieXRlIG9mIGRhdHVtIGFz IHNwZWNpZmllZCBpbiB0aGUNCisgICAgZm9ybWF0IHN0cmluZy4NCisNCisgIEBwYXJhbSBbaW5d IEZvcm1hdCAgVGhlIGZvcm1hdCBzdHJpbmcgZm9yIHRyYWNpbmcgdGhlIGRhdGEuDQorICBAcGFy YW0gW2luXSBQdHIgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorKi8N CitWT0lEDQorRUZJQVBJDQorRHVtcFVpbnQ4ICgNCisgIElOIENPTlNUIENIQVIxNiogRm9ybWF0 LA0KKyAgSU4gVUlOVDgqICAgICAgICBQdHINCisgICk7DQorDQorLyoqIFRoaXMgZnVuY3Rpb24g dHJhY2VzIDIgYnl0ZXMgb2YgZGF0YSBhcyBzcGVjaWZpZWQgaW4gdGhlDQorICAgIGZvcm1hdCBz dHJpbmcuDQorDQorICBAcGFyYW0gW2luXSBGb3JtYXQgIFRoZSBmb3JtYXQgc3RyaW5nIGZvciB0 cmFjaW5nIHRoZSBkYXRhLg0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICBQb2ludGVyIHRvIHRoZSBz dGFydCBvZiB0aGUgYnVmZmVyLg0KKyovDQorVk9JRA0KK0VGSUFQSQ0KK0R1bXBVaW50MTYgKA0K KyAgSU4gQ09OU1QgQ0hBUjE2KiBGb3JtYXQsDQorICBJTiBVSU5UOCogICAgICAgIFB0cg0KKyAg KTsNCisNCisvKiogVGhpcyBmdW5jdGlvbiB0cmFjZXMgNCBieXRlcyBvZiBkYXRhIGFzIHNwZWNp ZmllZCBpbiB0aGUNCisgICAgZm9ybWF0IHN0cmluZy4NCisNCisgIEBwYXJhbSBbaW5dIEZvcm1h dCAgVGhlIGZvcm1hdCBzdHJpbmcgZm9yIHRyYWNpbmcgdGhlIGRhdGEuDQorICBAcGFyYW0gW2lu XSBQdHIgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorKi8NCitWT0lE DQorRUZJQVBJDQorRHVtcFVpbnQzMiAoDQorICBJTiBDT05TVCBDSEFSMTYqIEZvcm1hdCwNCisg IElOIFVJTlQ4KiAgICAgICAgUHRyDQorICApOw0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHRyYWNl cyA4IGJ5dGVzIG9mIGRhdGEgYXMgc3BlY2lmaWVkIGJ5IHRoZQ0KKyAgICBmb3JtYXQgc3RyaW5n Lg0KKw0KKyAgQHBhcmFtIFtpbl0gRm9ybWF0ICBUaGUgZm9ybWF0IHN0cmluZyBmb3IgdHJhY2lu ZyB0aGUgZGF0YS4NCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQg b2YgdGhlIGJ1ZmZlci4NCisqLw0KK1ZPSUQNCitFRklBUEkNCitEdW1wVWludDY0ICgNCisgIElO IENPTlNUIENIQVIxNiogRm9ybWF0LA0KKyAgSU4gVUlOVDgqICAgICAgICBQdHINCisgICk7DQor DQorLyoqIFRoaXMgZnVuY3Rpb24gdHJhY2VzIDMgY2hhcmFjdGVycyB3aGljaCBjYW4gYmUgb3B0 aW9uYWxseQ0KKyAgIGZvcm1hdGVkIHVzaW5nIHRoZSBmb3JtYXQgc3RyaW5nIGlmIHNwZWNpZmll ZC4NCisNCisgIElmIG5vIGZvcm1hdCBzdHJpbmcgaXMgc3BlY2lmaWVkIHRoZSBGb3JtYXQgbXVz dCBiZSBOVUxMLg0KKw0KKyAgQHBhcmFtIFtpbl0gRm9ybWF0ICBPcHRpb25hbCBmb3JtYXQgc3Ry aW5nIGZvciB0cmFjaW5nIHRoZSBkYXRhLg0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICBQb2ludGVy IHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLg0KKyovDQorVk9JRA0KK0VGSUFQSQ0KK0R1bXAz Q2hhcnMgKA0KKyAgSU4gQ09OU1QgQ0hBUjE2KiBGb3JtYXQgT1BUSU9OQUwsDQorICBJTiBVSU5U OCogICAgICAgIFB0cg0KKyAgKTsNCisNCisvKiogVGhpcyBmdW5jdGlvbiB0cmFjZXMgNCBjaGFy YWN0ZXJzIHdoaWNoIGNhbiBiZSBvcHRpb25hbGx5DQorICAgZm9ybWF0ZWQgdXNpbmcgdGhlIGZv cm1hdCBzdHJpbmcgaWYgc3BlY2lmaWVkLg0KKw0KKyAgSWYgbm8gZm9ybWF0IHN0cmluZyBpcyBz cGVjaWZpZWQgdGhlIEZvcm1hdCBtdXN0IGJlIE5VTEwuDQorDQorICBAcGFyYW0gW2luXSBGb3Jt YXQgIE9wdGlvbmFsIGZvcm1hdCBzdHJpbmcgZm9yIHRyYWNpbmcgdGhlIGRhdGEuDQorICBAcGFy YW0gW2luXSBQdHIgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorKi8N CitWT0lEDQorRUZJQVBJDQorRHVtcDRDaGFycyAoDQorICBJTiBDT05TVCBDSEFSMTYqIEZvcm1h dCBPUFRJT05BTCwNCisgIElOIFVJTlQ4KiAgICAgICAgUHRyDQorICApOw0KKw0KKy8qKiBUaGlz IGZ1bmN0aW9uIHRyYWNlcyA2IGNoYXJhY3RlcnMgd2hpY2ggY2FuIGJlIG9wdGlvbmFsbHkNCisg ICBmb3JtYXRlZCB1c2luZyB0aGUgZm9ybWF0IHN0cmluZyBpZiBzcGVjaWZpZWQuDQorDQorICBJ ZiBubyBmb3JtYXQgc3RyaW5nIGlzIHNwZWNpZmllZCB0aGUgRm9ybWF0IG11c3QgYmUgTlVMTC4N CisNCisgIEBwYXJhbSBbaW5dIEZvcm1hdCAgT3B0aW9uYWwgZm9ybWF0IHN0cmluZyBmb3IgdHJh Y2luZyB0aGUgZGF0YS4NCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgUG9pbnRlciB0byB0aGUgc3Rh cnQgb2YgdGhlIGJ1ZmZlci4NCisqLw0KK1ZPSUQNCitFRklBUEkNCitEdW1wNkNoYXJzICgNCisg IElOIENPTlNUIENIQVIxNiogRm9ybWF0IE9QVElPTkFMLA0KKyAgSU4gVUlOVDgqICAgICAgICBQ dHINCisgICk7DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gdHJhY2VzIDggY2hhcmFjdGVycyB3aGlj aCBjYW4gYmUgb3B0aW9uYWxseQ0KKyAgIGZvcm1hdGVkIHVzaW5nIHRoZSBmb3JtYXQgc3RyaW5n IGlmIHNwZWNpZmllZC4NCisNCisgIElmIG5vIGZvcm1hdCBzdHJpbmcgaXMgc3BlY2lmaWVkIHRo ZSBGb3JtYXQgbXVzdCBiZSBOVUxMLg0KKw0KKyAgQHBhcmFtIFtpbl0gRm9ybWF0ICBPcHRpb25h bCBmb3JtYXQgc3RyaW5nIGZvciB0cmFjaW5nIHRoZSBkYXRhLg0KKyAgQHBhcmFtIFtpbl0gUHRy ICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLg0KKyovDQorVk9JRA0KK0VG SUFQSQ0KK0R1bXA4Q2hhcnMgKA0KKyAgSU4gQ09OU1QgQ0hBUjE2KiBGb3JtYXQgT1BUSU9OQUws DQorICBJTiBVSU5UOCogICAgICAgIFB0cg0KKyAgKTsNCisNCisvKiogVGhpcyBmdW5jdGlvbiBp bmRlbnRzIGFuZCBwcmludHMgdGhlIEFDUEkgdGFibGUgRmllbGQgTmFtZS4NCisNCisgIEBwYXJh bSBbaW5dIEluZGVudCAgICAgIE51bWJlciBvZiBzcGFjZXMgdG8gYWRkIHRvIHRoZSBnbG9iYWwg dGFibGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudC4gVGhlIGdsb2JhbCB0YWJs ZSBpbmRlbnQgaXMgMCBieSBkZWZhdWx0Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaG93 ZXZlciB0aGlzIHZhbHVlIGlzIHVwZGF0ZWQgb24gZW50cnkgdG8gdGhlDQorICAgICAgICAgICAg ICAgICAgICAgICAgICBQYXJzZUFjcGkoKSBieSBhZGRpbmcgdGhlIGluZGVudCB2YWx1ZSBwcm92 aWRlZCB0bw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2VBY3BpKCkgYW5kIHJlc3Rv cmVkIGJhY2sgb24gZXhpdC4gVGhlcmVmb3JlDQorICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGUgdG90YWwgaW5kZW50IGluIHRoZSBvdXRwdXQgaXMgZGVwZW5kZW50IG9uIGZyb20NCisgICAg ICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLg0KKyAg QHBhcmFtIFtpbl0gRmllbGROYW1lICAgUG9pbnRlciB0byB0aGUgRmllbGQgTmFtZS4NCisqLw0K K1ZPSUQNCitFRklBUEkNCitQcmludEZpZWxkTmFtZSAoDQorICBJTiBVSU5UMzIgICAgICAgICBJ bmRlbnQsDQorICBJTiBDT05TVCBDSEFSMTYqICBGaWVsZE5hbWUNCispOw0KKw0KKy8qKiBUaGlz IGZ1bmN0aW9uIHBvaW50ZXIgaXMgdGhlIHRlbXBsYXRlIGZvciBjdXN0b21pemluZyB0aGUgdHJh Y2Ugb3V0cHV0DQorDQorICBAcGFyYW0gW2luXSBGb3JtYXQgIEZvcm1hdCBzdHJpbmcgZm9yIHRy YWNpbmcgdGhlIGRhdGEgYXMgc3BlY2lmaWVkIGJ5DQorICAgICAgICAgICAgICAgICAgICAgIHRo ZSAnRm9ybWF0JyBtZW1iZXIgb2YgQUNQSV9QQVJTRVIuDQorICBAcGFyYW0gW2luXSBQdHIgICAg IFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorKi8NCit0eXBlZGVmIFZPSUQg KEVGSUFQSSAqRk5QVFJfUFJJTlRfRk9STUFUVEVSKShDT05TVCBDSEFSMTYqIEZvcm1hdCwgVUlO VDgqIFB0cik7DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyB0aGUgdGVtcGxhdGUg Zm9yIHZhbGlkYXRpbmcgYW4gQUNQSSB0YWJsZSBmaWVsZC4NCisNCisgIEBwYXJhbSBbaW5dIFB0 ciAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGZpZWxkIGRhdGEuDQorICBAcGFyYW0g W2luXSBDb250ZXh0IFBvaW50ZXIgdG8gY29udGV4dCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhcyBz cGVjaWZpZWQgYnkNCisgICAgICAgICAgICAgICAgICAgICAgdGhlICdDb250ZXh0JyBtZW1iZXIg b2YgdGhlIEFDUElfUEFSU0VSLg0KKyAgICAgICAgICAgICAgICAgICAgICBlLmcuIHRoaXMgY291 bGQgYmUgYSBwb2ludGVyIHRvIHRoZSBBQ1BJIHRhYmxlIGhlYWRlci4NCisqLw0KK3R5cGVkZWYg Vk9JRCAoRUZJQVBJICpGTlBUUl9GSUVMRF9WQUxJREFUT1IpKFVJTlQ4KiBQdHIsIFZPSUQqIENv bnRleHQpOw0KKw0KKy8qKiBUaGUgQUNQSV9QQVJTRVIgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUg ZmllbGRzIG9mIGFuIEFDUEkgdGFibGUgYW5kDQorICAgIHByb3ZpZGVzIG1lYW5zIGZvciB0aGUg cGFyc2VyIHRvIGludGVycHJldCBhbmQgdHJhY2UgYXBwcm9wcmlhdGVseS4NCisNCisgIFRoZSBm aXJzdCB0aHJlZSBtZW1iZXJzIGFyZSBwb3B1bGF0ZWQgYmFzZWQgb24gaW5mb3JtYXRpb24gcHJl c2VudCBpbg0KKyAgaW4gdGhlIEFDUEkgdGFibGUgc3BlY2lmaWNhdGlvbnMuIFRoZSByZW1haW5p bmcgbWVtYmVycyBkZXNjcmliZSBob3cNCisgIHRoZSBwYXJzZXIgc2hvdWxkIHJlcG9ydCB0aGUg ZmllbGQgaW5mb3JtYXRpb24sIHZhbGlkYXRlIHRoZSBmaWVsZCBkYXRhDQorICBhbmQvb3IgdXBk YXRlIGFuIGV4dGVybmFsIHBvaW50ZXIgdG8gdGhlIGZpZWxkIChJdGVtUHRyKS4NCisNCisgIFBh cnNlQWNwaSgpIHVzZXMgdGhlIGZvcm1hdCBzdHJpbmcgc3BlY2lmaWVkIGJ5ICdGb3JtYXQnIGZv ciB0cmFjaW5nDQorICB0aGUgZmllbGQgZGF0YS4gSWYgdGhlIGZpZWxkIGlzIG1vcmUgY29tcGxl eCBhbmQgcmVxdWlyZXMgYWRkaXRpb25hbA0KKyAgcHJvY2Vzc2luZyBmb3IgZm9ybWF0dGluZyBh bmQgcmVwcmVzZW50YXRpb24gYSBwcmludCBmb3JtYXR0ZXIgZnVuY3Rpb24NCisgIGNhbiBiZSBz cGVjaWZpZWQgaW4gJ1ByaW50Rm9ybWF0dGVyJy4NCisgIFRoZSBQcmludEZvcm1hdHRlciBmdW5j dGlvbiBtYXkgY2hvb3NlIHRvIHVzZSB0aGUgZm9ybWF0IHN0cmluZw0KKyAgc3BlY2lmaWVkIGJ5 ICdGb3JtYXQnIG9yIHVzZSBpdHMgb3duIGludGVybmFsIGZvcm1hdCBzdHJpbmcuDQorDQorICBU aGUgJ0Zvcm1hdCcgYW5kICdQcmludEZvcm1hdHRlcicgbWVtYmVycyBhbGxvdyBmbGV4aWJpbGl0 eSBmb3INCisgIHJlcHJlc2VudGluZyB0aGUgZmllbGQgZGF0YS4NCisqLw0KK3R5cGVkZWYgc3Ry dWN0IEFjcGlQYXJzZXIgew0KKw0KKyAgLy8vIFN0cmluZyBkZXNjcmliaW5nIHRoZSBBQ1BJIHRh YmxlIGZpZWxkDQorICAvLy8gKEZpZWxkIGNvbHVtbiBmcm9tIEFDUEkgdGFibGUgc3BlYykNCisg IENPTlNUIENIQVIxNiogICAgICAgICBOYW1lU3RyOw0KKw0KKyAgLy8vIFRoZSBsZW5ndGggb2Yg dGhlIGZpZWxkLg0KKyAgLy8vIChCeXRlIExlbmd0aCBjb2x1bW4gZnJvbSBBQ1BJIHRhYmxlIHNw ZWMpDQorICBVSU5UMzIgICAgICAgICAgICAgICAgTGVuZ3RoOw0KKw0KKyAgLy8vIFRoZSBvZmZz ZXQgb2YgdGhlIGZpZWxkIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB0YWJsZS4NCisgIC8vLyAoQnl0 ZSBPZmZzZXQgY29sdW1uIGZyb20gQUNQSSB0YWJsZSBzcGVjKQ0KKyAgVUlOVDMyICAgICAgICAg ICAgICAgIE9mZnNldDsNCisNCisgIC8vLyBPcHRpb25hbCBQcmludCgpIHN0eWxlIGZvcm1hdCBz dHJpbmcgZm9yIHRyYWNpbmcgdGhlIGRhdGEuIElmIG5vdA0KKyAgLy8vIHVzZWQgdGhpcyBtdXN0 IGJlIHNldCB0byBOVUxMLg0KKyAgQ09OU1QgQ0hBUjE2KiAgICAgICAgIEZvcm1hdDsNCisNCisg IC8vLyBPcHRpb25hbCBwb2ludGVyIHRvIGEgcHJpbnQgZm9ybWF0dGVyIGZ1bmN0aW9uIHdoaWNo DQorICAvLy8gaXMgdHlwaWNhbGx5IHVzZWQgdG8gdHJhY2UgY29tcGxleCBmaWVsZCBpbmZvcm1h dGlvbi4NCisgIC8vLyBJZiBub3QgdXNlZCB0aGlzIG11c3QgYmUgc2V0IHRvIE5VTEwuDQorICAv Ly8gVGhlIEZvcm1hdCBzdHJpbmcgaXMgcGFzc2VkIHRvIHRoZSBQcmludEZvcm1hdHRlciBmdW5j dGlvbg0KKyAgLy8vIGJ1dCBtYXkgYmUgaWdub3JlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gY29k ZS4NCisgIEZOUFRSX1BSSU5UX0ZPUk1BVFRFUiBQcmludEZvcm1hdHRlcjsNCisNCisgIC8vLyBP cHRpb25hbCBwb2ludGVyIHdoaWNoIG1heSBiZSBzZXQgdG8gcmVxdWVzdCB0aGUgcGFyc2VyIHRv IHVwZGF0ZQ0KKyAgLy8vIGEgcG9pbnRlciB0byB0aGUgZmllbGQgZGF0YS4gSWYgdW51c2VkIHRo aXMgbXVzdCBiZSBzZXQgdG8gTlVMTC4NCisgIFZPSUQqKiAgICAgICAgICAgICAgICBJdGVtUHRy Ow0KKw0KKyAgLy8vIE9wdGlvbmFsIHBvaW50ZXIgdG8gYSBmaWVsZCB2YWxpZGF0b3IgZnVuY3Rp b24uDQorICAvLy8gVGhlIGZ1bmN0aW9uIHNob3VsZCBkaXJlY3RseSByZXBvcnQgYW55IGFwcHJv cHJpYXRlIGVycm9yIG9yIHdhcm5pbmcNCisgIC8vLyBhbmQgaW52b2tlIHRoZSBhcHByb3ByaWF0 ZSBjb3VudGVyIHVwZGF0ZSBmdW5jdGlvbi4NCisgIC8vLyBJZiBub3QgdXNlZCB0aGlzIHBhcmFt ZXRlciBtdXN0IGJlIHNldCB0byBOVUxMLg0KKyAgRk5QVFJfRklFTERfVkFMSURBVE9SIEZpZWxk VmFsaWRhdG9yOw0KKw0KKyAgLy8vIE9wdGlvbmFsIHBvaW50ZXIgdG8gY29udGV4dCBzcGVjaWZp YyBpbmZvcm1hdGlvbiwNCisgIC8vLyB3aGljaCB0aGUgRmllbGQgVmFsaWRhdG9yIGZ1bmN0aW9u IGNhbiB1c2UgdG8gZGV0ZXJtaW5lDQorICAvLy8gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91 dCB0aGUgQUNQSSB0YWJsZSBhbmQgbWFrZQ0KKyAgLy8vIGRlY2lzaW9ucyBhYm91dCB0aGUgZmll bGQgYmVpbmcgdmFsaWRhdGVkLg0KKyAgLy8vIGUuZy4gdGhpcyBjb3VsZCBiZSBhIHBvaW50ZXIg dG8gdGhlIEFDUEkgdGFibGUgaGVhZGVyDQorICBWT0lEKiAgICAgICAgICAgICAgICAgQ29udGV4 dDsNCit9IEFDUElfUEFSU0VSOw0KKw0KKy8qKiBBIHN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIHRo ZSBwb2ludGVycyB0byB0aGUgbWVtYmVycyBvZiB0aGUNCisgICAgQUNQSSBkZXNjcmlwdGlvbiBo ZWFkZXIgc3RydWN0dXJlIHRoYXQgd2FzIHBhcnNlZC4NCisqLw0KK3R5cGVkZWYgc3RydWN0IEFj cGlEZXNjcmlwdGlvbkhlYWRlckluZm8gew0KKyAgLy8vIEFDUEkgdGFibGUgc2lnbmF0dXJlDQor ICBVSU5UMzIqIFNpZ25hdHVyZTsNCisgIC8vLyBMZW5ndGggb2YgdGhlIEFDUEkgdGFibGUNCisg IFVJTlQzMiogTGVuZ3RoOw0KKyAgLy8vIFJldmlzaW9uDQorICBVSU5UOCogIFJldmlzaW9uOw0K KyAgLy8vIENoZWNrc3VtDQorICBVSU5UOCogIENoZWNrc3VtOw0KKyAgLy8vIE9FTSBJZCAtIGxl bmd0aCBpcyA2IGJ5dGVzDQorICBVSU5UOCogIE9lbUlkOw0KKyAgLy8vIE9FTSB0YWJsZSBJZA0K KyAgVUlOVDY0KiBPZW1UYWJsZUlkOw0KKyAgLy8vIE9FTSByZXZpc2lvbiBJZA0KKyAgVUlOVDMy KiBPZW1SZXZpc2lvbjsNCisgIC8vLyBDcmVhdG9yIElkDQorICBVSU5UMzIqIENyZWF0b3JJZDsN CisgIC8vLyBDcmVhdG9yIHJldmlzaW9uDQorICBVSU5UMzIqIENyZWF0b3JSZXZpc2lvbjsNCit9 IEFDUElfREVTQ1JJUFRJT05fSEVBREVSX0lORk87DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gaXMg dXNlZCB0byBwYXJzZSBhbiBBQ1BJIHRhYmxlIGJ1ZmZlci4NCisNCisgIFRoZSBBQ1BJIHRhYmxl IGJ1ZmZlciBpcyBwYXJzZWQgdXNpbmcgdGhlIEFDUEkgdGFibGUgcGFyc2VyIGluZm9ybWF0aW9u DQorICBzcGVjaWZpZWQgYnkgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIEFDUElfUEFSU0VSIGVs ZW1lbnRzLiBUaGlzIHBhcnNlcg0KKyAgZnVuY3Rpb24gaXRlcmF0ZXMgdGhyb3VnaCBlYWNoIGl0 ZW0gb24gdGhlIEFDUElfUEFSU0VSIGFycmF5IGFuZCBsb2dzIHRoZQ0KKyAgQUNQSSB0YWJsZSBm aWVsZHMuDQorDQorICBUaGlzIGZ1bmN0aW9uIGNhbiBvcHRpb25hbGx5IGJlIHVzZWQgdG8gcGFy c2UgQUNQSSB0YWJsZXMgYW5kIGZldGNoIHNwZWNpZmljDQorICBmaWVsZCB2YWx1ZXMuIFRoZSBJ dGVtUHRyIG1lbWJlciBvZiB0aGUgQUNQSV9QQVJTRVIgc3RydWN0dXJlICh3aGVyZSB1c2VkKQ0K KyAgaXMgdXBkYXRlZCBieSB0aGlzIHBhcnNlciBmdW5jdGlvbiB0byBwb2ludCB0byB0aGUgc2Vs ZWN0ZWQgZmllbGQgZGF0YQ0KKyAgKGUuZy4gdXNlZnVsIGZvciB2YXJpYWJsZSBsZW5ndGggbmVz dGVkIGZpZWxkcykuDQorDQorICBAcGFyYW0gW2luXSBUcmFjZSAgICAgICAgVHJhY2UgdGhlIEFD UEkgZmllbGRzIFRSVUUgZWxzZSBvbmx5IHBhcnNlIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRhYmxlLg0KKyAgQHBhcmFtIFtpbl0gSW5kZW50ICAgICAgIE51bWJlciBvZiBzcGFj ZXMgdG8gaW5kZW50IHRoZSBvdXRwdXQuDQorICBAcGFyYW0gW2luXSBBc2NpaU5hbWUgICAgT3B0 aW9uYWwgcG9pbnRlciB0byBhbiBBU0NJSSBzdHJpbmcgdGhhdCBkZXNjcmliZXMNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICB0aGUgdGFibGUgYmVpbmcgcGFyc2VkLg0KKyAgQHBhcmFtIFtp bl0gUHRyICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorICBA cGFyYW0gW2luXSBMZW5ndGggICAgICAgTGVuZ3RoIG9mIHRoZSBidWZmZXIgcG9pbnRlZCBieSBQ dHIuDQorICBAcGFyYW0gW2luXSBQYXJzZXIgICAgICAgUG9pbnRlciB0byBhbiBhcnJheSBvZiBB Q1BJX1BBUlNFUiBzdHJ1Y3R1cmUgdGhhdA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl c2NyaWJlcyB0aGUgdGFibGUgYmVpbmcgcGFyc2VkLg0KKyAgQHBhcmFtIFtpbl0gUGFyc2VySXRl bXMgIE51bWJlciBvZiBpdGVtcyBpbiB0aGUgQUNQSV9QQVJTRVIgYXJyYXkuDQorDQorICBAcmV0 dmFsIE51bWJlciBvZiBieXRlcyBwYXJzZWQuDQorKi8NCitVSU5UMzINCitFRklBUEkNCitQYXJz ZUFjcGkgKA0KKyAgSU4gQk9PTEVBTiAgICAgICAgICAgIFRyYWNlLA0KKyAgSU4gVUlOVDMyICAg ICAgICAgICAgIEluZGVudCwNCisgIElOIENPTlNUIENIQVI4KiAgICAgICBBc2NpaU5hbWUgT1BU SU9OQUwsDQorICBJTiBVSU5UOCogICAgICAgICAgICAgUHRyLA0KKyAgSU4gVUlOVDMyICAgICAg ICAgICAgIExlbmd0aCwNCisgIElOIENPTlNUIEFDUElfUEFSU0VSKiBQYXJzZXIsDQorICBJTiBV SU5UMzIgICAgICAgICAgICAgUGFyc2VySXRlbXMNCispOw0KKw0KKy8qKiBUaGlzIGlzIGEgaGVs cGVyIG1hY3JvIHRvIHBhc3MgcGFyYW1ldGVycyB0byB0aGUgUGFyc2VyIGZ1bmN0aW9ucy4NCisN CisgIEBwYXJhbSBbaW5dIFBhcnNlciBUaGUgbmFtZSBvZiB0aGUgQUNQSV9QQVJTRVIgYXJyYXkg ZGVzY3JpYmluZyB0aGUNCisgICAgICAgICAgICAgIEFDUEkgdGFibGUgZmllbGRzLg0KKyovDQor I2RlZmluZSBQQVJTRVJfUEFSQU1TKFBhcnNlcikgUGFyc2VyLCBzaXplb2YgKFBhcnNlcikgLyBz aXplb2YgKFBhcnNlclswXSkNCisNCisvKiogVGhpcyBpcyBhIGhlbHBlciBtYWNybyBmb3IgZGVz Y3JpYmluZyB0aGUgQUNQSSBoZWFkZXIgZmllbGRzLg0KKw0KKyAgQHBhcmFtIFtvdXRdIEluZm8g IFBvaW50ZXIgdG8gcmV0cmlldmUgdGhlIEFDUEkgdGFibGUgaGVhZGVyIGluZm9ybWF0aW9uLg0K KyovDQorI2RlZmluZSBQQVJTRV9BQ1BJX0hFQURFUihJbmZvKSAgICAgICAgICAgICAgICAgICBc DQorICB7IEwiU2lnbmF0dXJlIiwgNCwgMCwgTlVMTCwgRHVtcDRDaGFycywgICAgICAgICBcDQor ICAgIChWT0lEKiopJihJbmZvKS0+U2lnbmF0dXJlICwgTlVMTCwgTlVMTCB9LCAgICBcDQorICB7 IEwiTGVuZ3RoIiwgNCwgNCwgTCIlZCIsIE5VTEwsICAgICAgICAgICAgICAgICBcDQorICAgIChW T0lEKiopJihJbmZvKS0+TGVuZ3RoLCBOVUxMLCBOVUxMIH0sICAgICAgICBcDQorICB7IEwiUmV2 aXNpb24iLCAxLCA4LCBMIiVkIiwgTlVMTCwgICAgICAgICAgICAgICBcDQorICAgIChWT0lEKiop JihJbmZvKS0+UmV2aXNpb24sIE5VTEwsIE5VTEwgfSwgICAgICBcDQorICB7IEwiQ2hlY2tzdW0i LCAxLCA5LCBMIjB4JVgiLCBOVUxMLCAgICAgICAgICAgICBcDQorICAgIChWT0lEKiopJihJbmZv KS0+Q2hlY2tzdW0sIE5VTEwsIE5VTEwgfSwgICAgICBcDQorICB7IEwiT2VtIElEIiwgNiwgMTAs IE5VTEwsIER1bXA2Q2hhcnMsICAgICAgICAgICBcDQorICAgIChWT0lEKiopJihJbmZvKS0+T2Vt SWQsIE5VTEwsIE5VTEwgfSwgICAgICAgICBcDQorICB7IEwiT2VtIFRhYmxlIElEIiwgOCwgMTYs IE5VTEwsIER1bXA4Q2hhcnMsICAgICBcDQorICAgIChWT0lEKiopJihJbmZvKS0+T2VtVGFibGVJ ZCwgTlVMTCwgTlVMTCB9LCAgICBcDQorICB7IEwiT2VtIFJldmlzaW9uIiwgNCwgMjQsIEwiMHgl WCIsIE5VTEwsICAgICAgICBcDQorICAgIChWT0lEKiopJihJbmZvKS0+T2VtUmV2aXNpb24sIE5V TEwsIE5VTEwgfSwgICBcDQorICB7IEwiQ3JlYXRvciBJRCIsIDQsIDI4LCBOVUxMLCBEdW1wNENo YXJzLCAgICAgICBcDQorICAgIChWT0lEKiopJihJbmZvKS0+Q3JlYXRvcklkLCBOVUxMLCBOVUxM IH0sICAgICBcDQorICB7IEwiQ3JlYXRvciBSZXZpc2lvbiIsIDQsIDMyLCBMIjB4JVgiLCBOVUxM LCAgICBcDQorICAgIChWT0lEKiopJihJbmZvKS0+Q3JlYXRvclJldmlzaW9uLCBOVUxMLCBOVUxM IH0NCisNCisvKiogTGVuZ3RoIG9mIHRoZSBBQ1BJIEdBUyBzdHJ1Y3R1cmUuDQorDQorICBOT1RF OiBUaGlzIG1pZ2h0IG5vcm1hbGx5IGJlIGRlZmluZWQgYXMNCisgICAgICAgIHNpemVvZiAoRUZJ X0FDUElfNl8yX0dFTkVSSUNfQUREUkVTU19TVFJVQ1RVUkUpLg0KKyAgICAgICAgSG93ZXZlciwg d2UgZGVsaWJlcmF0ZWx5IG1pbmltaXNlIGFueSByZWZlcmVuY2UgdG8gdGhlIEVESzIgQUNQSQ0K KyAgICAgICAgaGVhZGVycyBpbiBhbiBhdHRlbXB0IHRvIHByb3ZpZGUgY3Jvc3MgY2hlY2tpbmcu DQorKi8NCisjZGVmaW5lIEdBU19MRU5HVEggICAgICAgICAgICAgICAgICAgICAxMg0KKw0KKy8q KiBMZW5ndGggb2YgdGhlIEFDUEkgSGVhZGVyIHN0cnVjdHVyZS4NCisNCisgIE5PVEU6IFRoaXMg bWlnaHQgbm9ybWFsbHkgYmUgZGVmaW5lZCBhcw0KKyAgICAgICAgc2l6ZW9mIChFRklfQUNQSV9E RVNDUklQVElPTl9IRUFERVIpLg0KKyAgICAgICAgSG93ZXZlciwgd2UgZGVsaWJlcmF0ZWx5IG1p bmltaXNlIGFueSByZWZlcmVuY2UgdG8gdGhlIEVESzIgQUNQSQ0KKyAgICAgICAgaGVhZGVycyBp biBhbiBhdHRlbXB0IHRvIHByb3ZpZGUgY3Jvc3MgY2hlY2tpbmcuDQorKi8NCisjZGVmaW5lIEFD UElfREVTQ1JJUFRJT05fSEVBREVSX0xFTkdUSCAgMzYNCisNCisvKiogVGhpcyBmdW5jdGlvbiBp bmRlbnRzIGFuZCB0cmFjZXMgdGhlIEdBUyBzdHJ1Y3R1cmUgYXMgZGVzY3JpYmVkDQorICAgIGJ5 IHRoZSBHYXNQYXJzZXIuDQorDQorICBAcGFyYW0gW2luXSBQdHIgICAgIFBvaW50ZXIgdG8gdGhl IHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorICBAcGFyYW0gW2luXSBJbmRlbnQgIE51bWJlciBvZiBz cGFjZXMgdG8gaW5kZW50IHRoZSBvdXRwdXQuDQorKi8NCitWT0lEDQorRUZJQVBJDQorRHVtcEdh c1N0cnVjdCAoDQorICBJTiBVSU5UOCogICAgICAgIFB0ciwNCisgIElOIFVJTlQzMiAgICAgICAg SW5kZW50DQorICApOw0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHRyYWNlcyB0aGUgR0FTIHN0cnVj dHVyZSBhcyBkZXNjcmliZWQgYnkgdGhlIEdhc1BhcnNlci4NCisNCisgIEBwYXJhbSBbaW5dIEZv cm1hdCAgT3B0aW9uYWwgZm9ybWF0IHN0cmluZyBmb3IgdHJhY2luZyB0aGUgZGF0YS4NCisgIEBw YXJhbSBbaW5dIFB0ciAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4NCisq Lw0KK1ZPSUQNCitFRklBUEkNCitEdW1wR2FzICgNCisgIElOIENPTlNUIENIQVIxNiogRm9ybWF0 IE9QVElPTkFMLA0KKyAgSU4gVUlOVDgqICAgICAgICBQdHINCisgICk7DQorDQorLyoqIFRoaXMg ZnVuY3Rpb24gdHJhY2VzIHRoZSBBQ1BJIGhlYWRlciBhcyBkZXNjcmliZWQgYnkgdGhlIEFjcGlI ZWFkZXJQYXJzZXIuDQorDQorICBAcGFyYW0gW2luXSBQdHIgICAgICAgICAgUG9pbnRlciB0byB0 aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4NCisNCisgIEByZXR2YWwgTnVtYmVyIG9mIGJ5dGVzIHBh cnNlZC4NCisqLw0KK1VJTlQzMg0KK0VGSUFQSQ0KK0R1bXBBY3BpSGVhZGVyICgNCisgIElOIFVJ TlQ4KiBQdHINCisgICk7DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBBQ1BJIGhl YWRlciBhcyBkZXNjcmliZWQgYnkgdGhlIEFjcGlIZWFkZXJQYXJzZXIuDQorDQorICBUaGlzIGZ1 bmN0aW9uIG9wdGlvbmFsbHkgcmV0dXJucyB0aGUgU2lnbmF0dXJlLCBMZW5ndGggYW5kIHJldmlz aW9uIG9mIHRoZQ0KKyAgQUNQSSB0YWJsZS4NCisNCisgIEBwYXJhbSBbaW5dICBQdHIgICAgICAg IFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorICBAcGFyYW0gW291dF0gU2ln bmF0dXJlICBHZXRzIGxvY2F0aW9uIG9mIHRoZSBBQ1BJIHRhYmxlIHNpZ25hdHVyZS4NCisgIEBw YXJhbSBbb3V0XSBMZW5ndGggICAgIEdldHMgbG9jYXRpb24gb2YgdGhlIGxlbmd0aCBvZiB0aGUg QUNQSSB0YWJsZS4NCisgIEBwYXJhbSBbb3V0XSBSZXZpc2lvbiAgIEdldHMgbG9jYXRpb24gb2Yg dGhlIHJldmlzaW9uIG9mIHRoZSBBQ1BJIHRhYmxlLg0KKw0KKyAgQHJldHZhbCBOdW1iZXIgb2Yg Ynl0ZXMgcGFyc2VkLg0KKyovDQorVUlOVDMyDQorRUZJQVBJDQorUGFyc2VBY3BpSGVhZGVyICgN CisgIElOICBVSU5UOCogICAgICAgICBQdHIsDQorICBPVVQgQ09OU1QgVUlOVDMyKiogU2lnbmF0 dXJlLA0KKyAgT1VUIENPTlNUIFVJTlQzMioqIExlbmd0aCwNCisgIE9VVCBDT05TVCBVSU5UOCoq ICBSZXZpc2lvbg0KKyAgKTsNCisNCisvKiogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIEFDUEkg QkdSVCB0YWJsZS4NCisgIFdoZW4gdHJhY2UgaXMgZW5hYmxlZCB0aGlzIGZ1bmN0aW9uIHBhcnNl cyB0aGUgQkdSVCB0YWJsZSBhbmQNCisgIHRyYWNlcyB0aGUgQUNQSSB0YWJsZSBmaWVsZHMuDQor DQorICBUaGlzIGZ1bmN0aW9uIGFsc28gcGVyZm9ybXMgdmFsaWRhdGlvbiBvZiB0aGUgQUNQSSB0 YWJsZSBmaWVsZHMuDQorDQorICBAcGFyYW0gW2luXSBUcmFjZSAgICAgICAgICAgICAgSWYgVFJV RSwgdHJhY2UgdGhlIEFDUEkgZmllbGRzLg0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICAgICAgICAg ICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorICBAcGFyYW0gW2luXSBB Y3BpVGFibGVMZW5ndGggICAgTGVuZ3RoIG9mIHRoZSBBQ1BJIHRhYmxlLg0KKyAgQHBhcmFtIFtp bl0gQWNwaVRhYmxlUmV2aXNpb24gIFJldmlzaW9uIG9mIHRoZSBBQ1BJIHRhYmxlLg0KKyovDQor Vk9JRA0KK0VGSUFQSQ0KK1BhcnNlQWNwaUJncnQgKA0KKyAgSU4gQk9PTEVBTiBUcmFjZSwNCisg IElOIFVJTlQ4KiAgUHRyLA0KKyAgSU4gVUlOVDMyICBBY3BpVGFibGVMZW5ndGgsDQorICBJTiBV SU5UOCAgIEFjcGlUYWJsZVJldmlzaW9uDQorICApOw0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHBh cnNlcyB0aGUgQUNQSSBEQkcyIHRhYmxlLg0KKyAgV2hlbiB0cmFjZSBpcyBlbmFibGVkIHRoaXMg ZnVuY3Rpb24gcGFyc2VzIHRoZSBEQkcyIHRhYmxlIGFuZA0KKyAgdHJhY2VzIHRoZSBBQ1BJIHRh YmxlIGZpZWxkcy4NCisNCisgIFRoaXMgZnVuY3Rpb24gYWxzbyBwZXJmb3JtcyB2YWxpZGF0aW9u IG9mIHRoZSBBQ1BJIHRhYmxlIGZpZWxkcy4NCisNCisgIEBwYXJhbSBbaW5dIFRyYWNlICAgICAg ICAgICAgICBJZiBUUlVFLCB0cmFjZSB0aGUgQUNQSSBmaWVsZHMuDQorICBAcGFyYW0gW2luXSBQ dHIgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4NCisg IEBwYXJhbSBbaW5dIEFjcGlUYWJsZUxlbmd0aCAgICBMZW5ndGggb2YgdGhlIEFDUEkgdGFibGUu DQorICBAcGFyYW0gW2luXSBBY3BpVGFibGVSZXZpc2lvbiAgUmV2aXNpb24gb2YgdGhlIEFDUEkg dGFibGUuDQorKi8NCitWT0lEDQorRUZJQVBJDQorUGFyc2VBY3BpRGJnMiAoDQorICBJTiBCT09M RUFOIFRyYWNlLA0KKyAgSU4gVUlOVDgqICBQdHIsDQorICBJTiBVSU5UMzIgIEFjcGlUYWJsZUxl bmd0aCwNCisgIElOIFVJTlQ4ICAgQWNwaVRhYmxlUmV2aXNpb24NCisgICk7DQorDQorLyoqIFRo aXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBBQ1BJIERTRFQgdGFibGUuDQorICBXaGVuIHRyYWNlIGlz IGVuYWJsZWQgdGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIERTRFQgdGFibGUgYW5kDQorICB0cmFj ZXMgdGhlIEFDUEkgdGFibGUgZmllbGRzLg0KKyAgRm9yIHRoZSBEU0RUIHRhYmxlIG9ubHkgdGhl IEFDUEkgaGVhZGVyIGZpZWxkcyBhcmUgcGFyc2VkIGFuZA0KKyAgdHJhY2VkLg0KKw0KKyAgQHBh cmFtIFtpbl0gVHJhY2UgICAgICAgICAgICAgIElmIFRSVUUsIHRyYWNlIHRoZSBBQ1BJIGZpZWxk cy4NCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBzdGFy dCBvZiB0aGUgYnVmZmVyLg0KKyAgQHBhcmFtIFtpbl0gQWNwaVRhYmxlTGVuZ3RoICAgIExlbmd0 aCBvZiB0aGUgQUNQSSB0YWJsZS4NCisgIEBwYXJhbSBbaW5dIEFjcGlUYWJsZVJldmlzaW9uICBS ZXZpc2lvbiBvZiB0aGUgQUNQSSB0YWJsZS4NCisqLw0KK1ZPSUQNCitFRklBUEkNCitQYXJzZUFj cGlEc2R0ICgNCisgIElOIEJPT0xFQU4gVHJhY2UsDQorICBJTiBVSU5UOCogIFB0ciwNCisgIElO IFVJTlQzMiAgQWNwaVRhYmxlTGVuZ3RoLA0KKyAgSU4gVUlOVDggICBBY3BpVGFibGVSZXZpc2lv bg0KKyAgKTsNCisNCisvKiogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIEFDUEkgRkFEVCB0YWJs ZS4NCisgIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBGQURUIHRhYmxlIGFuZCBvcHRpb25hbGx5 IHRyYWNlcyB0aGUgQUNQSQ0KKyAgdGFibGUgZmllbGRzLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBh bHNvIHBlcmZvcm1zIHZhbGlkYXRpb24gb2YgdGhlIEFDUEkgdGFibGUgZmllbGRzLg0KKw0KKyAg QHBhcmFtIFtpbl0gVHJhY2UgICAgICAgICAgICAgIElmIFRSVUUsIHRyYWNlIHRoZSBBQ1BJIGZp ZWxkcy4NCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBz dGFydCBvZiB0aGUgYnVmZmVyLg0KKyAgQHBhcmFtIFtpbl0gQWNwaVRhYmxlTGVuZ3RoICAgIExl bmd0aCBvZiB0aGUgQUNQSSB0YWJsZS4NCisgIEBwYXJhbSBbaW5dIEFjcGlUYWJsZVJldmlzaW9u ICBSZXZpc2lvbiBvZiB0aGUgQUNQSSB0YWJsZS4NCisqLw0KK1ZPSUQNCitFRklBUEkNCitQYXJz ZUFjcGlGYWR0ICgNCisgIElOIEJPT0xFQU4gVHJhY2UsDQorICBJTiBVSU5UOCogIFB0ciwNCisg IElOIFVJTlQzMiAgQWNwaVRhYmxlTGVuZ3RoLA0KKyAgSU4gVUlOVDggICBBY3BpVGFibGVSZXZp c2lvbg0KKyAgKTsNCisNCisvKiogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIEFDUEkgR1REVCB0 YWJsZS4NCisgIFdoZW4gdHJhY2UgaXMgZW5hYmxlZCB0aGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUg R1REVCB0YWJsZSBhbmQNCisgIHRyYWNlcyB0aGUgQUNQSSB0YWJsZSBmaWVsZHMuDQorDQorICBU aGlzIGZ1bmN0aW9uIGFsc28gcGFyc2VzIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm0gdGltZXIgc3Ry dWN0dXJlczoNCisgICAgLSBHVCBCbG9jayB0aW1lcg0KKyAgICAtIFdhdGNoZG9nIHRpbWVyDQor DQorICBUaGlzIGZ1bmN0aW9uIGFsc28gcGVyZm9ybXMgdmFsaWRhdGlvbiBvZiB0aGUgQUNQSSB0 YWJsZSBmaWVsZHMuDQorDQorICBAcGFyYW0gW2luXSBUcmFjZSAgICAgICAgICAgICAgSWYgVFJV RSwgdHJhY2UgdGhlIEFDUEkgZmllbGRzLg0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICAgICAgICAg ICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorICBAcGFyYW0gW2luXSBB Y3BpVGFibGVMZW5ndGggICAgTGVuZ3RoIG9mIHRoZSBBQ1BJIHRhYmxlLg0KKyAgQHBhcmFtIFtp bl0gQWNwaVRhYmxlUmV2aXNpb24gIFJldmlzaW9uIG9mIHRoZSBBQ1BJIHRhYmxlLg0KKyovDQor Vk9JRA0KK0VGSUFQSQ0KK1BhcnNlQWNwaUd0ZHQgKA0KKyAgSU4gQk9PTEVBTiBUcmFjZSwNCisg IElOIFVJTlQ4KiAgUHRyLA0KKyAgSU4gVUlOVDMyICBBY3BpVGFibGVMZW5ndGgsDQorICBJTiBV SU5UOCAgIEFjcGlUYWJsZVJldmlzaW9uDQorICApOw0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHBh cnNlcyB0aGUgQUNQSSBJT1JUIHRhYmxlLg0KKyAgV2hlbiB0cmFjZSBpcyBlbmFibGVkIHRoaXMg ZnVuY3Rpb24gcGFyc2VzIHRoZSBJT1JUIHRhYmxlIGFuZA0KKyAgdHJhY2VzIHRoZSBBQ1BJIGZp ZWxkcy4NCisNCisgIFRoaXMgZnVuY3Rpb24gYWxzbyBwYXJzZXMgdGhlIGZvbGxvd2luZyBub2Rl czoNCisgICAgLSBJVFMgR3JvdXANCisgICAgLSBOYW1lZCBDb21wb25lbnQNCisgICAgLSBSb290 IENvbXBsZXgNCisgICAgLSBTTU1VdjEvMg0KKyAgICAtIFNNTVV2Mw0KKyAgICAtIFBNQ0cNCisN CisgIFRoaXMgZnVuY3Rpb24gYWxzbyBwZXJmb3JtcyB2YWxpZGF0aW9uIG9mIHRoZSBBQ1BJIHRh YmxlIGZpZWxkcy4NCisNCisgIEBwYXJhbSBbaW5dIFRyYWNlICAgICAgICAgICAgICBJZiBUUlVF LCB0cmFjZSB0aGUgQUNQSSBmaWVsZHMuDQorICBAcGFyYW0gW2luXSBQdHIgICAgICAgICAgICAg ICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4NCisgIEBwYXJhbSBbaW5dIEFj cGlUYWJsZUxlbmd0aCAgICBMZW5ndGggb2YgdGhlIEFDUEkgdGFibGUuDQorICBAcGFyYW0gW2lu XSBBY3BpVGFibGVSZXZpc2lvbiAgUmV2aXNpb24gb2YgdGhlIEFDUEkgdGFibGUuDQorKi8NCitW T0lEDQorRUZJQVBJDQorUGFyc2VBY3BpSW9ydCAoDQorICBJTiBCT09MRUFOIFRyYWNlLA0KKyAg SU4gVUlOVDgqICBQdHIsDQorICBJTiBVSU5UMzIgIEFjcGlUYWJsZUxlbmd0aCwNCisgIElOIFVJ TlQ4ICAgQWNwaVRhYmxlUmV2aXNpb24NCisgICk7DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gcGFy c2VzIHRoZSBBQ1BJIE1BRFQgdGFibGUuDQorICBXaGVuIHRyYWNlIGlzIGVuYWJsZWQgdGhpcyBm dW5jdGlvbiBwYXJzZXMgdGhlIE1BRFQgdGFibGUgYW5kDQorICB0cmFjZXMgdGhlIEFDUEkgdGFi bGUgZmllbGRzLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBjdXJyZW50bHkgcGFyc2VzIHRoZSBmb2xs b3dpbmcgSW50ZXJydXB0IENvbnRyb2xsZXINCisgIFN0cnVjdHVyZXM6DQorICAgIC0gR0lDQw0K KyAgICAtIEdJQ0QNCisgICAgLSBHSUMgTVNJIEZyYW1lDQorICAgIC0gR0lDUg0KKyAgICAtIEdJ QyBJVFMNCisNCisgIFRoaXMgZnVuY3Rpb24gYWxzbyBwZXJmb3JtcyB2YWxpZGF0aW9uIG9mIHRo ZSBBQ1BJIHRhYmxlIGZpZWxkcy4NCisNCisgIEBwYXJhbSBbaW5dIFRyYWNlICAgICAgICAgICAg ICBJZiBUUlVFLCB0cmFjZSB0aGUgQUNQSSBmaWVsZHMuDQorICBAcGFyYW0gW2luXSBQdHIgICAg ICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4NCisgIEBwYXJh bSBbaW5dIEFjcGlUYWJsZUxlbmd0aCAgICBMZW5ndGggb2YgdGhlIEFDUEkgdGFibGUuDQorICBA cGFyYW0gW2luXSBBY3BpVGFibGVSZXZpc2lvbiAgUmV2aXNpb24gb2YgdGhlIEFDUEkgdGFibGUu DQorKi8NCitWT0lEDQorRUZJQVBJDQorUGFyc2VBY3BpTWFkdCAoDQorICBJTiBCT09MRUFOIFRy YWNlLA0KKyAgSU4gVUlOVDgqICBQdHIsDQorICBJTiBVSU5UMzIgIEFjcGlUYWJsZUxlbmd0aCwN CisgIElOIFVJTlQ4ICAgQWNwaVRhYmxlUmV2aXNpb24NCisgICk7DQorDQorLyoqIFRoaXMgZnVu Y3Rpb24gcGFyc2VzIHRoZSBBQ1BJIE1DRkcgdGFibGUuDQorICBXaGVuIHRyYWNlIGlzIGVuYWJs ZWQgdGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIE1DRkcgdGFibGUgYW5kDQorICB0cmFjZXMgdGhl IEFDUEkgdGFibGUgZmllbGRzLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBhbHNvIHBlcmZvcm1zIHZh bGlkYXRpb24gb2YgdGhlIEFDUEkgdGFibGUgZmllbGRzLg0KKw0KKyAgQHBhcmFtIFtpbl0gVHJh Y2UgICAgICAgICAgICAgIElmIFRSVUUsIHRyYWNlIHRoZSBBQ1BJIGZpZWxkcy4NCisgIEBwYXJh bSBbaW5dIFB0ciAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVm ZmVyLg0KKyAgQHBhcmFtIFtpbl0gQWNwaVRhYmxlTGVuZ3RoICAgIExlbmd0aCBvZiB0aGUgQUNQ SSB0YWJsZS4NCisgIEBwYXJhbSBbaW5dIEFjcGlUYWJsZVJldmlzaW9uICBSZXZpc2lvbiBvZiB0 aGUgQUNQSSB0YWJsZS4NCisqLw0KK1ZPSUQNCitFRklBUEkNCitQYXJzZUFjcGlNY2ZnICgNCisg IElOIEJPT0xFQU4gVHJhY2UsDQorICBJTiBVSU5UOCogIFB0ciwNCisgIElOIFVJTlQzMiAgQWNw aVRhYmxlTGVuZ3RoLA0KKyAgSU4gVUlOVDggICBBY3BpVGFibGVSZXZpc2lvbg0KKyAgKTsNCisN CisvKiogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIEFDUEkgUlNEUCB0YWJsZS4NCisNCisgIFRo aXMgZnVuY3Rpb24gaW52b2tlcyB0aGUgcGFyc2VyIGZvciB0aGUgWFNEVCB0YWJsZS4NCisgICog Tm90ZSAtIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBwYXJzaW5nIG9mIFJTRFQgdGFi bGUuDQorDQorICBUaGlzIGZ1bmN0aW9uIGFsc28gcGVyZm9ybXMgYSBSQVcgZHVtcCBvZiB0aGUg QUNQSSB0YWJsZSBhbmQNCisgIHZhbGlkYXRlcyB0aGUgY2hlY2tzdW0uDQorDQorICBAcGFyYW0g W2luXSBUcmFjZSAgICAgICAgICAgICAgSWYgVFJVRSwgdHJhY2UgdGhlIEFDUEkgZmllbGRzLg0K KyAgQHBhcmFtIFtpbl0gUHRyICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9m IHRoZSBidWZmZXIuDQorICBAcGFyYW0gW2luXSBBY3BpVGFibGVMZW5ndGggICAgTGVuZ3RoIG9m IHRoZSBBQ1BJIHRhYmxlLg0KKyAgQHBhcmFtIFtpbl0gQWNwaVRhYmxlUmV2aXNpb24gIFJldmlz aW9uIG9mIHRoZSBBQ1BJIHRhYmxlLg0KKyovDQorVk9JRA0KK0VGSUFQSQ0KK1BhcnNlQWNwaVJz ZHAgKA0KKyAgSU4gQk9PTEVBTiBUcmFjZSwNCisgIElOIFVJTlQ4KiAgUHRyLA0KKyAgSU4gVUlO VDMyICBBY3BpVGFibGVMZW5ndGgsDQorICBJTiBVSU5UOCAgIEFjcGlUYWJsZVJldmlzaW9uDQor ICApOw0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUgQUNQSSBTTElUIHRhYmxlLg0K KyAgV2hlbiB0cmFjZSBpcyBlbmFibGVkIHRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBTTElUIHRh YmxlIGFuZA0KKyAgdHJhY2VzIHRoZSBBQ1BJIHRhYmxlIGZpZWxkcy4NCisNCisgIFRoaXMgZnVu Y3Rpb24gYWxzbyB2YWxpZGF0ZXMgU3lzdGVtIExvY2FsaXRpZXMgZm9yIHRoZSBmb2xsb3dpbmc6 DQorICAgIC0gRGlhZ29uYWwgZWxlbWVudHMgaGF2ZSBhIG5vcm1hbGl6ZWQgdmFsdWUgb2YgMTAN CisgICAgLSBSZWxhdGl2ZSBkaXN0YW5jZSBmcm9tIFN5c3RlbSBMb2NhbGl0eSBhdCBpKk4raiBp cyBzYW1lIGFzDQorICAgICAgaipOK2kNCisNCisgIEBwYXJhbSBbaW5dIFRyYWNlICAgICAgICAg ICAgICBJZiBUUlVFLCB0cmFjZSB0aGUgQUNQSSBmaWVsZHMuDQorICBAcGFyYW0gW2luXSBQdHIg ICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4NCisgIEBw YXJhbSBbaW5dIEFjcGlUYWJsZUxlbmd0aCAgICBMZW5ndGggb2YgdGhlIEFDUEkgdGFibGUuDQor ICBAcGFyYW0gW2luXSBBY3BpVGFibGVSZXZpc2lvbiAgUmV2aXNpb24gb2YgdGhlIEFDUEkgdGFi bGUuDQorKi8NCitWT0lEDQorRUZJQVBJDQorUGFyc2VBY3BpU2xpdCAoDQorICBJTiBCT09MRUFO IFRyYWNlLA0KKyAgSU4gVUlOVDgqICBQdHIsDQorICBJTiBVSU5UMzIgIEFjcGlUYWJsZUxlbmd0 aCwNCisgIElOIFVJTlQ4ICAgQWNwaVRhYmxlUmV2aXNpb24NCisgICk7DQorDQorLyoqIFRoaXMg ZnVuY3Rpb24gcGFyc2VzIHRoZSBBQ1BJIFNQQ1IgdGFibGUuDQorICBXaGVuIHRyYWNlIGlzIGVu YWJsZWQgdGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIFNQQ1IgdGFibGUgYW5kDQorICB0cmFjZXMg dGhlIEFDUEkgdGFibGUgZmllbGRzLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBhbHNvIHBlcmZvcm1z IHZhbGlkYXRpb25zIG9mIHRoZSBBQ1BJIHRhYmxlIGZpZWxkcy4NCisNCisgIEBwYXJhbSBbaW5d IFRyYWNlICAgICAgICAgICAgICBJZiBUUlVFLCB0cmFjZSB0aGUgQUNQSSBmaWVsZHMuDQorICBA cGFyYW0gW2luXSBQdHIgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhl IGJ1ZmZlci4NCisgIEBwYXJhbSBbaW5dIEFjcGlUYWJsZUxlbmd0aCAgICBMZW5ndGggb2YgdGhl IEFDUEkgdGFibGUuDQorICBAcGFyYW0gW2luXSBBY3BpVGFibGVSZXZpc2lvbiAgUmV2aXNpb24g b2YgdGhlIEFDUEkgdGFibGUuDQorKi8NCitWT0lEDQorRUZJQVBJDQorUGFyc2VBY3BpU3BjciAo DQorICBJTiBCT09MRUFOIFRyYWNlLA0KKyAgSU4gVUlOVDgqICBQdHIsDQorICBJTiBVSU5UMzIg IEFjcGlUYWJsZUxlbmd0aCwNCisgIElOIFVJTlQ4ICAgQWNwaVRhYmxlUmV2aXNpb24NCisgICk7 DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBBQ1BJIFNSQVQgdGFibGUuDQorICBX aGVuIHRyYWNlIGlzIGVuYWJsZWQgdGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIFNSQVQgdGFibGUg YW5kDQorICB0cmFjZXMgdGhlIEFDUEkgdGFibGUgZmllbGRzLg0KKw0KKyAgVGhpcyBmdW5jdGlv biBwYXJzZXMgdGhlIGZvbGxvd2luZyBSZXNvdXJjZSBBbGxvY2F0aW9uIFN0cnVjdHVyZXM6DQor ICAgIC0gUHJvY2Vzc29yIExvY2FsIEFQSUMvU0FQSUMgQWZmaW5pdHkgU3RydWN0dXJlDQorICAg IC0gTWVtb3J5IEFmZmluaXR5IFN0cnVjdHVyZQ0KKyAgICAtIFByb2Nlc3NvciBMb2NhbCB4MkFQ SUMgQWZmaW5pdHkgU3RydWN0dXJlDQorICAgIC0gR0lDQyBBZmZpbml0eSBTdHJ1Y3R1cmUNCisN CisgIFRoaXMgZnVuY3Rpb24gYWxzbyBwZXJmb3JtcyB2YWxpZGF0aW9uIG9mIHRoZSBBQ1BJIHRh YmxlIGZpZWxkcy4NCisNCisgIEBwYXJhbSBbaW5dIFRyYWNlICAgICAgICAgICAgICBJZiBUUlVF LCB0cmFjZSB0aGUgQUNQSSBmaWVsZHMuDQorICBAcGFyYW0gW2luXSBQdHIgICAgICAgICAgICAg ICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4NCisgIEBwYXJhbSBbaW5dIEFj cGlUYWJsZUxlbmd0aCAgICBMZW5ndGggb2YgdGhlIEFDUEkgdGFibGUuDQorICBAcGFyYW0gW2lu XSBBY3BpVGFibGVSZXZpc2lvbiAgUmV2aXNpb24gb2YgdGhlIEFDUEkgdGFibGUuDQorKi8NCitW T0lEDQorRUZJQVBJDQorUGFyc2VBY3BpU3JhdCAoDQorICBJTiBCT09MRUFOIFRyYWNlLA0KKyAg SU4gVUlOVDgqICBQdHIsDQorICBJTiBVSU5UMzIgIEFjcGlUYWJsZUxlbmd0aCwNCisgIElOIFVJ TlQ4ICAgQWNwaVRhYmxlUmV2aXNpb24NCisgICk7DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gcGFy c2VzIHRoZSBBQ1BJIFNTRFQgdGFibGUuDQorICBXaGVuIHRyYWNlIGlzIGVuYWJsZWQgdGhpcyBm dW5jdGlvbiBwYXJzZXMgdGhlIFNTRFQgdGFibGUgYW5kDQorICB0cmFjZXMgdGhlIEFDUEkgdGFi bGUgZmllbGRzLg0KKyAgRm9yIHRoZSBTU0RUIHRhYmxlIG9ubHkgdGhlIEFDUEkgaGVhZGVyIGZp ZWxkcyBhcmUNCisgIHBhcnNlZCBhbmQgdHJhY2VkLg0KKw0KKyAgQHBhcmFtIFtpbl0gVHJhY2Ug ICAgICAgICAgICAgIElmIFRSVUUsIHRyYWNlIHRoZSBBQ1BJIGZpZWxkcy4NCisgIEBwYXJhbSBb aW5dIFB0ciAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVy Lg0KKyAgQHBhcmFtIFtpbl0gQWNwaVRhYmxlTGVuZ3RoICAgIExlbmd0aCBvZiB0aGUgQUNQSSB0 YWJsZS4NCisgIEBwYXJhbSBbaW5dIEFjcGlUYWJsZVJldmlzaW9uICBSZXZpc2lvbiBvZiB0aGUg QUNQSSB0YWJsZS4NCisqLw0KK1ZPSUQNCitFRklBUEkNCitQYXJzZUFjcGlTc2R0ICgNCisgIElO IEJPT0xFQU4gVHJhY2UsDQorICBJTiBVSU5UOCogIFB0ciwNCisgIElOIFVJTlQzMiAgQWNwaVRh YmxlTGVuZ3RoLA0KKyAgSU4gVUlOVDggICBBY3BpVGFibGVSZXZpc2lvbg0KKyAgKTsNCisNCisv KiogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIEFDUEkgWFNEVCB0YWJsZQ0KKyAgYW5kIG9wdGlv bmFsbHkgdHJhY2VzIHRoZSBBQ1BJIHRhYmxlIGZpZWxkcy4NCisNCisgIFRoaXMgZnVuY3Rpb24g YWxzbyBwZXJmb3JtcyB2YWxpZGF0aW9uIG9mIHRoZSBYU0RUIHRhYmxlLg0KKw0KKyAgQHBhcmFt IFtpbl0gVHJhY2UgICAgICAgICAgICAgIElmIFRSVUUsIHRyYWNlIHRoZSBBQ1BJIGZpZWxkcy4N CisgIEBwYXJhbSBbaW5dIFB0ciAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBv ZiB0aGUgYnVmZmVyLg0KKyAgQHBhcmFtIFtpbl0gQWNwaVRhYmxlTGVuZ3RoICAgIExlbmd0aCBv ZiB0aGUgQUNQSSB0YWJsZS4NCisgIEBwYXJhbSBbaW5dIEFjcGlUYWJsZVJldmlzaW9uICBSZXZp c2lvbiBvZiB0aGUgQUNQSSB0YWJsZS4NCisqLw0KK1ZPSUQNCitFRklBUEkNCitQYXJzZUFjcGlY c2R0ICgNCisgIElOIEJPT0xFQU4gVHJhY2UsDQorICBJTiBVSU5UOCogIFB0ciwNCisgIElOIFVJ TlQzMiAgQWNwaVRhYmxlTGVuZ3RoLA0KKyAgSU4gVUlOVDggICBBY3BpVGFibGVSZXZpc2lvbg0K KyAgKTsNCisNCisjZW5kaWYgLy8gQUNQSVBBUlNFUl9IXw0KZGlmZiAtLWdpdCBhL1NoZWxsUGtn L0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL0FjcGlUYWJsZVBhcnNlci5jIGIv U2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvQWNwaVRhYmxlUGFy c2VyLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi4xNGE4YjE0NDExNDNkMWUzNWZiNTk0ZjVmMWEyMDQ4MWNiYTFl ZjIwDQotLS0gL2Rldi9udWxsDQorKysgYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlW aWV3Q29tbWFuZExpYi9BY3BpVGFibGVQYXJzZXIuYw0KQEAgLTAsMCArMSwyMTUgQEANCisvKioN CisgIEFDUEkgdGFibGUgcGFyc2VyDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMTYgLSAyMDE4LCBB Uk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgIFRoaXMgcHJvZ3JhbSBhbmQgdGhl IGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFi bGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KKyAg d2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRo ZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vu c2VzL2JzZC1saWNlbnNlLnBocA0KKw0KKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5E RVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorICBXSVRIT1VUIFdBUlJB TlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJ TVBMSUVELg0KKyoqLw0KKw0KKyNpbmNsdWRlIDxVZWZpLmg+DQorI2luY2x1ZGUgPEluZHVzdHJ5 U3RhbmRhcmQvQWNwaS5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCisjaW5jbHVk ZSAiQWNwaVBhcnNlci5oIg0KKyNpbmNsdWRlICJBY3BpVGFibGVQYXJzZXIuaCINCisjaW5jbHVk ZSAiQWNwaVZpZXcuaCINCisNCisvKiogQSBsaXN0IG9mIHJlZ2lzdGVyZWQgQUNQSSB0YWJsZSBw YXJzZXJzLg0KKyovDQorU1RBVElDIEFDUElfVEFCTEVfUEFSU0VSIG1UYWJsZVBhcnNlckxpc3Rb TUFYX0FDUElfVEFCTEVfUEFSU0VSU107DQorDQorLyoqIFJlZ2lzdGVyIHRoZSBBQ1BJIHRhYmxl IFBhcnNlcg0KKw0KKyAgVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgdGhlIEFDUEkgdGFibGUgcGFy c2VyLg0KKw0KKyAgQHBhcmFtIFtpbl0gU2lnbmF0dXJlICAgVGhlIEFDUEkgdGFibGUgc2lnbmF0 dXJlLg0KKyAgQHBhcmFtIFtpbl0gUGFyc2VyUHJvYyAgVGhlIEFDUEkgdGFibGUgcGFyc2VyLg0K Kw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHBhcnNlciBpcyByZWdpc3Rl cmVkLg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQSBwYXJhbWV0ZXIgaXMgaW52 YWxpZC4NCisgIEByZXR2YWwgRUZJX0FMUkVBRFlfU1RBUlRFRCAgIFRoZSBwYXJzZXIgZm9yIHRo ZSBUYWJsZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIGFscmVhZHkgcmVn aXN0ZXJlZC4NCisgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIE5vIHNwYWNlIHRvIHJl Z2lzdGVyIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLg0KKyov DQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1JlZ2lzdGVyUGFyc2VyICgNCisgIElOICBVSU5UMzIg ICAgICAgICAgICAgICAgICBTaWduYXR1cmUsDQorICBJTiAgUEFSU0VfQUNQSV9UQUJMRV9QUk9D ICAgUGFyc2VyUHJvYw0KKyAgKQ0KK3sNCisgIFVJTlQzMiBpbmRleDsNCisNCisgIGlmICgoUGFy c2VyUHJvYyA9PSBOVUxMKSB8fCAoU2lnbmF0dXJlID09IEFDUElfUEFSU0VSX1NJR05BVFVSRV9O VUxMKSkgew0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgfQ0KKw0KKyAg Ly8gU2VhcmNoIGlmIGEgcGFyc2VyIGlzIGFscmVhZHkgaW5zdGFsbGVkDQorICBmb3IgKGluZGV4 ID0gMDsNCisgICAgICAgaW5kZXggPCAoc2l6ZW9mIChtVGFibGVQYXJzZXJMaXN0KSAvIHNpemVv ZiAobVRhYmxlUGFyc2VyTGlzdFswXSkpOw0KKyAgICAgICBpbmRleCsrKQ0KKyAgew0KKyAgICBp ZiAoU2lnbmF0dXJlID09IG1UYWJsZVBhcnNlckxpc3RbaW5kZXhdLlNpZ25hdHVyZSkgew0KKyAg ICAgIGlmIChtVGFibGVQYXJzZXJMaXN0W2luZGV4XS5QYXJzZXIgIT0gTlVMTCkgew0KKyAgICAg ICAgcmV0dXJuIEVGSV9BTFJFQURZX1NUQVJURUQ7DQorICAgICAgfQ0KKyAgICB9DQorICB9DQor DQorICAvLyBGaW5kIHRoZSBmaXJzdCBmcmVlIHNsb3QgYW5kIHJlZ2lzdGVyIHRoZSBwYXJzZXIN CisgIGZvciAoaW5kZXggPSAwOw0KKyAgICAgIGluZGV4IDwgKHNpemVvZiAobVRhYmxlUGFyc2Vy TGlzdCkgLyBzaXplb2YgKG1UYWJsZVBhcnNlckxpc3RbMF0pKTsNCisgICAgICBpbmRleCsrKQ0K KyAgew0KKyAgICBpZiAobVRhYmxlUGFyc2VyTGlzdFtpbmRleF0uU2lnbmF0dXJlID09IEFDUElf UEFSU0VSX1NJR05BVFVSRV9OVUxMKSB7DQorICAgICAgbVRhYmxlUGFyc2VyTGlzdFtpbmRleF0u U2lnbmF0dXJlID0gU2lnbmF0dXJlOw0KKyAgICAgIG1UYWJsZVBhcnNlckxpc3RbaW5kZXhdLlBh cnNlciA9IFBhcnNlclByb2M7DQorICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KKyAgICB9DQor ICB9DQorDQorICAvLyBObyBmcmVlIHNsb3QgZm91bmQNCisgIHJldHVybiBFRklfT1VUX09GX1JF U09VUkNFUzsNCit9DQorDQorLyoqIERlcmVnaXN0ZXIgdGhlIEFDUEkgdGFibGUgUGFyc2VyDQor DQorICBUaGlzIGZ1bmN0aW9uIGRlcmVnaXN0ZXJzIHRoZSBBQ1BJIHRhYmxlIHBhcnNlci4NCisN CisgIEBwYXJhbSBbaW5dIFNpZ25hdHVyZSAgIFRoZSBBQ1BJIHRhYmxlIHNpZ25hdHVyZS4NCisN CisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBwYXJzZXIgd2FzIGRlcmVnaXN0 ZXJlZC4NCisgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEEgcGFyYW1ldGVyIGlzIGlu dmFsaWQuDQorICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBBIHJlZ2lzdGVyZWQgcGFy c2VyIHdhcyBub3QgZm91bmQuDQorKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorRGVyZWdpc3Rl clBhcnNlciAoDQorICBJTiAgVUlOVDMyICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlDQorICAp DQorew0KKyAgVUlOVDMyIGluZGV4Ow0KKw0KKyAgaWYgKFNpZ25hdHVyZSA9PSBBQ1BJX1BBUlNF Ul9TSUdOQVRVUkVfTlVMTCkgew0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K KyAgfQ0KKw0KKyAgZm9yIChpbmRleCA9IDA7DQorICAgICAgIGluZGV4IDwgKHNpemVvZiAobVRh YmxlUGFyc2VyTGlzdCkgLyBzaXplb2YgKG1UYWJsZVBhcnNlckxpc3RbMF0pKTsNCisgICAgICAg aW5kZXgrKykNCisgIHsNCisgICAgaWYgKFNpZ25hdHVyZSA9PSBtVGFibGVQYXJzZXJMaXN0W2lu ZGV4XS5TaWduYXR1cmUpIHsNCisgICAgICBtVGFibGVQYXJzZXJMaXN0W2luZGV4XS5TaWduYXR1 cmUgPSBBQ1BJX1BBUlNFUl9TSUdOQVRVUkVfTlVMTDsNCisgICAgICBtVGFibGVQYXJzZXJMaXN0 W2luZGV4XS5QYXJzZXIgPSBOVUxMOw0KKyAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCisgICAg fQ0KKyAgfQ0KKw0KKyAgLy8gTm8gbWF0Y2hpbmcgcmVnaXN0ZXJlZCBwYXJzZXIgZm91bmQuDQor ICByZXR1cm4gRUZJX05PVF9GT1VORDsNCit9DQorDQorLyoqIEdldCB0aGUgQUNQSSB0YWJsZSBQ YXJzZXINCisNCisgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgQUNQSSB0YWJsZSBwYXJzZXIg cHJvYyBmcm9tIHRoZSBsaXN0IG9mDQorICByZWdpc3RlcmVkIHBhcnNlcnMuDQorDQorICBAcGFy YW0gW2luXSAgU2lnbmF0dXJlICAgVGhlIEFDUEkgdGFibGUgc2lnbmF0dXJlLg0KKyAgQHBhcmFt IFtvdXRdIFBhcnNlclByb2MgIFBvaW50ZXIgdG8gYSBBQ1BJIHRhYmxlIHBhcnNlciBwcm9jLg0K Kw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHBhcnNlciB3YXMgcmV0dXJu ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQSBwYXJh bWV0ZXIgaXMgaW52YWxpZC4NCisgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIEEgcmVn aXN0ZXJlZCBwYXJzZXIgd2FzIG5vdCBmb3VuZC4NCisqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkN CitHZXRQYXJzZXIgKA0KKyAgSU4gIFVJTlQzMiAgICAgICAgICAgICAgICAgICBTaWduYXR1cmUs DQorICBPVVQgUEFSU0VfQUNQSV9UQUJMRV9QUk9DICogIFBhcnNlclByb2MNCisgICkNCit7DQor ICBVSU5UMzIgaW5kZXg7DQorDQorICBpZiAoKFBhcnNlclByb2MgPT0gTlVMTCkgfHwgKFNpZ25h dHVyZSA9PSBBQ1BJX1BBUlNFUl9TSUdOQVRVUkVfTlVMTCkpIHsNCisgICAgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisNCisgIGZvciAoaW5kZXggPSAwOw0KKyAgICAgICBp bmRleCA8IChzaXplb2YgKG1UYWJsZVBhcnNlckxpc3QpIC8gc2l6ZW9mIChtVGFibGVQYXJzZXJM aXN0WzBdKSk7DQorICAgICAgIGluZGV4KyspDQorICB7DQorICAgIGlmIChTaWduYXR1cmUgPT0g bVRhYmxlUGFyc2VyTGlzdFtpbmRleF0uU2lnbmF0dXJlKSB7DQorICAgICAgKlBhcnNlclByb2Mg PSBtVGFibGVQYXJzZXJMaXN0W2luZGV4XS5QYXJzZXI7DQorICAgICAgcmV0dXJuIEVGSV9TVUND RVNTOw0KKyAgICB9DQorICB9DQorDQorICAvLyBObyBtYXRjaGluZyByZWdpc3RlcmVkIHBhcnNl ciBmb3VuZC4NCisgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KK30NCisNCisvKiogVGhpcyBmdW5j dGlvbiBwcm9jZXNzZXMgdGhlIEFDUEkgdGFibGVzLg0KKyAgVGhpcyBmdW5jdGlvbiBjYWxscyBQ cm9jZXNzVGFibGVSZXBvcnRPcHRpb25zKCkgdG8gbGlzdCB0aGUgQUNQSQ0KKyAgdGFibGVzLCBw ZXJmb3JtIGJpbmFyeSBkdW1wIG9mIHRoZSB0YWJsZXMgYW5kIGRldGVybWluZSBpZiB0aGUNCisg IEFDUEkgZmllbGRzIHNob3VsZCBiZSB0cmFjZWQuDQorDQorICBUaGlzIGZ1bmN0aW9uIGFsc28g aW52b2tlcyB0aGUgcGFyc2VyIGZvciB0aGUgQUNQSSB0YWJsZXMuDQorDQorICBUaGlzIGZ1bmN0 aW9uIGFsc28gcGVyZm9ybXMgYSBSQVcgZHVtcCBvZiB0aGUgQUNQSSB0YWJsZSBpbmNsdWRpbmcN CisgIHRoZSB1bmtub3duL3VucGFyc2VkIEFDUEkgdGFibGVzIGFuZCB2YWxpZGF0ZXMgdGhlIGNo ZWNrc3VtLg0KKw0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8g dGhlIHN0YXJ0IG9mIHRoZSBBQ1BJDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGFibGUgZGF0YSBidWZmZXIuDQorKi8NCitWT0lEDQorRUZJQVBJDQorUHJvY2Vzc0FjcGlUYWJs ZSAoDQorICBJTiBVSU5UOCogUHRyDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICBTdGF0dXM7 DQorICBCT09MRUFOICAgICAgIFRyYWNlOw0KKyAgQ09OU1QgVUlOVDMyKiBBY3BpVGFibGVTaWdu YXR1cmU7DQorICBDT05TVCBVSU5UMzIqIEFjcGlUYWJsZUxlbmd0aDsNCisgIENPTlNUIFVJTlQ4 KiAgQWNwaVRhYmxlUmV2aXNpb247DQorICBQQVJTRV9BQ1BJX1RBQkxFX1BST0MgUGFyc2VyUHJv YzsNCisNCisgIFBhcnNlQWNwaUhlYWRlciAoDQorICAgIFB0ciwNCisgICAgJkFjcGlUYWJsZVNp Z25hdHVyZSwNCisgICAgJkFjcGlUYWJsZUxlbmd0aCwNCisgICAgJkFjcGlUYWJsZVJldmlzaW9u DQorICAgICk7DQorDQorICBUcmFjZSA9IFByb2Nlc3NUYWJsZVJlcG9ydE9wdGlvbnMgKA0KKyAg ICAgICAgICAgICpBY3BpVGFibGVTaWduYXR1cmUsDQorICAgICAgICAgICAgUHRyLA0KKyAgICAg ICAgICAgICpBY3BpVGFibGVMZW5ndGgNCisgICAgICAgICAgICApOw0KKw0KKyAgaWYgKFRyYWNl KSB7DQorICAgIER1bXBSYXcgKFB0ciwgKkFjcGlUYWJsZUxlbmd0aCk7DQorICAgIFZlcmlmeUNo ZWNrc3VtIChUUlVFLCBQdHIsICpBY3BpVGFibGVMZW5ndGgpOw0KKyAgfQ0KKw0KKyAgU3RhdHVz ID0gR2V0UGFyc2VyICgqQWNwaVRhYmxlU2lnbmF0dXJlLCAmUGFyc2VyUHJvYyk7DQorICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIC8vIE5vIHJlZ2lzdGVyZWQgcGFyc2VyIGZvdW5k LCBkbyBkZWZhdWx0IGhhbmRsaW5nLg0KKyAgICBpZiAoVHJhY2UpIHsNCisgICAgICBEdW1wQWNw aUhlYWRlciAoUHRyKTsNCisgICAgfQ0KKyAgICByZXR1cm47DQorICB9DQorDQorICBQYXJzZXJQ cm9jICgNCisgICAgVHJhY2UsDQorICAgIFB0ciwNCisgICAgKkFjcGlUYWJsZUxlbmd0aCwNCisg ICAgKkFjcGlUYWJsZVJldmlzaW9uDQorICAgICk7DQorfQ0KZGlmZiAtLWdpdCBhL1NoZWxsUGtn L0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL0FjcGlUYWJsZVBhcnNlci5oIGIv U2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvQWNwaVRhYmxlUGFy c2VyLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi5hNjlkNTZkYTZjZjcyOGJiOThkZjI2NWRlM2FlMDMwZDg1MTIw NDk0DQotLS0gL2Rldi9udWxsDQorKysgYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlW aWV3Q29tbWFuZExpYi9BY3BpVGFibGVQYXJzZXIuaA0KQEAgLTAsMCArMSwxMjYgQEANCisvKioN CisgIEhlYWRlciBmaWxlIGZvciBBQ1BJIHRhYmxlIHBhcnNlcg0KKw0KKyAgQ29weXJpZ2h0IChj KSAyMDE2IC0gMjAxOCwgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICBUaGlz IHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICBhcmUgbGljZW5zZWQg YW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUg QlNEIExpY2Vuc2UNCisgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhl IGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCisgIGh0dHA6Ly9vcGVu c291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCisNCisgIFRIRSBQUk9HUkFNIElT IERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0K KyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlU SEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCisqKi8NCisNCisjaWZuZGVmIEFDUElUQUJMRVBBUlNF Ul9IXw0KKyNkZWZpbmUgQUNQSVRBQkxFUEFSU0VSX0hfDQorDQorLyoqIFRoZSBtYXhpbXVtIG51 bWJlciBvZiBBQ1BJIHRhYmxlIHBhcnNlcnMuDQorKi8NCisjZGVmaW5lIE1BWF9BQ1BJX1RBQkxF X1BBUlNFUlMgICAgICAgICAgMTYNCisNCisvKiogQW4gaW52YWxpZC9OVUxMIHNpZ25hdHVyZSB2 YWx1ZS4NCisqLw0KKyNkZWZpbmUgQUNQSV9QQVJTRVJfU0lHTkFUVVJFX05VTEwgICAgICAwDQor DQorLyoqIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgdGhlIEFDUEkgdGFibGUuDQorDQorICBAcGFy YW0gW2luXSBUcmFjZSAgICAgICAgICAgICAgSWYgVFJVRSwgdHJhY2UgdGhlIEFDUEkgZmllbGRz Lg0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0 IG9mIHRoZSBidWZmZXIuDQorICBAcGFyYW0gW2luXSBBY3BpVGFibGVMZW5ndGggICAgTGVuZ3Ro IG9mIHRoZSBBQ1BJIHRhYmxlLg0KKyAgQHBhcmFtIFtpbl0gQWNwaVRhYmxlUmV2aXNpb24gIFJl dmlzaW9uIG9mIHRoZSBBQ1BJIHRhYmxlLg0KKyovDQordHlwZWRlZg0KK1ZPSUQNCisoRUZJQVBJ ICogUEFSU0VfQUNQSV9UQUJMRV9QUk9DKSAoDQorICBJTiBCT09MRUFOIFRyYWNlLA0KKyAgSU4g VUlOVDgqICBQdHIsDQorICBJTiBVSU5UMzIgIEFjcGlUYWJsZUxlbmd0aCwNCisgIElOIFVJTlQ4 ICAgQWNwaVRhYmxlUmV2aXNpb24NCisgICk7DQorDQorLyoqIFRoZSBBQ1BJIHRhYmxlIHBhcnNl ciBpbmZvcm1hdGlvbg0KKyovDQordHlwZWRlZiBzdHJ1Y3QgQWNwaVRhYmxlUGFyc2VyIHsNCisg IC8vLyBBQ1BJIHRhYmxlIHNpZ25hdHVyZQ0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgU2ln bmF0dXJlOw0KKw0KKyAgLy8vIFRoZSBBQ1BJIHRhYmxlIHBhcnNlciBmdW5jdGlvbi4NCisgIFBB UlNFX0FDUElfVEFCTEVfUFJPQyAgIFBhcnNlcjsNCit9IEFDUElfVEFCTEVfUEFSU0VSOw0KKw0K Ky8qKiBSZWdpc3RlciB0aGUgQUNQSSB0YWJsZSBQYXJzZXINCisNCisgIFRoaXMgZnVuY3Rpb24g cmVnaXN0ZXJzIHRoZSBBQ1BJIHRhYmxlIHBhcnNlci4NCisNCisgIEBwYXJhbSBbaW5dIFNpZ25h dHVyZSAgIFRoZSBBQ1BJIHRhYmxlIHNpZ25hdHVyZS4NCisgIEBwYXJhbSBbaW5dIFBhcnNlclBy b2MgIFRoZSBBQ1BJIHRhYmxlIHBhcnNlci4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSBwYXJzZXIgaXMgcmVnaXN0ZXJlZC4NCisgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSIEEgcGFyYW1ldGVyIGlzIGludmFsaWQuDQorICBAcmV0dmFsIEVGSV9BTFJFQURZ X1NUQVJURUQgICBUaGUgcGFyc2VyIGZvciB0aGUgVGFibGUNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHdhcyBhbHJlYWR5IHJlZ2lzdGVyZWQuDQorICBAcmV0dmFsIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTICBObyBzcGFjZSB0byByZWdpc3RlciB0aGUNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBhcnNlci4NCisqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitSZWdp c3RlclBhcnNlciAoDQorICBJTiAgVUlOVDMyICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlLA0K KyAgSU4gIFBBUlNFX0FDUElfVEFCTEVfUFJPQyAgIFBhcnNlclByb2MNCispOw0KKw0KKy8qKiBE ZXJlZ2lzdGVyIHRoZSBBQ1BJIHRhYmxlIFBhcnNlcg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBkZXJl Z2lzdGVycyB0aGUgQUNQSSB0YWJsZSBwYXJzZXIuDQorDQorICBAcGFyYW0gW2luXSBTaWduYXR1 cmUgICBUaGUgQUNQSSB0YWJsZSBzaWduYXR1cmUuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgcGFyc2VyIHdhcyBkZXJlZ2lzdGVyZWQuDQorICBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiBBIHBhcmFtZXRlciBpcyBpbnZhbGlkLg0KKyAgQHJldHZhbCBFRklf Tk9UX0ZPVU5EICAgICAgICAgQSByZWdpc3RlcmVkIHBhcnNlciB3YXMgbm90IGZvdW5kLg0KKyov DQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0RlcmVnaXN0ZXJQYXJzZXIgKA0KKyAgSU4gIFVJTlQz MiAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZQ0KKyk7DQorDQorLyoqIFRoaXMgZnVuY3Rpb24g cHJvY2Vzc2VzIHRoZSBBQ1BJIHRhYmxlcy4NCisgIFRoaXMgZnVuY3Rpb24gY2FsbHMgUHJvY2Vz c1RhYmxlUmVwb3J0T3B0aW9ucygpIHRvIGxpc3QgdGhlIEFDUEkNCisgIHRhYmxlcywgcGVyZm9y bSBiaW5hcnkgZHVtcCBvZiB0aGUgdGFibGVzIGFuZCBkZXRlcm1pbmUgaWYgdGhlDQorICBBQ1BJ IGZpZWxkcyBzaG91bGQgYmUgdHJhY2VkLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBhbHNvIGludm9r ZXMgdGhlIHBhcnNlciBmb3IgdGhlIEFDUEkgdGFibGVzLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBh bHNvIHBlcmZvcm1zIGEgUkFXIGR1bXAgb2YgdGhlIEFDUEkgdGFibGUgaW5jbHVkaW5nDQorICB0 aGUgdW5rbm93bi91bnBhcnNlZCBBQ1BJIHRhYmxlcyBhbmQgdmFsaWRhdGVzIHRoZSBjaGVja3N1 bS4NCisNCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBz dGFydCBvZiB0aGUgQUNQSQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxl IGRhdGEgYnVmZmVyLg0KKyovDQorVk9JRA0KK0VGSUFQSQ0KK1Byb2Nlc3NBY3BpVGFibGUgKA0K KyAgSU4gVUlOVDgqIFB0cg0KKyAgKTsNCisNCisvKiogR2V0IHRoZSBBQ1BJIHRhYmxlIFBhcnNl cg0KKw0KKyAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBBQ1BJIHRhYmxlIHBhcnNlciBwcm9j IGZyb20gdGhlIGxpc3Qgb2YNCisgIHJlZ2lzdGVyZWQgcGFyc2Vycy4NCisNCisgIEBwYXJhbSBb aW5dICBTaWduYXR1cmUgICBUaGUgQUNQSSB0YWJsZSBzaWduYXR1cmUuDQorICBAcGFyYW0gW291 dF0gUGFyc2VyUHJvYyAgUG9pbnRlciB0byBhIEFDUEkgdGFibGUgcGFyc2VyIHByb2MuDQorDQor ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcGFyc2VyIHdhcyByZXR1cm5lZCBz dWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBBIHBhcmFtZXRl ciBpcyBpbnZhbGlkLg0KKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgQSByZWdpc3Rl cmVkIHBhcnNlciB3YXMgbm90IGZvdW5kLg0KKyovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0dl dFBhcnNlciAoDQorICBJTiAgVUlOVDMyICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZSwNCisg IE9VVCBQQVJTRV9BQ1BJX1RBQkxFX1BST0MgKiAgUGFyc2VyUHJvYw0KKyAgKTsNCisNCisjZW5k aWYgLy8gQUNQSVRBQkxFUEFSU0VSX0hfDQpkaWZmIC0tZ2l0IGEvU2hlbGxQa2cvTGlicmFyeS9V ZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvQWNwaVZpZXcuYyBiL1NoZWxsUGtnL0xpYnJhcnkv VWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL0FjcGlWaWV3LmMNCm5ldyBmaWxlIG1vZGUgMTAw NjQ0DQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmIx NDI1MzhjMDA5OWRjZGQyZGZhM2QyMDhkMzM1MGM0MjVhY2NiDQotLS0gL2Rldi9udWxsDQorKysg Yi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9BY3BpVmlldy5j DQpAQCAtMCwwICsxLDYwMSBAQA0KKy8qKg0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDE2IC0gMjAx OCwgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICBUaGlzIHByb2dyYW0gYW5k IHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZh aWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UN CisgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBv ZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCisgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9s aWNlbnNlcy9ic2QtbGljZW5zZS5waHANCisNCisgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVE IFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KKyAgV0lUSE9VVCBX QVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1Mg T1IgSU1QTElFRC4NCisqKi8NCisNCisjaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5oPg0KKyNp bmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9TaGVsbExpYi5o Pg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KKyNpbmNs dWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xp Yi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCisjaW5jbHVk ZSAiQWNwaVBhcnNlci5oIg0KKyNpbmNsdWRlICJBY3BpVGFibGVQYXJzZXIuaCINCisjaW5jbHVk ZSAiQWNwaVZpZXcuaCINCisjaW5jbHVkZSAiVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliLmgi DQorDQorRUZJX0hJSV9IQU5ETEUgZ1NoZWxsQWNwaVZpZXdIaWlIYW5kbGUgPSBOVUxMOw0KKw0K Ky8vIFJlcG9ydCB2YXJpYWJsZXMNCitTVEFUSUMgVUlOVDMyICAgICAgICAgICAgIG1TZWxlY3Rl ZEFjcGlUYWJsZTsNCitTVEFUSUMgQ09OU1QgQ0hBUjE2KiAgICAgIG1TZWxlY3RlZEFjcGlUYWJs ZU5hbWU7DQorU1RBVElDIEJPT0xFQU4gICAgICAgICAgICBtU2VsZWN0ZWRBY3BpVGFibGVGb3Vu ZDsNCitTVEFUSUMgRVJFUE9SVF9PUFRJT04gICAgIG1SZXBvcnRUeXBlOw0KK1NUQVRJQyBVSU5U MzIgICAgICAgICAgICAgbVRhYmxlQ291bnQ7DQorU1RBVElDIFVJTlQzMiAgICAgICAgICAgICBt QmluVGFibGVDb3VudDsNCitTVEFUSUMgQk9PTEVBTiAgICAgICAgICAgIG1WZXJib3NlOw0KK1NU QVRJQyBCT09MRUFOICAgICAgICAgICAgbUNvbnNpc3RlbmN5Q2hlY2s7DQorU1RBVElDIEJPT0xF QU4gICAgICAgICAgICBtQ29sb3VySGlnaGxpZ2h0aW5nOw0KKw0KKy8qKiBBbiBhcnJheSBvZiBh Y3BpdmlldyBjb21tYW5kIGxpbmUgcGFyYW1ldGVycy4NCisqLw0KK1NUQVRJQyBDT05TVCBTSEVM TF9QQVJBTV9JVEVNIFBhcmFtTGlzdFtdID0gew0KKyAge0wiLz8iLCBUeXBlRmxhZ30sDQorICB7 TCItYyIsIFR5cGVGbGFnfSwNCisgIHtMIi1kIiwgVHlwZUZsYWd9LA0KKyAge0wiLWgiLCBUeXBl VmFsdWV9LA0KKyAge0wiLWwiLCBUeXBlRmxhZ30sDQorICB7TCItcyIsIFR5cGVWYWx1ZX0sDQor ICB7TCItdiIsIFR5cGVGbGFnfSwNCisgIHtOVUxMLCBUeXBlTWF4fQ0KK307DQorDQorLyoqIFRo aXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29sb3VyIGhpZ2hsaWdodGluZyBzdGF0dXMuDQorDQor ICBAcmV0dmFsIFRSVUUgaWYgY29sb3VyIGhpZ2hsaWdodGluZyBpcyBlbmFibGVkLg0KKyovDQor Qk9PTEVBTg0KK0dldENvbG91ckhpZ2hsaWdodGluZyAoDQorICBWT0lEDQorICApDQorew0KKyAg cmV0dXJuIG1Db2xvdXJIaWdobGlnaHRpbmc7DQorfQ0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHNl dHMgdGhlIGNvbG91ciBoaWdobGlnaHRpbmcgc3RhdHVzLg0KKw0KKyovDQorVk9JRA0KK1NldENv bG91ckhpZ2hsaWdodGluZyAoDQorICBCT09MRUFOIEhpZ2hsaWdodA0KKyAgKQ0KK3sNCisgIG1D b2xvdXJIaWdobGlnaHRpbmcgPSBIaWdobGlnaHQ7DQorfQ0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9u IHJldHVybnMgdGhlIHJlcG9ydCBvcHRpb25zLg0KKw0KKyAgQHJldHZhbCBSZXR1cm5zIHRoZSBy ZXBvcnQgb3B0aW9uLg0KKyovDQorU1RBVElDDQorRVJFUE9SVF9PUFRJT04NCitHZXRSZXBvcnRP cHRpb24gKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIHJldHVybiBtUmVwb3J0VHlwZTsNCit9DQor DQorLyoqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2VsZWN0ZWQgQUNQSSB0YWJsZS4NCisN CisgIEByZXR2YWwgUmV0dXJucyBzaWduYXR1cmUgb2YgdGhlIHNlbGVjdGVkIEFDUEkgdGFibGUu DQorKi8NCitTVEFUSUMNCitVSU5UMzINCitHZXRTZWxlY3RlZEFjcGlUYWJsZSAoDQorICBWT0lE DQorICApDQorew0KKyAgcmV0dXJuIG1TZWxlY3RlZEFjcGlUYWJsZTsNCit9DQorDQorLyoqIFRo aXMgZnVuY3Rpb24gZHVtcHMgdGhlIEFDUEkgdGFibGUgdG8gYSBmaWxlLg0KKyAgQHBhcmFtIFtp bl0gUHRyICAgICAgIFBvaW50ZXIgdG8gdGhlIEFDUEkgdGFibGUgZGF0YS4NCisgIEBwYXJhbSBb aW5dIExlbmd0aCAgICBUaGUgbGVuZ3RoIG9mIHRoZSBBQ1BJIHRhYmxlLg0KKw0KKyAgQHJldHZh bCBUUlVFICAgICAgICAgIFN1Y2Nlc3MuDQorICBAcmV0dmFsIEZBTFNFICAgICAgICAgRmFpbHVy ZS4NCisqLw0KK1NUQVRJQw0KK0JPT0xFQU4NCitEdW1wQWNwaVRhYmxlVG9GaWxlICgNCisgIElO IENPTlNUIFVJTlQ4KiAgUHRyLA0KKyAgSU4gQ09OU1QgVUlOVE4gICBMZW5ndGgNCisgICkNCit7 DQorICBFRklfU1RBVFVTICAgICAgICAgU3RhdHVzOw0KKyAgQ0hBUjE2ICAgICAgICAgICAgIEZp bGVOYW1lQnVmZmVyW01BWF9GSUxFX05BTUVfTEVOXTsNCisgIFNIRUxMX0ZJTEVfSEFORExFICBE dW1wRmlsZUhhbmRsZSA9IE5VTEw7DQorICBVSU5UTiAgICAgICAgICAgICAgVHJhbnNmZXJCeXRl cyA9IExlbmd0aDsNCisNCisgIFVuaWNvZGVTUHJpbnQgKA0KKyAgICBGaWxlTmFtZUJ1ZmZlciwN CisgICAgc2l6ZW9mIChGaWxlTmFtZUJ1ZmZlciksDQorICAgIEwiLlxcJXMlMDRkLmJpbiIsDQor ICAgIG1TZWxlY3RlZEFjcGlUYWJsZU5hbWUsDQorICAgIG1CaW5UYWJsZUNvdW50KysNCisgICAg KTsNCisNCisgIFN0YXR1cyA9IFNoZWxsT3BlbkZpbGVCeU5hbWUgKA0KKyAgICAgICAgICAgICBG aWxlTmFtZUJ1ZmZlciwNCisgICAgICAgICAgICAgJkR1bXBGaWxlSGFuZGxlLA0KKyAgICAgICAg ICAgICBFRklfRklMRV9NT0RFX1JFQUQgfCBFRklfRklMRV9NT0RFX1dSSVRFIHwgRUZJX0ZJTEVf TU9ERV9DUkVBVEUsDQorICAgICAgICAgICAgIDANCisgICAgICAgICAgICAgKTsNCisgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgU2hlbGxQcmludEhpaUV4ICgNCisgICAgICAtMSwN CisgICAgICAtMSwNCisgICAgICBOVUxMLA0KKyAgICAgIFNUUklOR19UT0tFTiAoU1RSX0dFTl9S RUFET05MWV9NRURJQSksDQorICAgICAgZ1NoZWxsQWNwaVZpZXdIaWlIYW5kbGUsDQorICAgICAg TCJhY3BpdmlldyINCisgICAgICApOw0KKyAgICByZXR1cm4gRkFMU0U7DQorICB9DQorDQorICBQ cmludCAoTCJEdW1waW5nIEFDUEkgdGFibGUgdG8gOiAlcyAuLi4gIiwgRmlsZU5hbWVCdWZmZXIp Ow0KKw0KKyAgU3RhdHVzID0gU2hlbGxXcml0ZUZpbGUgKA0KKyAgICAgICAgICAgICBEdW1wRmls ZUhhbmRsZSwNCisgICAgICAgICAgICAgJlRyYW5zZmVyQnl0ZXMsDQorICAgICAgICAgICAgIChW T0lEKilQdHINCisgICAgICAgICAgICAgKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN CisgICAgUHJpbnQgKEwiRVJST1I6IEZhaWxlZCB0byBkdW1wIHRhYmxlIHRvIGJpbmFyeSBmaWxl LlxuIik7DQorICAgIFRyYW5zZmVyQnl0ZXMgPSAwOw0KKyAgfSBlbHNlIHsNCisgICAgUHJpbnQg KEwiRE9ORS5cbiIpOw0KKyAgfQ0KKw0KKyAgU2hlbGxDbG9zZUZpbGUgKCZEdW1wRmlsZUhhbmRs ZSk7DQorICByZXR1cm4gKExlbmd0aCA9PSBUcmFuc2ZlckJ5dGVzKTsNCit9DQorDQorLyoqIFRo aXMgZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSB0YWJsZSByZXBvcnRpbmcgb3B0aW9ucyBmb3IgdGhl IEFDUEkgdGFibGUuDQorDQorICBAcGFyYW0gW2luXSBTaWduYXR1cmUgVGhlIEFDUEkgdGFibGUg U2lnbmF0dXJlLg0KKyAgQHBhcmFtIFtpbl0gVGFibGVQdHIgIFBvaW50ZXIgdG8gdGhlIEFDUEkg dGFibGUgZGF0YS4NCisgIEBwYXJhbSBbaW5dIExlbmd0aCAgICBUaGUgbGVuZ3RoIGZvIHRoZSBB Q1BJIHRhYmxlLg0KKw0KKyAgQHJldHZhbCBSZXR1cm5zIFRSVUUgaWYgdGhlIEFDUEkgdGFibGUg c2hvdWxkIGJlIHRyYWNlZC4NCisqLw0KK0JPT0xFQU4NCitQcm9jZXNzVGFibGVSZXBvcnRPcHRp b25zICgNCisgIElOIENPTlNUIFVJTlQzMiAgU2lnbmF0dXJlLA0KKyAgSU4gQ09OU1QgVUlOVDgq ICBUYWJsZVB0ciwNCisgIElOIENPTlNUIFVJTlQzMiAgTGVuZ3RoDQorICApDQorew0KKyAgVUlO VE4gICBPcmlnaW5hbEF0dHJpYnV0ZTsNCisgIFVJTlQ4KiAgU2lnbmF0dXJlUHRyID0gKFVJTlQ4 KikoVUlOVE4pJlNpZ25hdHVyZTsNCisgIEJPT0xFQU4gTG9nID0gRkFMU0U7DQorICBCT09MRUFO IEhpZ2hMaWdodCA9IEdldENvbG91ckhpZ2hsaWdodGluZyAoKTsNCisgIHN3aXRjaCAoR2V0UmVw b3J0T3B0aW9uICgpKSB7DQorICAgIGNhc2UgRVJFUE9SVF9BTEw6DQorICAgICAgTG9nID0gVFJV RTsNCisgICAgICBicmVhazsNCisgICAgY2FzZSBFUkVQT1JUX1NFTEVDVEVEOg0KKyAgICAgIGlm IChTaWduYXR1cmUgPT0gR2V0U2VsZWN0ZWRBY3BpVGFibGUgKCkpIHsNCisgICAgICAgIExvZyA9 IFRSVUU7DQorICAgICAgICBtU2VsZWN0ZWRBY3BpVGFibGVGb3VuZCA9IFRSVUU7DQorICAgICAg fQ0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEVSRVBPUlRfVEFCTEVfTElTVDoNCisgICAgICBp ZiAobVRhYmxlQ291bnQgPT0gMCkgew0KKyAgICAgICAgaWYgKEhpZ2hMaWdodCkgew0KKyAgICAg ICAgICBPcmlnaW5hbEF0dHJpYnV0ZSA9IGdTVC0+Q29uT3V0LT5Nb2RlLT5BdHRyaWJ1dGU7DQor ICAgICAgICAgIGdTVC0+Q29uT3V0LT5TZXRBdHRyaWJ1dGUgKA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICBnU1QtPkNvbk91dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1RFWFRf QVRUUihFRklfQ1lBTiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE9yaWdpbmFsQXR0 cmlidXRlJihCSVQ0fEJJVDV8QklUNikpPj40KSkNCisgICAgICAgICAgICAgICAgICAgICAgICAg KTsNCisgICAgICAgIH0NCisgICAgICAgIFByaW50IChMIlxuSW5zdGFsbGVkIFRhYmxlKHMpOlxu Iik7DQorICAgICAgICBpZiAoSGlnaExpZ2h0KSB7DQorICAgICAgICAgIGdTVC0+Q29uT3V0LT5T ZXRBdHRyaWJ1dGUgKGdTVC0+Q29uT3V0LCBPcmlnaW5hbEF0dHJpYnV0ZSk7DQorICAgICAgICB9 DQorICAgICAgfQ0KKyAgICAgIFByaW50ICgNCisgICAgICAgIEwiXHQlNGQuICVjJWMlYyVjXG4i LA0KKyAgICAgICAgKyttVGFibGVDb3VudCwNCisgICAgICAgIFNpZ25hdHVyZVB0clswXSwNCisg ICAgICAgIFNpZ25hdHVyZVB0clsxXSwNCisgICAgICAgIFNpZ25hdHVyZVB0clsyXSwNCisgICAg ICAgIFNpZ25hdHVyZVB0clszXQ0KKyAgICAgICAgKTsNCisgICAgICBicmVhazsNCisgICAgY2Fz ZSBFUkVQT1JUX0RVTVBfQklOX0ZJTEU6DQorICAgICAgaWYgKFNpZ25hdHVyZSA9PSBHZXRTZWxl Y3RlZEFjcGlUYWJsZSAoKSkgew0KKyAgICAgICAgbVNlbGVjdGVkQWNwaVRhYmxlRm91bmQgPSBU UlVFOw0KKyAgICAgICAgRHVtcEFjcGlUYWJsZVRvRmlsZSAoVGFibGVQdHIsIExlbmd0aCk7DQor ICAgICAgfQ0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEVSRVBPUlRfTUFYOg0KKyAgICAgIC8v IFdlIHNob3VsZCBuZXZlciBiZSBoZXJlLg0KKyAgICAgIC8vIFRoaXMgY2FzZSBpcyBvbmx5IHBy ZXNlbnQgdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5nLg0KKyAgICAgIGJyZWFrOw0KKyAgfSAv LyBzd2l0Y2gNCisNCisgIGlmIChMb2cpIHsNCisgICAgaWYgKEhpZ2hMaWdodCkgew0KKyAgICAg IE9yaWdpbmFsQXR0cmlidXRlID0gZ1NULT5Db25PdXQtPk1vZGUtPkF0dHJpYnV0ZTsNCisgICAg ICBnU1QtPkNvbk91dC0+U2V0QXR0cmlidXRlICgNCisgICAgICAgICAgICAgICAgICAgICBnU1Qt PkNvbk91dCwNCisgICAgICAgICAgICAgICAgICAgICBFRklfVEVYVF9BVFRSKEVGSV9MSUdIVEJM VUUsDQorICAgICAgICAgICAgICAgICAgICAgICAoKE9yaWdpbmFsQXR0cmlidXRlJihCSVQ0fEJJ VDV8QklUNikpPj40KSkNCisgICAgICAgICAgICAgICAgICAgICApOw0KKyAgICB9DQorICAgIFBy aW50ICgNCisgICAgICBMIlxuXG4gLS0tLS0tLS0tLS0tLS0tICVjJWMlYyVjIFRhYmxlIC0tLS0t LS0tLS0tLS0tLSBcblxuIiwNCisgICAgICBTaWduYXR1cmVQdHJbMF0sDQorICAgICAgU2lnbmF0 dXJlUHRyWzFdLA0KKyAgICAgIFNpZ25hdHVyZVB0clsyXSwNCisgICAgICBTaWduYXR1cmVQdHJb M10NCisgICAgICApOw0KKyAgICBpZiAoSGlnaExpZ2h0KSB7DQorICAgICAgZ1NULT5Db25PdXQt PlNldEF0dHJpYnV0ZSAoZ1NULT5Db25PdXQsIE9yaWdpbmFsQXR0cmlidXRlKTsNCisgICAgfQ0K KyAgfQ0KKw0KKyAgcmV0dXJuIExvZzsNCit9DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gY29udmVy dHMgYSBzdHJpbmcgdG8gQUNQSSB0YWJsZSBzaWduYXR1cmUuDQorDQorICBAcGFyYW0gW2luXSBT dHIgICBQb2ludGVyIHRvIHRoZSBzdHJpbmcgdG8gYmUgY29udmVydGVkIHRvIHRoZQ0KKyAgICAg ICAgICAgICAgICAgICAgQUNQSSB0YWJsZSBzaWduYXR1cmUuDQorDQorICBAcmV0dmFsIFRoZSBB Q1BJIHRhYmxlIHNpZ25hdHVyZS4NCisqLw0KK1NUQVRJQw0KK1VJTlQzMg0KK0NvbnZlcnRTdHJU b0FjcGlTaWduYXR1cmUgKA0KKyAgSU4gIENPTlNUIENIQVIxNiogU3RyDQorICApDQorew0KKyAg VUlOVDggSW5kZXggPSAwOw0KKyAgQ0hBUjggUHRyWzRdOw0KKw0KKyAgLy8gQ29udmVydCB0byBV cHBlciBjYXNlIGFuZCBjb252ZXJ0IHRvIEFTQ0lJDQorICB3aGlsZSAoKEluZGV4IDwgNCkgJiYg KFN0cltJbmRleF0gIT0gMCkpIHsNCisgICAgaWYgKFN0cltJbmRleF0gPj0gTCdhJyAmJiBTdHJb SW5kZXhdIDw9IEwneicpIHsNCisgICAgICBQdHJbSW5kZXhdID0gKENIQVI4KShTdHJbSW5kZXhd IC0gKEwnYScgLSBMJ0EnKSk7DQorICAgIH0gZWxzZSB7DQorICAgICAgUHRyW0luZGV4XSA9IChD SEFSOClTdHJbSW5kZXhdOw0KKyAgICB9DQorICAgIEluZGV4Kys7DQorICB9DQorICByZXR1cm4g KihVSU5UMzIqKVB0cjsNCit9DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgdGhlIGNv bmZpZ3VyYXRpb24gdGFibGUgZW50cmllcyBpbiB0aGUNCisgICAgc3lzdGVtIHRhYmxlLCByZXRy aWV2ZXMgdGhlIFJTRFAgcG9pbnRlciBhbmQgc3RhcnRzIHBhcnNpbmcNCisgICAgdGhlIEFDUEkg dGFibGVzLg0KKw0KKyAgQHBhcmFtIFtpbl0gU3lzdGVtVGFibGUgUG9pbnRlciB0byB0aGUgRUZJ IHN5c3RlbSB0YWJsZS4NCisNCisgIEByZXR2YWwgUmV0dXJucyBFRklfTk9UX0ZPVU5EICAgaWYg dGhlIFJTRFAgcG9pbnRlciBpcyBub3QgZm91bmQuDQorICAgICAgICAgIFJldHVybnMgRUZJX1VO U1VQUE9SVEVEIGlmIHRoZSBSU0RQIHZlcnNpb24gaXMgbGVzcyB0aGFuIDIuDQorICAgICAgICAg IFJldHVybnMgRUZJX1NVQ0NFU1MgICAgIGlmIHN1Y2Nlc3NmdWwuDQorKi8NCitTVEFUSUMNCitF RklfU1RBVFVTDQorRUZJQVBJDQorQWNwaVZpZXcgKA0KKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSog U3lzdGVtVGFibGUNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgU3RhdHVz Ow0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KKyAgRUZJX0NPTkZJR1VSQVRJ T05fVEFCTEUqIEVmaUNvbmZpZ3VyYXRpb25UYWJsZTsNCisgIEJPT0xFQU4gICAgICAgICAgICAg ICAgICBGb3VuZEFjcGlUYWJsZTsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICBPcmlnaW5h bEF0dHJpYnV0ZTsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICBQcmludEF0dHJpYnV0ZTsN CisgIEVSRVBPUlRfT1BUSU9OICAgICAgICAgICBSZXBvcnRPcHRpb247DQorICBVSU5UOCogICAg ICAgICAgICAgICAgICAgUnNkcFB0cjsNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICBSc2Rw TGVuZ3RoOw0KKyAgVUlOVDggICAgICAgICAgICAgICAgICAgIFJzZHBSZXZpc2lvbjsNCisgIFBB UlNFX0FDUElfVEFCTEVfUFJPQyAgICBSc2RwUGFyc2VyUHJvYzsNCisgIEJPT0xFQU4gICAgICAg ICAgICAgICAgICBUcmFjZTsNCisNCisgIC8vIFNlYXJjaCB0aGUgdGFibGUgZm9yIGFuIGVudHJ5 IHRoYXQgbWF0Y2hlcyB0aGUgQUNQSSBUYWJsZSBHdWlkDQorICBGb3VuZEFjcGlUYWJsZSA9IEZB TFNFOw0KKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgU3lzdGVtVGFibGUtPk51bWJlck9mVGFi bGVFbnRyaWVzOyBJbmRleCsrKSB7DQorICAgIGlmIChDb21wYXJlR3VpZCAoJmdFZmlBY3BpVGFi bGVHdWlkLA0KKyAgICAgICAgICAmKFN5c3RlbVRhYmxlLT5Db25maWd1cmF0aW9uVGFibGVbSW5k ZXhdLlZlbmRvckd1aWQpKSkgew0KKyAgICAgIEVmaUNvbmZpZ3VyYXRpb25UYWJsZSA9ICZTeXN0 ZW1UYWJsZS0+Q29uZmlndXJhdGlvblRhYmxlW0luZGV4XTsNCisgICAgICBGb3VuZEFjcGlUYWJs ZSA9IFRSVUU7DQorICAgICAgYnJlYWs7DQorICAgIH0NCisgIH0NCisNCisgIGlmIChGb3VuZEFj cGlUYWJsZSkgew0KKyAgICBSc2RwUHRyID0gKFVJTlQ4KilFZmlDb25maWd1cmF0aW9uVGFibGUt PlZlbmRvclRhYmxlOw0KKw0KKyAgICAvLyBUaGUgUlNEUCByZXZpc2lvbiBpcyAxIGJ5dGUgc3Rh cnRpbmcgYXQgb2Zmc2V0IDE1DQorICAgIFJzZHBSZXZpc2lvbiA9ICooUnNkcFB0ciArIFJTRFBf UkVWSVNJT05fT0ZGU0VUKTsNCisNCisgICAgaWYgKFJzZHBSZXZpc2lvbiA8IDIpIHsNCisgICAg ICBQcmludCAoDQorICAgICAgICBMIkVSUk9SOiBSU0RQIHZlcnNpb24gbGVzcyB0aGFuIDIgaXMg bm90IHN1cHBvcnRlZC5cbiINCisgICAgICAgICk7DQorICAgICAgcmV0dXJuIEVGSV9VTlNVUFBP UlRFRDsNCisgICAgfQ0KKw0KKyAgICAvLyBUaGUgUlNEUCBsZW5ndGggaXMgNCBieXRlcyBzdGFy dGluZyBhdCBvZmZzZXQgMjANCisgICAgUnNkcExlbmd0aCA9ICooVUlOVDMyKikoUnNkcFB0ciAr IFJTRFBfTEVOR1RIX09GRlNFVCk7DQorDQorICAgIFRyYWNlID0gUHJvY2Vzc1RhYmxlUmVwb3J0 T3B0aW9ucyAoUlNEUF9UQUJMRV9JTkZPLCBSc2RwUHRyLCBSc2RwTGVuZ3RoKTsNCisNCisgICAg U3RhdHVzID0gR2V0UGFyc2VyIChSU0RQX1RBQkxFX0lORk8sICZSc2RwUGFyc2VyUHJvYyk7DQor ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICBQcmludCAoDQorICAgICAgICBM IkVSUk9SOiBObyByZWdpc3RlcmVkIHBhcnNlciBmb3VuZCBmb3IgUlNEUC5cbiINCisgICAgICAg ICk7DQorICAgICAgcmV0dXJuIFN0YXR1czsNCisgICAgfQ0KKw0KKyAgICBSc2RwUGFyc2VyUHJv YyAoDQorICAgICAgVHJhY2UsDQorICAgICAgUnNkcFB0ciwNCisgICAgICBSc2RwTGVuZ3RoLA0K KyAgICAgIFJzZHBSZXZpc2lvbg0KKyAgICAgICk7DQorDQorICB9IGVsc2Ugew0KKyAgICBJbmNy ZW1lbnRFcnJvckNvdW50ICgpOw0KKyAgICBQcmludCAoDQorICAgICAgTCJFUlJPUjogRmFpbGVk IHRvIGZpbmQgQUNQSSBUYWJsZSBHdWlkIGluIFN5c3RlbSBDb25maWd1cmF0aW9uIFRhYmxlLlxu Ig0KKyAgICAgICk7DQorICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KKyAgfQ0KKw0KKyAgUmVw b3J0T3B0aW9uID0gR2V0UmVwb3J0T3B0aW9uICgpOw0KKyAgaWYgKEVSRVBPUlRfVEFCTEVfTElT VCAhPSBSZXBvcnRPcHRpb24pIHsNCisgICAgaWYgKCgoRVJFUE9SVF9TRUxFQ1RFRCA9PSBSZXBv cnRPcHRpb24pICB8fA0KKyAgICAgICAgIChFUkVQT1JUX0RVTVBfQklOX0ZJTEUgPT0gUmVwb3J0 T3B0aW9uKSkgJiYNCisgICAgICAgICghbVNlbGVjdGVkQWNwaVRhYmxlRm91bmQpKSB7DQorICAg ICAgUHJpbnQgKEwiXG5SZXF1ZXN0ZWQgQUNQSSBUYWJsZSBub3QgZm91bmQuXG4iKTsNCisgICAg fSBlbHNlIGlmIChFUkVQT1JUX0RVTVBfQklOX0ZJTEUgIT0gUmVwb3J0T3B0aW9uKSB7DQorICAg ICAgT3JpZ2luYWxBdHRyaWJ1dGUgPSBnU1QtPkNvbk91dC0+TW9kZS0+QXR0cmlidXRlOw0KKw0K KyAgICAgIFByaW50IChMIlxuVGFibGUgU3RhdGlzdGljczpcbiIpOw0KKw0KKyAgICAgIGlmIChH ZXRDb2xvdXJIaWdobGlnaHRpbmcgKCkpIHsNCisgICAgICAgIFByaW50QXR0cmlidXRlID0gKEdl dEVycm9yQ291bnQgKCkgPiAwKSA/DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9U RVhUX0FUVFIgKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9SRUQsDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKChPcmlnaW5hbEF0dHJpYnV0ZSYoQklUNHxCSVQ1 fEJJVDYpKT4+NCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDoNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3JpZ2luYWxBdHRyaWJ1dGU7DQorICAgICAgICBnU1QtPkNv bk91dC0+U2V0QXR0cmlidXRlIChnU1QtPkNvbk91dCwgUHJpbnRBdHRyaWJ1dGUpOw0KKyAgICAg IH0NCisgICAgICBQcmludCAoTCJcdCVkIEVycm9yKHMpXG4iLCBHZXRFcnJvckNvdW50ICgpKTsN CisNCisgICAgICBpZiAoR2V0Q29sb3VySGlnaGxpZ2h0aW5nICgpKSB7DQorICAgICAgICBQcmlu dEF0dHJpYnV0ZSA9IChHZXRXYXJuaW5nQ291bnQgKCkgPiAwKSA/DQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEVGSV9URVhUX0FUVFIgKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEVGSV9SRUQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChPcmlnaW5hbEF0 dHJpYnV0ZSYoQklUNHxCSVQ1fEJJVDYpKT4+NCkNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApIDoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JpZ2luYWxBdHRyaWJ1dGU7 DQorDQorICAgICAgICBnU1QtPkNvbk91dC0+U2V0QXR0cmlidXRlIChnU1QtPkNvbk91dCwgUHJp bnRBdHRyaWJ1dGUpOw0KKyAgICAgIH0NCisgICAgICBQcmludCAoTCJcdCVkIFdhcm5pbmcocylc biIsIEdldFdhcm5pbmdDb3VudCAoKSk7DQorDQorICAgICAgaWYgKEdldENvbG91ckhpZ2hsaWdo dGluZyAoKSkgew0KKyAgICAgICAgZ1NULT5Db25PdXQtPlNldEF0dHJpYnV0ZSAoZ1NULT5Db25P dXQsIE9yaWdpbmFsQXR0cmlidXRlKTsNCisgICAgICB9DQorICAgIH0NCisgIH0NCisgIHJldHVy biBFRklfU1VDQ0VTUzsNCit9DQorDQorLyoqDQorICBGdW5jdGlvbiBmb3IgJ2FjcGl2aWV3JyBj b21tYW5kLg0KKw0KKyAgQHBhcmFtW2luXSBJbWFnZUhhbmRsZSAgSGFuZGxlIHRvIHRoZSBJbWFn ZSAoTlVMTCBpZiBJbnRlcm5hbCkuDQorICBAcGFyYW1baW5dIFN5c3RlbVRhYmxlICBQb2ludGVy IHRvIHRoZSBTeXN0ZW0gVGFibGUgKE5VTEwgaWYgSW50ZXJuYWwpLg0KKyovDQorU0hFTExfU1RB VFVTDQorRUZJQVBJDQorU2hlbGxDb21tYW5kUnVuQWNwaVZpZXcgKA0KKyAgSU4gRUZJX0hBTkRM RSAgICAgICAgSW1hZ2VIYW5kbGUsDQorICBJTiBFRklfU1lTVEVNX1RBQkxFKiBTeXN0ZW1UYWJs ZQ0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICBTdGF0dXM7DQorICBTSEVMTF9TVEFU VVMgICAgICAgU2hlbGxTdGF0dXMgPSBTSEVMTF9TVUNDRVNTOw0KKyAgTElTVF9FTlRSWSogICAg ICAgIFBhY2thZ2UgPSBOVUxMOw0KKyAgQ0hBUjE2KiAgICAgICAgICAgIFByb2JsZW1QYXJhbTsN CisgIENPTlNUIENIQVIxNiogICAgICBUZW1wOw0KKyAgQ0hBUjggICAgICAgICAgICAgIENvbG91 ck9wdGlvbls4XTsNCisgIFNIRUxMX0ZJTEVfSEFORExFICBUbXBEdW1wRmlsZUhhbmRsZSA9IE5V TEw7DQorDQorICAvLyBTZXQgRGVmYXVsdHMNCisgIG1SZXBvcnRUeXBlID0gRVJFUE9SVF9BTEw7 DQorICBtVGFibGVDb3VudCA9IDA7DQorICBtQmluVGFibGVDb3VudCA9IDA7DQorICBtU2VsZWN0 ZWRBY3BpVGFibGUgPSAwOw0KKyAgbVNlbGVjdGVkQWNwaVRhYmxlTmFtZSA9IE5VTEw7DQorICBt U2VsZWN0ZWRBY3BpVGFibGVGb3VuZCA9IEZBTFNFOw0KKyAgbVZlcmJvc2UgPSBUUlVFOw0KKyAg bUNvbnNpc3RlbmN5Q2hlY2sgPSBUUlVFOw0KKw0KKyAgLy8gUmVzZXQgVGhlIGVycm9yL3dhcm5p bmcgY291bnRlcnMNCisgIFJlc2V0RXJyb3JDb3VudCAoKTsNCisgIFJlc2V0V2FybmluZ0NvdW50 ICgpOw0KKw0KKyAgU3RhdHVzID0gU2hlbGxDb21tYW5kTGluZVBhcnNlIChQYXJhbUxpc3QsICZQ YWNrYWdlLCAmUHJvYmxlbVBhcmFtLCBUUlVFKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCisgICAgaWYgKFN0YXR1cyA9PSBFRklfVk9MVU1FX0NPUlJVUFRFRCAmJiBQcm9ibGVtUGFy YW0gIT0gTlVMTCkgew0KKyAgICAgIFNoZWxsUHJpbnRIaWlFeCAoDQorICAgICAgICAtMSwNCisg ICAgICAgIC0xLA0KKyAgICAgICAgTlVMTCwNCisgICAgICAgIFNUUklOR19UT0tFTiAoU1RSX0dF Tl9QUk9CTEVNKSwNCisgICAgICAgIGdTaGVsbEFjcGlWaWV3SGlpSGFuZGxlLA0KKyAgICAgICAg TCJhY3BpdmlldyIsDQorICAgICAgICBQcm9ibGVtUGFyYW0NCisgICAgICAgICk7DQorICAgICAg RnJlZVBvb2wgKFByb2JsZW1QYXJhbSk7DQorICAgIH0gZWxzZSB7DQorICAgICAgUHJpbnQgKEwi YWNwaXZpZXc6IEVycm9yIHByb2Nlc3NpbmcgaW5wdXQgcGFyYW1ldGVyKHMpXG4iKTsNCisgICAg fQ0KKyAgICBTaGVsbFN0YXR1cyA9IFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgfSBlbHNl IHsNCisgICAgaWYgKFNoZWxsQ29tbWFuZExpbmVHZXRDb3VudCAoUGFja2FnZSkgPiAxKSB7DQor ICAgICAgU2hlbGxQcmludEhpaUV4ICgNCisgICAgICAgIC0xLA0KKyAgICAgICAgLTEsDQorICAg ICAgICBOVUxMLA0KKyAgICAgICAgU1RSSU5HX1RPS0VOIChTVFJfR0VOX1RPT19NQU5ZKSwNCisg ICAgICAgIGdTaGVsbEFjcGlWaWV3SGlpSGFuZGxlLA0KKyAgICAgICAgTCJhY3BpdmlldyINCisg ICAgICAgICk7DQorICAgICAgU2hlbGxTdGF0dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsN CisgICAgfSBlbHNlIGlmIChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoUGFja2FnZSwgTCItPyIp KSB7DQorICAgICAgU2hlbGxQcmludEhpaUV4ICgNCisgICAgICAgIC0xLA0KKyAgICAgICAgLTEs DQorICAgICAgICBOVUxMLA0KKyAgICAgICAgU1RSSU5HX1RPS0VOIChTVFJfR0VUX0hFTFBfQUNQ SVZJRVcpLA0KKyAgICAgICAgZ1NoZWxsQWNwaVZpZXdIaWlIYW5kbGUsDQorICAgICAgICBMImFj cGl2aWV3Ig0KKyAgICAgICAgKTsNCisgICAgfSBlbHNlIGlmIChTaGVsbENvbW1hbmRMaW5lR2V0 RmxhZyAoUGFja2FnZSwgTCItcyIpICYmDQorICAgICAgICAgICAgICAgU2hlbGxDb21tYW5kTGlu ZUdldFZhbHVlIChQYWNrYWdlLCBMIi1zIikgPT0gTlVMTCkgew0KKyAgICAgIFNoZWxsUHJpbnRI aWlFeCAoDQorICAgICAgICAtMSwNCisgICAgICAgIC0xLA0KKyAgICAgICAgTlVMTCwNCisgICAg ICAgIFNUUklOR19UT0tFTiAoU1RSX0dFTl9OT19WQUxVRSksDQorICAgICAgICBnU2hlbGxBY3Bp Vmlld0hpaUhhbmRsZSwNCisgICAgICAgIEwiYWNwaXZpZXciLA0KKyAgICAgICAgTCItcyINCisg ICAgICAgICk7DQorICAgICAgU2hlbGxTdGF0dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsN CisgICAgfSBlbHNlIGlmICgoU2hlbGxDb21tYW5kTGluZUdldEZsYWcgKFBhY2thZ2UsIEwiLXMi KSAmJg0KKyAgICAgICAgICAgICAgICBTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoUGFja2FnZSwg TCItbCIpKSkgew0KKyAgICAgIFNoZWxsUHJpbnRIaWlFeCAoDQorICAgICAgICAtMSwNCisgICAg ICAgIC0xLA0KKyAgICAgICAgTlVMTCwNCisgICAgICAgIFNUUklOR19UT0tFTiAoU1RSX0dFTl9U T09fTUFOWSksDQorICAgICAgICBnU2hlbGxBY3BpVmlld0hpaUhhbmRsZSwNCisgICAgICAgIEwi YWNwaXZpZXciDQorICAgICAgICApOw0KKyAgICAgIFNoZWxsU3RhdHVzID0gU0hFTExfSU5WQUxJ RF9QQVJBTUVURVI7DQorICAgIH0gZWxzZSBpZiAoU2hlbGxDb21tYW5kTGluZUdldEZsYWcgKFBh Y2thZ2UsIEwiLWgiKSAmJg0KKyAgICAgICAgICAgICAgIFNoZWxsQ29tbWFuZExpbmVHZXRWYWx1 ZSAoUGFja2FnZSwgTCItaCIpID09IE5VTEwpIHsNCisgICAgICAgIFNoZWxsUHJpbnRIaWlFeCAo DQorICAgICAgICAgIC0xLA0KKyAgICAgICAgICAtMSwNCisgICAgICAgICAgTlVMTCwNCisgICAg ICAgICAgU1RSSU5HX1RPS0VOIChTVFJfR0VOX05PX1ZBTFVFKSwNCisgICAgICAgICAgZ1NoZWxs QWNwaVZpZXdIaWlIYW5kbGUsDQorICAgICAgICAgIEwiYWNwaXZpZXciLA0KKyAgICAgICAgICBM Ii1oIg0KKyAgICAgICAgICApOw0KKyAgICAgICAgU2hlbGxTdGF0dXMgPSBTSEVMTF9JTlZBTElE X1BBUkFNRVRFUjsNCisgICAgfSBlbHNlIGlmIChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoUGFj a2FnZSwgTCItZCIpICYmDQorICAgICAgICAgICAgICAgIVNoZWxsQ29tbWFuZExpbmVHZXRGbGFn IChQYWNrYWdlLCBMIi1zIikpIHsNCisgICAgICAgIFNoZWxsUHJpbnRIaWlFeCAoDQorICAgICAg ICAgIC0xLA0KKyAgICAgICAgICAtMSwNCisgICAgICAgICAgTlVMTCwNCisgICAgICAgICAgU1RS SU5HX1RPS0VOIChTVFJfR0VOX01JU1NJTkdfT1BUSU9OKSwNCisgICAgICAgICAgZ1NoZWxsQWNw aVZpZXdIaWlIYW5kbGUsDQorICAgICAgICAgIEwiYWNwaXZpZXciLA0KKyAgICAgICAgICBMIi1z IiwNCisgICAgICAgICAgTCItZCINCisgICAgICAgICAgKTsNCisgICAgICAgIFNoZWxsU3RhdHVz ID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQorICAgIH0gZWxzZSB7DQorICAgICAgLy8gQ2hl Y2sgaWYgdGhlIGNvbG91ciBvcHRpb24gaXMgc2V0DQorICAgICAgVGVtcCA9IFNoZWxsQ29tbWFu ZExpbmVHZXRWYWx1ZSAoUGFja2FnZSwgTCItaCIpOw0KKyAgICAgIGlmIChUZW1wICE9IE5VTEwp IHsNCisgICAgICAgIFVuaWNvZGVTdHJUb0FzY2lpU3RyUyAoVGVtcCwgQ29sb3VyT3B0aW9uLCBz aXplb2YgKENvbG91ck9wdGlvbikpOw0KKyAgICAgICAgaWYgKChBc2NpaVN0cmlDbXAgKENvbG91 ck9wdGlvbiwgIk9OIikgPT0gMCkgfHwNCisgICAgICAgICAgICAoQXNjaWlTdHJpQ21wIChDb2xv dXJPcHRpb24sICJUUlVFIikgPT0gMCkpIHsNCisgICAgICAgICAgU2V0Q29sb3VySGlnaGxpZ2h0 aW5nIChUUlVFKTsNCisgICAgICAgIH0gZWxzZSBpZiAoKEFzY2lpU3RyaUNtcCAoQ29sb3VyT3B0 aW9uLCAiT0ZGIikgPT0gMCkgfHwNCisgICAgICAgICAgICAgICAgICAgKEFzY2lpU3RyaUNtcCAo Q29sb3VyT3B0aW9uLCAiRkFMU0UiKSA9PSAwKSkgew0KKyAgICAgICAgICBTZXRDb2xvdXJIaWdo bGlnaHRpbmcgKEZBTFNFKTsNCisgICAgICAgIH0NCisgICAgICB9DQorDQorICAgICAgaWYgKFNo ZWxsQ29tbWFuZExpbmVHZXRGbGFnIChQYWNrYWdlLCBMIi1sIikpIHsNCisgICAgICAgIG1SZXBv cnRUeXBlID0gRVJFUE9SVF9UQUJMRV9MSVNUOw0KKyAgICAgIH0gZWxzZSB7DQorICAgICAgICBt U2VsZWN0ZWRBY3BpVGFibGVOYW1lID0gU2hlbGxDb21tYW5kTGluZUdldFZhbHVlIChQYWNrYWdl LCBMIi1zIik7DQorICAgICAgICBpZiAobVNlbGVjdGVkQWNwaVRhYmxlTmFtZSAhPSBOVUxMKSB7 DQorICAgICAgICAgIG1TZWxlY3RlZEFjcGlUYWJsZSA9IChVSU5UMzIpQ29udmVydFN0clRvQWNw aVNpZ25hdHVyZSAoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt U2VsZWN0ZWRBY3BpVGFibGVOYW1lDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOw0KKyAgICAgICAgICBtUmVwb3J0VHlwZSA9IEVSRVBPUlRfU0VMRUNURUQ7DQor DQorICAgICAgICAgIGlmIChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoUGFja2FnZSwgTCItZCIp KSAgew0KKyAgICAgICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIHRvIGNoZWNrIGlm IHRoZSBtZWRpYSBpcyB3cml0YWJsZS4NCisgICAgICAgICAgICBDSEFSMTYgRmlsZU5hbWVCdWZm ZXJbTUFYX0ZJTEVfTkFNRV9MRU5dOw0KKyAgICAgICAgICAgIG1SZXBvcnRUeXBlID0gRVJFUE9S VF9EVU1QX0JJTl9GSUxFOw0KKw0KKyAgICAgICAgICAgIFVuaWNvZGVTUHJpbnQgKA0KKyAgICAg ICAgICAgICAgRmlsZU5hbWVCdWZmZXIsDQorICAgICAgICAgICAgICBzaXplb2YgKEZpbGVOYW1l QnVmZmVyKSwNCisgICAgICAgICAgICAgIEwiLlxcJXMlMDRkLnRtcCIsDQorICAgICAgICAgICAg ICBtU2VsZWN0ZWRBY3BpVGFibGVOYW1lLA0KKyAgICAgICAgICAgICAgbUJpblRhYmxlQ291bnQN CisgICAgICAgICAgICAgICk7DQorDQorICAgICAgICAgICAgU3RhdHVzID0gU2hlbGxPcGVuRmls ZUJ5TmFtZSAoDQorICAgICAgICAgICAgICAgICAgICAgICBGaWxlTmFtZUJ1ZmZlciwNCisgICAg ICAgICAgICAgICAgICAgICAgICZUbXBEdW1wRmlsZUhhbmRsZSwNCisgICAgICAgICAgICAgICAg ICAgICAgIEVGSV9GSUxFX01PREVfUkVBRCB8IEVGSV9GSUxFX01PREVfV1JJVEUgfA0KKyAgICAg ICAgICAgICAgICAgICAgICAgRUZJX0ZJTEVfTU9ERV9DUkVBVEUsDQorICAgICAgICAgICAgICAg ICAgICAgICAwDQorICAgICAgICAgICAgICAgICAgICAgICApOw0KKw0KKyAgICAgICAgICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICAgICAgICAgIFNoZWxsU3RhdHVzID0gU0hF TExfSU5WQUxJRF9QQVJBTUVURVI7DQorICAgICAgICAgICAgICBUbXBEdW1wRmlsZUhhbmRsZSA9 IE5VTEw7DQorICAgICAgICAgICAgICBTaGVsbFByaW50SGlpRXggKA0KKyAgICAgICAgICAgICAg ICAtMSwNCisgICAgICAgICAgICAgICAgLTEsDQorICAgICAgICAgICAgICAgIE5VTEwsDQorICAg ICAgICAgICAgICAgIFNUUklOR19UT0tFTiAoU1RSX0dFTl9SRUFET05MWV9NRURJQSksDQorICAg ICAgICAgICAgICAgIGdTaGVsbEFjcGlWaWV3SGlpSGFuZGxlLA0KKyAgICAgICAgICAgICAgICBM ImFjcGl2aWV3Ig0KKyAgICAgICAgICAgICAgICApOw0KKyAgICAgICAgICAgICAgZ290byBEb25l Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICAvLyBEZWxldGUgVGVtcG9yYXJ5IGZpbGUu DQorICAgICAgICAgICAgU2hlbGxEZWxldGVGaWxlICgmVG1wRHVtcEZpbGVIYW5kbGUpOw0KKyAg ICAgICAgICB9IC8vIC1kDQorICAgICAgICB9IC8vIC1zDQorICAgICAgfQ0KKw0KKyAgICAgIC8v IFBhcnNlIEFDUEkgVGFibGUgaW5mb3JtYXRpb24NCisgICAgICBTdGF0dXMgPSBBY3BpVmlldyAo U3lzdGVtVGFibGUpOw0KKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICAg IFNoZWxsU3RhdHVzID0gU0hFTExfTk9UX0ZPVU5EOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgfQ0K Kw0KK0RvbmU6DQorICBpZiAoUGFja2FnZSAhPSBOVUxMKSB7DQorICAgIFNoZWxsQ29tbWFuZExp bmVGcmVlVmFyTGlzdCAoUGFja2FnZSk7DQorICB9DQorICByZXR1cm4gU2hlbGxTdGF0dXM7DQor fQ0KZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5k TGliL0FjcGlWaWV3LmggYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFu ZExpYi9BY3BpVmlldy5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDM1NjFlYTgxNjg2ODIxZTM3YzA1ZDkwZjA1 MzczMWZkZTYzZmJiNQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvU2hlbGxQa2cvTGlicmFyeS9VZWZp U2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvQWNwaVZpZXcuaA0KQEAgLTAsMCArMSwxMDMgQEANCisv KioNCisgIEhlYWRlciBmaWxlIGZvciBBY3BpVmlldw0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDE2 IC0gMjAxOCwgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICBUaGlzIHByb2dy YW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICBhcmUgbGljZW5zZWQgYW5kIG1h ZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExp Y2Vuc2UNCisgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwg dGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCisgIGh0dHA6Ly9vcGVuc291cmNl Lm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCisNCisgIFRIRSBQUk9HUkFNIElTIERJU1RS SUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KKyAgV0lU SE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVY UFJFU1MgT1IgSU1QTElFRC4NCisqKi8NCisNCisjaWZuZGVmIEFDUElWSUVXX0hfDQorI2RlZmlu ZSBBQ1BJVklFV19IXw0KKw0KKy8qKiBBIG1hY3JvIHRvIGRlZmluZSB0aGUgbWF4IGZpbGUgbmFt ZSBsZW5ndGgNCisqLw0KKyNkZWZpbmUgTUFYX0ZJTEVfTkFNRV9MRU4gICAgMTI4DQorDQorLyoq IE9mZnNldCB0byB0aGUgUlNEUCByZXZpc2lvbiBmcm9tIHRoZSBzdGFydCBvZiB0aGUgUlNEUA0K KyovDQorI2RlZmluZSBSU0RQX1JFVklTSU9OX09GRlNFVCAxNQ0KKw0KKy8qKiBPZmZzZXQgdG8g dGhlIFJTRFAgbGVuZ3RoIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBSU0RQDQorKi8NCisjZGVmaW5l IFJTRFBfTEVOR1RIX09GRlNFVCAgIDIwDQorDQorLyoqIFRoZSBFUkVQT1JUX09QVElPTiBlbnVt IGRlc2NyaWJlcyBBQ1BJIHRhYmxlIFJlcG9ydGluZyBvcHRpb25zLg0KKyovDQordHlwZWRlZiBl bnVtIFJlcG9ydE9wdGlvbiB7DQorICBFUkVQT1JUX0FMTCwgICAgICAgICAgICAvLy88IFJlcG9y dCBBbGwgdGFibGVzLg0KKyAgRVJFUE9SVF9TRUxFQ1RFRCwgICAgICAgLy8vPCBSZXBvcnQgU2Vs ZWN0ZWQgdGFibGUuDQorICBFUkVQT1JUX1RBQkxFX0xJU1QsICAgICAvLy88IFJlcG9ydCBMaXN0 IG9mIHRhYmxlcy4NCisgIEVSRVBPUlRfRFVNUF9CSU5fRklMRSwgIC8vLzwgRHVtcCBzZWxlY3Rl ZCB0YWJsZSB0byBhIGZpbGUuDQorICBFUkVQT1JUX01BWA0KK30gRVJFUE9SVF9PUFRJT047DQor DQorLyoqIFRoaXMgZnVuY3Rpb24gcmVzZXRzIHRoZSBBQ1BJIHRhYmxlIGVycm9yIGNvdW50ZXIg dG8gWmVyby4NCisqLw0KK1ZPSUQNCitSZXNldEVycm9yQ291bnQgKA0KKyAgVk9JRA0KKyAgKTsN CisNCisvKiogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBBQ1BJIHRhYmxlIGVycm9yIGNvdW50 Lg0KKw0KKyAgQHJldHZhbCBSZXR1cm5zIHRoZSBjb3VudCBvZiBlcnJvcnMgZGV0ZWN0ZWQgaW4g dGhlIEFDUEkgdGFibGVzLg0KKyovDQorVUlOVDMyDQorR2V0RXJyb3JDb3VudCAoDQorICBWT0lE DQorICApOw0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgQUNQSSB0YWJsZSB3YXJu aW5nIGNvdW50ZXIgdG8gWmVyby4NCisqLw0KK1ZPSUQNCitSZXNldFdhcm5pbmdDb3VudCAoDQor ICBWT0lEDQorICApOw0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIEFDUEkgdGFi bGUgd2FybmluZyBjb3VudC4NCisNCisgIEByZXR2YWwgUmV0dXJucyB0aGUgY291bnQgb2Ygd2Fy bmluZyBkZXRlY3RlZCBpbiB0aGUgQUNQSSB0YWJsZXMuDQorKi8NCitVSU5UMzINCitHZXRXYXJu aW5nQ291bnQgKA0KKyAgVk9JRA0KKyAgKTsNCisNCisvKiogVGhpcyBmdW5jdGlvbiByZXR1cm5z IHRoZSBjb2xvdXIgaGlnaGxpZ2h0aW5nIHN0YXR1cy4NCisNCisgIEByZXR2YWwgVFJVRSBpZiBj b2xvdXIgaGlnaGxpZ2h0aW5nIGlzIGVuYWJsZWQuDQorKi8NCitCT09MRUFODQorR2V0Q29sb3Vy SGlnaGxpZ2h0aW5nICgNCisgIFZPSUQNCisgICk7DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gc2V0 cyB0aGUgY29sb3VyIGhpZ2hsaWdodGluZyBzdGF0dXMuDQorDQorKi8NCitWT0lEDQorU2V0Q29s b3VySGlnaGxpZ2h0aW5nICgNCisgIEJPT0xFQU4gSGlnaGxpZ2h0DQorICApOw0KKw0KKy8qKiBU aGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgdGFibGUgcmVwb3J0aW5nIG9wdGlvbnMgZm9yIHRo ZSBBQ1BJIHRhYmxlLg0KKw0KKyAgQHBhcmFtIFtpbl0gU2lnbmF0dXJlIFRoZSBBQ1BJIHRhYmxl IFNpZ25hdHVyZS4NCisgIEBwYXJhbSBbaW5dIFRhYmxlUHRyICBQb2ludGVyIHRvIHRoZSBBQ1BJ IHRhYmxlIGRhdGEuDQorICBAcGFyYW0gW2luXSBMZW5ndGggICAgVGhlIGxlbmd0aCBmbyB0aGUg QUNQSSB0YWJsZS4NCisNCisgIEByZXR2YWwgUmV0dXJucyBUUlVFIGlmIHRoZSBBQ1BJIHRhYmxl IHNob3VsZCBiZSB0cmFjZWQuDQorKi8NCitCT09MRUFODQorUHJvY2Vzc1RhYmxlUmVwb3J0T3B0 aW9ucyAoDQorICBJTiBDT05TVCBVSU5UMzIgIFNpZ25hdHVyZSwNCisgIElOIENPTlNUIFVJTlQ4 KiAgVGFibGVQdHIsDQorICBJTiBDT05TVCBVSU5UMzIgIExlbmd0aA0KKyAgKTsNCisNCisjZW5k aWYgLy8gQUNQSVZJRVdfSF8NCmRpZmYgLS1naXQgYS9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVs bEFjcGlWaWV3Q29tbWFuZExpYi9QYXJzZXJzL0JncnQvQmdydFBhcnNlci5jIGIvU2hlbGxQa2cv TGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvUGFyc2Vycy9CZ3J0L0JncnRQYXJz ZXIuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLjBiM2Y5YTc5MDEyYTk3ZDAzZDg4ZWIzZTE2MGI3N2Q4NjlmY2Uz OTQNCi0tLSAvZGV2L251bGwNCisrKyBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZp ZXdDb21tYW5kTGliL1BhcnNlcnMvQmdydC9CZ3J0UGFyc2VyLmMNCkBAIC0wLDAgKzEsNjkgQEAN CisvKioNCisgIEJHUlQgdGFibGUgcGFyc2VyDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMTcgLSAy MDE4LCBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgIFRoaXMgcHJvZ3JhbSBh bmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBh dmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5z ZQ0KKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0 IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KKyAgaHR0cDovL29wZW5zb3VyY2Uub3Jn L2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KKw0KKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVU RUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorICBXSVRIT1VU IFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVT UyBPUiBJTVBMSUVELg0KKw0KKyAgQHBhciBSZWZlcmVuY2Uocyk6DQorICAgIC0gQUNQSSA2LjIg U3BlY2lmaWNhdGlvbiAtIEVycmF0YSBBLCBTZXB0ZW1iZXIgMjAxNw0KKyoqLw0KKw0KKyNpbmNs dWRlIDxJbmR1c3RyeVN0YW5kYXJkL0FjcGkuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGli Lmg+DQorI2luY2x1ZGUgIkFjcGlQYXJzZXIuaCINCisjaW5jbHVkZSAiQWNwaVRhYmxlUGFyc2Vy LmgiDQorDQorLy8gTG9jYWwgdmFyaWFibGVzDQorU1RBVElDIEFDUElfREVTQ1JJUFRJT05fSEVB REVSX0lORk8gQWNwaUhkckluZm87DQorDQorLyoqIEFuIEFDUElfUEFSU0VSIGFycmF5IGRlc2Ny aWJpbmcgdGhlIEFDUEkgQkRSVCBUYWJsZS4NCisqLw0KK1NUQVRJQyBDT05TVCBBQ1BJX1BBUlNF UiBCZ3J0UGFyc2VyW10gPSB7DQorICBQQVJTRV9BQ1BJX0hFQURFUiAoJkFjcGlIZHJJbmZvKSwN CisgIHtMIlZlcnNpb24iLCAyLCAzNiwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0s DQorICB7TCJTdGF0dXMiLCAxLCAzOCwgTCIweCV4IiwgTlVMTCwgIE5VTEwsIE5VTEwsIE5VTEx9 LA0KKyAge0wiSW1hZ2UgVHlwZSIsIDEsIDM5LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMfSwNCisgIHtMIkltYWdlIEFkZHJlc3MiLCA4LCA0MCwgTCIweCVseCIsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEx9LA0KKyAge0wiSW1hZ2UgT2Zmc2V0IFgiLCA0LCA0OCwgTCIlZCIsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiSW1hZ2UgT2Zmc2V0IFkiLCA0LCA1MiwgTCIlZCIs IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9DQorfTsNCisNCisvKiogVGhpcyBmdW5jdGlvbiBwYXJz ZXMgdGhlIEFDUEkgQkdSVCB0YWJsZS4NCisgIFdoZW4gdHJhY2UgaXMgZW5hYmxlZCB0aGlzIGZ1 bmN0aW9uIHBhcnNlcyB0aGUgQkdSVCB0YWJsZSBhbmQNCisgIHRyYWNlcyB0aGUgQUNQSSB0YWJs ZSBmaWVsZHMuDQorDQorICBUaGlzIGZ1bmN0aW9uIGFsc28gcGVyZm9ybXMgdmFsaWRhdGlvbiBv ZiB0aGUgQUNQSSB0YWJsZSBmaWVsZHMuDQorDQorICBAcGFyYW0gW2luXSBUcmFjZSAgICAgICAg ICAgICAgSWYgVFJVRSwgdHJhY2UgdGhlIEFDUEkgZmllbGRzLg0KKyAgQHBhcmFtIFtpbl0gUHRy ICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorICBA cGFyYW0gW2luXSBBY3BpVGFibGVMZW5ndGggICAgTGVuZ3RoIG9mIHRoZSBBQ1BJIHRhYmxlLg0K KyAgQHBhcmFtIFtpbl0gQWNwaVRhYmxlUmV2aXNpb24gIFJldmlzaW9uIG9mIHRoZSBBQ1BJIHRh YmxlLg0KKyovDQorVk9JRA0KK0VGSUFQSQ0KK1BhcnNlQWNwaUJncnQgKA0KKyAgSU4gQk9PTEVB TiBUcmFjZSwNCisgIElOIFVJTlQ4KiAgUHRyLA0KKyAgSU4gVUlOVDMyICBBY3BpVGFibGVMZW5n dGgsDQorICBJTiBVSU5UOCAgIEFjcGlUYWJsZVJldmlzaW9uDQorICApDQorew0KKyAgaWYgKCFU cmFjZSkgew0KKyAgICByZXR1cm47DQorICB9DQorDQorICBQYXJzZUFjcGkgKA0KKyAgICBUcmFj ZSwNCisgICAgMCwNCisgICAgIkJHUlQiLA0KKyAgICBQdHIsDQorICAgIEFjcGlUYWJsZUxlbmd0 aCwNCisgICAgUEFSU0VSX1BBUkFNUyAoQmdydFBhcnNlcikNCisgICAgKTsNCit9DQpkaWZmIC0t Z2l0IGEvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvUGFyc2Vy cy9EYmcyL0RiZzJQYXJzZXIuYyBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdD b21tYW5kTGliL1BhcnNlcnMvRGJnMi9EYmcyUGFyc2VyLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzBhMTMy OGNjOTc2NTZmNWQ2NTFlYjAxZTgwZGYzMjM2MjkxYTRhDQotLS0gL2Rldi9udWxsDQorKysgYi9T aGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9QYXJzZXJzL0RiZzIv RGJnMlBhcnNlci5jDQpAQCAtMCwwICsxLDI0MiBAQA0KKy8qKg0KKyAgREJHMiB0YWJsZSBwYXJz ZXINCisNCisgIENvcHlyaWdodCAoYykgMjAxNiAtIDIwMTgsIEFSTSBMaW1pdGVkLiBBbGwgcmln aHRzIHJlc2VydmVkLg0KKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVy aWFscw0KKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMg YW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQorICB3aGljaCBhY2NvbXBhbmllcyB0 aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZv dW5kIGF0DQorICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhw DQorDQorICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0Ug T04gQU4gIkFTIElTIiBCQVNJUywNCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRB VElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQorDQorICBAcGFy IFJlZmVyZW5jZShzKToNCisgICAgLSBNaWNyb3NvZnQgRGVidWcgUG9ydCBUYWJsZSAyIChEQkcy KSBTcGVjaWZpY2F0aW9uIC0gRGVjZW1iZXIgMTAsIDIwMTUuDQorKiovDQorDQorI2luY2x1ZGUg PEluZHVzdHJ5U3RhbmRhcmQvRGVidWdQb3J0MlRhYmxlLmg+DQorI2luY2x1ZGUgPExpYnJhcnkv VWVmaUxpYi5oPg0KKyNpbmNsdWRlICJBY3BpUGFyc2VyLmgiDQorI2luY2x1ZGUgIkFjcGlUYWJs ZVBhcnNlci5oIg0KKw0KKy8vIExvY2FsIHZhcmlhYmxlcyBwb2ludGluZyB0byB0aGUgdGFibGUg ZmllbGRzDQorU1RBVElDIENPTlNUIFVJTlQzMiogT2Zmc2V0RGJnRGV2aWNlSW5mbzsNCitTVEFU SUMgQ09OU1QgVUlOVDMyKiBOdW1iZXJEYmdEZXZpY2VJbmZvOw0KK1NUQVRJQyBDT05TVCBVSU5U MTYqIERiZ0RldkluZm9MZW47DQorU1RBVElDIENPTlNUIFVJTlQ4KiAgR2FzQ291bnQ7DQorU1RB VElDIENPTlNUIFVJTlQxNiogTmFtZVNwYWNlU3RyaW5nTGVuZ3RoOw0KK1NUQVRJQyBDT05TVCBV SU5UMTYqIE5hbWVTcGFjZVN0cmluZ09mZnNldDsNCitTVEFUSUMgQ09OU1QgVUlOVDE2KiBPRU1E YXRhTGVuZ3RoOw0KK1NUQVRJQyBDT05TVCBVSU5UMTYqIE9FTURhdGFPZmZzZXQ7DQorU1RBVElD IENPTlNUIFVJTlQxNiogQmFzZUFkZHJSZWdPZmZzZXQ7DQorU1RBVElDIENPTlNUIFVJTlQxNiog QWRkclNpemVPZmZzZXQ7DQorU1RBVElDIEFDUElfREVTQ1JJUFRJT05fSEVBREVSX0lORk8gQWNw aUhkckluZm87DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gVmFsaWRhdGVzIHRoZSBOYW1lU3BhY2Ug c3RyaW5nIGxlbmd0aC4NCisNCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgUG9pbnRlciB0byB0aGUg c3RhcnQgb2YgdGhlIGJ1ZmZlci4NCisgIEBwYXJhbSBbaW5dIENvbnRleHQgUG9pbnRlciB0byBj b250ZXh0IHNwZWNpZmljIGluZm9ybWF0aW9uIGUuZy4gdGhpcw0KKyAgICAgICAgICAgICAgICAg ICAgICBjb3VsZCBiZSBhIHBvaW50ZXIgdG8gdGhlIEFDUEkgdGFibGUgaGVhZGVyLg0KKyovDQor U1RBVElDDQorVk9JRA0KK0VGSUFQSQ0KK1ZhbGlkYXRlTmFtZVNwYWNlU3RyTGVuICgNCisgIElO ICBVSU5UOCogUHRyLA0KKyAgSU4gIFZPSUQqICBDb250ZXh0DQorICApOw0KKw0KKy8qKiBUaGlz IGZ1bmN0aW9uIHBhcnNlcyB0aGUgZGVidWcgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4N CisNCisgIEBwYXJhbSBbaW5dICBQdHIgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBi dWZmZXIuDQorICBAcGFyYW0gW291dF0gTGVuZ3RoICBQb2ludGVyIGluIHdoaWNoIHRoZSBsZW5n dGggb2YgdGhlIGRlYnVnDQorICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgaW5mb3JtYXRp b24gaXMgcmV0dXJuZWQuDQorKi8NCitTVEFUSUMNCitWT0lEDQorRUZJQVBJDQorRHVtcERiZ0Rl dmljZUluZm8gKA0KKyAgSU4gIFVJTlQ4KiAgUHRyLA0KKyAgT1VUIFVJTlQzMiogTGVuZ3RoDQor ICApOw0KKw0KKy8vLyBBbiBBQ1BJX1BBUlNFUiBhcnJheSBkZXNjcmliaW5nIHRoZSBBQ1BJIERC RzIgdGFibGUuDQorU1RBVElDIENPTlNUIEFDUElfUEFSU0VSIERiZzJQYXJzZXJbXSA9IHsNCisg IFBBUlNFX0FDUElfSEVBREVSICgmQWNwaUhkckluZm8pLA0KKyAge0wiT2Zmc2V0RGJnRGV2aWNl SW5mbyIsIDQsIDM2LCBMIjB4JXgiLCBOVUxMLA0KKyAgIChWT0lEKiopJk9mZnNldERiZ0Rldmlj ZUluZm8sIE5VTEwsIE5VTEx9LA0KKyAge0wiTnVtYmVyRGJnRGV2aWNlSW5mbyIsIDQsIDQwLCBM IiVkIiwgTlVMTCwNCisgICAoVk9JRCoqKSZOdW1iZXJEYmdEZXZpY2VJbmZvLCBOVUxMLCBOVUxM fQ0KK307DQorDQorLy8vIEFuIEFDUElfUEFSU0VSIGFycmF5IGRlc2NyaWJpbmcgdGhlIGRlYnVn IGRldmljZSBpbmZvcm1hdGlvbi4NCitTVEFUSUMgQ09OU1QgQUNQSV9QQVJTRVIgRGJnRGV2SW5m b1BhcnNlcltdID0gew0KKyAge0wiUmV2aXNpb24iLCAxLCAwLCBMIjB4JXgiLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMfSwNCisgIHtMIkxlbmd0aCIsIDIsIDEsIEwiJWQiLCBOVUxMLCAoVk9JRCoq KSZEYmdEZXZJbmZvTGVuLCBOVUxMLCBOVUxMfSwNCisNCisgIHtMIkdlbmVyaWMgQWRkcmVzcyBS ZWdpc3RlcnMgQ291bnQiLCAxLCAzLCBMIjB4JXgiLCBOVUxMLA0KKyAgIChWT0lEKiopJkdhc0Nv dW50LCBOVUxMLCBOVUxMfSwNCisgIHtMIk5hbWVTcGFjZSBTdHJpbmcgTGVuZ3RoIiwgMiwgNCwg TCIlZCIsIE5VTEwsDQorICAgKFZPSUQqKikmTmFtZVNwYWNlU3RyaW5nTGVuZ3RoLCBWYWxpZGF0 ZU5hbWVTcGFjZVN0ckxlbiwgTlVMTH0sDQorICB7TCJOYW1lU3BhY2UgU3RyaW5nIE9mZnNldCIs IDIsIDYsIEwiMHgleCIsIE5VTEwsDQorICAgKFZPSUQqKikmTmFtZVNwYWNlU3RyaW5nT2Zmc2V0 LCBOVUxMLCBOVUxMfSwNCisgIHtMIk9FTSBEYXRhIExlbmd0aCIsIDIsIDgsIEwiJWQiLCBOVUxM LCAoVk9JRCoqKSZPRU1EYXRhTGVuZ3RoLA0KKyAgIE5VTEwsIE5VTEx9LA0KKyAge0wiT0VNIERh dGEgT2Zmc2V0IiwgMiwgMTAsIEwiMHgleCIsIE5VTEwsIChWT0lEKiopJk9FTURhdGFPZmZzZXQs DQorICAgTlVMTCwgTlVMTH0sDQorDQorICB7TCJQb3J0IFR5cGUiLCAyLCAxMiwgTCIweCV4Iiwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJQb3J0IFN1YlR5cGUiLCAyLCAxNCwgTCIw eCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJSZXNlcnZlZCIsIDIsIDE2LCBM IiV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorDQorICB7TCJCYXNlIEFkZHJlc3MgUmVn aXN0ZXIgT2Zmc2V0IiwgMiwgMTgsIEwiMHgleCIsIE5VTEwsDQorICAgKFZPSUQqKikmQmFzZUFk ZHJSZWdPZmZzZXQsIE5VTEwsIE5VTEx9LA0KKyAge0wiQWRkcmVzcyBTaXplIE9mZnNldCIsIDIs IDIwLCBMIjB4JXgiLCBOVUxMLA0KKyAgIChWT0lEKiopJkFkZHJTaXplT2Zmc2V0LCBOVUxMLCBO VUxMfQ0KK307DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGVzIHRoZSBOYW1lU3BhY2Ug c3RyaW5nIGxlbmd0aC4NCisNCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgUG9pbnRlciB0byB0aGUg c3RhcnQgb2YgdGhlIGJ1ZmZlci4NCisgIEBwYXJhbSBbaW5dIENvbnRleHQgUG9pbnRlciB0byBj b250ZXh0IHNwZWNpZmljIGluZm9ybWF0aW9uIGUuZy4gdGhpcw0KKyAgICAgICAgICAgICAgICAg ICAgICBjb3VsZCBiZSBhIHBvaW50ZXIgdG8gdGhlIEFDUEkgdGFibGUgaGVhZGVyLg0KKyovDQor U1RBVElDDQorVk9JRA0KK0VGSUFQSQ0KK1ZhbGlkYXRlTmFtZVNwYWNlU3RyTGVuICgNCisgIElO IFVJTlQ4KiBQdHIsDQorICBJTiBWT0lEKiAgQ29udGV4dA0KKyAgKQ0KK3sNCisgIFVJTlQxNiBO YW1lU3BhY2VTdHJMZW4gPSAqKFVJTlQxNiopUHRyOw0KKyAgaWYgKE5hbWVTcGFjZVN0ckxlbiA8 IDIpIHsNCisgICAgSW5jcmVtZW50RXJyb3JDb3VudCAoKTsNCisgICAgUHJpbnQgKA0KKyAgICAg IEwiXG5FUlJPUjogTmFtZXNwYWNlU3RyaW5nIExlbmd0aCA9ICVkLiBJZiBubyBOYW1lc3BhY2Ug ZGV2aWNlIGV4aXN0cyxcbiINCisgICAgICAgIiAgICB0aGVuIE5hbWVzcGFjZVN0cmluZ1tdIG11 c3QgY29udGFpbiBhIHBlcmlvZCAnLiciLA0KKyAgICAgIE5hbWVTcGFjZVN0ckxlbg0KKyAgICAg ICk7DQorICB9DQorfQ0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUgZGVidWcgZGV2 aWNlIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4NCisNCisgIEBwYXJhbSBbaW5dICBQdHIgICAgIFBv aW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorICBAcGFyYW0gW291dF0gUHRyICAg ICBQb2ludGVyIGluIHdoaWNoIHRoZSBsZW5ndGggb2YgdGhlIGRlYnVnDQorICAgICAgICAgICAg ICAgICAgICAgICBkZXZpY2UgaW5mb3JtYXRpb24gaXMgcmV0dXJuZWQuDQorKi8NCitTVEFUSUMN CitWT0lEDQorRUZJQVBJDQorRHVtcERiZ0RldmljZUluZm8gKA0KKyAgSU4gIFVJTlQ4KiAgUHRy LA0KKyAgT1VUIFVJTlQzMiogTGVuZ3RoDQorICApDQorew0KKyAgVUlOVDE2ICBJbmRleDsNCisg IFVJTlQ4KiAgRGF0YVB0cjsNCisgIFVJTlQzMiogQWRkclNpemU7DQorDQorICAvLyBQYXJzZSB0 aGUgZGVidWcgZGV2aWNlIGluZm8gdG8gZ2V0IHRoZSBMZW5ndGgNCisgIFBhcnNlQWNwaSAoDQor ICAgIEZBTFNFLA0KKyAgICAwLA0KKyAgICAiRGVidWcgRGV2aWNlIEluZm8iLA0KKyAgICBQdHIs DQorICAgIDMsICAvLyBMZW5ndGggaXMgMiBieXRlcyBzdGFydGluZyBhdCBvZmZzZXQgMQ0KKyAg ICBQQVJTRVJfUEFSQU1TIChEYmdEZXZJbmZvUGFyc2VyKQ0KKyAgICApOw0KKw0KKyAgUGFyc2VB Y3BpICgNCisgICAgVFJVRSwNCisgICAgMiwNCisgICAgIkRlYnVnIERldmljZSBJbmZvIiwNCisg ICAgUHRyLA0KKyAgICAqRGJnRGV2SW5mb0xlbiwNCisgICAgUEFSU0VSX1BBUkFNUyAoRGJnRGV2 SW5mb1BhcnNlcikNCisgICAgKTsNCisNCisgIC8vIEdBUyBhbmQgQWRkcmVzcyBTaXplDQorICBJ bmRleCA9IDA7DQorICBEYXRhUHRyID0gUHRyICsgKCpCYXNlQWRkclJlZ09mZnNldCk7DQorICBB ZGRyU2l6ZSA9IChVSU5UMzIqKShQdHIgKyAoKkFkZHJTaXplT2Zmc2V0KSk7DQorICB3aGlsZSAo SW5kZXggPCAoKkdhc0NvdW50KSkgew0KKyAgICBQcmludEZpZWxkTmFtZSAoNCwgTCJCYXNlQWRk cmVzc1JlZ2lzdGVyIik7DQorICAgIER1bXBHYXNTdHJ1Y3QgKERhdGFQdHIsIDQpOw0KKyAgICBQ cmludEZpZWxkTmFtZSAoNCwgTCJBZGRyZXNzIFNpemUiKTsNCisgICAgUHJpbnQgKEwiMHgleFxu IiwgQWRkclNpemVbSW5kZXhdKTsNCisgICAgRGF0YVB0ciArPSBHQVNfTEVOR1RIOw0KKyAgICBJ bmRleCsrOw0KKyAgfQ0KKw0KKyAgLy8gTmFtZVNwYWNlIFN0cmluZw0KKyAgSW5kZXggPSAwOw0K KyAgRGF0YVB0ciA9IFB0ciArICgqTmFtZVNwYWNlU3RyaW5nT2Zmc2V0KTsNCisgIFByaW50Rmll bGROYW1lICg0LCBMIk5hbWVTcGFjZSBTdHJpbmciKTsNCisgIHdoaWxlIChJbmRleCA8ICgqTmFt ZVNwYWNlU3RyaW5nTGVuZ3RoKSkgew0KKyAgICBQcmludCAoTCIlYyIsIERhdGFQdHJbSW5kZXgr K10pOw0KKyAgfQ0KKyAgUHJpbnQgKEwiXG4iKTsNCisNCisgIC8vIE9FTSBEYXRhDQorICBJbmRl eCA9IDA7DQorICBEYXRhUHRyID0gUHRyICsgKCpPRU1EYXRhT2Zmc2V0KTsNCisgIFByaW50Rmll bGROYW1lICg0LCBMIk9FTSBEYXRhIik7DQorICB3aGlsZSAoSW5kZXggPCAoKk9FTURhdGFMZW5n dGgpKSB7DQorICAgIFByaW50IChMIiV4ICIsIERhdGFQdHJbSW5kZXgrK10pOw0KKyAgICBpZiAo KEluZGV4ICYgNykgPT0gMCkgew0KKyAgICAgIFByaW50IChMIlxuJS0qcyAgICIsIE9VVFBVVF9G SUVMRF9DT0xVTU5fV0lEVEgsIEwiIik7DQorICAgIH0NCisgIH0NCisNCisgICpMZW5ndGggPSAq RGJnRGV2SW5mb0xlbjsNCit9DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBBQ1BJ IERCRzIgdGFibGUuDQorICBXaGVuIHRyYWNlIGlzIGVuYWJsZWQgdGhpcyBmdW5jdGlvbiBwYXJz ZXMgdGhlIERCRzIgdGFibGUgYW5kDQorICB0cmFjZXMgdGhlIEFDUEkgdGFibGUgZmllbGRzLg0K Kw0KKyAgVGhpcyBmdW5jdGlvbiBhbHNvIHBlcmZvcm1zIHZhbGlkYXRpb24gb2YgdGhlIEFDUEkg dGFibGUgZmllbGRzLg0KKw0KKyAgQHBhcmFtIFtpbl0gVHJhY2UgICAgICAgICAgICAgIElmIFRS VUUsIHRyYWNlIHRoZSBBQ1BJIGZpZWxkcy4NCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgICAgICAg ICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLg0KKyAgQHBhcmFtIFtpbl0g QWNwaVRhYmxlTGVuZ3RoICAgIExlbmd0aCBvZiB0aGUgQUNQSSB0YWJsZS4NCisgIEBwYXJhbSBb aW5dIEFjcGlUYWJsZVJldmlzaW9uICBSZXZpc2lvbiBvZiB0aGUgQUNQSSB0YWJsZS4NCisqLw0K K1ZPSUQNCitFRklBUEkNCitQYXJzZUFjcGlEYmcyICgNCisgIElOIEJPT0xFQU4gVHJhY2UsDQor ICBJTiBVSU5UOCogIFB0ciwNCisgIElOIFVJTlQzMiAgQWNwaVRhYmxlTGVuZ3RoLA0KKyAgSU4g VUlOVDggICBBY3BpVGFibGVSZXZpc2lvbg0KKyAgKQ0KK3sNCisgIFVJTlQzMiBPZmZzZXQ7DQor ICBVSU5UMzIgRGJnRGV2aWNlSW5mb0xlbmd0aDsNCisgIFVJTlQ4KiBEZXZJbmZvUHRyOw0KKw0K KyAgaWYgKCFUcmFjZSkgew0KKyAgICByZXR1cm47DQorICB9DQorDQorICBPZmZzZXQgPSBQYXJz ZUFjcGkgKA0KKyAgICAgICAgICAgICBUUlVFLA0KKyAgICAgICAgICAgICAwLA0KKyAgICAgICAg ICAgICAiREJHMiIsDQorICAgICAgICAgICAgIFB0ciwNCisgICAgICAgICAgICAgQWNwaVRhYmxl TGVuZ3RoLA0KKyAgICAgICAgICAgICBQQVJTRVJfUEFSQU1TIChEYmcyUGFyc2VyKQ0KKyAgICAg ICAgICAgICApOw0KKyAgRGV2SW5mb1B0ciA9IFB0ciArIE9mZnNldDsNCisNCisgIHdoaWxlIChP ZmZzZXQgPCBBY3BpVGFibGVMZW5ndGgpIHsNCisgICAgRHVtcERiZ0RldmljZUluZm8gKA0KKyAg ICAgIERldkluZm9QdHIsDQorICAgICAgJkRiZ0RldmljZUluZm9MZW5ndGgNCisgICAgICApOw0K KyAgICBPZmZzZXQgKz0gRGJnRGV2aWNlSW5mb0xlbmd0aDsNCisgICAgRGV2SW5mb1B0ciArPSBE YmdEZXZpY2VJbmZvTGVuZ3RoOw0KKyAgfQ0KK30NCmRpZmYgLS1naXQgYS9TaGVsbFBrZy9MaWJy YXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9QYXJzZXJzL0RzZHQvRHNkdFBhcnNlci5j IGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvUGFyc2Vycy9E c2R0L0RzZHRQYXJzZXIuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmNDU5YTEyMDk5Y2FlODg4Njc2MTIzZThk NTY5NDYwZmQ2ODRkYjINCi0tLSAvZGV2L251bGwNCisrKyBiL1NoZWxsUGtnL0xpYnJhcnkvVWVm aVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL1BhcnNlcnMvRHNkdC9Ec2R0UGFyc2VyLmMNCkBAIC0w LDAgKzEsNDcgQEANCisvKioNCisgIERTRFQgdGFibGUgcGFyc2VyDQorDQorICBDb3B5cmlnaHQg KGMpIDIwMTYgLSAyMDE4LCBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgIFRo aXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgIGFyZSBsaWNlbnNl ZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRo ZSBCU0QgTGljZW5zZQ0KKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBU aGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KKyAgaHR0cDovL29w ZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KKw0KKyAgVEhFIFBST0dSQU0g SVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMs DQorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBF SVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KKw0KKyAgQHBhciBSZWZlcmVuY2Uocyk6DQorICAg IC0gQUNQSSA2LjIgU3BlY2lmaWNhdGlvbiAtIEVycmF0YSBBLCBTZXB0ZW1iZXIgMjAxNw0KKyoq Lw0KKw0KKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL0FjcGkuaD4NCisjaW5jbHVkZSA8TGli cmFyeS9VZWZpTGliLmg+DQorI2luY2x1ZGUgIkFjcGlQYXJzZXIuaCINCisjaW5jbHVkZSAiQWNw aVRhYmxlUGFyc2VyLmgiDQorDQorLyoqIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBBQ1BJIERT RFQgdGFibGUuDQorICBXaGVuIHRyYWNlIGlzIGVuYWJsZWQgdGhpcyBmdW5jdGlvbiBwYXJzZXMg dGhlIERTRFQgdGFibGUgYW5kDQorICB0cmFjZXMgdGhlIEFDUEkgdGFibGUgZmllbGRzLg0KKyAg Rm9yIHRoZSBEU0RUIHRhYmxlIG9ubHkgdGhlIEFDUEkgaGVhZGVyIGZpZWxkcyBhcmUgcGFyc2Vk IGFuZA0KKyAgdHJhY2VkLg0KKw0KKyAgQHBhcmFtIFtpbl0gVHJhY2UgICAgICAgICAgICAgIElm IFRSVUUsIHRyYWNlIHRoZSBBQ1BJIGZpZWxkcy4NCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgICAg ICAgICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLg0KKyAgQHBhcmFtIFtp bl0gQWNwaVRhYmxlTGVuZ3RoICAgIExlbmd0aCBvZiB0aGUgQUNQSSB0YWJsZS4NCisgIEBwYXJh bSBbaW5dIEFjcGlUYWJsZVJldmlzaW9uICBSZXZpc2lvbiBvZiB0aGUgQUNQSSB0YWJsZS4NCisq Lw0KK1ZPSUQNCitFRklBUEkNCitQYXJzZUFjcGlEc2R0ICgNCisgIElOIEJPT0xFQU4gVHJhY2Us DQorICBJTiBVSU5UOCogIFB0ciwNCisgIElOIFVJTlQzMiAgQWNwaVRhYmxlTGVuZ3RoLA0KKyAg SU4gVUlOVDggICBBY3BpVGFibGVSZXZpc2lvbg0KKyAgKQ0KK3sNCisgIGlmICghVHJhY2UpIHsN CisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgRHVtcEFjcGlIZWFkZXIgKFB0cik7DQorfQ0KZGlm ZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL1Bh cnNlcnMvRmFkdC9GYWR0UGFyc2VyLmMgYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlW aWV3Q29tbWFuZExpYi9QYXJzZXJzL0ZhZHQvRmFkdFBhcnNlci5jDQpuZXcgZmlsZSBtb2RlIDEw MDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRj Y2IyYWMzYmQ3Njk4YmJlMWNlMDY3OTY0YmU1MzUxOTgxM2RiMQ0KLS0tIC9kZXYvbnVsbA0KKysr IGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvUGFyc2Vycy9G YWR0L0ZhZHRQYXJzZXIuYw0KQEAgLTAsMCArMSwyNjEgQEANCisvKioNCisgIEZBRFQgdGFibGUg cGFyc2VyDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMTYgLSAyMDE4LCBBUk0gTGltaXRlZC4gQWxs IHJpZ2h0cyByZXNlcnZlZC4NCisgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBt YXRlcmlhbHMNCisgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRl cm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KKyAgd2hpY2ggYWNjb21wYW5p ZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBi ZSBmb3VuZCBhdA0KKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNl LnBocA0KKw0KKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNF TlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVT RU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KKw0KKyAg QHBhciBSZWZlcmVuY2Uocyk6DQorICAgIC0gQUNQSSA2LjIgU3BlY2lmaWNhdGlvbiAtIEVycmF0 YSBBLCBTZXB0ZW1iZXIgMjAxNw0KKyoqLw0KKw0KKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJk L0FjcGkuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQorI2luY2x1ZGUgIkFjcGlQ YXJzZXIuaCINCisjaW5jbHVkZSAiQWNwaVRhYmxlUGFyc2VyLmgiDQorDQorLy8gTG9jYWwgdmFy aWFibGVzDQorU1RBVElDIENPTlNUIFVJTlQzMiogRHNkdEFkZHJlc3M7DQorU1RBVElDIENPTlNU IFVJTlQ2NCogWF9Ec2R0QWRkcmVzczsNCitTVEFUSUMgQ09OU1QgVUlOVDgqICBGYWR0TWlub3JS ZXZpc2lvbjsNCitTVEFUSUMgQUNQSV9ERVNDUklQVElPTl9IRUFERVJfSU5GTyBBY3BpSGRySW5m bzsNCisNCisvKiogQSBtYWNybyBkZWZpbmluZyB0aGUgSGFyZHdhcmUgcmVkdWNlZCBBQ1BJIGZs YWcNCisqLw0KKyNkZWZpbmUgSFdfUkVEVUNFRF9BQ1BJICAgQklUMjANCisNCisvLyBGb3J3YXJk IGRlY2xhcmF0aW9ucw0KK0NPTlNUIEFDUElfREVTQ1JJUFRJT05fSEVBREVSX0lORk8qIENPTlNU DQorRUZJQVBJDQorR2V0QWNwaVhzZHRIZWFkZXJJbmZvICgNCisgIFZPSUQNCispOw0KKw0KK1NU QVRJQw0KK1ZPSUQNCitFRklBUEkNCitWYWxpZGF0ZUZpcm13YXJlQ3RybCAoDQorICBJTiBVSU5U OCogUHRyLA0KKyAgSU4gVk9JRCogIENvbnRleHQNCispOw0KKw0KK1NUQVRJQw0KK1ZPSUQNCitF RklBUEkNCitWYWxpZGF0ZVhGaXJtd2FyZUN0cmwgKA0KKyAgSU4gVUlOVDgqIFB0ciwNCisgIElO IFZPSUQqICBDb250ZXh0DQorKTsNCisNCitTVEFUSUMNCitWT0lEDQorRUZJQVBJDQorVmFsaWRh dGVGbGFncyAoDQorICBJTiBVSU5UOCogUHRyLA0KKyAgSU4gVk9JRCogIENvbnRleHQNCispOw0K Kw0KKy8qKiBBbiBBQ1BJX1BBUlNFUiBhcnJheSBkZXNjcmliaW5nIHRoZSBBQ1BJIEZBRFQgVGFi bGUuDQorKi8NCitTVEFUSUMgQ09OU1QgQUNQSV9QQVJTRVIgRmFkdFBhcnNlcltdID0gew0KKyAg UEFSU0VfQUNQSV9IRUFERVIgKCZBY3BpSGRySW5mbyksDQorICB7TCJGSVJNV0FSRV9DVFJMIiwg NCwgMzYsIEwiMHgleCIsIE5VTEwsIE5VTEwsIFZhbGlkYXRlRmlybXdhcmVDdHJsLCBOVUxMfSwN CisgIHtMIkRTRFQiLCA0LCA0MCwgTCIweCV4IiwgTlVMTCwgKFZPSUQqKikmRHNkdEFkZHJlc3Ms IE5VTEwsIE5VTEx9LA0KKyAge0wiUmVzZXJ2ZWQiLCAxLCA0NCwgTCIleCIsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEx9LA0KKyAge0wiUHJlZmVycmVkX1BNX1Byb2ZpbGUiLCAxLCA0NSwgTCIweCV4 IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJTQ0lfSU5UIiwgMiwgNDYsIEwiMHgl eCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiU01JX0NNRCIsIDQsIDQ4LCBMIjB4 JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIkFDUElfRU5BQkxFIiwgMSwgNTIs IEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiQUNQSV9ESVNBQkxFIiwg MSwgNTMsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUzRCSU9TX1JF USIsIDEsIDU0LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIlBTVEFU RV9DTlQiLCAxLCA1NSwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJQ TTFhX0VWVF9CTEsiLCA0LCA1NiwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQor ICB7TCJQTTFiX0VWVF9CTEsiLCA0LCA2MCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TH0sDQorICB7TCJQTTFhX0NOVF9CTEsiLCA0LCA2NCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTH0sDQorICB7TCJQTTFiX0NOVF9CTEsiLCA0LCA2OCwgTCIweCV4IiwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTH0sDQorICB7TCJQTTJfQ05UX0JMSyIsIDQsIDcyLCBMIjB4JXgiLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIlBNX1RNUl9CTEsiLCA0LCA3NiwgTCIweCV4Iiwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJHUEUwX0JMSyIsIDQsIDgwLCBMIjB4JXgi LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIkdQRTFfQkxLIiwgNCwgODQsIEwiMHgl eCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUE0xX0VWVF9MRU4iLCAxLCA4OCwg TCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJQTTFfQ05UX0xFTiIsIDEs IDg5LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIlBNMl9DTlRfTEVO IiwgMSwgOTAsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUE1fVE1S X0xFTiIsIDEsIDkxLCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIkdQ RTBfQkxLX0xFTiIsIDEsIDkyLCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisg IHtMIkdQRTFfQkxLX0xFTiIsIDEsIDkzLCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM fSwNCisgIHtMIkdQRTFfQkFTRSIsIDEsIDk0LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMfSwNCisgIHtMIkNTVF9DTlQiLCAxLCA5NSwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTH0sDQorICB7TCJQX0xWTDJfTEFUIiwgMiwgOTYsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEx9LA0KKyAge0wiUF9MVkwzX0xBVCIsIDIsIDk4LCBMIjB4JXgiLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMfSwNCisgIHtMIkZMVVNIX1NJWkUiLCAyLCAxMDAsIEwiMHgleCIsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiRkxVU0hfU1RSSURFIiwgMiwgMTAyLCBMIjB4JXgi LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIkRVVFlfT0ZGU0VUIiwgMSwgMTA0LCBM IjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIkRVVFlfV0lEVEgiLCAxLCAx MDUsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiREFZX0FMUk0iLCAx LCAxMDYsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiTU9OX0FMUk0i LCAxLCAxMDcsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiQ0VOVFVS WSIsIDEsIDEwOCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJJQVBD X0JPT1RfQVJDSCIsIDIsIDEwOSwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQor ICB7TCJSZXNlcnZlZCIsIDEsIDExMSwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0s DQorICB7TCJGbGFncyIsIDQsIDExMiwgTCIweCV4IiwgTlVMTCwgTlVMTCwgVmFsaWRhdGVGbGFn cywgTlVMTH0sDQorICB7TCJSRVNFVF9SRUciLCAxMiwgMTE2LCBOVUxMLCBEdW1wR2FzLCBOVUxM LCBOVUxMLCBOVUxMfSwNCisgIHtMIlJFU0VUX1ZBTFVFIiwgMSwgMTI4LCBMIjB4JXgiLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIkFSTV9CT09UX0FSQ0giLCAyLCAxMjksIEwiMHgl eCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiRkFEVCBNaW5vciBWZXJzaW9uIiwg MSwgMTMxLCBMIjB4JXgiLCBOVUxMLCAoVk9JRCoqKSZGYWR0TWlub3JSZXZpc2lvbiwNCisgICAg TlVMTCwgTlVMTH0sDQorICB7TCJYX0ZJUk1XQVJFX0NUUkwiLCA4LCAxMzIsIEwiMHglbHgiLCBO VUxMLCBOVUxMLA0KKyAgICBWYWxpZGF0ZVhGaXJtd2FyZUN0cmwsIE5VTEx9LA0KKyAge0wiWF9E U0RUIiwgOCwgMTQwLCBMIjB4JWx4IiwgTlVMTCwgKFZPSUQqKikmWF9Ec2R0QWRkcmVzcywgTlVM TCwgTlVMTH0sDQorICB7TCJYX1BNMWFfRVZUX0JMSyIsIDEyLCAxNDgsIE5VTEwsIER1bXBHYXMs IE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiWF9QTTFiX0VWVF9CTEsiLCAxMiwgMTYwLCBOVUxM LCBEdW1wR2FzLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIlhfUE0xYV9DTlRfQkxLIiwgMTIs IDE3MiwgTlVMTCwgRHVtcEdhcywgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJYX1BNMWJfQ05U X0JMSyIsIDEyLCAxODQsIE5VTEwsIER1bXBHYXMsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wi WF9QTTJfQ05UX0JMSyIsIDEyLCAxOTYsIE5VTEwsIER1bXBHYXMsIE5VTEwsIE5VTEwsIE5VTEx9 LA0KKyAge0wiWF9QTV9UTVJfQkxLIiwgMTIsIDIwOCwgTlVMTCwgRHVtcEdhcywgTlVMTCwgTlVM TCwgTlVMTH0sDQorICB7TCJYX0dQRTBfQkxLIiwgMTIsIDIyMCwgTlVMTCwgRHVtcEdhcywgTlVM TCwgTlVMTCwgTlVMTH0sDQorICB7TCJYX0dQRTFfQkxLIiwgMTIsIDIzMiwgTlVMTCwgRHVtcEdh cywgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJTTEVFUF9DT05UUk9MX1JFRyIsIDEyLCAyNDQs IE5VTEwsIER1bXBHYXMsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiU0xFRVBfU1RBVFVTX1JF RyIsIDEyLCAyNTYsIE5VTEwsIER1bXBHYXMsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiSHlw ZXJ2aXNvciBWZW5kb3JJZGVudGl0eSIsIDgsIDI2OCwgTCIlbHgiLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMfQ0KK307DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGVzIHRoZSBGaXJtd2Fy ZSBDb250cm9sIEZpZWxkLg0KKw0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICBQb2ludGVyIHRvIHRo ZSBzdGFydCBvZiB0aGUgZmllbGQgZGF0YS4NCisgIEBwYXJhbSBbaW5dIENvbnRleHQgUG9pbnRl ciB0byBjb250ZXh0IHNwZWNpZmljIGluZm9ybWF0aW9uIGUuZy4gdGhpcw0KKyAgICAgICAgICAg ICAgICAgICAgICBjb3VsZCBiZSBhIHBvaW50ZXIgdG8gdGhlIEFDUEkgdGFibGUgaGVhZGVyLg0K KyovDQorU1RBVElDDQorVk9JRA0KK0VGSUFQSQ0KK1ZhbGlkYXRlRmlybXdhcmVDdHJsICgNCisg IElOIFVJTlQ4KiBQdHIsDQorICBJTiBWT0lEKiAgQ29udGV4dA0KKykNCit7DQorI2lmIGRlZmlu ZWQgKE1ERV9DUFVfQVJNKSB8fCBkZWZpbmVkIChNREVfQ1BVX0FBUkNINjQpDQorICBpZiAoKihV SU5UMzIqKVB0ciAhPSAwKSB7DQorICAgIEluY3JlbWVudEVycm9yQ291bnQgKCk7DQorICAgIFBy aW50ICgNCisgICAgICBMIlxuRVJST1I6IEZpcm13YXJlIENvbnRyb2wgbXVzdCBiZSB6ZXJvIGZv ciBBUk0gcGxhdGZvcm1zLiINCisgICAgKTsNCisgIH0NCisjZW5kaWYNCit9DQorDQorLyoqIFRo aXMgZnVuY3Rpb24gdmFsaWRhdGVzIHRoZSBYX0Zpcm13YXJlIENvbnRyb2wgRmllbGQuDQorDQor ICBAcGFyYW0gW2luXSBQdHIgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaWVsZCBk YXRhLg0KKyAgQHBhcmFtIFtpbl0gQ29udGV4dCBQb2ludGVyIHRvIGNvbnRleHQgc3BlY2lmaWMg aW5mb3JtYXRpb24gZS5nLiB0aGlzDQorICAgICAgICAgICAgICAgICAgICAgIGNvdWxkIGJlIGEg cG9pbnRlciB0byB0aGUgQUNQSSB0YWJsZSBoZWFkZXIuDQorKi8NCitTVEFUSUMNCitWT0lEDQor RUZJQVBJDQorVmFsaWRhdGVYRmlybXdhcmVDdHJsICgNCisgIElOIFVJTlQ4KiBQdHIsDQorICBJ TiBWT0lEKiAgQ29udGV4dA0KKykNCit7DQorI2lmIGRlZmluZWQgKE1ERV9DUFVfQVJNKSB8fCBk ZWZpbmVkIChNREVfQ1BVX0FBUkNINjQpDQorICBpZiAoKihVSU5UNjQqKVB0ciAhPSAwKSB7DQor ICAgIEluY3JlbWVudEVycm9yQ291bnQgKCk7DQorICAgIFByaW50ICgNCisgICAgICBMIlxuRVJS T1I6IFggRmlybXdhcmUgQ29udHJvbCBtdXN0IGJlIHplcm8gZm9yIEFSTSBwbGF0Zm9ybXMuIg0K KyAgICApOw0KKyAgfQ0KKyNlbmRpZg0KK30NCisNCisvKiogVGhpcyBmdW5jdGlvbiB2YWxpZGF0 ZXMgdGhlIGZsYWdzLg0KKw0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICBQb2ludGVyIHRvIHRoZSBz dGFydCBvZiB0aGUgZmllbGQgZGF0YS4NCisgIEBwYXJhbSBbaW5dIENvbnRleHQgUG9pbnRlciB0 byBjb250ZXh0IHNwZWNpZmljIGluZm9ybWF0aW9uIGUuZy4gdGhpcw0KKyAgICAgICAgICAgICAg ICAgICAgICBjb3VsZCBiZSBhIHBvaW50ZXIgdG8gdGhlIEFDUEkgdGFibGUgaGVhZGVyLg0KKyov DQorU1RBVElDDQorVk9JRA0KK0VGSUFQSQ0KK1ZhbGlkYXRlRmxhZ3MgKA0KKyAgSU4gVUlOVDgq IFB0ciwNCisgIElOIFZPSUQqICBDb250ZXh0DQorKQ0KK3sNCisjaWYgZGVmaW5lZCAoTURFX0NQ VV9BUk0pIHx8IGRlZmluZWQgKE1ERV9DUFVfQUFSQ0g2NCkNCisgIGlmICgoKCooVUlOVDMyKilQ dHIpICYgSFdfUkVEVUNFRF9BQ1BJKSA9PSAwKSB7DQorICAgIEluY3JlbWVudEVycm9yQ291bnQg KCk7DQorICAgIFByaW50ICgNCisgICAgICBMIlxuRVJST1I6IEhXX1JFRFVDRURfQUNQSSBmbGFn IG11c3QgYmUgc2V0IGZvciBBUk0gcGxhdGZvcm1zLiINCisgICAgKTsNCisgIH0NCisjZW5kaWYN Cit9DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBBQ1BJIEZBRFQgdGFibGUuDQor ICBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUgRkFEVCB0YWJsZSBhbmQgb3B0aW9uYWxseSB0cmFj ZXMgdGhlIEFDUEkNCisgIHRhYmxlIGZpZWxkcy4NCisNCisgIFRoaXMgZnVuY3Rpb24gYWxzbyBw ZXJmb3JtcyB2YWxpZGF0aW9uIG9mIHRoZSBBQ1BJIHRhYmxlIGZpZWxkcy4NCisNCisgIEBwYXJh bSBbaW5dIFRyYWNlICAgICAgICAgICAgICBJZiBUUlVFLCB0cmFjZSB0aGUgQUNQSSBmaWVsZHMu DQorICBAcGFyYW0gW2luXSBQdHIgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQg b2YgdGhlIGJ1ZmZlci4NCisgIEBwYXJhbSBbaW5dIEFjcGlUYWJsZUxlbmd0aCAgICBMZW5ndGgg b2YgdGhlIEFDUEkgdGFibGUuDQorICBAcGFyYW0gW2luXSBBY3BpVGFibGVSZXZpc2lvbiAgUmV2 aXNpb24gb2YgdGhlIEFDUEkgdGFibGUuDQorKi8NCitWT0lEDQorRUZJQVBJDQorUGFyc2VBY3Bp RmFkdCAoDQorICBJTiBCT09MRUFOIFRyYWNlLA0KKyAgSU4gVUlOVDgqICBQdHIsDQorICBJTiBV SU5UMzIgIEFjcGlUYWJsZUxlbmd0aCwNCisgIElOIFVJTlQ4ICAgQWNwaVRhYmxlUmV2aXNpb24N CisgICkNCit7DQorICBVSU5UOCogIERzZHRQdHI7DQorDQorICBQYXJzZUFjcGkgKA0KKyAgICBU cmFjZSwNCisgICAgMCwNCisgICAgIkZBRFQiLA0KKyAgICBQdHIsDQorICAgIEFjcGlUYWJsZUxl bmd0aCwNCisgICAgUEFSU0VSX1BBUkFNUyAoRmFkdFBhcnNlcikNCisgICAgKTsNCisNCisgIGlm IChUcmFjZSkgew0KKyAgICBQcmludCAoTCJcblN1bW1hcnk6XG4iKTsNCisgICAgUHJpbnRGaWVs ZE5hbWUgKDIsIEwiRkFEVCBWZXJzaW9uIik7DQorICAgIFByaW50IChMIiVkLiVkXG4iLCAgKkFj cGlIZHJJbmZvLlJldmlzaW9uLCAqRmFkdE1pbm9yUmV2aXNpb24pOw0KKw0KKyAgICBpZiAoKkdl dEFjcGlYc2R0SGVhZGVySW5mbyAoKS0+T2VtVGFibGVJZCAhPSAqQWNwaUhkckluZm8uT2VtVGFi bGVJZCkgew0KKyAgICAgIEluY3JlbWVudEVycm9yQ291bnQgKCk7DQorICAgICAgUHJpbnQgKEwi RVJST1I6IE9FTSBUYWJsZSBJZCBkb2VzIG5vdCBtYXRjaCB3aXRoIFJTRFQvWFNEVC5cbiIpOw0K KyAgICB9DQorICB9DQorDQorICAvLyBJZiBYX0RTRFQgaXMgbm90IHplcm8gdGhlbiB1c2UgWF9E U0RUIGFuZCBpZ25vcmUgRFNEVCwNCisgIC8vIGVsc2UgdXNlIERTRFQuDQorICBpZiAoKlhfRHNk dEFkZHJlc3MgIT0gMCkgew0KKyAgICBEc2R0UHRyID0gKFVJTlQ4KikoVUlOVE4pKCpYX0RzZHRB ZGRyZXNzKTsNCisgIH0gZWxzZSBpZiAoKkRzZHRBZGRyZXNzICE9IDApIHsNCisgICAgRHNkdFB0 ciA9IChVSU5UOCopKFVJTlROKSgqRHNkdEFkZHJlc3MpOw0KKyAgfSBlbHNlIHsNCisgICAgLy8g Qm90aCBEU0RUIGFuZCBYX0RTRFQgY2Fubm90IGJlIHplcm8uDQorI2lmIGRlZmluZWQgKE1ERV9D UFVfQVJNKSB8fCBkZWZpbmVkIChNREVfQ1BVX0FBUkNINjQpDQorICAgIGlmIChUcmFjZSkgew0K KyAgICAgIC8vIFRoZSBEU0RUIFRhYmxlIGlzIG1hbmRhdG9yeSBmb3IgQVJNIHN5c3RlbXMNCisg ICAgICAvLyBhcyB0aGUgQ1BVIGluZm9ybWF0aW9uIE1VU1QgYmUgcHJlc2VudGVkIGluDQorICAg ICAgLy8gdGhlIERTRFQuDQorICAgICAgSW5jcmVtZW50RXJyb3JDb3VudCAoKTsNCisgICAgICBQ cmludCAoTCJFUlJPUjogQm90aCBYX0RTRFQgYW5kIERTRFQgYXJlIE5VTEwuXG4iKTsNCisgICAg fQ0KKyNlbmRpZg0KKyAgICByZXR1cm47DQorICB9DQorDQorICBQcm9jZXNzQWNwaVRhYmxlIChE c2R0UHRyKTsNCit9DQpkaWZmIC0tZ2l0IGEvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3Bp Vmlld0NvbW1hbmRMaWIvUGFyc2Vycy9HdGR0L0d0ZHRQYXJzZXIuYyBiL1NoZWxsUGtnL0xpYnJh cnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL1BhcnNlcnMvR3RkdC9HdGR0UGFyc2VyLmMN Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi5jZTk2NjA0ZWU2ZjgwMGFkZmJkODYxNjkxZmZhNzA5M2I5YmQ4MjM5DQot LS0gL2Rldi9udWxsDQorKysgYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29t bWFuZExpYi9QYXJzZXJzL0d0ZHQvR3RkdFBhcnNlci5jDQpAQCAtMCwwICsxLDI5MyBAQA0KKy8q Kg0KKyAgR1REVCB0YWJsZSBwYXJzZXINCisNCisgIENvcHlyaWdodCAoYykgMjAxNiAtIDIwMTgs IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAgVGhpcyBwcm9ncmFtIGFuZCB0 aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWls YWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQor ICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2Yg dGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQorICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGlj ZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQorDQorICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBV TkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCisgIFdJVEhPVVQgV0FS UkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9S IElNUExJRUQuDQorDQorICBAcGFyIFJlZmVyZW5jZShzKToNCisgICAgLSBBQ1BJIDYuMiBTcGVj aWZpY2F0aW9uIC0gRXJyYXRhIEEsIFNlcHRlbWJlciAyMDE3DQorICAqKi8NCisNCisjaW5jbHVk ZSA8SW5kdXN0cnlTdGFuZGFyZC9BY3BpLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5o Pg0KKyNpbmNsdWRlICJBY3BpUGFyc2VyLmgiDQorI2luY2x1ZGUgIkFjcGlUYWJsZVBhcnNlci5o Ig0KKw0KKy8vIExvY2FsIHZhcmlhYmxlcw0KK1NUQVRJQyBDT05TVCBVSU5UMzIqIEd0ZHRQbGF0 Zm9ybVRpbWVyQ291bnQ7DQorU1RBVElDIENPTlNUIFVJTlQzMiogR3RkdFBsYXRmb3JtVGltZXJP ZmZzZXQ7DQorU1RBVElDIENPTlNUIFVJTlQ4KiAgUGxhdGZvcm1UaW1lclR5cGU7DQorU1RBVElD IENPTlNUIFVJTlQxNiogUGxhdGZvcm1UaW1lckxlbmd0aDsNCitTVEFUSUMgQ09OU1QgVUlOVDMy KiBHdEJsb2NrVGltZXJDb3VudDsNCitTVEFUSUMgQ09OU1QgVUlOVDMyKiBHdEJsb2NrVGltZXJP ZmZzZXQ7DQorU1RBVElDIENPTlNUIFVJTlQxNiogR3RCbG9ja0xlbmd0aDsNCitTVEFUSUMgQUNQ SV9ERVNDUklQVElPTl9IRUFERVJfSU5GTyBBY3BpSGRySW5mbzsNCisNCisvKiogVGhpcyBmdW5j dGlvbiB2YWxpZGF0ZXMgdGhlIEdUIEJsb2NrIHRpbWVyIGNvdW50Lg0KKw0KKyAgQHBhcmFtIFtp bl0gUHRyICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgZmllbGQgZGF0YS4NCisgIEBw YXJhbSBbaW5dIENvbnRleHQgUG9pbnRlciB0byBjb250ZXh0IHNwZWNpZmljIGluZm9ybWF0aW9u IGUuZy4gdGhpcw0KKyAgICAgICAgICAgICAgICAgICAgICBjb3VsZCBiZSBhIHBvaW50ZXIgdG8g dGhlIEFDUEkgdGFibGUgaGVhZGVyLg0KKyovDQorU1RBVElDDQorVk9JRA0KK0VGSUFQSQ0KK1Zh bGlkYXRlR3RCbG9ja1RpbWVyQ291bnQgKA0KKyAgSU4gVUlOVDgqIFB0ciwNCisgIElOIFZPSUQq ICBDb250ZXh0DQorICApOw0KKw0KKy8qKiBBbiBBQ1BJX1BBUlNFUiBhcnJheSBkZXNjcmliaW5n IHRoZSBBQ1BJIEdURFQgVGFibGUuDQorKi8NCitTVEFUSUMgQ09OU1QgQUNQSV9QQVJTRVIgR3Rk dFBhcnNlcltdID0gew0KKyAgUEFSU0VfQUNQSV9IRUFERVIgKCZBY3BpSGRySW5mbyksDQorICB7 TCJDbnRDb250cm9sQmFzZSBQaHlzaWNhbCBBZGRyZXNzIiwgOCwgMzYsIEwiMHglbHgiLCBOVUxM LCBOVUxMLA0KKyAgIE5VTEwsIE5VTEx9LA0KKyAge0wiUmVzZXJ2ZWQiLCA0LCA0NCwgTCIweCV4 IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJTZWN1cmUgRUwxIHRpbWVyIEdTSVYi LCA0LCA0OCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJTZWN1cmUg RUwxIHRpbWVyIEZMQUdTIiwgNCwgNTIsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9 LA0KKw0KKyAge0wiTm9uLVNlY3VyZSBFTDEgdGltZXIgR1NJViIsIDQsIDU2LCBMIjB4JXgiLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIk5vbi1TZWN1cmUgRUwxIHRpbWVyIEZMQUdT IiwgNCwgNjAsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKw0KKyAge0wiVmly dHVhbCB0aW1lciBHU0lWIiwgNCwgNjQsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9 LA0KKyAge0wiVmlydHVhbCB0aW1lciBGTEFHUyIsIDQsIDY4LCBMIjB4JXgiLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMfSwNCisNCisgIHtMIk5vbi1TZWN1cmUgRUwyIHRpbWVyIEdTSVYiLCA0LCA3 MiwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJOb24tU2VjdXJlIEVM MiB0aW1lciBGTEFHUyIsIDQsIDc2LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwN CisNCisgIHtMIkNudFJlYWRCYXNlIFBoeXNpY2FsIGFkZHJlc3MiLCA4LCA4MCwgTCIweCVseCIs IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUGxhdGZvcm0gVGltZXIgQ291bnQiLCA0 LCA4OCwgTCIlZCIsIE5VTEwsDQorICAgKFZPSUQqKikmR3RkdFBsYXRmb3JtVGltZXJDb3VudCwg TlVMTCwgTlVMTH0sDQorICB7TCJQbGF0Zm9ybSBUaW1lciBPZmZzZXQiLCA0LCA5MiwgTCIweCV4 IiwgTlVMTCwNCisgICAoVk9JRCoqKSZHdGR0UGxhdGZvcm1UaW1lck9mZnNldCwgTlVMTCwgTlVM TH0NCit9Ow0KKw0KKy8qKiBBbiBBQ1BJX1BBUlNFUiBhcnJheSBkZXNjcmliaW5nIHRoZSBQbGF0 Zm9ybSB0aW1lciBoZWFkZXIuDQorKi8NCitTVEFUSUMgQ09OU1QgQUNQSV9QQVJTRVIgR3RQbGF0 Zm9ybVRpbWVySGVhZGVyUGFyc2VyW10gPSB7DQorICB7TCJUeXBlIiwgMSwgMCwgTlVMTCwgTlVM TCwgKFZPSUQqKikmUGxhdGZvcm1UaW1lclR5cGUsIE5VTEwsIE5VTEx9LA0KKyAge0wiTGVuZ3Ro IiwgMiwgMSwgTlVMTCwgTlVMTCwgKFZPSUQqKikmUGxhdGZvcm1UaW1lckxlbmd0aCwgTlVMTCwg TlVMTH0sDQorICB7TCJSZXNlcnZlZCIsIDEsIDMsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEx9DQorfTsNCisNCisvKiogQW4gQUNQSV9QQVJTRVIgYXJyYXkgZGVzY3JpYmluZyB0aGUgUGxh dGZvcm0gR1QgQmxvY2suDQorKi8NCitTVEFUSUMgQ09OU1QgQUNQSV9QQVJTRVIgR3RCbG9ja1Bh cnNlcltdID0gew0KKyAge0wiVHlwZSIsIDEsIDAsIEwiJWQiLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMfSwNCisgIHtMIkxlbmd0aCIsIDIsIDEsIEwiJWQiLCBOVUxMLCAoVk9JRCoqKSZHdEJsb2Nr TGVuZ3RoLCBOVUxMLCBOVUxMfSwNCisgIHtMIlJlc2VydmVkIiwgMSwgMywgTCIleCIsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUGh5c2ljYWwgYWRkcmVzcyAoQ250Q3RsQmFzZSki LCA4LCA0LCBMIjB4JWx4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJUaW1lciBD b3VudCIsIDQsIDEyLCBMIiVkIiwgTlVMTCwgKFZPSUQqKikmR3RCbG9ja1RpbWVyQ291bnQsDQor ICAgVmFsaWRhdGVHdEJsb2NrVGltZXJDb3VudCwgTlVMTH0sDQorICB7TCJUaW1lciBPZmZzZXQi LCA0LCAxNiwgTCIlZCIsIE5VTEwsIChWT0lEKiopJkd0QmxvY2tUaW1lck9mZnNldCwgTlVMTCwN CisgICAgTlVMTH0NCit9Ow0KKw0KKy8qKiBBbiBBQ1BJX1BBUlNFUiBhcnJheSBkZXNjcmliaW5n IHRoZSBHVCBCbG9jayB0aW1lci4NCisqLw0KK1NUQVRJQyBDT05TVCBBQ1BJX1BBUlNFUiBHdEJs b2NrVGltZXJQYXJzZXJbXSA9IHsNCisgIHtMIkZyYW1lIE51bWJlciIsIDEsIDAsIEwiJWQiLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIlJlc2VydmVkIiwgMywgMSwgTCIleCAleCAl eCIsIER1bXAzQ2hhcnMsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUGh5c2ljYWwgYWRkcmVz cyAoQ250QmFzZVgpIiwgOCwgNCwgTCIweCVseCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0K KyAge0wiUGh5c2ljYWwgYWRkcmVzcyAoQ250RUwwQmFzZVgpIiwgOCwgMTIsIEwiMHglbHgiLCBO VUxMLCBOVUxMLCBOVUxMLA0KKyAgICBOVUxMfSwNCisgIHtMIlBoeXNpY2FsIFRpbWVyIEdTSVYi LCA0LCAyMCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJQaHlzaWNh bCBUaW1lciBGbGFncyIsIDQsIDI0LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwN CisgIHtMIlZpcnR1YWwgVGltZXIgR1NJViIsIDQsIDI4LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMfSwNCisgIHtMIlZpcnR1YWwgVGltZXIgRmxhZ3MiLCA0LCAzMiwgTCIweCV4Iiwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJDb21tb24gRmxhZ3MiLCA0LCAzNiwgTCIw eCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0NCit9Ow0KKw0KKy8qKiBBbiBBQ1BJX1BBUlNF UiBhcnJheSBkZXNjcmliaW5nIHRoZSBQbGF0Zm9ybSBXYXRjaGRvZy4NCisqLw0KK1NUQVRJQyBD T05TVCBBQ1BJX1BBUlNFUiBTQlNBR2VuZXJpY1dhdGNoZG9nUGFyc2VyW10gPSB7DQorICB7TCJU eXBlIiwgMSwgMCwgTCIlZCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiTGVuZ3Ro IiwgMiwgMSwgTCIlZCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUmVzZXJ2ZWQi LCAxLCAzLCBMIiV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJSZWZyZXNoRnJh bWUgUGh5c2ljYWwgYWRkcmVzcyIsIDgsIDQsIEwiMHglbHgiLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMfSwNCisgIHtMIkNvbnRyb2xGcmFtZSBQaHlzaWNhbCBhZGRyZXNzIiwgOCwgMTIsIEwiMHgl bHgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIldhdGNoZG9nIFRpbWVyIEdTSVYi LCA0LCAyMCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJXYXRjaGRv ZyBUaW1lciBGbGFncyIsIDQsIDI0LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfQ0K K307DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGVzIHRoZSBHVCBCbG9jayB0aW1lciBj b3VudC4NCisNCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2Yg dGhlIGZpZWxkIGRhdGEuDQorICBAcGFyYW0gW2luXSBDb250ZXh0IFBvaW50ZXIgdG8gY29udGV4 dCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBlLmcuIHRoaXMNCisgICAgICAgICAgICAgICAgICAgICAg Y291bGQgYmUgYSBwb2ludGVyIHRvIHRoZSBBQ1BJIHRhYmxlIGhlYWRlci4NCisqLw0KK1NUQVRJ Qw0KK1ZPSUQNCitFRklBUEkNCitWYWxpZGF0ZUd0QmxvY2tUaW1lckNvdW50ICgNCisgIElOIFVJ TlQ4KiBQdHIsDQorICBJTiBWT0lEKiAgQ29udGV4dA0KKyAgKQ0KK3sNCisgIFVJTlQzMiBCbG9j a1RpbWVyQ291bnQgPSAqKFVJTlQzMiopUHRyOw0KKyAgaWYgKEJsb2NrVGltZXJDb3VudCA+IDgp IHsNCisgICAgSW5jcmVtZW50RXJyb3JDb3VudCAoKTsNCisgICAgUHJpbnQgKA0KKyAgICAgIEwi XG5FUlJPUjogVGltZXIgQ291bnQgPSAlZC4gTWF4IFRpbWVyIENvdW50IGlzIDguIiwNCisgICAg ICBCbG9ja1RpbWVyQ291bnQNCisgICAgICApOw0KKyAgfQ0KK30NCisNCisvKiogVGhpcyBmdW5j dGlvbiBwYXJzZXMgdGhlIFBsYXRmb3JtIEdUIEJsb2NrLg0KKw0KKyAgQHBhcmFtIFtpbl0gUHRy ICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgR1QgQmxvY2sgZGF0YS4NCisgIEBwYXJh bSBbaW5dIExlbmd0aCAgTGVuZ3RoIG9mIHRoZSBHVCBCbG9jayBzdHJ1Y3R1cmUuDQorKi8NCitT VEFUSUMNCitWT0lEDQorRHVtcEdUQmxvY2sgKA0KKyAgSU4gVUlOVDgqIFB0ciwNCisgIElOIFVJ TlQxNiBMZW5ndGgNCisgICkNCit7DQorICBVSU5UMzIgSW5kZXg7DQorICBVSU5UMzIgT2Zmc2V0 Ow0KKyAgVUlOVDE2IEdUQmxvY2tUaW1lckxlbmd0aDsNCisNCisgIE9mZnNldCA9IFBhcnNlQWNw aSAoDQorICAgICAgICAgICAgIFRSVUUsDQorICAgICAgICAgICAgIDIsDQorICAgICAgICAgICAg ICJHVCBCbG9jayIsDQorICAgICAgICAgICAgIFB0ciwNCisgICAgICAgICAgICAgTGVuZ3RoLA0K KyAgICAgICAgICAgICBQQVJTRVJfUEFSQU1TIChHdEJsb2NrUGFyc2VyKQ0KKyAgICAgICAgICAg ICApOw0KKyAgR1RCbG9ja1RpbWVyTGVuZ3RoID0gKCpHdEJsb2NrTGVuZ3RoIC0gT2Zmc2V0KSAv ICgqR3RCbG9ja1RpbWVyQ291bnQpOw0KKyAgTGVuZ3RoIC09IE9mZnNldDsNCisNCisgIGlmICgq R3RCbG9ja1RpbWVyQ291bnQgIT0gMCkgew0KKyAgICBQdHIgKz0gKCpHdEJsb2NrVGltZXJPZmZz ZXQpOw0KKyAgICBJbmRleCA9IDA7DQorICAgIHdoaWxlICgoSW5kZXggPCAoKkd0QmxvY2tUaW1l ckNvdW50KSkgJiYgKExlbmd0aCA+PSBHVEJsb2NrVGltZXJMZW5ndGgpKSB7DQorICAgICAgT2Zm c2V0ID0gUGFyc2VBY3BpICgNCisgICAgICAgICAgICAgICAgIFRSVUUsDQorICAgICAgICAgICAg ICAgICAyLA0KKyAgICAgICAgICAgICAgICAgIkdUIEJsb2NrIFRpbWVyIiwNCisgICAgICAgICAg ICAgICAgIFB0ciwNCisgICAgICAgICAgICAgICAgIEdUQmxvY2tUaW1lckxlbmd0aCwNCisgICAg ICAgICAgICAgICAgIFBBUlNFUl9QQVJBTVMgKEd0QmxvY2tUaW1lclBhcnNlcikNCisgICAgICAg ICAgICAgICAgICk7DQorICAgICAgLy8gSW5jcmVtZW50IGJ5IEdUIEJsb2NrIFRpbWVyIHN0cnVj dHVyZSBzaXplDQorICAgICAgUHRyICs9IE9mZnNldDsNCisgICAgICBMZW5ndGggLT0gT2Zmc2V0 Ow0KKyAgICAgIEluZGV4Kys7DQorICAgIH0NCisNCisgICAgaWYgKExlbmd0aCAhPSAwKSB7DQor ICAgICAgSW5jcmVtZW50RXJyb3JDb3VudCAoKTsNCisgICAgICBQcmludCAoDQorICAgICAgICBM IkVSUk9SOkdUIEJsb2NrIFRpbWVyIGxlbmd0aCBtaXNtYXRjaC4gVW5wYXJzZWQgJWQgYnl0ZXMu XG4iLA0KKyAgICAgICAgTGVuZ3RoDQorICAgICAgICApOw0KKyAgICB9DQorICB9DQorfQ0KKw0K Ky8qKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUgUGxhdGZvcm0gV2F0Y2hkb2cgdGltZXIuDQor DQorICBAcGFyYW0gW2luXSBQdHIgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSB3YXRj aGRvZyB0aW1lciBkYXRhLg0KKyAgQHBhcmFtIFtpbl0gTGVuZ3RoICBMZW5ndGggb2YgdGhlIHdh dGNoZG9nIHRpbWVyIHN0cnVjdHVyZS4NCisqLw0KK1NUQVRJQw0KK1ZPSUQNCitEdW1wV2F0Y2hk b2dUaW1lciAoDQorICBJTiBVSU5UOCogUHRyLA0KKyAgSU4gVUlOVDE2IExlbmd0aA0KKyAgKQ0K K3sNCisgIFBhcnNlQWNwaSAoDQorICAgIFRSVUUsDQorICAgIDIsDQorICAgICJTQlNBIEdlbmVy aWMgV2F0Y2hkb2ciLA0KKyAgICBQdHIsDQorICAgIExlbmd0aCwNCisgICAgUEFSU0VSX1BBUkFN UyAoU0JTQUdlbmVyaWNXYXRjaGRvZ1BhcnNlcikNCisgICAgKTsNCit9DQorDQorLyoqIFRoaXMg ZnVuY3Rpb24gcGFyc2VzIHRoZSBBQ1BJIEdURFQgdGFibGUuDQorICBXaGVuIHRyYWNlIGlzIGVu YWJsZWQgdGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIEdURFQgdGFibGUgYW5kDQorICB0cmFjZXMg dGhlIEFDUEkgdGFibGUgZmllbGRzLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBhbHNvIHBhcnNlcyB0 aGUgZm9sbG93aW5nIHBsYXRmb3JtIHRpbWVyIHN0cnVjdHVyZXM6DQorICAgIC0gR1QgQmxvY2sg dGltZXINCisgICAgLSBXYXRjaGRvZyB0aW1lcg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBhbHNvIHBl cmZvcm1zIHZhbGlkYXRpb24gb2YgdGhlIEFDUEkgdGFibGUgZmllbGRzLg0KKw0KKyAgQHBhcmFt IFtpbl0gVHJhY2UgICAgICAgICAgICAgIElmIFRSVUUsIHRyYWNlIHRoZSBBQ1BJIGZpZWxkcy4N CisgIEBwYXJhbSBbaW5dIFB0ciAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBv ZiB0aGUgYnVmZmVyLg0KKyAgQHBhcmFtIFtpbl0gQWNwaVRhYmxlTGVuZ3RoICAgIExlbmd0aCBv ZiB0aGUgQUNQSSB0YWJsZS4NCisgIEBwYXJhbSBbaW5dIEFjcGlUYWJsZVJldmlzaW9uICBSZXZp c2lvbiBvZiB0aGUgQUNQSSB0YWJsZS4NCisqLw0KK1ZPSUQNCitFRklBUEkNCitQYXJzZUFjcGlH dGR0ICgNCisgIElOIEJPT0xFQU4gVHJhY2UsDQorICBJTiBVSU5UOCogIFB0ciwNCisgIElOIFVJ TlQzMiAgQWNwaVRhYmxlTGVuZ3RoLA0KKyAgSU4gVUlOVDggICBBY3BpVGFibGVSZXZpc2lvbg0K KyAgKQ0KK3sNCisgIFVJTlQzMiBJbmRleDsNCisgIFVJTlQ4KiBUaW1lclB0cjsNCisNCisgIGlm ICghVHJhY2UpIHsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgUGFyc2VBY3BpICgNCisgICAg VFJVRSwNCisgICAgMCwNCisgICAgIkdURFQiLA0KKyAgICBQdHIsDQorICAgIEFjcGlUYWJsZUxl bmd0aCwNCisgICAgUEFSU0VSX1BBUkFNUyAoR3RkdFBhcnNlcikNCisgICAgKTsNCisNCisgIGlm ICgqR3RkdFBsYXRmb3JtVGltZXJDb3VudCAhPSAwKSB7DQorICAgIFRpbWVyUHRyID0gUHRyICsg KCpHdGR0UGxhdGZvcm1UaW1lck9mZnNldCk7DQorICAgIEluZGV4ID0gMDsNCisgICAgZG8gew0K KyAgICAgIC8vIFBhcnNlIHRoZSBQbGF0Zm9ybSBUaW1lciBIZWFkZXINCisgICAgICBQYXJzZUFj cGkgKA0KKyAgICAgICAgRkFMU0UsDQorICAgICAgICAwLA0KKyAgICAgICAgTlVMTCwNCisgICAg ICAgIFRpbWVyUHRyLA0KKyAgICAgICAgNCwgIC8vIEdUIFBsYXRmb3JtIFRpbWVyIHN0cnVjdHVy ZSBoZWFkZXIgbGVuZ3RoLg0KKyAgICAgICAgUEFSU0VSX1BBUkFNUyAoR3RQbGF0Zm9ybVRpbWVy SGVhZGVyUGFyc2VyKQ0KKyAgICAgICAgKTsNCisgICAgICBzd2l0Y2ggKCpQbGF0Zm9ybVRpbWVy VHlwZSkgew0KKyAgICAgICAgY2FzZSBFRklfQUNQSV82XzJfR1REVF9HVF9CTE9DSzoNCisgICAg ICAgICAgRHVtcEdUQmxvY2sgKFRpbWVyUHRyLCAqUGxhdGZvcm1UaW1lckxlbmd0aCk7DQorICAg ICAgICAgIGJyZWFrOw0KKyAgICAgICAgY2FzZSBFRklfQUNQSV82XzJfR1REVF9TQlNBX0dFTkVS SUNfV0FUQ0hET0c6DQorICAgICAgICAgIER1bXBXYXRjaGRvZ1RpbWVyIChUaW1lclB0ciwgKlBs YXRmb3JtVGltZXJMZW5ndGgpOw0KKyAgICAgICAgICBicmVhazsNCisgICAgICAgIGRlZmF1bHQ6 DQorICAgICAgICAgIEluY3JlbWVudEVycm9yQ291bnQgKCk7DQorICAgICAgICAgIFByaW50ICgN CisgICAgICAgICAgICBMIkVSUk9SOiBJTlZBTElEIFBsYXRmb3JtIFRpbWVyIFR5cGUgPSAlZFxu IiwNCisgICAgICAgICAgICAqUGxhdGZvcm1UaW1lclR5cGUNCisgICAgICAgICAgICApOw0KKyAg ICAgICAgICBicmVhazsNCisgICAgICB9IC8vIHN3aXRjaA0KKyAgICAgIFRpbWVyUHRyICs9ICgq UGxhdGZvcm1UaW1lckxlbmd0aCk7DQorICAgICAgSW5kZXgrKzsNCisgICAgfSB3aGlsZSAoSW5k ZXggPCAqR3RkdFBsYXRmb3JtVGltZXJDb3VudCk7DQorICB9DQorfQ0KZGlmZiAtLWdpdCBhL1No ZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL1BhcnNlcnMvSW9ydC9J b3J0UGFyc2VyLmMgYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExp Yi9QYXJzZXJzL0lvcnQvSW9ydFBhcnNlci5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTAzYTc0NTcxOGQyMzA4 MmM3YmM0YjBiYzkyMDM1NWE4MzlmYzg5NQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvU2hlbGxQa2cv TGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvUGFyc2Vycy9Jb3J0L0lvcnRQYXJz ZXIuYw0KQEAgLTAsMCArMSw3MDAgQEANCisvKioNCisgIElPUlQgdGFibGUgcGFyc2VyDQorDQor ICBDb3B5cmlnaHQgKGMpIDIwMTYgLSAyMDE4LCBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl cnZlZC4NCisgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisg IGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0 cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0K KyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KKw0KKyAg VEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJB UyBJUyIgQkFTSVMsDQorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9G IEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KKw0KKyAgQHBhciBSZWZlcmVu Y2Uocyk6DQorICAgIC0gSU8gUmVtYXBwaW5nIFRhYmxlLCBQbGF0Zm9ybSBEZXNpZ24gRG9jdW1l bnQsIFJldmlzaW9uIEMsIDE1IE1heSAyMDE3DQorKiovDQorDQorI2luY2x1ZGUgPEluZHVzdHJ5 U3RhbmRhcmQvSW9SZW1hcHBpbmdUYWJsZS5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1ByaW50TGli Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KKyNpbmNsdWRlICJBY3BpUGFyc2Vy LmgiDQorI2luY2x1ZGUgIkFjcGlUYWJsZVBhcnNlci5oIg0KKw0KKy8vIExvY2FsIHZhcmlhYmxl cw0KK1NUQVRJQyBBQ1BJX0RFU0NSSVBUSU9OX0hFQURFUl9JTkZPIEFjcGlIZHJJbmZvOw0KKw0K Ky8qKiBUaGUgRUlPUlRfTk9ERSBlbnVtIGRlc2NyaWJlcyB0aGUgSU9SVCBOb2RlIHR5cGVzLg0K KyovDQordHlwZWRlZiBlbnVtIElvcnROb2RlIHsNCisgIEVJT1JUX05PREVfSVRTX0dST1VQLCAg ICAgICAgLy8vPCBJVFMgR3JvdXAgbm9kZQ0KKyAgRUlPUlRfTk9ERV9OQU1FRF9DT01QT05FTlQs ICAvLy88IE5hbWVkIENvbXBvbmVudCBub2RlDQorICBFSU9SVF9OT0RFX1JPT1RfQ09NUExFWCwg ICAgIC8vLzwgUm9vdCBDb21wbGV4IG5vZGUNCisgIEVJT1JUX05PREVfU01NVVYxX1YyLCAgICAg ICAgLy8vPCBTTU1VIHYxL3YyIG5vZGUNCisgIEVJT1JUX05PREVfU01NVVYzLCAgICAgICAgICAg Ly8vPCBTTU1VIHYzIG5vZGUNCisgIEVJT1JUX05PREVfUE1DRywgICAgICAgICAgICAgLy8vPCBQ TUMgZ3JvdXAgbm9kZQ0KKyAgRUlPUlRfTk9ERV9NQVgNCit9IEVJT1JUX05PREU7DQorDQorLy8g TG9jYWwgVmFyaWFibGVzDQorU1RBVElDIENPTlNUIFVJTlQzMiogSW9ydE5vZGVDb3VudDsNCitT VEFUSUMgQ09OU1QgVUlOVDMyKiBJb3J0Tm9kZU9mZnNldDsNCisNCitTVEFUSUMgQ09OU1QgVUlO VDgqIElvcnROb2RlVHlwZTsNCitTVEFUSUMgQ09OU1QgVUlOVDE2KiBJb3J0Tm9kZUxlbmd0aDsN CitTVEFUSUMgQ09OU1QgVUlOVDMyKiBJb3J0SWRNYXBwaW5nQ291bnQ7DQorU1RBVElDIENPTlNU IFVJTlQzMiogSW9ydElkTWFwcGluZ09mZnNldDsNCisNCitTVEFUSUMgQ09OU1QgVUlOVDMyKiBJ bnRlcnJ1cHRDb250ZXh0Q291bnQ7DQorU1RBVElDIENPTlNUIFVJTlQzMiogSW50ZXJydXB0Q29u dGV4dE9mZnNldDsNCitTVEFUSUMgQ09OU1QgVUlOVDMyKiBQbXVJbnRlcnJ1cHRDb3VudDsNCitT VEFUSUMgQ09OU1QgVUlOVDMyKiBQbXVJbnRlcnJ1cHRPZmZzZXQ7DQorDQorU1RBVElDIENPTlNU IFVJTlQzMiogSXRzQ291bnQ7DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGVzIHRoZSBJ RCBNYXBwaW5nIGFycmF5IGNvdW50IGZvciB0aGUgSVRTIG5vZGUuDQorDQorICBAcGFyYW0gW2lu XSBQdHIgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaWVsZCBkYXRhLg0KKyAgQHBh cmFtIFtpbl0gQ29udGV4dCBQb2ludGVyIHRvIGNvbnRleHQgc3BlY2lmaWMgaW5mb3JtYXRpb24g ZS5nLiB0aGlzDQorICAgICAgICAgICAgICAgICAgICAgIGNvdWxkIGJlIGEgcG9pbnRlciB0byB0 aGUgQUNQSSB0YWJsZSBoZWFkZXIuDQorKi8NCitTVEFUSUMNCitWT0lEDQorRUZJQVBJDQorVmFs aWRhdGVJdHNJZE1hcHBpbmdDb3VudCAoDQorICBJTiBVSU5UOCogUHRyLA0KKyAgSU4gVk9JRCog IENvbnRleHQNCisgICk7DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGVzIHRoZSBJRCBN YXBwaW5nIGFycmF5IG9mZnNldCBmb3IgdGhlIElUUyBub2RlLg0KKw0KKyAgQHBhcmFtIFtpbl0g UHRyICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgZmllbGQgZGF0YS4NCisgIEBwYXJh bSBbaW5dIENvbnRleHQgUG9pbnRlciB0byBjb250ZXh0IHNwZWNpZmljIGluZm9ybWF0aW9uIGUu Zy4gdGhpcw0KKyAgICAgICAgICAgICAgICAgICAgICBjb3VsZCBiZSBhIHBvaW50ZXIgdG8gdGhl IEFDUEkgdGFibGUgaGVhZGVyLg0KKyovDQorU1RBVElDDQorVk9JRA0KK0VGSUFQSQ0KK1ZhbGlk YXRlSXRzSWRBcnJheVJlZmVyZW5jZSAoDQorICBJTiBVSU5UOCogUHRyLA0KKyAgSU4gVk9JRCog IENvbnRleHQNCisgICk7DQorDQorLyoqIEhlbHBlciBNYWNybyBmb3IgcG9wdWxhdGluZyB0aGUg SU9SVCBOb2RlIGhlYWRlciBpbiB0aGUgQUNQSV9QQVJTRVINCisgICAgYXJyYXkuDQorDQorICBA cGFyYW0gW291dF0gVmFsaWRhdGVJZE1hcHBpbmdDb3VudCAgICBPcHRpb25hbCBwb2ludGVyIHRv IGEgZnVuY3Rpb24gZm9yDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2YWxpZGF0aW5nIHRoZSBJRCBNYXBwaW5nIGNvdW50Lg0KKyAgQHBhcmFtIFtvdXRdIFZhbGlk YXRlSWRBcnJheVJlZmVyZW5jZSAgT3B0aW9uYWwgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGZvcg0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGluZyB0aGUg SUQgQXJyYXkgcmVmZXJlbmNlLg0KKyovDQorI2RlZmluZSBQQVJTRV9JT1JUX05PREVfSEVBREVS KFZhbGlkYXRlSWRNYXBwaW5nQ291bnQsICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGVJZEFycmF5UmVmZXJlbmNlKSAgICAgICAgICAg ICAgICAgXA0KKyAgeyBMIlR5cGUiLCAxLCAwLCBMIiVkIiwgTlVMTCwgKFZPSUQqKikmSW9ydE5v ZGVUeXBlLCBOVUxMLCBOVUxMIH0sICAgICBcDQorICB7IEwiTGVuZ3RoIiwgMiwgMSwgTCIlZCIs IE5VTEwsIChWT0lEKiopJklvcnROb2RlTGVuZ3RoLCBOVUxMLCBOVUxMIH0sIFwNCisgIHsgTCJS ZXZpc2lvbiIsIDEsIDMsIEwiJWQiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sICAgICAgICAg ICAgICAgICAgXA0KKyAgeyBMIlJlc2VydmVkIiwgNCwgNCwgTCIweCV4IiwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCB9LCAgICAgICAgICAgICAgICBcDQorICB7IEwiTnVtYmVyIG9mIElEIG1hcHBp bmdzIiwgNCwgOCwgTCIlZCIsIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAg KFZPSUQqKikmSW9ydElkTWFwcGluZ0NvdW50LCBWYWxpZGF0ZUlkTWFwcGluZ0NvdW50LCBOVUxM IH0sICAgICAgICAgXA0KKyAgeyBMIlJlZmVyZW5jZSB0byBJRCBBcnJheSIsIDQsIDEyLCBMIjB4 JXgiLCBOVUxMLCAgICAgICAgICAgICAgICAgICAgICBcDQorICAgIChWT0lEKiopJklvcnRJZE1h cHBpbmdPZmZzZXQsIFZhbGlkYXRlSWRBcnJheVJlZmVyZW5jZSwgTlVMTCB9DQorDQorLyoqIEFu IEFDUElfUEFSU0VSIGFycmF5IGRlc2NyaWJpbmcgdGhlIEFDUEkgSU9SVCBUYWJsZQ0KKyovDQor U1RBVElDIENPTlNUIEFDUElfUEFSU0VSIElvcnRQYXJzZXJbXSA9IHsNCisgIFBBUlNFX0FDUElf SEVBREVSICgmQWNwaUhkckluZm8pLA0KKyAge0wiTnVtYmVyIG9mIElPUlQgTm9kZXMiLCA0LCAz NiwgTCIlZCIsIE5VTEwsDQorICAgKFZPSUQqKikmSW9ydE5vZGVDb3VudCwgTlVMTCwgTlVMTH0s DQorICB7TCJPZmZzZXQgdG8gQXJyYXkgb2YgSU9SVCBOb2RlcyIsIDQsIDQwLCBMIjB4JXgiLCBO VUxMLA0KKyAgIChWT0lEKiopJklvcnROb2RlT2Zmc2V0LCBOVUxMLCBOVUxMfSwNCisgIHtMIlJl c2VydmVkIiwgNCwgNDQsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9DQorfTsNCisN CisvKiogQW4gQUNQSV9QQVJTRVIgYXJyYXkgZGVzY3JpYmluZyB0aGUgSU9SVCBub2RlIGhlYWRl ciBzdHJ1Y3R1cmUuDQorKi8NCitTVEFUSUMgQ09OU1QgQUNQSV9QQVJTRVIgSW9ydE5vZGVIZWFk ZXJQYXJzZXJbXSA9IHsNCisgIFBBUlNFX0lPUlRfTk9ERV9IRUFERVIgKE5VTEwsIE5VTEwpDQor fTsNCisNCisvKiogQW4gQUNQSV9QQVJTRVIgYXJyYXkgZGVzY3JpYmluZyB0aGUgSU9SVCBTTU1V djEvMiBub2RlLg0KKyovDQorU1RBVElDIENPTlNUIEFDUElfUEFSU0VSIElvcnROb2RlU21tdVYx VjJQYXJzZXJbXSA9IHsNCisgIFBBUlNFX0lPUlRfTk9ERV9IRUFERVIgKE5VTEwsIE5VTEwpLA0K KyAge0wiQmFzZSBBZGRyZXNzIiwgOCwgMTYsIEwiMHglbHgiLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMfSwNCisgIHtMIlNwYW4iLCA4LCAyNCwgTCIweCVseCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEx9LA0KKyAge0wiTW9kZWwiLCA0LCAzMiwgTCIlZCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9 LA0KKyAge0wiRmxhZ3MiLCA0LCAzNiwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0s DQorICB7TCJSZWZlcmVuY2UgdG8gR2xvYmFsIEludGVycnVwdCBBcnJheSIsIDQsIDQwLCBMIjB4 JXgiLCBOVUxMLCBOVUxMLCBOVUxMLA0KKyAgIE5VTEx9LA0KKyAge0wiTnVtYmVyIG9mIGNvbnRl eHQgaW50ZXJydXB0cyIsIDQsIDQ0LCBMIiVkIiwgTlVMTCwNCisgICAoVk9JRCoqKSZJbnRlcnJ1 cHRDb250ZXh0Q291bnQsIE5VTEwsIE5VTEx9LA0KKyAge0wiUmVmZXJlbmNlIHRvIENvbnRleHQg SW50ZXJydXB0IEFycmF5IiwgNCwgNDgsIEwiMHgleCIsIE5VTEwsDQorICAgKFZPSUQqKikmSW50 ZXJydXB0Q29udGV4dE9mZnNldCwgTlVMTCwgTlVMTH0sDQorICB7TCJOdW1iZXIgb2YgUE1VIElu dGVycnVwdHMiLCA0LCA1MiwgTCIlZCIsIE5VTEwsDQorICAgKFZPSUQqKikmUG11SW50ZXJydXB0 Q291bnQsIE5VTEwsIE5VTEx9LA0KKyAge0wiUmVmZXJlbmNlIHRvIFBNVSBJbnRlcnJ1cHQgQXJy YXkiLCA0LCA1NiwgTCIweCV4IiwgTlVMTCwNCisgICAoVk9JRCoqKSZQbXVJbnRlcnJ1cHRPZmZz ZXQsIE5VTEwsIE5VTEx9LA0KKw0KKyAgLy8gSW50ZXJydXB0IEFycmF5DQorICB7TCJTTU1VX05T Z0lycHQiLCA0LCA2MCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJT TU1VX05TZ0lycHQgaW50ZXJydXB0IGZsYWdzIiwgNCwgNjQsIEwiMHgleCIsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEx9LA0KKyAge0wiU01NVV9OU2dDZmdJcnB0IiwgNCwgNjgsIEwiMHgleCIsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiU01NVV9OU2dDZmdJcnB0IGludGVycnVwdCBm bGFncyIsIDQsIDcyLCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfQ0KK307DQorDQor LyoqIEFuIEFDUElfUEFSU0VSIGFycmF5IGRlc2NyaWJpbmcgdGhlIFNNTVV2MS8yIE5vZGUgSW50 ZXJydXB0IEFycmF5Lg0KKyovDQorU1RBVElDIENPTlNUIEFDUElfUEFSU0VSIEludGVycnVwdEFy cmF5UGFyc2VyW10gPSB7DQorICB7TCIgIEludGVycnVwdCBHU0lWIiwgNCwgMCwgTCIweCV4Iiwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCIgIEZsYWdzIiwgNCwgNCwgTCIweCV4Iiwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0NCit9Ow0KKw0KKy8qKiBBbiBBQ1BJX1BBUlNFUiBhcnJh eSBkZXNjcmliaW5nIHRoZSBJT1JUIElEIE1hcHBpbmcuDQorKi8NCitTVEFUSUMgQ09OU1QgQUNQ SV9QQVJTRVIgSW9ydE5vZGVJZE1hcHBpbmdQYXJzZXJbXSA9IHsNCisgIHtMIiAgSW5wdXQgYmFz ZSIsIDQsIDAsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiICBOdW1i ZXIgb2YgSURzIiwgNCwgNCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7 TCIgIE91dHB1dCBiYXNlIiwgNCwgOCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0s DQorICB7TCIgIE91dHB1dCByZWZlcmVuY2UiLCA0LCAxMiwgTCIweCV4IiwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTH0sDQorICB7TCIgIEZsYWdzIiwgNCwgMTYsIEwiMHgleCIsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEx9DQorfTsNCisNCisvKiogQW4gQUNQSV9QQVJTRVIgYXJyYXkgZGVzY3JpYmlu ZyB0aGUgSU9SVCBTTU1VdjMgbm9kZS4NCisqLw0KK1NUQVRJQyBDT05TVCBBQ1BJX1BBUlNFUiBJ b3J0Tm9kZVNtbXVWM1BhcnNlcltdID0gew0KKyAgUEFSU0VfSU9SVF9OT0RFX0hFQURFUiAoTlVM TCwgTlVMTCksDQorICB7TCJCYXNlIEFkZHJlc3MiLCA4LCAxNiwgTCIweCVseCIsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiRmxhZ3MiLCA0LCAyNCwgTCIweCV4IiwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTH0sDQorICB7TCJSZXNlcnZlZCIsIDQsIDI4LCBMIjB4JXgiLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIlZBVE9TIEFkZHJlc3MiLCA4LCAzMiwgTCIweCVseCIs IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiTW9kZWwiLCA0LCA0MCwgTCIlZCIsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiRXZlbnQiLCA0LCA0NCwgTCIweCV4IiwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJQUkkiLCA0LCA0OCwgTCIweCV4IiwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJHRVJSIiwgNCwgNTIsIEwiMHgleCIsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiU3luYyIsIDQsIDU2LCBMIjB4JXgiLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMfQ0KK307DQorDQorLyoqIEFuIEFDUElfUEFSU0VSIGFycmF5IGRlc2NyaWJp bmcgdGhlIElPUlQgSVRTIG5vZGUuDQorKi8NCitTVEFUSUMgQ09OU1QgQUNQSV9QQVJTRVIgSW9y dE5vZGVJdHNQYXJzZXJbXSA9IHsNCisgIFBBUlNFX0lPUlRfTk9ERV9IRUFERVIgKA0KKyAgICBW YWxpZGF0ZUl0c0lkTWFwcGluZ0NvdW50LA0KKyAgICBWYWxpZGF0ZUl0c0lkQXJyYXlSZWZlcmVu Y2UNCisgICAgKSwNCisgIHtMIiAgTnVtYmVyIG9mIElUU3MiLCA0LCAxNiwgTCIlZCIsIE5VTEws IChWT0lEKiopJkl0c0NvdW50LCBOVUxMfQ0KK307DQorDQorLyoqIEFuIEFDUElfUEFSU0VSIGFy cmF5IGRlc2NyaWJpbmcgdGhlIElUUyBJRC4NCisqLw0KK1NUQVRJQyBDT05TVCBBQ1BJX1BBUlNF UiBJdHNJZFBhcnNlcltdID0gew0KKyAgeyBMIiAgR0lDIElUUyBJZGVudGlmaWVyIiwgNCwgMCwg TCIlZCIsIE5VTEwsIE5VTEwsIE5VTEwgfQ0KK307DQorDQorLyoqIEFuIEFDUElfUEFSU0VSIGFy cmF5IGRlc2NyaWJpbmcgdGhlIElPUlQgTmFtZXMgQ29tcG9uZW50IG5vZGUuDQorKi8NCitTVEFU SUMgQ09OU1QgQUNQSV9QQVJTRVIgSW9ydE5vZGVOYW1lZENvbXBvbmVudFBhcnNlcltdID0gew0K KyAgUEFSU0VfSU9SVF9OT0RFX0hFQURFUiAoTlVMTCwgTlVMTCksDQorICB7TCJOb2RlIEZsYWdz IiwgNCwgMTYsIEwiJWQiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIk1lbW9yeSBh Y2Nlc3MgcHJvcGVydGllcyIsIDgsIDIwLCBMIjB4JWx4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TH0sDQorICB7TCJEZXZpY2UgbWVtb3J5IGFkZHJlc3Mgc2l6ZSBsaW1pdCIsIDEsIDI4LCBMIiVk IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0NCit9Ow0KKw0KKy8qKiBBbiBBQ1BJX1BBUlNFUiBh cnJheSBkZXNjcmliaW5nIHRoZSBJT1JUIFJvb3QgQ29tcGxleCBub2RlLg0KKyovDQorU1RBVElD IENPTlNUIEFDUElfUEFSU0VSIElvcnROb2RlUm9vdENvbXBsZXhQYXJzZXJbXSA9IHsNCisgIFBB UlNFX0lPUlRfTk9ERV9IRUFERVIgKE5VTEwsIE5VTEwpLA0KKyAge0wiTWVtb3J5IGFjY2VzcyBw cm9wZXJ0aWVzIiwgOCwgMTYsIEwiMHglbHgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisg IHtMIkFUUyBBdHRyaWJ1dGUiLCA0LCAyNCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TH0sDQorICB7TCJQQ0kgU2VnbWVudCBudW1iZXIiLCA0LCAyOCwgTCIweCV4IiwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTH0NCit9Ow0KKw0KKy8qKiBBbiBBQ1BJX1BBUlNFUiBhcnJheSBkZXNjcmli aW5nIHRoZSBJT1JUIFBNQ0cgbm9kZS4NCisqLw0KK1NUQVRJQyBDT05TVCBBQ1BJX1BBUlNFUiBJ b3J0Tm9kZVBtY2dQYXJzZXJbXSA9IHsNCisgIFBBUlNFX0lPUlRfTk9ERV9IRUFERVIgKE5VTEws IE5VTEwpLA0KKyAge0wiQmFzZSBBZGRyZXNzIiwgOCwgMTYsIEwiMHglbHgiLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMfSwNCisgIHtMIk92ZXJmbG93IGludGVycnVwdCBHU0lWIiwgNCwgMjQsIEwi MHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiTm9kZSByZWZlcmVuY2UiLCA0 LCAyOCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorfTsNCisNCisvKiogVGhp cyBmdW5jdGlvbiB2YWxpZGF0ZXMgdGhlIElEIE1hcHBpbmcgYXJyYXkgY291bnQgZm9yIHRoZSBJ VFMgbm9kZS4NCisNCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQg b2YgdGhlIGZpZWxkIGRhdGEuDQorICBAcGFyYW0gW2luXSBDb250ZXh0IFBvaW50ZXIgdG8gY29u dGV4dCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBlLmcuIHRoaXMNCisgICAgICAgICAgICAgICAgICAg ICAgY291bGQgYmUgYSBwb2ludGVyIHRvIHRoZSBBQ1BJIHRhYmxlIGhlYWRlci4NCisqLw0KK1NU QVRJQw0KK1ZPSUQNCitFRklBUEkNCitWYWxpZGF0ZUl0c0lkTWFwcGluZ0NvdW50ICgNCisgIElO IFVJTlQ4KiBQdHIsDQorICBWT0lEKiAgICAgQ29udGV4dA0KKyAgKQ0KK3sNCisgIGlmICgqKFVJ TlQzMiopUHRyICE9IDApIHsNCisgICAgSW5jcmVtZW50RXJyb3JDb3VudCAoKTsNCisgICAgUHJp bnQgKEwiXG5FUlJPUjogSU9SVCBJRCBNYXBwaW5nIGNvdW50IG11c3QgYmUgemVyby4iKTsNCisg IH0NCit9DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGVzIHRoZSBJRCBNYXBwaW5nIGFy cmF5IG9mZnNldCBmb3IgdGhlIElUUyBub2RlLg0KKw0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICBQ b2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgZmllbGQgZGF0YS4NCisgIEBwYXJhbSBbaW5dIENv bnRleHQgUG9pbnRlciB0byBjb250ZXh0IHNwZWNpZmljIGluZm9ybWF0aW9uIGUuZy4gdGhpcw0K KyAgICAgICAgICAgICAgICAgICAgICBjb3VsZCBiZSBhIHBvaW50ZXIgdG8gdGhlIEFDUEkgdGFi bGUgaGVhZGVyLg0KKyovDQorU1RBVElDDQorVk9JRA0KK0VGSUFQSQ0KK1ZhbGlkYXRlSXRzSWRB cnJheVJlZmVyZW5jZSAoDQorICBJTiBVSU5UOCogUHRyLA0KKyAgSU4gVk9JRCogIENvbnRleHQN CisgICkNCit7DQorICBpZiAoKihVSU5UMzIqKVB0ciAhPSAwKSB7DQorICAgIEluY3JlbWVudEVy cm9yQ291bnQgKCk7DQorICAgIFByaW50IChMIlxuRVJST1I6IElPUlQgSUQgTWFwcGluZyBvZmZz ZXQgbXVzdCBiZSB6ZXJvLiIpOw0KKyAgfQ0KK30NCisNCisvKiogVGhpcyBmdW5jdGlvbiBwYXJz ZXMgdGhlIElPUlQgTm9kZSBJZCBNYXBwaW5nIGFycmF5Lg0KKw0KKyAgQHBhcmFtIFtpbl0gUHRy ICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIElPUlQgVGFibGUuDQorICBA cGFyYW0gW2luXSBNYXBwaW5nQ291bnQgICBUaGUgSUQgTWFwcGluZyBjb3VudC4NCisgIEBwYXJh bSBbaW5dIE1hcHBpbmdPZmZzZXQgIFRoZSBvZmZzZXQgb2YgdGhlIElEIE1hcHBpbmcgYXJyYXkN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBJT1JU IHRhYmxlLg0KKyovDQorU1RBVElDDQorVk9JRA0KK0R1bXBJb3J0Tm9kZUlkTWFwcGluZ3MgKA0K KyAgSU4gVUlOVDgqIFB0ciwNCisgIElOIFVJTlQzMiBNYXBwaW5nQ291bnQsDQorICBJTiBVSU5U MzIgTWFwcGluZ09mZnNldA0KKyAgKQ0KK3sNCisgIFVJTlQ4KiBJZE1hcHBpbmdQdHI7DQorICBV SU5UMzIgSW5kZXg7DQorICBVSU5UMzIgT2Zmc2V0Ow0KKyAgQ0hBUjggIEJ1ZmZlcls0MF07ICAv LyBVc2VkIGZvciBBc2NpaU5hbWUgcGFyYW0gb2YgUGFyc2VBY3BpDQorDQorICBJZE1hcHBpbmdQ dHIgPSBQdHIgKyBNYXBwaW5nT2Zmc2V0Ow0KKyAgSW5kZXggPSAwOw0KKyAgd2hpbGUgKEluZGV4 IDwgTWFwcGluZ0NvdW50KSB7DQorICAgIEFzY2lpU1ByaW50ICgNCisgICAgICBCdWZmZXIsDQor ICAgICAgc2l6ZW9mIChCdWZmZXIpLA0KKyAgICAgICJJRCBNYXBwaW5nIFslZF0iLA0KKyAgICAg IEluZGV4DQorICAgICAgKTsNCisgICAgT2Zmc2V0ID0gUGFyc2VBY3BpICgNCisgICAgICAgICAg ICAgICBUUlVFLA0KKyAgICAgICAgICAgICAgIDQsDQorICAgICAgICAgICAgICAgQnVmZmVyLA0K KyAgICAgICAgICAgICAgIElkTWFwcGluZ1B0ciwNCisgICAgICAgICAgICAgICAyMCwNCisgICAg ICAgICAgICAgICBQQVJTRVJfUEFSQU1TIChJb3J0Tm9kZUlkTWFwcGluZ1BhcnNlcikNCisgICAg ICAgICAgICAgICApOw0KKyAgICBJZE1hcHBpbmdQdHIgKz0gT2Zmc2V0Ow0KKyAgICBJbmRleCsr Ow0KKyAgfQ0KK30NCisNCisvKiogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIElPUlQgU01NVXYx LzIgbm9kZS4NCisNCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhl IHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorICBAcGFyYW0gW2luXSBMZW5ndGggICAgICAgICBMZW5n dGggb2YgdGhlIGJ1ZmZlci4NCisgIEBwYXJhbSBbaW5dIE1hcHBpbmdDb3VudCAgIFRoZSBJRCBN YXBwaW5nIGNvdW50Lg0KKyAgQHBhcmFtIFtpbl0gTWFwcGluZ09mZnNldCAgVGhlIG9mZnNldCBv ZiB0aGUgSUQgTWFwcGluZyBhcnJheQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJv bSB0aGUgc3RhcnQgb2YgdGhlIElPUlQgdGFibGUuDQorKi8NCitTVEFUSUMNCitWT0lEDQorRHVt cElvcnROb2RlU21tdVYxVjIgKA0KKyAgSU4gVUlOVDgqIFB0ciwNCisgIElOIFVJTlQxNiBMZW5n dGgsDQorICBJTiBVSU5UMzIgTWFwcGluZ0NvdW50LA0KKyAgSU4gVUlOVDMyIE1hcHBpbmdPZmZz ZXQNCisgICkNCit7DQorICBVSU5UMzIgSW5kZXg7DQorICBVSU5UMzIgT2Zmc2V0Ow0KKyAgQ0hB UjggIEJ1ZmZlcls1MF07ICAvLyBVc2VkIGZvciBBc2NpaU5hbWUgcGFyYW0gb2YgUGFyc2VBY3Bp DQorDQorICBVSU5UOCogQXJyYXlQdHI7DQorDQorICBQYXJzZUFjcGkgKA0KKyAgICBUUlVFLA0K KyAgICAyLA0KKyAgICAiU01NVXYxIG9yIFNNTVV2MiBOb2RlIiwNCisgICAgUHRyLA0KKyAgICBM ZW5ndGgsDQorICAgIFBBUlNFUl9QQVJBTVMgKElvcnROb2RlU21tdVYxVjJQYXJzZXIpDQorICAg ICk7DQorDQorICBBcnJheVB0ciA9IFB0ciArICpJbnRlcnJ1cHRDb250ZXh0T2Zmc2V0Ow0KKyAg SW5kZXggPSAwOw0KKyAgd2hpbGUgKEluZGV4IDwgKkludGVycnVwdENvbnRleHRDb3VudCkgew0K KyAgICBBc2NpaVNQcmludCAoDQorICAgICAgQnVmZmVyLA0KKyAgICAgIHNpemVvZiAoQnVmZmVy KSwNCisgICAgICAiQ29udGV4dCBJbnRlcnJ1cHRzIEFycmF5IFslZF0iLA0KKyAgICAgIEluZGV4 DQorICAgICAgKTsNCisgICAgT2Zmc2V0ID0gUGFyc2VBY3BpICgNCisgICAgICAgICAgICAgICBU UlVFLA0KKyAgICAgICAgICAgICAgIDQsDQorICAgICAgICAgICAgICAgQnVmZmVyLA0KKyAgICAg ICAgICAgICAgIEFycmF5UHRyLA0KKyAgICAgICAgICAgICAgIDgsDQorICAgICAgICAgICAgICAg UEFSU0VSX1BBUkFNUyAoSW50ZXJydXB0QXJyYXlQYXJzZXIpDQorICAgICAgICAgICAgICAgKTsN CisgICAgQXJyYXlQdHIgKz0gT2Zmc2V0Ow0KKyAgICBJbmRleCsrOw0KKyAgfQ0KKw0KKyAgQXJy YXlQdHIgPSBQdHIgKyAqUG11SW50ZXJydXB0T2Zmc2V0Ow0KKyAgSW5kZXggPSAwOw0KKyAgd2hp bGUgKEluZGV4IDwgKlBtdUludGVycnVwdENvdW50KSB7DQorICAgIEFzY2lpU1ByaW50ICgNCisg ICAgICBCdWZmZXIsDQorICAgICAgc2l6ZW9mIChCdWZmZXIpLA0KKyAgICAgICJQTVUgSW50ZXJy dXB0cyBBcnJheSBbJWRdIiwNCisgICAgICBJbmRleA0KKyAgICAgICk7DQorICAgIE9mZnNldCA9 IFBhcnNlQWNwaSAoDQorICAgICAgICAgICAgICAgVFJVRSwNCisgICAgICAgICAgICAgICA0LA0K KyAgICAgICAgICAgICAgIEJ1ZmZlciwNCisgICAgICAgICAgICAgICBBcnJheVB0ciwNCisgICAg ICAgICAgICAgICA4LA0KKyAgICAgICAgICAgICAgIFBBUlNFUl9QQVJBTVMgKEludGVycnVwdEFy cmF5UGFyc2VyKQ0KKyAgICAgICAgICAgICAgICk7DQorICAgIEFycmF5UHRyICs9IE9mZnNldDsN CisgICAgSW5kZXgrKzsNCisgIH0NCisNCisgIGlmICgqSW9ydElkTWFwcGluZ0NvdW50ICE9IDAp IHsNCisgICAgRHVtcElvcnROb2RlSWRNYXBwaW5ncyAoUHRyLCBNYXBwaW5nQ291bnQsIE1hcHBp bmdPZmZzZXQpOw0KKyAgfQ0KK30NCisNCisvKiogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIElP UlQgU01NVXYzIG5vZGUuDQorDQorICBAcGFyYW0gW2luXSBQdHIgICAgICAgICAgICBQb2ludGVy IHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLg0KKyAgQHBhcmFtIFtpbl0gTGVuZ3RoICAgICAg ICAgTGVuZ3RoIG9mIHRoZSBidWZmZXIuDQorICBAcGFyYW0gW2luXSBNYXBwaW5nQ291bnQgICBU aGUgSUQgTWFwcGluZyBjb3VudC4NCisgIEBwYXJhbSBbaW5dIE1hcHBpbmdPZmZzZXQgIFRoZSBv ZmZzZXQgb2YgdGhlIElEIE1hcHBpbmcgYXJyYXkNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBJT1JUIHRhYmxlLg0KKyovDQorU1RBVElDDQorVk9J RA0KK0R1bXBJb3J0Tm9kZVNtbXVWMyAoDQorICBJTiBVSU5UOCogUHRyLA0KKyAgSU4gVUlOVDE2 IExlbmd0aCwNCisgIElOIFVJTlQzMiBNYXBwaW5nQ291bnQsDQorICBJTiBVSU5UMzIgTWFwcGlu Z09mZnNldA0KKyAgKQ0KK3sNCisgIFBhcnNlQWNwaSAoDQorICAgIFRSVUUsDQorICAgIDIsDQor ICAgICJTTU1VVjMgTm9kZSIsDQorICAgIFB0ciwNCisgICAgTGVuZ3RoLA0KKyAgICBQQVJTRVJf UEFSQU1TIChJb3J0Tm9kZVNtbXVWM1BhcnNlcikNCisgICAgKTsNCisNCisgIGlmICgqSW9ydElk TWFwcGluZ0NvdW50ICE9IDApIHsNCisgICAgRHVtcElvcnROb2RlSWRNYXBwaW5ncyAoUHRyLCBN YXBwaW5nQ291bnQsIE1hcHBpbmdPZmZzZXQpOw0KKyAgfQ0KK30NCisNCisvKiogVGhpcyBmdW5j dGlvbiBwYXJzZXMgdGhlIElPUlQgSVRTIG5vZGUuDQorDQorICBAcGFyYW0gW2luXSBQdHIgICAg ICAgICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLg0KKyAgQHBhcmFtIFtp bl0gTGVuZ3RoICAgICAgICAgTGVuZ3RoIG9mIHRoZSBidWZmZXIuDQorKi8NCitTVEFUSUMNCitW T0lEDQorRHVtcElvcnROb2RlSXRzICgNCisgIElOIFVJTlQ4KiBQdHIsDQorICBJTiBVSU5UMTYg TGVuZ3RoDQorICApDQorew0KKyAgVUlOVDMyIE9mZnNldDsNCisgIFVJTlQzMiBJbmRleDsNCisg IFVJTlQ4KiBJdHNJZFB0cjsNCisgIENIQVI4ICBCdWZmZXJbODBdOyAgLy8gVXNlZCBmb3IgQXNj aWlOYW1lIHBhcmFtIG9mIFBhcnNlQWNwaQ0KKw0KKyAgT2Zmc2V0ID0gUGFyc2VBY3BpICgNCisg ICAgICAgICAgICAgVFJVRSwNCisgICAgICAgICAgICAgMiwNCisgICAgICAgICAgICAgIklUUyBO b2RlIiwNCisgICAgICAgICAgICAgUHRyLA0KKyAgICAgICAgICAgICBMZW5ndGgsDQorICAgICAg ICAgICAgIFBBUlNFUl9QQVJBTVMgKElvcnROb2RlSXRzUGFyc2VyKQ0KKyAgICAgICAgICAgICAp Ow0KKw0KKyAgSXRzSWRQdHIgPSBQdHIgKyBPZmZzZXQ7DQorICBJbmRleCA9IDA7DQorICB3aGls ZSAoSW5kZXggPCAqSXRzQ291bnQpIHsNCisgICAgQXNjaWlTUHJpbnQgKA0KKyAgICAgIEJ1ZmZl ciwNCisgICAgICBzaXplb2YgKEJ1ZmZlciksDQorICAgICAgIkdJQyBJVFMgSWRlbnRpZmllciBB cnJheSBbJWRdIiwNCisgICAgICBJbmRleA0KKyAgICAgICk7DQorICAgIE9mZnNldCA9IFBhcnNl QWNwaSAoDQorICAgICAgICAgICAgICAgVFJVRSwNCisgICAgICAgICAgICAgICA0LA0KKyAgICAg ICAgICAgICAgIEJ1ZmZlciwNCisgICAgICAgICAgICAgICBJdHNJZFB0ciwNCisgICAgICAgICAg ICAgICA0LA0KKyAgICAgICAgICAgICAgIFBBUlNFUl9QQVJBTVMgKEl0c0lkUGFyc2VyKQ0KKyAg ICAgICAgICAgICAgICk7DQorICAgIEl0c0lkUHRyICs9IE9mZnNldDsNCisgICAgSW5kZXgrKzsN CisgIH0NCisNCisgIC8vIE5vdGU6IElUUyBkb2VzIG5vdCBoYXZlIHRoZSBJRCBNYXBwaW5ncyBB cnJheQ0KK30NCisNCisvKiogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIElPUlQgTmFtZWQgQ29t cG9uZW50IG5vZGUuDQorDQorICBAcGFyYW0gW2luXSBQdHIgICAgICAgICAgICBQb2ludGVyIHRv IHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLg0KKyAgQHBhcmFtIFtpbl0gTGVuZ3RoICAgICAgICAg TGVuZ3RoIG9mIHRoZSBidWZmZXIuDQorICBAcGFyYW0gW2luXSBNYXBwaW5nQ291bnQgICBUaGUg SUQgTWFwcGluZyBjb3VudC4NCisgIEBwYXJhbSBbaW5dIE1hcHBpbmdPZmZzZXQgIFRoZSBvZmZz ZXQgb2YgdGhlIElEIE1hcHBpbmcgYXJyYXkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBJT1JUIHRhYmxlLg0KKyovDQorU1RBVElDDQorVk9JRA0K K0R1bXBJb3J0Tm9kZU5hbWVkQ29tcG9uZW50ICgNCisgIElOIFVJTlQ4KiBQdHIsDQorICBJTiBV SU5UMTYgTGVuZ3RoLA0KKyAgSU4gVUlOVDMyIE1hcHBpbmdDb3VudCwNCisgIElOIFVJTlQzMiBN YXBwaW5nT2Zmc2V0DQorICApDQorew0KKyAgVUlOVDMyIE9mZnNldDsNCisgIFVJTlQzMiBJbmRl eDsNCisgIFVJTlQ4KiBEZXZpY2VOYW1lUHRyOw0KKyAgVUlOVDMyIERldmljZU5hbWVMZW5ndGg7 DQorDQorICBPZmZzZXQgPSBQYXJzZUFjcGkgKA0KKyAgICAgICAgICAgICBUUlVFLA0KKyAgICAg ICAgICAgICAyLA0KKyAgICAgICAgICAgICAiTmFtZWQgQ29tcG9uZW50IE5vZGUiLA0KKyAgICAg ICAgICAgICBQdHIsDQorICAgICAgICAgICAgIExlbmd0aCwNCisgICAgICAgICAgICAgUEFSU0VS X1BBUkFNUyAoSW9ydE5vZGVOYW1lZENvbXBvbmVudFBhcnNlcikNCisgICAgICAgICAgICAgKTsN CisNCisgIERldmljZU5hbWVQdHIgPSBQdHIgKyBPZmZzZXQ7DQorICAvLyBFc3RpbWF0ZSB0aGUg RGV2aWNlIE5hbWUgbGVuZ3RoDQorICBEZXZpY2VOYW1lTGVuZ3RoID0gTGVuZ3RoIC0gT2Zmc2V0 IC0gKE1hcHBpbmdDb3VudCAqIDIwKTsNCisgIFByaW50RmllbGROYW1lICgyLCBMIkRldmljZSBP YmplY3QgTmFtZSIpOw0KKyAgSW5kZXggPSAwOw0KKyAgd2hpbGUgKChJbmRleCA8IERldmljZU5h bWVMZW5ndGgpICYmIChEZXZpY2VOYW1lUHRyW0luZGV4XSAhPSAwKSkgew0KKyAgICBQcmludCAo TCIlYyIsIERldmljZU5hbWVQdHJbSW5kZXgrK10pOw0KKyAgfQ0KKyAgUHJpbnQgKEwiXG4iKTsN CisNCisgIGlmICgqSW9ydElkTWFwcGluZ0NvdW50ICE9IDApIHsNCisgICAgRHVtcElvcnROb2Rl SWRNYXBwaW5ncyAoUHRyLCBNYXBwaW5nQ291bnQsIE1hcHBpbmdPZmZzZXQpOw0KKyAgfQ0KK30N CisNCisvKiogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIElPUlQgUm9vdCBDb21wbGV4IG5vZGUu DQorDQorICBAcGFyYW0gW2luXSBQdHIgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBv ZiB0aGUgYnVmZmVyLg0KKyAgQHBhcmFtIFtpbl0gTGVuZ3RoICAgICAgICAgTGVuZ3RoIG9mIHRo ZSBidWZmZXIuDQorICBAcGFyYW0gW2luXSBNYXBwaW5nQ291bnQgICBUaGUgSUQgTWFwcGluZyBj b3VudC4NCisgIEBwYXJhbSBbaW5dIE1hcHBpbmdPZmZzZXQgIFRoZSBvZmZzZXQgb2YgdGhlIElE IE1hcHBpbmcgYXJyYXkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHN0 YXJ0IG9mIHRoZSBJT1JUIHRhYmxlLg0KKyovDQorU1RBVElDDQorVk9JRA0KK0R1bXBJb3J0Tm9k ZVJvb3RDb21wbGV4ICgNCisgIElOIFVJTlQ4KiBQdHIsDQorICBJTiBVSU5UMTYgTGVuZ3RoLA0K KyAgSU4gVUlOVDMyIE1hcHBpbmdDb3VudCwNCisgIElOIFVJTlQzMiBNYXBwaW5nT2Zmc2V0DQor ICApDQorew0KKyAgUGFyc2VBY3BpICgNCisgICAgVFJVRSwNCisgICAgMiwNCisgICAgIlJvb3Qg Q29tcGxleCBOb2RlIiwNCisgICAgUHRyLA0KKyAgICBMZW5ndGgsDQorICAgIFBBUlNFUl9QQVJB TVMgKElvcnROb2RlUm9vdENvbXBsZXhQYXJzZXIpDQorICAgICk7DQorDQorICBpZiAoKklvcnRJ ZE1hcHBpbmdDb3VudCAhPSAwKSB7DQorICAgIER1bXBJb3J0Tm9kZUlkTWFwcGluZ3MgKFB0ciwg TWFwcGluZ0NvdW50LCBNYXBwaW5nT2Zmc2V0KTsNCisgIH0NCit9DQorDQorLyoqIFRoaXMgZnVu Y3Rpb24gcGFyc2VzIHRoZSBJT1JUIFBNQ0cgbm9kZS4NCisNCisgIEBwYXJhbSBbaW5dIFB0ciAg ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorICBAcGFyYW0g W2luXSBMZW5ndGggICAgICAgICBMZW5ndGggb2YgdGhlIGJ1ZmZlci4NCisgIEBwYXJhbSBbaW5d IE1hcHBpbmdDb3VudCAgIFRoZSBJRCBNYXBwaW5nIGNvdW50Lg0KKyAgQHBhcmFtIFtpbl0gTWFw cGluZ09mZnNldCAgVGhlIG9mZnNldCBvZiB0aGUgSUQgTWFwcGluZyBhcnJheQ0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIElPUlQgdGFibGUuDQor Ki8NCitTVEFUSUMNCitWT0lEDQorRHVtcElvcnROb2RlUG1jZyAoDQorICBJTiBVSU5UOCogUHRy LA0KKyAgSU4gVUlOVDE2IExlbmd0aCwNCisgIElOIFVJTlQzMiBNYXBwaW5nQ291bnQsDQorICBJ TiBVSU5UMzIgTWFwcGluZ09mZnNldA0KKykNCit7DQorICBQYXJzZUFjcGkgKA0KKyAgICBUUlVF LA0KKyAgICAyLA0KKyAgICAiUE1DRyBOb2RlIiwNCisgICAgUHRyLA0KKyAgICBMZW5ndGgsDQor ICAgIFBBUlNFUl9QQVJBTVMgKElvcnROb2RlUG1jZ1BhcnNlcikNCisgICk7DQorDQorICBpZiAo KklvcnRJZE1hcHBpbmdDb3VudCAhPSAwKSB7DQorICAgIER1bXBJb3J0Tm9kZUlkTWFwcGluZ3Mg KFB0ciwgTWFwcGluZ0NvdW50LCBNYXBwaW5nT2Zmc2V0KTsNCisgIH0NCisNCisgIGlmICgqSW9y dElkTWFwcGluZ0NvdW50ID4gMSkgew0KKyAgICBJbmNyZW1lbnRFcnJvckNvdW50ICgpOw0KKyAg ICBQcmludCAoDQorICAgICAgTCJFUlJPUjogSUQgbWFwcGluZyBtdXN0IG5vdCBiZSBncmVhdGVy IHRoYW4gMS4gSWQgTWFwcGluZyBDb3VudCA9JWRcbiIsDQorICAgICAgKklvcnRJZE1hcHBpbmdD b3VudA0KKyAgICAgICk7DQorICB9DQorfQ0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0 aGUgQUNQSSBJT1JUIHRhYmxlLg0KKyAgV2hlbiB0cmFjZSBpcyBlbmFibGVkIHRoaXMgZnVuY3Rp b24gcGFyc2VzIHRoZSBJT1JUIHRhYmxlIGFuZA0KKyAgdHJhY2VzIHRoZSBBQ1BJIGZpZWxkcy4N CisNCisgIFRoaXMgZnVuY3Rpb24gYWxzbyBwYXJzZXMgdGhlIGZvbGxvd2luZyBub2RlczoNCisg ICAgLSBJVFMgR3JvdXANCisgICAgLSBOYW1lZCBDb21wb25lbnQNCisgICAgLSBSb290IENvbXBs ZXgNCisgICAgLSBTTU1VdjEvMg0KKyAgICAtIFNNTVV2Mw0KKyAgICAtIFBNQ0cNCisNCisgIFRo aXMgZnVuY3Rpb24gYWxzbyBwZXJmb3JtcyB2YWxpZGF0aW9uIG9mIHRoZSBBQ1BJIHRhYmxlIGZp ZWxkcy4NCisNCisgIEBwYXJhbSBbaW5dIFRyYWNlICAgICAgICAgICAgICBJZiBUUlVFLCB0cmFj ZSB0aGUgQUNQSSBmaWVsZHMuDQorICBAcGFyYW0gW2luXSBQdHIgICAgICAgICAgICAgICAgUG9p bnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4NCisgIEBwYXJhbSBbaW5dIEFjcGlUYWJs ZUxlbmd0aCAgICBMZW5ndGggb2YgdGhlIEFDUEkgdGFibGUuDQorICBAcGFyYW0gW2luXSBBY3Bp VGFibGVSZXZpc2lvbiAgUmV2aXNpb24gb2YgdGhlIEFDUEkgdGFibGUuDQorKi8NCitWT0lEDQor RUZJQVBJDQorUGFyc2VBY3BpSW9ydCAoDQorICBJTiBCT09MRUFOIFRyYWNlLA0KKyAgSU4gVUlO VDgqICBQdHIsDQorICBJTiBVSU5UMzIgIEFjcGlUYWJsZUxlbmd0aCwNCisgIElOIFVJTlQ4ICAg QWNwaVRhYmxlUmV2aXNpb24NCisgICkNCit7DQorICBVSU5UMzIgT2Zmc2V0Ow0KKyAgVUlOVDMy IEluZGV4Ow0KKyAgVUlOVDgqIE5vZGVQdHI7DQorDQorICBpZiAoIVRyYWNlKSB7DQorICAgIHJl dHVybjsNCisgIH0NCisNCisgIFBhcnNlQWNwaSAoDQorICAgIFRSVUUsDQorICAgIDAsDQorICAg ICJJT1JUIiwNCisgICAgUHRyLA0KKyAgICBBY3BpVGFibGVMZW5ndGgsDQorICAgIFBBUlNFUl9Q QVJBTVMgKElvcnRQYXJzZXIpDQorICAgICk7DQorICBPZmZzZXQgPSAqSW9ydE5vZGVPZmZzZXQ7 DQorICBOb2RlUHRyID0gUHRyICsgT2Zmc2V0Ow0KKyAgSW5kZXggPSAwOw0KKw0KKyAgd2hpbGUg KChJbmRleCA8ICpJb3J0Tm9kZUNvdW50KSAmJiAoT2Zmc2V0IDwgQWNwaVRhYmxlTGVuZ3RoKSkg ew0KKyAgICAvLyBQYXJzZSB0aGUgSU9SVCBOb2RlIEhlYWRlcg0KKyAgICBQYXJzZUFjcGkgKA0K KyAgICAgIEZBTFNFLA0KKyAgICAgIDAsDQorICAgICAgIklPUlQgTm9kZSBIZWFkZXIiLA0KKyAg ICAgIE5vZGVQdHIsDQorICAgICAgMTYsDQorICAgICAgUEFSU0VSX1BBUkFNUyAoSW9ydE5vZGVI ZWFkZXJQYXJzZXIpDQorICAgICAgKTsNCisgICAgaWYgKCpJb3J0Tm9kZUxlbmd0aCA9PSAwKSB7 DQorICAgICAgSW5jcmVtZW50RXJyb3JDb3VudCAoKTsNCisgICAgICBQcmludCAoTCJFUlJPUjog UGFyc2VyIGVycm9yLiBJbnZhbGlkIHRhYmxlIGRhdGEuXG4iKTsNCisgICAgICByZXR1cm47DQor ICAgIH0NCisNCisgICAgUHJpbnRGaWVsZE5hbWUgKDIsIEwiKiBOb2RlIE9mZnNldCAqIik7DQor ICAgIFByaW50IChMIjB4JXhcbiIsIE9mZnNldCk7DQorDQorICAgIHN3aXRjaCAoKklvcnROb2Rl VHlwZSkgew0KKyAgICAgIGNhc2UgRUlPUlRfTk9ERV9JVFNfR1JPVVA6DQorICAgICAgICBEdW1w SW9ydE5vZGVJdHMgKA0KKyAgICAgICAgICBOb2RlUHRyLA0KKyAgICAgICAgICAqSW9ydE5vZGVM ZW5ndGgNCisgICAgICAgICAgKTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgRUlPUlRf Tk9ERV9OQU1FRF9DT01QT05FTlQ6DQorICAgICAgICBEdW1wSW9ydE5vZGVOYW1lZENvbXBvbmVu dCAoDQorICAgICAgICAgIE5vZGVQdHIsDQorICAgICAgICAgICpJb3J0Tm9kZUxlbmd0aCwNCisg ICAgICAgICAgKklvcnRJZE1hcHBpbmdDb3VudCwNCisgICAgICAgICAgKklvcnRJZE1hcHBpbmdP ZmZzZXQNCisgICAgICAgICAgKTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgRUlPUlRf Tk9ERV9ST09UX0NPTVBMRVg6DQorICAgICAgICBEdW1wSW9ydE5vZGVSb290Q29tcGxleCAoDQor ICAgICAgICAgIE5vZGVQdHIsDQorICAgICAgICAgICpJb3J0Tm9kZUxlbmd0aCwNCisgICAgICAg ICAgKklvcnRJZE1hcHBpbmdDb3VudCwNCisgICAgICAgICAgKklvcnRJZE1hcHBpbmdPZmZzZXQN CisgICAgICAgICAgKTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgRUlPUlRfTk9ERV9T TU1VVjFfVjI6DQorICAgICAgICBEdW1wSW9ydE5vZGVTbW11VjFWMiAoDQorICAgICAgICAgIE5v ZGVQdHIsDQorICAgICAgICAgICpJb3J0Tm9kZUxlbmd0aCwNCisgICAgICAgICAgKklvcnRJZE1h cHBpbmdDb3VudCwNCisgICAgICAgICAgKklvcnRJZE1hcHBpbmdPZmZzZXQNCisgICAgICAgICAg KTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgRUlPUlRfTk9ERV9TTU1VVjM6DQorICAg ICAgICBEdW1wSW9ydE5vZGVTbW11VjMgKA0KKyAgICAgICAgICBOb2RlUHRyLA0KKyAgICAgICAg ICAqSW9ydE5vZGVMZW5ndGgsDQorICAgICAgICAgICpJb3J0SWRNYXBwaW5nQ291bnQsDQorICAg ICAgICAgICpJb3J0SWRNYXBwaW5nT2Zmc2V0DQorICAgICAgICAgICk7DQorICAgICAgICBicmVh azsNCisgICAgICBjYXNlIEVJT1JUX05PREVfUE1DRzoNCisgICAgICAgIER1bXBJb3J0Tm9kZVBt Y2cgKA0KKyAgICAgICAgICBOb2RlUHRyLA0KKyAgICAgICAgICAqSW9ydE5vZGVMZW5ndGgsDQor ICAgICAgICAgICpJb3J0SWRNYXBwaW5nQ291bnQsDQorICAgICAgICAgICpJb3J0SWRNYXBwaW5n T2Zmc2V0DQorICAgICAgICApOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgICAgZGVmYXVsdDoN CisgICAgICAgIEluY3JlbWVudEVycm9yQ291bnQgKCk7DQorICAgICAgICBQcmludCAoTCJFUlJP UjogVW5zdXBwb3J0ZWQgSU9SVCBOb2RlIHR5cGUgPSAlZFxuIiwgKklvcnROb2RlVHlwZSk7DQor ICAgIH0gLy8gc3dpdGNoDQorDQorICAgIE5vZGVQdHIgKz0gKCpJb3J0Tm9kZUxlbmd0aCk7DQor ICAgIE9mZnNldCArPSAoKklvcnROb2RlTGVuZ3RoKTsNCisgIH0gLy8gd2hpbGUNCit9DQpkaWZm IC0tZ2l0IGEvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvUGFy c2Vycy9NYWR0L01hZHRQYXJzZXIuYyBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZp ZXdDb21tYW5kTGliL1BhcnNlcnMvTWFkdC9NYWR0UGFyc2VyLmMNCm5ldyBmaWxlIG1vZGUgMTAw NjQ0DQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yY2Ni YjdiODBlZGMzYjRjMWU1MWE1NWI0MTZiZGUxMWExNDVmMjVkDQotLS0gL2Rldi9udWxsDQorKysg Yi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9QYXJzZXJzL01h ZHQvTWFkdFBhcnNlci5jDQpAQCAtMCwwICsxLDMxMyBAQA0KKy8qKg0KKyAgTUFEVCB0YWJsZSBw YXJzZXINCisNCisgIENvcHlyaWdodCAoYykgMjAxNiAtIDIwMTgsIEFSTSBMaW1pdGVkLiBBbGwg cmlnaHRzIHJlc2VydmVkLg0KKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1h dGVyaWFscw0KKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVy bXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQorICB3aGljaCBhY2NvbXBhbmll cyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJl IGZvdW5kIGF0DQorICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2Uu cGhwDQorDQorICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VO U0UgT04gQU4gIkFTIElTIiBCQVNJUywNCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNF TlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQorDQorICBA cGFyIFJlZmVyZW5jZShzKToNCisgICAgLSBBQ1BJIDYuMiBTcGVjaWZpY2F0aW9uIC0gRXJyYXRh IEEsIFNlcHRlbWJlciAyMDE3DQorKiovDQorDQorI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQv QWNwaS5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCisjaW5jbHVkZSAiQWNwaVBh cnNlci5oIg0KKyNpbmNsdWRlICJBY3BpVGFibGVQYXJzZXIuaCINCisNCisvLyBMb2NhbCBWYXJp YWJsZXMNCitTVEFUSUMgQ09OU1QgVUlOVDgqIE1hZHRJbnRlcnJ1cHRDb250cm9sbGVyVHlwZTsN CitTVEFUSUMgQ09OU1QgVUlOVDgqIE1hZHRJbnRlcnJ1cHRDb250cm9sbGVyTGVuZ3RoOw0KK1NU QVRJQyBBQ1BJX0RFU0NSSVBUSU9OX0hFQURFUl9JTkZPIEFjcGlIZHJJbmZvOw0KKw0KKy8vIEZv cndhcmQgZGVjbGFyYXRpb25zDQorU1RBVElDDQorVk9JRA0KK0VGSUFQSQ0KK1ZhbGlkYXRlR0lD RFN5c3RlbVZlY3RvckJhc2UgKA0KKyAgSU4gVUlOVDgqIFB0ciwNCisgIElOIFZPSUQqICBDb250 ZXh0DQorKTsNCisNCisvKiogQW4gQUNQSV9QQVJTRVIgYXJyYXkgZGVzY3JpYmluZyB0aGUgR0lD QyBJbnRlcnJ1cHQNCisgICAgQ29udHJvbGxlciBTdHJ1Y3R1cmUuDQorKi8NCitTVEFUSUMgQ09O U1QgQUNQSV9QQVJTRVIgR2ljQ1BhcnNlcltdID0gew0KKyAge0wiVHlwZSIsIDEsIDAsIEwiMHgl eCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiTGVuZ3RoIiwgMSwgMSwgTCIlZCIs IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUmVzZXJ2ZWQiLCAyLCAyLCBMIjB4JXgi LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisNCisgIHtMIkNQVSBJbnRlcmZhY2UgTnVtYmVy IiwgNCwgNCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJBQ1BJIFBy b2Nlc3NvciBVSUQiLCA0LCA4LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisg IHtMIkZsYWdzIiwgNCwgMTIsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAg e0wiUGFya2luZyBQcm90b2NvbCBWZXJzaW9uIiwgNCwgMTYsIEwiMHgleCIsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEx9LA0KKw0KKyAge0wiUGVyZm9ybWFuY2UgSW50ZXJydXB0IEdTSVYiLCA0LCAy MCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJQYXJrZWQgQWRkcmVz cyIsIDgsIDI0LCBMIjB4JWx4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJQaHlz aWNhbCBCYXNlIEFkZHJlc3MiLCA4LCAzMiwgTCIweCVseCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEx9LA0KKyAge0wiR0lDViIsIDgsIDQwLCBMIjB4JWx4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TH0sDQorICB7TCJHSUNIIiwgOCwgNDgsIEwiMHglbHgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM fSwNCisgIHtMIlZHSUMgTWFpbnRlbmFuY2UgaW50ZXJydXB0IiwgNCwgNTYsIEwiMHgleCIsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiR0lDUiBCYXNlIEFkZHJlc3MiLCA4LCA2MCwg TCIweCVseCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiTVBJRFIiLCA4LCA2OCwg TCIweCVseCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUHJvY2Vzc29yIFBvd2Vy IEVmZmljaWVuY3kgQ2xhc3MiLCAxLCA3NiwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwNCisg ICBOVUxMfSwNCisgIHtMIlJlc2VydmVkIiwgMywgNzcsIEwiJXggJXggJXgiLCBEdW1wM0NoYXJz LCBOVUxMLCBOVUxMLCBOVUxMfQ0KK307DQorDQorLyoqIEFuIEFDUElfUEFSU0VSIGFycmF5IGRl c2NyaWJpbmcgdGhlIEdJQ0QgSW50ZXJydXB0DQorICAgIENvbnRyb2xsZXIgU3RydWN0dXJlLg0K KyovDQorU1RBVElDIENPTlNUIEFDUElfUEFSU0VSIEdpY0RQYXJzZXJbXSA9IHsNCisgIHtMIlR5 cGUiLCAxLCAwLCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIkxlbmd0 aCIsIDEsIDEsIEwiJWQiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIlJlc2VydmVk IiwgMiwgMiwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorDQorICB7TCJHSUMg SUQiLCA0LCA0LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIlBoeXNp Y2FsIEJhc2UgQWRkcmVzcyIsIDgsIDgsIEwiMHglbHgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM fSwNCisgIHtMIlN5c3RlbSBWZWN0b3IgQmFzZSIsIDQsIDE2LCBMIjB4JXgiLCBOVUxMLCBOVUxM LA0KKyAgICBWYWxpZGF0ZUdJQ0RTeXN0ZW1WZWN0b3JCYXNlLCBOVUxMfSwNCisgIHtMIkdJQyBW ZXJzaW9uIiwgMSwgMjAsIEwiJWQiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIlJl c2VydmVkIiwgMywgMjEsIEwiJXggJXggJXgiLCBEdW1wM0NoYXJzLCBOVUxMLCBOVUxMLCBOVUxM fQ0KK307DQorDQorLyoqIEFuIEFDUElfUEFSU0VSIGFycmF5IGRlc2NyaWJpbmcgdGhlIE1TSSBG cmFtZSBJbnRlcnJ1cHQNCisgICAgQ29udHJvbGxlciBTdHJ1Y3R1cmUuDQorKi8NCitTVEFUSUMg Q09OU1QgQUNQSV9QQVJTRVIgR2ljTVNJRnJhbWVQYXJzZXJbXSA9IHsNCisgIHtMIlR5cGUiLCAx LCAwLCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIkxlbmd0aCIsIDEs IDEsIEwiJWQiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIlJlc2VydmVkIiwgMiwg MiwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorDQorICB7TCJNU0kgRnJhbWUg SUQiLCA0LCA0LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIlBoeXNp Y2FsIEJhc2UgQWRkcmVzcyIsIDgsIDgsIEwiMHglbHgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM fSwNCisgIHtMIkZsYWdzIiwgNCwgMTYsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9 LA0KKw0KKyAge0wiU1BJIENvdW50IiwgMiwgMjAsIEwiJWQiLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMfSwNCisgIHtMIlNQSSBCYXNlIiwgMiwgMjIsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEx9DQorfTsNCisNCisvKiogQW4gQUNQSV9QQVJTRVIgYXJyYXkgZGVzY3JpYmluZyB0aGUg R0lDUiBJbnRlcnJ1cHQNCisgICAgQ29udHJvbGxlciBTdHJ1Y3R1cmUuDQorKi8NCitTVEFUSUMg Q09OU1QgQUNQSV9QQVJTRVIgR2ljUlBhcnNlcltdID0gew0KKyAge0wiVHlwZSIsIDEsIDAsIEwi MHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiTGVuZ3RoIiwgMSwgMSwgTCIl ZCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUmVzZXJ2ZWQiLCAyLCAyLCBMIjB4 JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisNCisgIHtMIkRpc2NvdmVyeSBSYW5nZSBC YXNlIEFkZHJlc3MiLCA4LCA0LCBMIjB4JWx4IiwgTlVMTCwgTlVMTCwgTlVMTCwNCisgICBOVUxM fSwNCisgIHtMIkRpc2NvdmVyeSBSYW5nZSBMZW5ndGgiLCA0LCAxMiwgTCIweCV4IiwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTH0NCit9Ow0KKw0KKy8qKiBBbiBBQ1BJX1BBUlNFUiBhcnJheSBkZXNj cmliaW5nIHRoZSBHSUMgSVRTIEludGVycnVwdA0KKyAgICBDb250cm9sbGVyIFN0cnVjdHVyZS4N CisqLw0KK1NUQVRJQyBDT05TVCBBQ1BJX1BBUlNFUiBHaWNJVFNQYXJzZXJbXSA9IHsNCisgIHtM IlR5cGUiLCAxLCAwLCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIkxl bmd0aCIsIDEsIDEsIEwiJWQiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIlJlc2Vy dmVkIiwgMiwgMiwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorDQorICB7TCJH SUMgSVRTIElEIiwgNCwgNCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7 TCJQaHlzaWNhbCBCYXNlIEFkZHJlc3MiLCA4LCA4LCBMIjB4JWx4IiwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTH0sDQorICB7TCJSZXNlcnZlZCIsIDQsIDE2LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMfQ0KK307DQorDQorLyoqIEFuIEFDUElfUEFSU0VSIGFycmF5IGRlc2NyaWJpbmcg dGhlIEFDUEkgTUFEVCBUYWJsZS4NCisqLw0KK1NUQVRJQyBDT05TVCBBQ1BJX1BBUlNFUiBNYWR0 UGFyc2VyW10gPSB7DQorICBQQVJTRV9BQ1BJX0hFQURFUiAoJkFjcGlIZHJJbmZvKSwNCisgIHtM IkxvY2FsIEludGVycnVwdCBDb250cm9sbGVyIEFkZHJlc3MiLCA0LCAzNiwgTCIweCV4IiwgTlVM TCwgTlVMTCwgTlVMTCwNCisgICBOVUxMfSwNCisgIHtMIkZsYWdzIiwgNCwgNDAsIEwiMHgleCIs IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9DQorfTsNCisNCisvKiogQW4gQUNQSV9QQVJTRVIgYXJy YXkgZGVzY3JpYmluZyB0aGUgTUFEVCBJbnRlcnJ1cHQNCisgICAgQ29udHJvbGxlciBTdHJ1Y3R1 cmUgSGVhZGVyIFN0cnVjdHVyZS4NCisqLw0KK1NUQVRJQyBDT05TVCBBQ1BJX1BBUlNFUiBNYWR0 SW50ZXJydXB0Q29udHJvbGxlckhlYWRlclBhcnNlcltdID0gew0KKyAge05VTEwsIDEsIDAsIE5V TEwsIE5VTEwsIChWT0lEKiopJk1hZHRJbnRlcnJ1cHRDb250cm9sbGVyVHlwZSwgTlVMTCwgTlVM TH0sDQorICB7TCJMZW5ndGgiLCAxLCAxLCBOVUxMLCBOVUxMLCAoVk9JRCoqKSZNYWR0SW50ZXJy dXB0Q29udHJvbGxlckxlbmd0aCwgTlVMTCwNCisgICBOVUxMfSwNCisgIHtMIlJlc2VydmVkIiwg MiwgMiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0NCit9Ow0KKw0KKy8qKiBUaGlzIGZ1 bmN0aW9uIHZhbGlkYXRlcyB0aGUgU3lzdGVtIFZlY3RvciBCYXNlIGluIHRoZSBHSUNELg0KKw0K KyAgQHBhcmFtIFtpbl0gUHRyICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgZmllbGQg ZGF0YS4NCisgIEBwYXJhbSBbaW5dIENvbnRleHQgUG9pbnRlciB0byBjb250ZXh0IHNwZWNpZmlj IGluZm9ybWF0aW9uIGUuZy4gdGhpcw0KKyAgICAgICAgICAgICAgICAgICAgICBjb3VsZCBiZSBh IHBvaW50ZXIgdG8gdGhlIEFDUEkgdGFibGUgaGVhZGVyLg0KKyovDQorU1RBVElDDQorVk9JRA0K K0VGSUFQSQ0KK1ZhbGlkYXRlR0lDRFN5c3RlbVZlY3RvckJhc2UgKA0KKyAgSU4gVUlOVDgqIFB0 ciwNCisgIElOIFZPSUQqICBDb250ZXh0DQorKQ0KK3sNCisgIGlmICgqKFVJTlQzMiopUHRyICE9 IDApIHsNCisgICAgSW5jcmVtZW50RXJyb3JDb3VudCAoKTsNCisgICAgUHJpbnQgKA0KKyAgICAg IEwiXG5FUlJPUjogU3lzdGVtIFZlY3RvciBCYXNlIG11c3QgYmUgemVyby4iDQorICAgICk7DQor ICB9DQorfQ0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUgQUNQSSBNQURUIHRhYmxl Lg0KKyAgV2hlbiB0cmFjZSBpcyBlbmFibGVkIHRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBNQURU IHRhYmxlIGFuZA0KKyAgdHJhY2VzIHRoZSBBQ1BJIHRhYmxlIGZpZWxkcy4NCisNCisgIFRoaXMg ZnVuY3Rpb24gY3VycmVudGx5IHBhcnNlcyB0aGUgZm9sbG93aW5nIEludGVycnVwdCBDb250cm9s bGVyDQorICBTdHJ1Y3R1cmVzOg0KKyAgICAtIEdJQ0MNCisgICAgLSBHSUNEDQorICAgIC0gR0lD IE1TSSBGcmFtZQ0KKyAgICAtIEdJQ1INCisgICAgLSBHSUMgSVRTDQorDQorICBUaGlzIGZ1bmN0 aW9uIGFsc28gcGVyZm9ybXMgdmFsaWRhdGlvbiBvZiB0aGUgQUNQSSB0YWJsZSBmaWVsZHMuDQor DQorICBAcGFyYW0gW2luXSBUcmFjZSAgICAgICAgICAgICAgSWYgVFJVRSwgdHJhY2UgdGhlIEFD UEkgZmllbGRzLg0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8g dGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorICBAcGFyYW0gW2luXSBBY3BpVGFibGVMZW5ndGgg ICAgTGVuZ3RoIG9mIHRoZSBBQ1BJIHRhYmxlLg0KKyAgQHBhcmFtIFtpbl0gQWNwaVRhYmxlUmV2 aXNpb24gIFJldmlzaW9uIG9mIHRoZSBBQ1BJIHRhYmxlLg0KKyovDQorVk9JRA0KK0VGSUFQSQ0K K1BhcnNlQWNwaU1hZHQgKA0KKyAgSU4gQk9PTEVBTiBUcmFjZSwNCisgIElOIFVJTlQ4KiAgUHRy LA0KKyAgSU4gVUlOVDMyICBBY3BpVGFibGVMZW5ndGgsDQorICBJTiBVSU5UOCAgIEFjcGlUYWJs ZVJldmlzaW9uDQorICApDQorew0KKyAgVUlOVDMyIE9mZnNldDsNCisgIFVJTlQ4KiBJbnRlcnJ1 cHRDb250b2xsZXJQdHI7DQorICBVSU5UMzIgR0lDRENvdW50ID0gMDsNCisNCisgIGlmICghVHJh Y2UpIHsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgT2Zmc2V0ID0gUGFyc2VBY3BpICgNCisg ICAgICAgICAgICAgVFJVRSwNCisgICAgICAgICAgICAgMCwNCisgICAgICAgICAgICAgIk1BRFQi LA0KKyAgICAgICAgICAgICBQdHIsDQorICAgICAgICAgICAgIEFjcGlUYWJsZUxlbmd0aCwNCisg ICAgICAgICAgICAgUEFSU0VSX1BBUkFNUyAoTWFkdFBhcnNlcikNCisgICAgICAgICAgICAgKTsN CisgIEludGVycnVwdENvbnRvbGxlclB0ciA9IFB0ciArIE9mZnNldDsNCisNCisgIHdoaWxlIChP ZmZzZXQgPCBBY3BpVGFibGVMZW5ndGgpIHsNCisgICAgLy8gUGFyc2UgSW50ZXJydXB0IENvbnRy b2xsZXIgU3RydWN0dXJlIHRvIG9idGFpbiBMZW5ndGguDQorICAgIFBhcnNlQWNwaSAoDQorICAg ICAgRkFMU0UsDQorICAgICAgMCwNCisgICAgICBOVUxMLA0KKyAgICAgIEludGVycnVwdENvbnRv bGxlclB0ciwNCisgICAgICAyLCAgLy8gIExlbmd0aCBpcyAxIGJ5dGUgYXQgb2Zmc2V0IDENCisg ICAgICBQQVJTRVJfUEFSQU1TIChNYWR0SW50ZXJydXB0Q29udHJvbGxlckhlYWRlclBhcnNlcikN CisgICAgICApOw0KKw0KKyAgICBpZiAoKChPZmZzZXQgKyAoKk1hZHRJbnRlcnJ1cHRDb250cm9s bGVyTGVuZ3RoKSkgPiBBY3BpVGFibGVMZW5ndGgpIHx8DQorICAgICAgICAoKk1hZHRJbnRlcnJ1 cHRDb250cm9sbGVyTGVuZ3RoIDwgNCkpIHsNCisgICAgICBJbmNyZW1lbnRFcnJvckNvdW50ICgp Ow0KKyAgICAgIFByaW50ICgNCisgICAgICAgICBMIkVSUk9SOiBJbnZhbGlkIEludGVycnVwdCBD b250cm9sbGVyIExlbmd0aCwiDQorICAgICAgICAgICIgVHlwZSA9ICVkLCBMZW5ndGggPSAlZFxu IiwNCisgICAgICAgICAqTWFkdEludGVycnVwdENvbnRyb2xsZXJUeXBlLA0KKyAgICAgICAgICpN YWR0SW50ZXJydXB0Q29udHJvbGxlckxlbmd0aA0KKyAgICAgICAgICk7DQorICAgICAgYnJlYWs7 DQorICAgIH0NCisNCisgICAgc3dpdGNoICgqTWFkdEludGVycnVwdENvbnRyb2xsZXJUeXBlKSB7 DQorICAgICAgY2FzZSBFRklfQUNQSV82XzJfR0lDOiB7DQorICAgICAgICBQYXJzZUFjcGkgKA0K KyAgICAgICAgICBUUlVFLA0KKyAgICAgICAgICAyLA0KKyAgICAgICAgICAiR0lDQyIsDQorICAg ICAgICAgIEludGVycnVwdENvbnRvbGxlclB0ciwNCisgICAgICAgICAgKk1hZHRJbnRlcnJ1cHRD b250cm9sbGVyTGVuZ3RoLA0KKyAgICAgICAgICBQQVJTRVJfUEFSQU1TIChHaWNDUGFyc2VyKQ0K KyAgICAgICAgICApOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgfQ0KKw0KKyAgICAgIGNhc2Ug RUZJX0FDUElfNl8yX0dJQ0Q6IHsNCisgICAgICAgIGlmICgrK0dJQ0RDb3VudCA+IDEpIHsNCisg ICAgICAgICAgSW5jcmVtZW50RXJyb3JDb3VudCAoKTsNCisgICAgICAgICAgUHJpbnQgKA0KKyAg ICAgICAgICAgIEwiRVJST1I6IE9ubHkgb25lIEdJQ0QgbXVzdCBiZSBwcmVzZW50LCINCisgICAg ICAgICAgICAgICIgR0lDRENvdW50ID0gJWRcbiIsDQorICAgICAgICAgICAgR0lDRENvdW50DQor ICAgICAgICAgICAgKTsNCisgICAgICAgIH0NCisgICAgICAgIFBhcnNlQWNwaSAoDQorICAgICAg ICAgIFRSVUUsDQorICAgICAgICAgIDIsDQorICAgICAgICAgICJHSUNEIiwNCisgICAgICAgICAg SW50ZXJydXB0Q29udG9sbGVyUHRyLA0KKyAgICAgICAgICAqTWFkdEludGVycnVwdENvbnRyb2xs ZXJMZW5ndGgsDQorICAgICAgICAgIFBBUlNFUl9QQVJBTVMgKEdpY0RQYXJzZXIpDQorICAgICAg ICAgICk7DQorICAgICAgICBicmVhazsNCisgICAgICB9DQorDQorICAgICAgY2FzZSBFRklfQUNQ SV82XzJfR0lDX01TSV9GUkFNRTogew0KKyAgICAgICAgUGFyc2VBY3BpICgNCisgICAgICAgICAg VFJVRSwNCisgICAgICAgICAgMiwNCisgICAgICAgICAgIkdJQyBNU0kgRnJhbWUiLA0KKyAgICAg ICAgICBJbnRlcnJ1cHRDb250b2xsZXJQdHIsDQorICAgICAgICAgICpNYWR0SW50ZXJydXB0Q29u dHJvbGxlckxlbmd0aCwNCisgICAgICAgICAgUEFSU0VSX1BBUkFNUyAoR2ljTVNJRnJhbWVQYXJz ZXIpDQorICAgICAgICAgICk7DQorICAgICAgICBicmVhazsNCisgICAgICB9DQorDQorICAgICAg Y2FzZSBFRklfQUNQSV82XzJfR0lDUjogew0KKyAgICAgICAgUGFyc2VBY3BpICgNCisgICAgICAg ICAgVFJVRSwNCisgICAgICAgICAgMiwNCisgICAgICAgICAgIkdJQ1IiLA0KKyAgICAgICAgICBJ bnRlcnJ1cHRDb250b2xsZXJQdHIsDQorICAgICAgICAgICpNYWR0SW50ZXJydXB0Q29udHJvbGxl ckxlbmd0aCwNCisgICAgICAgICAgUEFSU0VSX1BBUkFNUyAoR2ljUlBhcnNlcikNCisgICAgICAg ICAgKTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIH0NCisNCisgICAgICBjYXNlIEVGSV9BQ1BJ XzZfMl9HSUNfSVRTOiB7DQorICAgICAgICBQYXJzZUFjcGkgKA0KKyAgICAgICAgICBUUlVFLA0K KyAgICAgICAgICAyLA0KKyAgICAgICAgICAiR0lDIElUUyIsDQorICAgICAgICAgIEludGVycnVw dENvbnRvbGxlclB0ciwNCisgICAgICAgICAgKk1hZHRJbnRlcnJ1cHRDb250cm9sbGVyTGVuZ3Ro LA0KKyAgICAgICAgICBQQVJTRVJfUEFSQU1TIChHaWNJVFNQYXJzZXIpDQorICAgICAgICAgICk7 DQorICAgICAgICBicmVhazsNCisgICAgICB9DQorDQorICAgICAgZGVmYXVsdDogew0KKyAgICAg ICAgSW5jcmVtZW50RXJyb3JDb3VudCAoKTsNCisgICAgICAgIFByaW50ICgNCisgICAgICAgICAg TCJFUlJPUjogVW5rbm93biBJbnRlcnJ1cHQgQ29udHJvbGxlciBTdHJ1Y3R1cmUsIg0KKyAgICAg ICAgICAgICIgVHlwZSA9ICVkLCBMZW5ndGggPSAlZFxuIiwNCisgICAgICAgICAgKk1hZHRJbnRl cnJ1cHRDb250cm9sbGVyVHlwZSwNCisgICAgICAgICAgKk1hZHRJbnRlcnJ1cHRDb250cm9sbGVy TGVuZ3RoDQorICAgICAgICAgICk7DQorICAgICAgfQ0KKyAgICB9IC8vIHN3aXRjaA0KKw0KKyAg ICBJbnRlcnJ1cHRDb250b2xsZXJQdHIgKz0gKk1hZHRJbnRlcnJ1cHRDb250cm9sbGVyTGVuZ3Ro Ow0KKyAgICBPZmZzZXQgKz0gKk1hZHRJbnRlcnJ1cHRDb250cm9sbGVyTGVuZ3RoOw0KKyAgfSAv LyB3aGlsZQ0KK30NCmRpZmYgLS1naXQgYS9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlW aWV3Q29tbWFuZExpYi9QYXJzZXJzL01jZmcvTWNmZ1BhcnNlci5jIGIvU2hlbGxQa2cvTGlicmFy eS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvUGFyc2Vycy9NY2ZnL01jZmdQYXJzZXIuYw0K bmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAuLmEyMWIzMGRjMGQ1YjYwMTA4NGU0ZmZjZDA3ZTczYjY2ZDExOGIzMjYNCi0t LSAvZGV2L251bGwNCisrKyBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21t YW5kTGliL1BhcnNlcnMvTWNmZy9NY2ZnUGFyc2VyLmMNCkBAIC0wLDAgKzEsOTQgQEANCisvKioN CisgIE1DRkcgdGFibGUgcGFyc2VyDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMTYgLSAyMDE4LCBB Uk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgIFRoaXMgcHJvZ3JhbSBhbmQgdGhl IGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFi bGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KKyAg d2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRo ZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vu c2VzL2JzZC1saWNlbnNlLnBocA0KKw0KKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5E RVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorICBXSVRIT1VUIFdBUlJB TlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJ TVBMSUVELg0KKw0KKyAgQHBhciBSZWZlcmVuY2Uocyk6DQorICAgIC0gUENJIEZpcm13YXJlIFNw ZWNpZmljYXRpb24gLSBSZXZpc2lvbiAzLjIsIEphbnVhcnkgMjYsIDIwMTUuDQorKiovDQorDQor I2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvQWNwaS5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1Vl ZmlMaWIuaD4NCisjaW5jbHVkZSAiQWNwaVBhcnNlci5oIg0KKyNpbmNsdWRlICJBY3BpVGFibGVQ YXJzZXIuaCINCisNCisvLyBMb2NhbCB2YXJpYWJsZXMNCitTVEFUSUMgQUNQSV9ERVNDUklQVElP Tl9IRUFERVJfSU5GTyBBY3BpSGRySW5mbzsNCisNCisvKiogQW4gQUNQSV9QQVJTRVIgYXJyYXkg ZGVzY3JpYmluZyB0aGUgQUNQSSBNQ0ZHIFRhYmxlLg0KKyovDQorU1RBVElDIENPTlNUIEFDUElf UEFSU0VSIE1jZmdQYXJzZXJbXSA9IHsNCisgIFBBUlNFX0FDUElfSEVBREVSICgmQWNwaUhkcklu Zm8pLA0KKyAge0wiUmVzZXJ2ZWQiLCA4LCAzNiwgTCIweCVseCIsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEx9LA0KK307DQorDQorLyoqIEFuIEFDUElfUEFSU0VSIGFycmF5IGRlc2NyaWJpbmcgdGhl IFBDSSBjb25maWd1cmF0aW9uIFNwYWNlDQorICAgIEJhc2UgQWRkcmVzcyBzdHJ1Y3R1cmUuDQor Ki8NCitTVEFUSUMgQ09OU1QgQUNQSV9QQVJTRVIgUGNpQ2ZnU3BhY2VCYXNlQWRkclBhcnNlcltd ID0gew0KKyAge0wiQmFzZSBBZGRyZXNzIiwgOCwgMCwgTCIweCVseCIsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEx9LA0KKyAge0wiUENJIFNlZ21lbnQgR3JvdXAgTm8uIiwgMiwgOCwgTCIweCV4Iiwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJTdGFydCBCdXMgTm8uIiwgMSwgMTAsIEwi MHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiRW5kIEJ1cyBOby4iLCAxLCAx MSwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJSZXNlcnZlZCIsIDQs IDEyLCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfQ0KK307DQorDQorLyoqIFRoaXMg ZnVuY3Rpb24gcGFyc2VzIHRoZSBBQ1BJIE1DRkcgdGFibGUuDQorICBXaGVuIHRyYWNlIGlzIGVu YWJsZWQgdGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIE1DRkcgdGFibGUgYW5kDQorICB0cmFjZXMg dGhlIEFDUEkgdGFibGUgZmllbGRzLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBhbHNvIHBlcmZvcm1z IHZhbGlkYXRpb24gb2YgdGhlIEFDUEkgdGFibGUgZmllbGRzLg0KKw0KKyAgQHBhcmFtIFtpbl0g VHJhY2UgICAgICAgICAgICAgIElmIFRSVUUsIHRyYWNlIHRoZSBBQ1BJIGZpZWxkcy4NCisgIEBw YXJhbSBbaW5dIFB0ciAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUg YnVmZmVyLg0KKyAgQHBhcmFtIFtpbl0gQWNwaVRhYmxlTGVuZ3RoICAgIExlbmd0aCBvZiB0aGUg QUNQSSB0YWJsZS4NCisgIEBwYXJhbSBbaW5dIEFjcGlUYWJsZVJldmlzaW9uICBSZXZpc2lvbiBv ZiB0aGUgQUNQSSB0YWJsZS4NCisqLw0KK1ZPSUQNCitFRklBUEkNCitQYXJzZUFjcGlNY2ZnICgN CisgIElOIEJPT0xFQU4gVHJhY2UsDQorICBJTiBVSU5UOCogIFB0ciwNCisgIElOIFVJTlQzMiAg QWNwaVRhYmxlTGVuZ3RoLA0KKyAgSU4gVUlOVDggICBBY3BpVGFibGVSZXZpc2lvbg0KKyAgKQ0K K3sNCisgIFVJTlQzMiBPZmZzZXQ7DQorICBVSU5UMzIgUGNpQ2ZnT2Zmc2V0Ow0KKyAgVUlOVDgq IFBjaUNmZ1NwYWNlUHRyOw0KKw0KKyAgaWYgKCFUcmFjZSkgew0KKyAgICByZXR1cm47DQorICB9 DQorDQorICBPZmZzZXQgPSBQYXJzZUFjcGkgKA0KKyAgICAgICAgICAgICBUUlVFLA0KKyAgICAg ICAgICAgICAwLA0KKyAgICAgICAgICAgICAiTUNGRyIsDQorICAgICAgICAgICAgIFB0ciwNCisg ICAgICAgICAgICAgQWNwaVRhYmxlTGVuZ3RoLA0KKyAgICAgICAgICAgICBQQVJTRVJfUEFSQU1T IChNY2ZnUGFyc2VyKQ0KKyAgICAgICAgICAgICApOw0KKw0KKyAgUGNpQ2ZnU3BhY2VQdHIgPSBQ dHIgKyBPZmZzZXQ7DQorDQorICB3aGlsZSAoT2Zmc2V0IDwgQWNwaVRhYmxlTGVuZ3RoKSB7DQor ICAgIFBjaUNmZ09mZnNldCA9IFBhcnNlQWNwaSAoDQorICAgICAgICAgICAgICAgICAgICAgVFJV RSwNCisgICAgICAgICAgICAgICAgICAgICAyLA0KKyAgICAgICAgICAgICAgICAgICAgICJQQ0kg Q29uZmlndXJhdGlvbiBTcGFjZSIsDQorICAgICAgICAgICAgICAgICAgICAgUGNpQ2ZnU3BhY2VQ dHIsDQorICAgICAgICAgICAgICAgICAgICAgKEFjcGlUYWJsZUxlbmd0aCAtIE9mZnNldCksDQor ICAgICAgICAgICAgICAgICAgICAgUEFSU0VSX1BBUkFNUyAoUGNpQ2ZnU3BhY2VCYXNlQWRkclBh cnNlcikNCisgICAgICAgICAgICAgICAgICAgICApOw0KKyAgICBQY2lDZmdTcGFjZVB0ciArPSBQ Y2lDZmdPZmZzZXQ7DQorICAgIE9mZnNldCArPSBQY2lDZmdPZmZzZXQ7DQorICB9DQorfQ0KZGlm ZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL1Bh cnNlcnMvUnNkcC9Sc2RwUGFyc2VyLmMgYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlW aWV3Q29tbWFuZExpYi9QYXJzZXJzL1JzZHAvUnNkcFBhcnNlci5jDQpuZXcgZmlsZSBtb2RlIDEw MDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQz ZmU3YTI1OTE0MjI2NGFkNTc1YWIzOWUyMTJhMmQ5ZThkYTYzMw0KLS0tIC9kZXYvbnVsbA0KKysr IGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvUGFyc2Vycy9S c2RwL1JzZHBQYXJzZXIuYw0KQEAgLTAsMCArMSwxNjkgQEANCisvKioNCisgIFJTRFAgdGFibGUg cGFyc2VyDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMTYgLSAyMDE4LCBBUk0gTGltaXRlZC4gQWxs IHJpZ2h0cyByZXNlcnZlZC4NCisgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBt YXRlcmlhbHMNCisgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRl cm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KKyAgd2hpY2ggYWNjb21wYW5p ZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBi ZSBmb3VuZCBhdA0KKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNl LnBocA0KKw0KKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNF TlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVT RU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KKw0KKyAg QHBhciBSZWZlcmVuY2Uocyk6DQorICAgIC0gQUNQSSA2LjIgU3BlY2lmaWNhdGlvbiAtIEVycmF0 YSBBLCBTZXB0ZW1iZXIgMjAxNw0KKyoqLw0KKw0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIu aD4NCisjaW5jbHVkZSAiQWNwaVBhcnNlci5oIg0KKyNpbmNsdWRlICJBY3BpVGFibGVQYXJzZXIu aCINCisNCisvLyBMb2NhbCBWYXJpYWJsZXMNCitTVEFUSUMgQ09OU1QgVUlOVDY0KiBYc2R0QWRk cmVzczsNCisNCisvKiogVGhpcyBmdW5jdGlvbiB2YWxpZGF0ZXMgdGhlIFJTRFQgQWRkcmVzcy4N CisNCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGZp ZWxkIGRhdGEuDQorICBAcGFyYW0gW2luXSBDb250ZXh0IFBvaW50ZXIgdG8gY29udGV4dCBzcGVj aWZpYyBpbmZvcm1hdGlvbiBlLmcuIHRoaXMNCisgICAgICAgICAgICAgICAgICAgICAgY291bGQg YmUgYSBwb2ludGVyIHRvIHRoZSBBQ1BJIHRhYmxlIGhlYWRlci4NCisqLw0KK1NUQVRJQw0KK1ZP SUQNCitFRklBUEkNCitWYWxpZGF0ZVJzZHRBZGRyZXNzICgNCisgIElOIFVJTlQ4KiBQdHIsDQor ICBJTiBWT0lEKiAgQ29udGV4dA0KKyAgKTsNCisNCisvKiogVGhpcyBmdW5jdGlvbiB2YWxpZGF0 ZXMgdGhlIFhTRFQgQWRkcmVzcy4NCisNCisgIEBwYXJhbSBbaW5dIFB0ciAgICAgUG9pbnRlciB0 byB0aGUgc3RhcnQgb2YgdGhlIGZpZWxkIGRhdGEuDQorICBAcGFyYW0gW2luXSBDb250ZXh0IFBv aW50ZXIgdG8gY29udGV4dCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBlLmcuIHRoaXMNCisgICAgICAg ICAgICAgICAgICAgICAgY291bGQgYmUgYSBwb2ludGVyIHRvIHRoZSBBQ1BJIHRhYmxlIGhlYWRl ci4NCisqLw0KK1NUQVRJQw0KK1ZPSUQNCitFRklBUEkNCitWYWxpZGF0ZVhzZHRBZGRyZXNzICgN CisgIElOIFVJTlQ4KiBQdHIsDQorICBJTiBWT0lEKiAgQ29udGV4dA0KKyAgKTsNCisNCisvKiog QW4gYXJyYXkgZGVzY3JpYmluZyB0aGUgQUNQSSBSU0RQIFRhYmxlLg0KKyovDQorU1RBVElDIENP TlNUIEFDUElfUEFSU0VSIFJzZHBQYXJzZXJbXSA9IHsNCisgIHtMIlNpZ25hdHVyZSIsIDgsIDAs IE5VTEwsIER1bXA4Q2hhcnMsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiQ2hlY2tzdW0iLCAx LCA4LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIk9lbSBJRCIsIDYs IDksIE5VTEwsIER1bXA2Q2hhcnMsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUmV2aXNpb24i LCAxLCAxNSwgTCIlZCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUlNEVCBBZGRy ZXNzIiwgNCwgMTYsIEwiMHgleCIsIE5VTEwsIE5VTEwsIFZhbGlkYXRlUnNkdEFkZHJlc3MsIE5V TEx9LA0KKyAge0wiTGVuZ3RoIiwgNCwgMjAsIEwiJWQiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM fSwNCisgIHtMIlhTRFQgQWRkcmVzcyIsIDgsIDI0LCBMIjB4JWx4IiwgTlVMTCwgKFZPSUQqKikm WHNkdEFkZHJlc3MsDQorICAgVmFsaWRhdGVYc2R0QWRkcmVzcywgTlVMTH0sDQorICB7TCJFeHRl bmRlZCBDaGVja3N1bSIsIDEsIDMyLCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwN CisgIHtMIlJlc2VydmVkIiwgMywgMzMsIEwiJXggJXggJXgiLCBEdW1wM0NoYXJzLCBOVUxMLCBO VUxMLCBOVUxMfQ0KK307DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGVzIHRoZSBSU0RU IEFkZHJlc3MuDQorDQorICBAcGFyYW0gW2luXSBQdHIgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0 IG9mIHRoZSBmaWVsZCBkYXRhLg0KKyAgQHBhcmFtIFtpbl0gQ29udGV4dCBQb2ludGVyIHRvIGNv bnRleHQgc3BlY2lmaWMgaW5mb3JtYXRpb24gZS5nLiB0aGlzDQorICAgICAgICAgICAgICAgICAg ICAgIGNvdWxkIGJlIGEgcG9pbnRlciB0byB0aGUgQUNQSSB0YWJsZSBoZWFkZXIuDQorKi8NCitT VEFUSUMNCitWT0lEDQorRUZJQVBJDQorVmFsaWRhdGVSc2R0QWRkcmVzcyAoDQorICBJTiBVSU5U OCogUHRyLA0KKyAgSU4gVk9JRCogIENvbnRleHQNCisgICkNCit7DQorI2lmIGRlZmluZWQoTURF X0NQVV9BUk0pIHx8IGRlZmluZWQgKE1ERV9DUFVfQUFSQ0g2NCkNCisgIC8vIFJlZmVyZW5jZTog U2VydmVyIEJhc2UgQm9vdCBSZXF1aXJlbWVudHMgU3lzdGVtIFNvZnR3YXJlIG9uIEFSTSBQbGF0 Zm9ybXMNCisgIC8vIFNlY3Rpb246IDQuMi4xLjEgUlNEUA0KKyAgLy8gUm9vdCBTeXN0ZW0gRGVz Y3JpcHRpb24gUG9pbnRlciAoUlNEUCksIEFDUEkg77+9IDUuMi41Lg0KKyAgLy8gICAtIFdpdGhp biB0aGUgUlNEUCwgdGhlIFJzZHRBZGRyZXNzIGZpZWxkIG11c3QgYmUgbnVsbCAoemVybykgYW5k IHRoZQ0KKyAgLy8gICAgIFhzZHRBZGRyZXNzcyBNVVNUIGJlIGEgdmFsaWQsIG5vbi1udWxsLCA2 NC1iaXQgdmFsdWUuDQorICBVSU5UMzIgUnNkdEFkZHIgPSAqKFVJTlQzMiopUHRyOw0KKyAgaWYg KFJzZHRBZGRyICE9IDApIHsNCisgICAgSW5jcmVtZW50RXJyb3JDb3VudCAoKTsNCisgICAgUHJp bnQgKA0KKyAgICAgIEwiXG5FUlJPUjogUnNkdCBBZGRyZXNzID0gMHglcC4gVGhpcyBtdXN0IGJl IE5VTEwgb24gQVJNIFBsYXRmb3Jtcy4iLA0KKyAgICAgIFJzZHRBZGRyDQorICAgICAgKTsNCisg IH0NCisjZW5kaWYNCit9DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGVzIHRoZSBYU0RU IEFkZHJlc3MuDQorDQorICBAcGFyYW0gW2luXSBQdHIgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0 IG9mIHRoZSBmaWVsZCBkYXRhLg0KKyAgQHBhcmFtIFtpbl0gQ29udGV4dCBQb2ludGVyIHRvIGNv bnRleHQgc3BlY2lmaWMgaW5mb3JtYXRpb24gZS5nLiB0aGlzDQorICAgICAgICAgICAgICAgICAg ICAgIGNvdWxkIGJlIGEgcG9pbnRlciB0byB0aGUgQUNQSSB0YWJsZSBoZWFkZXIuDQorKi8NCitT VEFUSUMNCitWT0lEDQorRUZJQVBJDQorVmFsaWRhdGVYc2R0QWRkcmVzcyAoDQorICBJTiBVSU5U OCogUHRyLA0KKyAgSU4gVk9JRCogIENvbnRleHQNCisgICkNCit7DQorI2lmIGRlZmluZWQoTURF X0NQVV9BUk0pIHx8IGRlZmluZWQgKE1ERV9DUFVfQUFSQ0g2NCkNCisgIC8vIFJlZmVyZW5jZTog U2VydmVyIEJhc2UgQm9vdCBSZXF1aXJlbWVudHMgU3lzdGVtIFNvZnR3YXJlIG9uIEFSTSBQbGF0 Zm9ybXMNCisgIC8vIFNlY3Rpb246IDQuMi4xLjEgUlNEUA0KKyAgLy8gUm9vdCBTeXN0ZW0gRGVz Y3JpcHRpb24gUG9pbnRlciAoUlNEUCksIEFDUEkg77+9IDUuMi41Lg0KKyAgLy8gICAtIFdpdGhp biB0aGUgUlNEUCwgdGhlIFJzZHRBZGRyZXNzIGZpZWxkIG11c3QgYmUgbnVsbCAoemVybykgYW5k IHRoZQ0KKyAgLy8gICAgIFhzZHRBZGRyZXNzcyBNVVNUIGJlIGEgdmFsaWQsIG5vbi1udWxsLCA2 NC1iaXQgdmFsdWUuDQorICBVSU5UNjQgWHNkdEFkZHIgPSAqKFVJTlQ2NCopUHRyOw0KKyAgaWYg KFhzZHRBZGRyID09IDApIHsNCisgICAgSW5jcmVtZW50RXJyb3JDb3VudCAoKTsNCisgICAgUHJp bnQgKA0KKyAgICAgIEwiXG5FUlJPUjogWHNkdCBBZGRyZXNzID0gMHglcC4gVGhpcyBtdXN0IG5v dCBiZSBOVUxMIG9uIEFSTSBQbGF0Zm9ybXMuIiwNCisgICAgICBYc2R0QWRkcg0KKyAgICAgICk7 DQorICB9DQorI2VuZGlmDQorfQ0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUgQUNQ SSBSU0RQIHRhYmxlLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBpbnZva2VzIHRoZSBwYXJzZXIgZm9y IHRoZSBYU0RUIHRhYmxlLg0KKyAgKiBOb3RlIC0gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzdXBw b3J0IHBhcnNpbmcgb2YgUlNEVCB0YWJsZS4NCisNCisgIFRoaXMgZnVuY3Rpb24gYWxzbyBwZXJm b3JtcyBhIFJBVyBkdW1wIG9mIHRoZSBBQ1BJIHRhYmxlIGFuZA0KKyAgdmFsaWRhdGVzIHRoZSBj aGVja3N1bS4NCisNCisgIEBwYXJhbSBbaW5dIFRyYWNlICAgICAgICAgICAgICBJZiBUUlVFLCB0 cmFjZSB0aGUgQUNQSSBmaWVsZHMuDQorICBAcGFyYW0gW2luXSBQdHIgICAgICAgICAgICAgICAg UG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4NCisgIEBwYXJhbSBbaW5dIEFjcGlU YWJsZUxlbmd0aCAgICBMZW5ndGggb2YgdGhlIEFDUEkgdGFibGUuDQorICBAcGFyYW0gW2luXSBB Y3BpVGFibGVSZXZpc2lvbiAgUmV2aXNpb24gb2YgdGhlIEFDUEkgdGFibGUuDQorKi8NCitWT0lE DQorRUZJQVBJDQorUGFyc2VBY3BpUnNkcCAoDQorICBJTiBCT09MRUFOIFRyYWNlLA0KKyAgSU4g VUlOVDgqICBQdHIsDQorICBJTiBVSU5UMzIgIEFjcGlUYWJsZUxlbmd0aCwNCisgIElOIFVJTlQ4 ICAgQWNwaVRhYmxlUmV2aXNpb24NCisgICkNCit7DQorICBpZiAoVHJhY2UpIHsNCisgICAgRHVt cFJhdyAoUHRyLCBBY3BpVGFibGVMZW5ndGgpOw0KKyAgICBWZXJpZnlDaGVja3N1bSAoVFJVRSwg UHRyLCBBY3BpVGFibGVMZW5ndGgpOw0KKyAgfQ0KKw0KKyAgUGFyc2VBY3BpIChUcmFjZSwgMCwg IlJTRFAiLCBQdHIsIEFjcGlUYWJsZUxlbmd0aCwgUEFSU0VSX1BBUkFNUyAoUnNkcFBhcnNlcikp Ow0KKw0KKyAgLy8gVGhpcyBjb2RlIGN1cnJlbnRseSBzdXBwb3J0cyBwYXJzaW5nIG9mIFhTRFQg dGFibGUgb25seQ0KKyAgLy8gYW5kIGRvZXMgbm90IHBhcnNlIHRoZSBSU0RUIHRhYmxlLiBQbGF0 Zm9ybXMgcHJvdmlkZSB0aGUNCisgIC8vIFJTRFQgdG8gZW5hYmxlIGNvbXBhdGliaWxpdHkgd2l0 aCBBQ1BJIDEuMCBvcGVyYXRpbmcgc3lzdGVtcy4NCisgIC8vIFRoZXJlZm9yZSB0aGUgUlNEVCBz aG91bGQgbm90IGJlIHVzZWQgb24gQVJNIHBsYXRmb3Jtcy4NCisgIGlmICgoKlhzZHRBZGRyZXNz KSA9PSAwKSB7DQorICAgIEluY3JlbWVudEVycm9yQ291bnQgKCk7DQorICAgIFByaW50IChMIkVS Uk9SOiBYU0RUIFBvaW50ZXIgaXMgbm90IHNldC5cbiIpOw0KKyAgICByZXR1cm47DQorICB9DQor DQorICBQcm9jZXNzQWNwaVRhYmxlICgoVUlOVDgqKShVSU5UTikoKlhzZHRBZGRyZXNzKSk7DQor fQ0KZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5k TGliL1BhcnNlcnMvU2xpdC9TbGl0UGFyc2VyLmMgYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVs bEFjcGlWaWV3Q29tbWFuZExpYi9QYXJzZXJzL1NsaXQvU2xpdFBhcnNlci5jDQpuZXcgZmlsZSBt b2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uNWY5OWZkNDZhMDNhY2M0MTRiNzIyMTJjYTlmNTU2ZThhYTIzMjk4NQ0KLS0tIC9kZXYvbnVs bA0KKysrIGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvUGFy c2Vycy9TbGl0L1NsaXRQYXJzZXIuYw0KQEAgLTAsMCArMSwxNDIgQEANCisvKioNCisgIFNMSVQg dGFibGUgcGFyc2VyDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMTYgLSAyMDE4LCBBUk0gTGltaXRl ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFu eWluZyBtYXRlcmlhbHMNCisgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIg dGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KKyAgd2hpY2ggYWNj b21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNl IG1heSBiZSBmb3VuZCBhdA0KKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1s aWNlbnNlLnBocA0KKw0KKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJT RCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig UkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0K Kw0KKyAgQHBhciBSZWZlcmVuY2Uocyk6DQorICAgIC0gQUNQSSA2LjIgU3BlY2lmaWNhdGlvbiAt IEVycmF0YSBBLCBTZXB0ZW1iZXIgMjAxNw0KKyoqLw0KKw0KKyNpbmNsdWRlIDxJbmR1c3RyeVN0 YW5kYXJkL0FjcGkuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5oPg0KKyNpbmNsdWRl IDxMaWJyYXJ5L1VlZmlMaWIuaD4NCisjaW5jbHVkZSAiQWNwaVBhcnNlci5oIg0KKyNpbmNsdWRl ICJBY3BpVGFibGVQYXJzZXIuaCINCisNCisvLyBMb2NhbCBWYXJpYWJsZXMNCitTVEFUSUMgQ09O U1QgVUlOVDY0KiBTbGl0U3lzdGVtTG9jYWxpdHlDb3VudDsNCitTVEFUSUMgQUNQSV9ERVNDUklQ VElPTl9IRUFERVJfSU5GTyBBY3BpSGRySW5mbzsNCisNCisvKiogQW4gQUNQSV9QQVJTRVIgYXJy YXkgZGVzY3JpYmluZyB0aGUgQUNQSSBTTElUIHRhYmxlLg0KKyovDQorU1RBVElDIENPTlNUIEFD UElfUEFSU0VSIFNsaXRQYXJzZXJbXSA9IHsNCisgIFBBUlNFX0FDUElfSEVBREVSICgmQWNwaUhk ckluZm8pLA0KKyAge0wiTnVtYmVyIG9mIFN5c3RlbSBMb2NhbGl0aWVzIiwgOCwgMzYsIEwiMHgl bHgiLCBOVUxMLA0KKyAgIChWT0lEKiopJlNsaXRTeXN0ZW1Mb2NhbGl0eUNvdW50LCBOVUxMLCBO VUxMfQ0KK307DQorDQorLyoqIE1hY3JvIHRvIGdldCB0aGUgdmFsdWUgb2YgYSBTeXN0ZW0gTG9j YWxpdHkNCisqLw0KKyNkZWZpbmUgU0xJVF9FTEVNRU5UKFB0ciwgaSwgaikgKihQdHIgKyAoaSAq IExvY2FsaXR5Q291bnQpICsgaikNCisNCisvKiogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIEFD UEkgU0xJVCB0YWJsZS4NCisgIFdoZW4gdHJhY2UgaXMgZW5hYmxlZCB0aGlzIGZ1bmN0aW9uIHBh cnNlcyB0aGUgU0xJVCB0YWJsZSBhbmQNCisgIHRyYWNlcyB0aGUgQUNQSSB0YWJsZSBmaWVsZHMu DQorDQorICBUaGlzIGZ1bmN0aW9uIGFsc28gdmFsaWRhdGVzIFN5c3RlbSBMb2NhbGl0aWVzIGZv ciB0aGUgZm9sbG93aW5nOg0KKyAgICAtIERpYWdvbmFsIGVsZW1lbnRzIGhhdmUgYSBub3JtYWxp emVkIHZhbHVlIG9mIDEwDQorICAgIC0gUmVsYXRpdmUgZGlzdGFuY2UgZnJvbSBTeXN0ZW0gTG9j YWxpdHkgYXQgaSpOK2ogaXMgc2FtZSBhcw0KKyAgICAgIGoqTitpDQorDQorICBAcGFyYW0gW2lu XSBUcmFjZSAgICAgICAgICAgICAgSWYgVFJVRSwgdHJhY2UgdGhlIEFDUEkgZmllbGRzLg0KKyAg QHBhcmFtIFtpbl0gUHRyICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRo ZSBidWZmZXIuDQorICBAcGFyYW0gW2luXSBBY3BpVGFibGVMZW5ndGggICAgTGVuZ3RoIG9mIHRo ZSBBQ1BJIHRhYmxlLg0KKyAgQHBhcmFtIFtpbl0gQWNwaVRhYmxlUmV2aXNpb24gIFJldmlzaW9u IG9mIHRoZSBBQ1BJIHRhYmxlLg0KKyovDQorVk9JRA0KK0VGSUFQSQ0KK1BhcnNlQWNwaVNsaXQg KA0KKyAgSU4gQk9PTEVBTiBUcmFjZSwNCisgIElOIFVJTlQ4KiAgUHRyLA0KKyAgSU4gVUlOVDMy ICBBY3BpVGFibGVMZW5ndGgsDQorICBJTiBVSU5UOCAgIEFjcGlUYWJsZVJldmlzaW9uDQorICAp DQorew0KKyAgVUlOVDMyIE9mZnNldDsNCisgIFVJTlQ2NCBpOw0KKyAgVUlOVDY0IGo7DQorICBV SU5UNjQgTG9jYWxpdHlDb3VudDsNCisgIFVJTlQ4KiBMb2NhbGl0eVB0cjsNCisgIENIQVIxNiBC dWZmZXJbODBdOyAgLy8gVXNlZCBmb3IgQXNjaWlOYW1lIHBhcmFtIG9mIFBhcnNlQWNwaQ0KKw0K KyAgaWYgKCFUcmFjZSkgew0KKyAgICByZXR1cm47DQorICB9DQorDQorICBPZmZzZXQgPSBQYXJz ZUFjcGkgKA0KKyAgICAgICAgICAgICBUUlVFLA0KKyAgICAgICAgICAgICAwLA0KKyAgICAgICAg ICAgICAiU0xJVCIsDQorICAgICAgICAgICAgIFB0ciwNCisgICAgICAgICAgICAgQWNwaVRhYmxl TGVuZ3RoLA0KKyAgICAgICAgICAgICBQQVJTRVJfUEFSQU1TIChTbGl0UGFyc2VyKQ0KKyAgICAg ICAgICAgICApOw0KKyAgTG9jYWxpdHlQdHIgPSBQdHIgKyBPZmZzZXQ7DQorDQorICBMb2NhbGl0 eUNvdW50ID0gKlNsaXRTeXN0ZW1Mb2NhbGl0eUNvdW50Ow0KKyAgLy8gV2Ugb25seSBwcmludCB0 aGUgTG9jYWxpdGllcyBpZiB0aGUgY291bnQgaXMgbGVzcyB0aGFuIDE2DQorICAvLyBJZiB0aGUg bG9jYWxpdHkgY291bnQgaXMgbW9yZSB0aGFuIDE2IHRoZW4gcmVmZXIgdG8gdGhlDQorICAvLyBy YXcgZGF0YSBkdW1wLg0KKyAgaWYgKExvY2FsaXR5Q291bnQgPCAxNikgew0KKyAgICBVbmljb2Rl U1ByaW50ICgNCisgICAgICBCdWZmZXIsDQorICAgICAgc2l6ZW9mIChCdWZmZXIpLA0KKyAgICAg IEwiRW50cnlbMHglbHhdWzB4JWx4XSIsDQorICAgICAgTG9jYWxpdHlDb3VudCwNCisgICAgICBM b2NhbGl0eUNvdW50DQorICAgICAgKTsNCisgICAgUHJpbnRGaWVsZE5hbWUgKDAsIEJ1ZmZlcik7 DQorICAgIFByaW50IChMIlxuIik7DQorICAgIFByaW50IChMIiAgICAgICAiKTsNCisgICAgZm9y IChqID0gMDsgaiA8IExvY2FsaXR5Q291bnQ7IGorKykgew0KKyAgICAgIFByaW50IChMIiAoJTNk KSAiLCBqKTsNCisgICAgfQ0KKyAgICBQcmludCAoTCJcbiIpOw0KKyAgICBmb3IgKGkgPSAwOyBp IDwgTG9jYWxpdHlDb3VudDsgaSsrKSB7DQorICAgICAgUHJpbnQgKEwiICglM2QpICIsIGkpOw0K KyAgICAgIGZvciAoaiA9IDA7IGogPCBMb2NhbGl0eUNvdW50OyBqKyspIHsNCisgICAgICAgIFBy aW50IChMIiAgJTNkICAiLCBTTElUX0VMRU1FTlQgKExvY2FsaXR5UHRyLCBpLCBqKSk7DQorICAg ICAgfQ0KKyAgICAgIFByaW50IChMIlxuIik7DQorICAgIH0NCisgIH0NCisNCisgIC8vIFZhbGlk YXRlDQorICBmb3IgKGkgPSAwOyBpIDwgTG9jYWxpdHlDb3VudDsgaSsrKSB7DQorICAgIGZvciAo aiA9IDA7IGogPCBMb2NhbGl0eUNvdW50OyBqKyspIHsNCisgICAgICAvLyBFbGVtZW50W3hdW3hd IG11c3QgYmUgZXF1YWwgdG8gMTANCisgICAgICBpZiAoKGkgPT0gaikgJiYgKFNMSVRfRUxFTUVO VCAoTG9jYWxpdHlQdHIsIGksIGopICE9IDEwKSkgew0KKyAgICAgICAgSW5jcmVtZW50RXJyb3JD b3VudCAoKTsNCisgICAgICAgIFByaW50ICgNCisgICAgICAgICAgTCJFUlJPUjogRGlhZ29uYWwg RWxlbWVudFsweCVseF1bMHglbHhdICglM2QpLiINCisgICAgICAgICAgICAiIE5vcm1hbGl6ZWQg VmFsdWUgaXMgbm90IDEwXG4iLA0KKyAgICAgICAgICBpLA0KKyAgICAgICAgICBqLA0KKyAgICAg ICAgICBTTElUX0VMRU1FTlQgKExvY2FsaXR5UHRyLCBpLCBqKQ0KKyAgICAgICAgICApOw0KKyAg ICAgIH0NCisgICAgICAvLyBFbGVtZW50W2ldW2pdIG11c3QgYmUgZXF1YWwgdG8gRWxlbWVudFtq XVtpXQ0KKyAgICAgIGlmIChTTElUX0VMRU1FTlQgKExvY2FsaXR5UHRyLCBpLCBqKSAhPQ0KKyAg ICAgICAgICBTTElUX0VMRU1FTlQgKExvY2FsaXR5UHRyLCBqLCBpKSkgew0KKyAgICAgICAgSW5j cmVtZW50RXJyb3JDb3VudCAoKTsNCisgICAgICAgIFByaW50ICgNCisgICAgICAgICAgTCJFUlJP UjogUmVsYXRpdmUgZGlzdGFuY2VzIGZvciBFbGVtZW50WzB4JWx4XVsweCVseF0gKCUzZCkgYW5k IFxuIg0KKyAgICAgICAgICAgIkVsZW1lbnRbMHglbHhdWzB4JWx4XSAoJTNkKSBkbyBub3QgbWF0 Y2guXG4iLA0KKyAgICAgICAgICBpLA0KKyAgICAgICAgICBqLA0KKyAgICAgICAgICBTTElUX0VM RU1FTlQgKExvY2FsaXR5UHRyLCBpLCBqKSwNCisgICAgICAgICAgaiwNCisgICAgICAgICAgaSwN CisgICAgICAgICAgU0xJVF9FTEVNRU5UIChMb2NhbGl0eVB0ciwgaiwgaSkNCisgICAgICAgICAg KTsNCisgICAgICB9DQorICAgIH0NCisgIH0NCit9DQpkaWZmIC0tZ2l0IGEvU2hlbGxQa2cvTGli cmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvUGFyc2Vycy9TcGNyL1NwY3JQYXJzZXIu YyBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL1BhcnNlcnMv U3Bjci9TcGNyUGFyc2VyLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NDFhMjdmZmRmYWI3ODIxMDU0NWQwYmU5 NWUxMDFmNjhiZWNmZWZjDQotLS0gL2Rldi9udWxsDQorKysgYi9TaGVsbFBrZy9MaWJyYXJ5L1Vl ZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9QYXJzZXJzL1NwY3IvU3BjclBhcnNlci5jDQpAQCAt MCwwICsxLDE2OCBAQA0KKy8qKg0KKyAgU1BDUiB0YWJsZSBwYXJzZXINCisNCisgIENvcHlyaWdo dCAoYykgMjAxNiAtIDIwMTgsIEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAg VGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAgYXJlIGxpY2Vu c2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg dGhlIEJTRCBMaWNlbnNlDQorICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4g IFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQorICBodHRwOi8v b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQorDQorICBUSEUgUFJPR1JB TSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJ UywNCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQs IEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQorDQorICBAcGFyIFJlZmVyZW5jZShzKToNCisg ICAgLSBNaWNyb3NvZnQgU2VyaWFsIFBvcnQgQ29uc29sZSBSZWRpcmVjdGlvbiBUYWJsZQ0KKyAg ICAgIFNwZWNpZmljYXRpb24gLSBWZXJzaW9uIDEuMDMgLSBBdWd1c3QgMTAsIDIwMTUuDQorKiov DQorDQorI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvQWNwaS5oPg0KKyNpbmNsdWRlIDxJbmR1 c3RyeVN0YW5kYXJkL1NlcmlhbFBvcnRDb25zb2xlUmVkaXJlY3Rpb25UYWJsZS5oPg0KKyNpbmNs dWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCisjaW5jbHVkZSAiQWNwaVBhcnNlci5oIg0KKyNpbmNs dWRlICJBY3BpVGFibGVQYXJzZXIuaCINCisNCisvLyBMb2NhbCB2YXJpYWJsZXMNCitTVEFUSUMg QUNQSV9ERVNDUklQVElPTl9IRUFERVJfSU5GTyBBY3BpSGRySW5mbzsNCisNCisvKiogVGhpcyBm dW5jdGlvbiB2YWxpZGF0ZXMgdGhlIEludGVycnVwdCBUeXBlLg0KKw0KKyAgQHBhcmFtIFtpbl0g UHRyICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgZmllbGQgZGF0YS4NCisgIEBwYXJh bSBbaW5dIENvbnRleHQgUG9pbnRlciB0byBjb250ZXh0IHNwZWNpZmljIGluZm9ybWF0aW9uIGUu Zy4gdGhpcw0KKyAgICAgICAgICAgICAgICAgICAgICBjb3VsZCBiZSBhIHBvaW50ZXIgdG8gdGhl IEFDUEkgdGFibGUgaGVhZGVyLg0KKyovDQorU1RBVElDDQorVk9JRA0KK0VGSUFQSQ0KK1ZhbGlk YXRlSW50ZXJydXB0VHlwZSAoDQorICBJTiBVSU5UOCogUHRyLA0KKyAgSU4gVk9JRCogIENvbnRl eHQNCisgICk7DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGVzIHRoZSBJcnEuDQorDQor ICBAcGFyYW0gW2luXSBQdHIgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaWVsZCBk YXRhLg0KKyAgQHBhcmFtIFtpbl0gQ29udGV4dCBQb2ludGVyIHRvIGNvbnRleHQgc3BlY2lmaWMg aW5mb3JtYXRpb24gZS5nLiB0aGlzDQorICAgICAgICAgICAgICAgICAgICAgIGNvdWxkIGJlIGEg cG9pbnRlciB0byB0aGUgQUNQSSB0YWJsZSBoZWFkZXIuDQorKi8NCitTVEFUSUMNCitWT0lEDQor RUZJQVBJDQorVmFsaWRhdGVJcnEgKA0KKyAgSU4gVUlOVDgqIFB0ciwNCisgIElOIFZPSUQqICBD b250ZXh0DQorICApOw0KKw0KKy8qKiBBbiBBQ1BJX1BBUlNFUiBhcnJheSBkZXNjcmliaW5nIHRo ZSBBQ1BJIFNQQ1IgVGFibGUuDQorKi8NCitTVEFUSUMgQ09OU1QgQUNQSV9QQVJTRVIgU3BjclBh cnNlcltdID0gew0KKyAgUEFSU0VfQUNQSV9IRUFERVIgKCZBY3BpSGRySW5mbyksDQorICB7TCJJ bnRlcmZhY2UgVHlwZSIsIDEsIDM2LCBMIiVkIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQor ICB7TCJSZXNlcnZlZCIsIDMsIDM3LCBMIiV4ICV4ICV4IiwgRHVtcDNDaGFycywgTlVMTCwgTlVM TCwgTlVMTH0sDQorICB7TCJCYXNlIEFkZHJlc3MiLCAxMiwgNDAsIE5VTEwsIER1bXBHYXMsIE5V TEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiSW50ZXJydXB0IFR5cGUiLCAxLCA1MiwgTCIlZCIsIE5V TEwsIE5VTEwsIFZhbGlkYXRlSW50ZXJydXB0VHlwZSwgTlVMTH0sDQorICB7TCJJUlEiLCAxLCA1 MywgTCIlZCIsIE5VTEwsIE5VTEwsIFZhbGlkYXRlSXJxLCBOVUxMfSwNCisgIHtMIkdsb2JhbCBT eXN0ZW0gSW50ZXJydXB0IiwgNCwgNTQsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9 LA0KKyAge0wiQmF1ZCBSYXRlIiwgMSwgNTgsIEwiJWQiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM fSwNCisgIHtMIlBhcml0eSIsIDEsIDU5LCBMIiVkIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0s DQorICB7TCJTdG9wIEJpdHMiLCAxLCA2MCwgTCIlZCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9 LA0KKyAge0wiRmxvdyBDb250cm9sIiwgMSwgNjEsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEx9LA0KKyAge0wiVGVybWluYWwgVHlwZSIsIDEsIDYyLCBMIiVkIiwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTH0sDQorICB7TCJSZXNlcnZlZCIsIDEsIDYzLCBMIiV4IiwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTH0sDQorDQorICB7TCJQQ0kgRGV2aWNlIElEIiwgMiwgNjQsIEwiMHgleCIsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUENJIFZlbmRvciBJRCIsIDIsIDY2LCBMIjB4 JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIlBDSSBCdXMgTnVtYmVyIiwgMSwg NjgsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUENJIERldmljZSBO dW1iZXIiLCAxLCA2OSwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJQ Q0kgRnVuY3Rpb24gTnVtYmVyIiwgMSwgNzAsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEx9LA0KKyAge0wiUENJIEZsYWdzIiwgNCwgNzEsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEx9LA0KKyAge0wiUENJIFNlZ21lbnQiLCAxLCA3NSwgTCIweCV4IiwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTH0sDQorICB7TCJSZXNlcnZlZCIsIDQsIDc2LCBMIiV4IiwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTH0NCit9Ow0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHZhbGlkYXRlcyB0aGUgSW50 ZXJydXB0IFR5cGUuDQorDQorICBAcGFyYW0gW2luXSBQdHIgICAgIFBvaW50ZXIgdG8gdGhlIHN0 YXJ0IG9mIHRoZSBmaWVsZCBkYXRhLg0KKyAgQHBhcmFtIFtpbl0gQ29udGV4dCBQb2ludGVyIHRv IGNvbnRleHQgc3BlY2lmaWMgaW5mb3JtYXRpb24gZS5nLiB0aGlzDQorICAgICAgICAgICAgICAg ICAgICAgIGNvdWxkIGJlIGEgcG9pbnRlciB0byB0aGUgQUNQSSB0YWJsZSBoZWFkZXIuDQorKi8N CitTVEFUSUMNCitWT0lEDQorRUZJQVBJDQorVmFsaWRhdGVJbnRlcnJ1cHRUeXBlICgNCisgIElO IFVJTlQ4KiBQdHIsDQorICBJTiBWT0lEKiAgQ29udGV4dA0KKyAgKQ0KK3sNCisjaWYgZGVmaW5l ZCAoTURFX0NQVV9BUk0pIHx8IGRlZmluZWQgKE1ERV9DUFVfQUFSQ0g2NCkNCisgIFVJTlQ4IElu dGVycnVwdFR5cGUgPSAqUHRyOw0KKyAgaWYgKEludGVycnVwdFR5cGUgIT0NCisgICAgICAgIEVG SV9BQ1BJX1NFUklBTF9QT1JUX0NPTlNPTEVfUkVESVJFQ1RJT05fVEFCTEVfSU5URVJSVVBUX1RZ UEVfR0lDKSB7DQorICAgIEluY3JlbWVudEVycm9yQ291bnQgKCk7DQorICAgIFByaW50ICgNCisg ICAgICBMIlxuRVJST1I6IEludGVycnVwdFR5cGUgPSAlZC4gVGhpcyBtdXN0IGJlIDggb24gQVJN IFBsYXRmb3JtcyIsDQorICAgICAgSW50ZXJydXB0VHlwZQ0KKyAgICAgICk7DQorICB9DQorI2Vu ZGlmDQorfQ0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHZhbGlkYXRlcyB0aGUgSXJxLg0KKw0KKyAg QHBhcmFtIFtpbl0gUHRyICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgZmllbGQgZGF0 YS4NCisgIEBwYXJhbSBbaW5dIENvbnRleHQgUG9pbnRlciB0byBjb250ZXh0IHNwZWNpZmljIGlu Zm9ybWF0aW9uIGUuZy4gdGhpcw0KKyAgICAgICAgICAgICAgICAgICAgICBjb3VsZCBiZSBhIHBv aW50ZXIgdG8gdGhlIEFDUEkgdGFibGUgaGVhZGVyLg0KKyovDQorU1RBVElDDQorVk9JRA0KK0VG SUFQSQ0KK1ZhbGlkYXRlSXJxICgNCisgIElOIFVJTlQ4KiBQdHIsDQorICBJTiBWT0lEKiAgQ29u dGV4dA0KKyAgKQ0KK3sNCisjaWYgZGVmaW5lZCAoTURFX0NQVV9BUk0pIHx8IGRlZmluZWQgKE1E RV9DUFVfQUFSQ0g2NCkNCisgIFVJTlQ4IElycSA9ICpQdHI7DQorICBpZiAoSXJxICE9IDApIHsN CisgICAgSW5jcmVtZW50RXJyb3JDb3VudCAoKTsNCisgICAgUHJpbnQgKA0KKyAgICAgIEwiXG5F UlJPUjogSXJxID0gJWQuIFRoaXMgbXVzdCBiZSB6ZXJvIG9uIEFSTSBQbGF0Zm9ybXNcbiIsDQor ICAgICAgSXJxDQorICAgICAgKTsNCisgIH0NCisjZW5kaWYNCit9DQorDQorLyoqIFRoaXMgZnVu Y3Rpb24gcGFyc2VzIHRoZSBBQ1BJIFNQQ1IgdGFibGUuDQorICBXaGVuIHRyYWNlIGlzIGVuYWJs ZWQgdGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIFNQQ1IgdGFibGUgYW5kDQorICB0cmFjZXMgdGhl IEFDUEkgdGFibGUgZmllbGRzLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBhbHNvIHBlcmZvcm1zIHZh bGlkYXRpb25zIG9mIHRoZSBBQ1BJIHRhYmxlIGZpZWxkcy4NCisNCisgIEBwYXJhbSBbaW5dIFRy YWNlICAgICAgICAgICAgICBJZiBUUlVFLCB0cmFjZSB0aGUgQUNQSSBmaWVsZHMuDQorICBAcGFy YW0gW2luXSBQdHIgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1 ZmZlci4NCisgIEBwYXJhbSBbaW5dIEFjcGlUYWJsZUxlbmd0aCAgICBMZW5ndGggb2YgdGhlIEFD UEkgdGFibGUuDQorICBAcGFyYW0gW2luXSBBY3BpVGFibGVSZXZpc2lvbiAgUmV2aXNpb24gb2Yg dGhlIEFDUEkgdGFibGUuDQorKi8NCitWT0lEDQorRUZJQVBJDQorUGFyc2VBY3BpU3BjciAoDQor ICBJTiBCT09MRUFOIFRyYWNlLA0KKyAgSU4gVUlOVDgqICBQdHIsDQorICBJTiBVSU5UMzIgIEFj cGlUYWJsZUxlbmd0aCwNCisgIElOIFVJTlQ4ICAgQWNwaVRhYmxlUmV2aXNpb24NCisgICkNCit7 DQorICBpZiAoIVRyYWNlKSB7DQorICAgIHJldHVybjsNCisgIH0NCisNCisgIC8vIER1bXAgdGhl IFNQQ1INCisgIFBhcnNlQWNwaSAoDQorICAgIFRSVUUsDQorICAgIDAsDQorICAgICJTUENSIiwN CisgICAgUHRyLA0KKyAgICBBY3BpVGFibGVMZW5ndGgsDQorICAgIFBBUlNFUl9QQVJBTVMgKFNw Y3JQYXJzZXIpDQorICAgICk7DQorfQ0KZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJhcnkvVWVm aVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL1BhcnNlcnMvU3JhdC9TcmF0UGFyc2VyLmMgYi9TaGVs bFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9QYXJzZXJzL1NyYXQvU3Jh dFBhcnNlci5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZkYTU1OTM1YzgzNTM5NjkxZjUzZTBiNGM1N2E2MzU2 MjEwYmJkYw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxB Y3BpVmlld0NvbW1hbmRMaWIvUGFyc2Vycy9TcmF0L1NyYXRQYXJzZXIuYw0KQEAgLTAsMCArMSwz MzAgQEANCisvKioNCisgIFNSQVQgdGFibGUgcGFyc2VyDQorDQorICBDb3B5cmlnaHQgKGMpIDIw MTYgLSAyMDE4LCBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgIFRoaXMgcHJv Z3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgIGFyZSBsaWNlbnNlZCBhbmQg bWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0Qg TGljZW5zZQ0KKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVs bCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KKyAgaHR0cDovL29wZW5zb3Vy Y2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KKw0KKyAgVEhFIFBST0dSQU0gSVMgRElT VFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorICBX SVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIg RVhQUkVTUyBPUiBJTVBMSUVELg0KKw0KKyAgQHBhciBSZWZlcmVuY2Uocyk6DQorICAgIC0gQUNQ SSA2LjIgU3BlY2lmaWNhdGlvbiAtIEVycmF0YSBBLCBTZXB0ZW1iZXIgMjAxNw0KKyoqLw0KKw0K KyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL0FjcGkuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9Q cmludExpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCisjaW5jbHVkZSAiQWNw aVBhcnNlci5oIg0KKyNpbmNsdWRlICJBY3BpVGFibGVQYXJzZXIuaCINCisNCisvLyBMb2NhbCBW YXJpYWJsZXMNCitTVEFUSUMgQ09OU1QgVUlOVDgqIFNyYXRSQVR5cGU7DQorU1RBVElDIENPTlNU IFVJTlQ4KiBTcmF0UkFMZW5ndGg7DQorU1RBVElDIEFDUElfREVTQ1JJUFRJT05fSEVBREVSX0lO Rk8gQWNwaUhkckluZm87DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGVzIHRoZSBSZXNl cnZlZCBmaWVsZCBpbiB0aGUgU1JBVCB0YWJsZSBoZWFkZXIuDQorDQorICBAcGFyYW0gW2luXSBQ dHIgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaWVsZCBkYXRhLg0KKyAgQHBhcmFt IFtpbl0gQ29udGV4dCBQb2ludGVyIHRvIGNvbnRleHQgc3BlY2lmaWMgaW5mb3JtYXRpb24gZS5n LiB0aGlzDQorICAgICAgICAgICAgICAgICAgICAgIGNvdWxkIGJlIGEgcG9pbnRlciB0byB0aGUg QUNQSSB0YWJsZSBoZWFkZXIuDQorKi8NCitTVEFUSUMNCitWT0lEDQorRUZJQVBJDQorVmFsaWRh dGVTcmF0UmVzZXJ2ZWQgKA0KKyAgSU4gVUlOVDgqIFB0ciwNCisgIElOIFZPSUQqICBDb250ZXh0 DQorICApOw0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHRyYWNlcyB0aGUgQVBJQyBQcm94aW1pdHkg RG9tYWluIGZpZWxkLg0KKw0KKyAgQHBhcmFtIFtpbl0gRm9ybWF0ICBGb3JtYXQgc3RyaW5nIGZv ciB0cmFjaW5nIHRoZSBkYXRhLg0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICBQb2ludGVyIHRvIHRo ZSBzdGFydCBvZiB0aGUgYnVmZmVyLg0KKyovDQorU1RBVElDDQorVk9JRA0KK0R1bXBTcmF0QXBp Y1Byb3hpbWl0eSAoDQorICBJTiAgQ09OU1QgQ0hBUjE2KiAgRm9ybWF0LA0KKyAgSU4gIFVJTlQ4 KiAgICAgICAgIFB0cg0KKyAgKTsNCisNCisvKiogQW4gQUNQSV9QQVJTRVIgYXJyYXkgZGVzY3Jp YmluZyB0aGUgU1JBVCBUYWJsZS4NCisqLw0KK1NUQVRJQyBDT05TVCBBQ1BJX1BBUlNFUiBTcmF0 UGFyc2VyW10gPSB7DQorICBQQVJTRV9BQ1BJX0hFQURFUiAoJkFjcGlIZHJJbmZvKSwNCisgIHtM IlJlc2VydmVkIiwgNCwgMzYsIEwiMHgleCIsIE5VTEwsIE5VTEwsIFZhbGlkYXRlU3JhdFJlc2Vy dmVkLCBOVUxMfSwNCisgIHtMIlJlc2VydmVkIiwgOCwgNDAsIEwiMHglbHgiLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMfQ0KK307DQorDQorLyoqIEFuIEFDUElfUEFSU0VSIGFycmF5IGRlc2NyaWJp bmcgdGhlIFJlc291cmNlIEFsbG9jYXRpb24NCisgICAgc3RydWN0dXJlIGhlYWRlci4NCisqLw0K K1NUQVRJQyBDT05TVCBBQ1BJX1BBUlNFUiBTcmF0UmVzb3VyY2VBbGxvY2F0aW9uUGFyc2VyW10g PSB7DQorICB7TCJUeXBlIiwgMSwgMCwgTlVMTCwgTlVMTCwgKFZPSUQqKikmU3JhdFJBVHlwZSwg TlVMTCwgTlVMTH0sDQorICB7TCJMZW5ndGgiLCAxLCAxLCBOVUxMLCBOVUxMLCAoVk9JRCoqKSZT cmF0UkFMZW5ndGgsIE5VTEwsIE5VTEx9DQorfTsNCisNCisvKiogQW4gQUNQSV9QQVJTRVIgYXJy YXkgZGVzY3JpYmluZyB0aGUgR0lDQyBBZmZpbml0eSBzdHJ1Y3R1cmUuDQorKi8NCitTVEFUSUMg Q09OU1QgQUNQSV9QQVJTRVIgU3JhdEdpY0NBZmZpbml0eVBhcnNlcltdID0gew0KKyAge0wiVHlw ZSIsIDEsIDAsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiTGVuZ3Ro IiwgMSwgMSwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorDQorICB7TCJQcm94 aW1pdHkgRG9tYWluIiwgNCwgMiwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQor ICB7TCJBQ1BJIFByb2Nlc3NvciBVSUQiLCA0LCA2LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMfSwNCisgIHtMIkZsYWdzIiwgNCwgMTAsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEx9LA0KKyAge0wiQ2xvY2sgRG9tYWluIiwgNCwgMTQsIEwiMHgleCIsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEx9DQorfTsNCisNCisvKiogQW4gQUNQSV9QQVJTRVIgYXJyYXkgZGVzY3JpYmlu ZyB0aGUgR0lDIElUUyBBZmZpbml0eSBzdHJ1Y3R1cmUuDQorKi8NCitTVEFUSUMgQ09OU1QgQUNQ SV9QQVJTRVIgU3JhdEdpY0lUU0FmZmluaXR5UGFyc2VyW10gPSB7DQorICB7TCJUeXBlIiwgMSwg MCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJMZW5ndGgiLCAxLCAx LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisNCisgIHtMIlByb3hpbWl0eSBE b21haW4iLCA0LCAyLCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIlJl c2VydmVkIiwgMiwgNiwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJJ VFMgSWQiLCA0LCA4LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCit9Ow0KKw0K Ky8qKiBBbiBBQ1BJX1BBUlNFUiBhcnJheSBkZXNjcmliaW5nIHRoZSBNZW1vcnkgQWZmaW5pdHkg c3RydWN0dXJlLg0KKyovDQorU1RBVElDIENPTlNUIEFDUElfUEFSU0VSIFNyYXRNZW1BZmZpbml0 eVBhcnNlcltdID0gew0KKyAge0wiVHlwZSIsIDEsIDAsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEx9LA0KKyAge0wiTGVuZ3RoIiwgMSwgMSwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTH0sDQorDQorICB7TCJQcm94aW1pdHkgRG9tYWluIiwgNCwgMiwgTCIweCV4IiwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJSZXNlcnZlZCIsIDIsIDYsIEwiMHgleCIsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiQmFzZSBBZGRyZXNzIExvdyIsIDQsIDgsIEwi MHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiQmFzZSBBZGRyZXNzIEhpZ2gi LCA0LCAxMiwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJMZW5ndGgg TG93IiwgNCwgMTYsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiTGVu Z3RoIEhpZ2giLCA0LCAyMCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7 TCJSZXNlcnZlZCIsIDQsIDI0LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisg IHtMIkZsYWdzIiwgNCwgMjgsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAg e0wiUmVzZXJ2ZWQiLCA4LCAzMiwgTCIweCVseCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9DQor fTsNCisNCisvKiogQW4gQUNQSV9QQVJTRVIgYXJyYXkgZGVzY3JpYmluZyB0aGUgQVBJQy9TQVBJ QyBBZmZpbml0eSBzdHJ1Y3R1cmUuDQorKi8NCitTVEFUSUMgQ09OU1QgQUNQSV9QQVJTRVIgU3Jh dEFwY2lTYXBpY0FmZmluaXR5UGFyc2VyW10gPSB7DQorICB7TCJUeXBlIiwgMSwgMCwgTCIweCV4 IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJMZW5ndGgiLCAxLCAxLCBMIjB4JXgi LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisNCisgIHtMIlByb3hpbWl0eSBEb21haW4gWzc6 MF0iLCAxLCAyLCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIkFQSUMg SUQiLCAxLCAzLCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIkZsYWdz IiwgNCwgNCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJMb2NhbCBT QVBJQyBFSUQiLCAxLCA4LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtM IlByb3hpbWl0eSBEb21haW4gWzMxOjhdIiwgMywgOSwgTCIweCV4IiwgRHVtcFNyYXRBcGljUHJv eGltaXR5LA0KKyAgIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiQ2xvY2sgRG9tYWluIiwgNCwg MTIsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9DQorfTsNCisNCisvKiogQW4gQUNQ SV9QQVJTRVIgYXJyYXkgZGVzY3JpYmluZyB0aGUgUHJvY2Vzc29yIExvY2FsIHgyQVBJQw0KKyAg ICBBZmZpbml0eSBzdHJ1Y3R1cmUuDQorKi8NCitTVEFUSUMgQ09OU1QgQUNQSV9QQVJTRVIgU3Jh dFgyQXBjaUFmZmluaXR5UGFyc2VyW10gPSB7DQorICB7TCJUeXBlIiwgMSwgMCwgTCIweCV4Iiwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJMZW5ndGgiLCAxLCAxLCBMIjB4JXgiLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisNCisgIHtMIlJlc2VydmVkIiwgMiwgMiwgTCIweCV4 IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJQcm94aW1pdHkgRG9tYWluIiwgNCwg NCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sDQorICB7TCJYMkFQSUMgSUQiLCA0 LCA4LCBMIjB4JXgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwNCisgIHtMIkZsYWdzIiwgNCwg MTIsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiQ2xvY2sgRG9tYWlu IiwgNCwgMTYsIEwiMHgleCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LA0KKyAge0wiUmVzZXJ2 ZWQiLCA0LCAyMCwgTCIweCV4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0NCit9Ow0KKw0KKy8q KiBUaGlzIGZ1bmN0aW9uIHZhbGlkYXRlcyB0aGUgUmVzZXJ2ZWQgZmllbGQgaW4gdGhlIFNSQVQg dGFibGUgaGVhZGVyLg0KKw0KKyAgQHBhcmFtIFtpbl0gUHRyICAgICBQb2ludGVyIHRvIHRoZSBz dGFydCBvZiB0aGUgZmllbGQgZGF0YS4NCisgIEBwYXJhbSBbaW5dIENvbnRleHQgUG9pbnRlciB0 byBjb250ZXh0IHNwZWNpZmljIGluZm9ybWF0aW9uIGUuZy4gdGhpcw0KKyAgICAgICAgICAgICAg ICAgICAgICBjb3VsZCBiZSBhIHBvaW50ZXIgdG8gdGhlIEFDUEkgdGFibGUgaGVhZGVyLg0KKyov DQorU1RBVElDDQorVk9JRA0KK0VGSUFQSQ0KK1ZhbGlkYXRlU3JhdFJlc2VydmVkICgNCisgIElO IFVJTlQ4KiBQdHIsDQorICBJTiBWT0lEKiAgQ29udGV4dA0KKyAgKQ0KK3sNCisgIGlmICgqKFVJ TlQzMiopUHRyICE9IDEpIHsNCisgICAgSW5jcmVtZW50RXJyb3JDb3VudCAoKTsNCisgICAgUHJp bnQgKEwiXG5FUlJPUjogUmVzZXJ2ZWQgc2hvdWxkIGJlIDEgZm9yIGJhY2t3YXJkIGNvbXBhdGli aWxpdHkuXG4iKTsNCisgIH0NCit9DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gdHJhY2VzIHRoZSBB UElDIFByb3hpbWl0eSBEb21haW4gZmllbGQuDQorDQorICBAcGFyYW0gW2luXSBGb3JtYXQgIEZv cm1hdCBzdHJpbmcgZm9yIHRyYWNpbmcgdGhlIGRhdGEuDQorICBAcGFyYW0gW2luXSBQdHIgICAg IFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuDQorKi8NCitTVEFUSUMNCitWT0lE DQorRHVtcFNyYXRBcGljUHJveGltaXR5ICgNCisgSU4gQ09OU1QgQ0hBUjE2KiBGb3JtYXQsDQor IElOIFVJTlQ4KiAgICAgICAgUHRyDQorICkNCit7DQorICBVSU5UMzIgUHJveGltaXR5RG9tYWlu ID0gUHRyWzBdIHwgKFB0clsxXSA8PCA4KSB8IChQdHJbMl0gPDwgMTYpOw0KKyAgUHJpbnQgKEZv cm1hdCwgUHJveGltaXR5RG9tYWluKTsNCit9DQorDQorLyoqIFRoaXMgZnVuY3Rpb24gcGFyc2Vz IHRoZSBBQ1BJIFNSQVQgdGFibGUuDQorICBXaGVuIHRyYWNlIGlzIGVuYWJsZWQgdGhpcyBmdW5j dGlvbiBwYXJzZXMgdGhlIFNSQVQgdGFibGUgYW5kDQorICB0cmFjZXMgdGhlIEFDUEkgdGFibGUg ZmllbGRzLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIGZvbGxvd2luZyBSZXNvdXJj ZSBBbGxvY2F0aW9uIFN0cnVjdHVyZXM6DQorICAgIC0gUHJvY2Vzc29yIExvY2FsIEFQSUMvU0FQ SUMgQWZmaW5pdHkgU3RydWN0dXJlDQorICAgIC0gTWVtb3J5IEFmZmluaXR5IFN0cnVjdHVyZQ0K KyAgICAtIFByb2Nlc3NvciBMb2NhbCB4MkFQSUMgQWZmaW5pdHkgU3RydWN0dXJlDQorICAgIC0g R0lDQyBBZmZpbml0eSBTdHJ1Y3R1cmUNCisNCisgIFRoaXMgZnVuY3Rpb24gYWxzbyBwZXJmb3Jt cyB2YWxpZGF0aW9uIG9mIHRoZSBBQ1BJIHRhYmxlIGZpZWxkcy4NCisNCisgIEBwYXJhbSBbaW5d IFRyYWNlICAgICAgICAgICAgICBJZiBUUlVFLCB0cmFjZSB0aGUgQUNQSSBmaWVsZHMuDQorICBA cGFyYW0gW2luXSBQdHIgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhl IGJ1ZmZlci4NCisgIEBwYXJhbSBbaW5dIEFjcGlUYWJsZUxlbmd0aCAgICBMZW5ndGggb2YgdGhl IEFDUEkgdGFibGUuDQorICBAcGFyYW0gW2luXSBBY3BpVGFibGVSZXZpc2lvbiAgUmV2aXNpb24g b2YgdGhlIEFDUEkgdGFibGUuDQorKi8NCitWT0lEDQorRUZJQVBJDQorUGFyc2VBY3BpU3JhdCAo DQorICBJTiBCT09MRUFOIFRyYWNlLA0KKyAgSU4gVUlOVDgqICBQdHIsDQorICBJTiBVSU5UMzIg IEFjcGlUYWJsZUxlbmd0aCwNCisgIElOIFVJTlQ4ICAgQWNwaVRhYmxlUmV2aXNpb24NCisgICkN Cit7DQorICBVSU5UMzIgT2Zmc2V0Ow0KKyAgVUlOVDgqIFJlc291cmNlUHRyOw0KKyAgVUlOVDMy IEdpY0NBZmZpbml0eUluZGV4ID0gMDsNCisgIFVJTlQzMiBHaWNJVFNBZmZpbml0eUluZGV4ID0g MDsNCisgIFVJTlQzMiBNZW1vcnlBZmZpbml0eUluZGV4ID0gMDsNCisgIFVJTlQzMiBBcGljU2Fw aWNBZmZpbml0eUluZGV4ID0gMDsNCisgIFVJTlQzMiBYMkFwaWNBZmZpbml0eUluZGV4ID0gMDsN CisgIENIQVI4ICBCdWZmZXJbODBdOyAgLy8gVXNlZCBmb3IgQXNjaWlOYW1lIHBhcmFtIG9mIFBh cnNlQWNwaQ0KKw0KKyAgaWYgKCFUcmFjZSkgew0KKyAgICByZXR1cm47DQorICB9DQorDQorICBP ZmZzZXQgPSBQYXJzZUFjcGkgKA0KKyAgICAgICAgICAgICBUUlVFLA0KKyAgICAgICAgICAgICAw LA0KKyAgICAgICAgICAgICAiU1JBVCIsDQorICAgICAgICAgICAgIFB0ciwNCisgICAgICAgICAg ICAgQWNwaVRhYmxlTGVuZ3RoLA0KKyAgICAgICAgICAgICBQQVJTRVJfUEFSQU1TIChTcmF0UGFy c2VyKQ0KKyAgICAgICAgICAgICApOw0KKyAgUmVzb3VyY2VQdHIgPSBQdHIgKyBPZmZzZXQ7DQor DQorICB3aGlsZSAoT2Zmc2V0IDwgQWNwaVRhYmxlTGVuZ3RoKSB7DQorICAgIFBhcnNlQWNwaSAo DQorICAgICAgRkFMU0UsDQorICAgICAgMCwNCisgICAgICBOVUxMLA0KKyAgICAgIFJlc291cmNl UHRyLA0KKyAgICAgIDIsICAvLyBUaGUgbGVuZ3RoIGlzIDEgYnl0ZSBhdCBvZmZzZXQgMQ0KKyAg ICAgIFBBUlNFUl9QQVJBTVMgKFNyYXRSZXNvdXJjZUFsbG9jYXRpb25QYXJzZXIpDQorICAgICAg KTsNCisNCisgICAgc3dpdGNoICgqU3JhdFJBVHlwZSkgew0KKyAgICAgIGNhc2UgRUZJX0FDUElf Nl8yX0dJQ0NfQUZGSU5JVFk6DQorICAgICAgICBBc2NpaVNQcmludCAoDQorICAgICAgICAgIEJ1 ZmZlciwNCisgICAgICAgICAgc2l6ZW9mIChCdWZmZXIpLA0KKyAgICAgICAgICAiR0lDQyBBZmZp bml0eSBTdHJ1Y3R1cmUgWyVkXSIsDQorICAgICAgICAgIEdpY0NBZmZpbml0eUluZGV4KysNCisg ICAgICAgICAgKTsNCisgICAgICAgIFBhcnNlQWNwaSAoDQorICAgICAgICAgIFRSVUUsDQorICAg ICAgICAgIDIsDQorICAgICAgICAgIEJ1ZmZlciwNCisgICAgICAgICAgUmVzb3VyY2VQdHIsDQor ICAgICAgICAgICpTcmF0UkFMZW5ndGgsDQorICAgICAgICAgIFBBUlNFUl9QQVJBTVMgKFNyYXRH aWNDQWZmaW5pdHlQYXJzZXIpDQorICAgICAgICAgICk7DQorICAgICAgICBicmVhazsNCisNCisg ICAgICBjYXNlIEVGSV9BQ1BJXzZfMl9HSUNfSVRTX0FGRklOSVRZOg0KKyAgICAgICAgQXNjaWlT UHJpbnQgKA0KKyAgICAgICAgICBCdWZmZXIsDQorICAgICAgICAgIHNpemVvZiAoQnVmZmVyKSwN CisgICAgICAgICAgIkdJQyBJVFMgQWZmaW5pdHkgU3RydWN0dXJlIFslZF0iLA0KKyAgICAgICAg ICBHaWNJVFNBZmZpbml0eUluZGV4KysNCisgICAgICAgICk7DQorICAgICAgICBQYXJzZUFjcGkg KA0KKyAgICAgICAgICBUUlVFLA0KKyAgICAgICAgICAyLA0KKyAgICAgICAgICBCdWZmZXIsDQor ICAgICAgICAgIFJlc291cmNlUHRyLA0KKyAgICAgICAgICAqU3JhdFJBTGVuZ3RoLA0KKyAgICAg ICAgICBQQVJTRVJfUEFSQU1TIChTcmF0R2ljSVRTQWZmaW5pdHlQYXJzZXIpDQorICAgICAgICAp Ow0KKyAgICAgICAgYnJlYWs7DQorDQorICAgICAgY2FzZSBFRklfQUNQSV82XzJfTUVNT1JZX0FG RklOSVRZOg0KKyAgICAgICAgQXNjaWlTUHJpbnQgKA0KKyAgICAgICAgICBCdWZmZXIsDQorICAg ICAgICAgIHNpemVvZiAoQnVmZmVyKSwNCisgICAgICAgICAgIk1lbW9yeSBBZmZpbml0eSBTdHJ1 Y3R1cmUgWyVkXSIsDQorICAgICAgICAgIE1lbW9yeUFmZmluaXR5SW5kZXgrKw0KKyAgICAgICAg ICApOw0KKyAgICAgICAgUGFyc2VBY3BpICgNCisgICAgICAgICAgVFJVRSwNCisgICAgICAgICAg MiwNCisgICAgICAgICAgQnVmZmVyLA0KKyAgICAgICAgICBSZXNvdXJjZVB0ciwNCisgICAgICAg ICAgKlNyYXRSQUxlbmd0aCwNCisgICAgICAgICAgUEFSU0VSX1BBUkFNUyAoU3JhdE1lbUFmZmlu aXR5UGFyc2VyKQ0KKyAgICAgICAgICApOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgICAgY2Fz ZSBFRklfQUNQSV82XzJfUFJPQ0VTU09SX0xPQ0FMX0FQSUNfU0FQSUNfQUZGSU5JVFk6DQorICAg ICAgICBBc2NpaVNQcmludCAoDQorICAgICAgICAgIEJ1ZmZlciwNCisgICAgICAgICAgc2l6ZW9m IChCdWZmZXIpLA0KKyAgICAgICAgICAiQVBJQy9TQVBJQyBBZmZpbml0eSBTdHJ1Y3R1cmUgWyVk XSIsDQorICAgICAgICAgIEFwaWNTYXBpY0FmZmluaXR5SW5kZXgrKw0KKyAgICAgICAgICApOw0K KyAgICAgICAgUGFyc2VBY3BpICgNCisgICAgICAgICAgVFJVRSwNCisgICAgICAgICAgMiwNCisg ICAgICAgICAgQnVmZmVyLA0KKyAgICAgICAgICBSZXNvdXJjZVB0ciwNCisgICAgICAgICAgKlNy YXRSQUxlbmd0aCwNCisgICAgICAgICAgUEFSU0VSX1BBUkFNUyAoU3JhdEFwY2lTYXBpY0FmZmlu aXR5UGFyc2VyKQ0KKyAgICAgICAgICApOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgICAgY2Fz ZSBFRklfQUNQSV82XzJfUFJPQ0VTU09SX0xPQ0FMX1gyQVBJQ19BRkZJTklUWToNCisgICAgICAg IEFzY2lpU1ByaW50ICgNCisgICAgICAgICAgQnVmZmVyLA0KKyAgICAgICAgICBzaXplb2YgKEJ1 ZmZlciksDQorICAgICAgICAgICJYMkFQSUMgQWZmaW5pdHkgU3RydWN0dXJlIFslZF0iLA0KKyAg ICAgICAgICBYMkFwaWNBZmZpbml0eUluZGV4KysNCisgICAgICAgICAgKTsNCisgICAgICAgIFBh cnNlQWNwaSAoDQorICAgICAgICAgIFRSVUUsDQorICAgICAgICAgIDIsDQorICAgICAgICAgIEJ1 ZmZlciwNCisgICAgICAgICAgUmVzb3VyY2VQdHIsDQorICAgICAgICAgICpTcmF0UkFMZW5ndGgs DQorICAgICAgICAgIFBBUlNFUl9QQVJBTVMgKFNyYXRYMkFwY2lBZmZpbml0eVBhcnNlcikNCisg ICAgICAgICAgKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgIGRlZmF1bHQ6DQorICAgICAg ICBJbmNyZW1lbnRFcnJvckNvdW50ICgpOw0KKyAgICAgICAgUHJpbnQgKEwiRVJST1I6IFVua25v d24gU1JBVCBBZmZpbml0eSB0eXBlID0gMHgleFxuIiwgKlNyYXRSQVR5cGUpOw0KKyAgICAgICAg YnJlYWs7DQorICAgIH0NCisNCisgICAgUmVzb3VyY2VQdHIgKz0gKCpTcmF0UkFMZW5ndGgpOw0K KyAgICBPZmZzZXQgKz0gKCpTcmF0UkFMZW5ndGgpOw0KKyAgfQ0KK30NCmRpZmYgLS1naXQgYS9T aGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9QYXJzZXJzL1NzZHQv U3NkdFBhcnNlci5jIGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRM aWIvUGFyc2Vycy9Tc2R0L1NzZHRQYXJzZXIuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3N2NjYmUwNjA2OGU1 ZGE0N2ZmNTQ4OGNmOWFiYzk0YzU1ODNjOWMNCi0tLSAvZGV2L251bGwNCisrKyBiL1NoZWxsUGtn L0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL1BhcnNlcnMvU3NkdC9Tc2R0UGFy c2VyLmMNCkBAIC0wLDAgKzEsNDcgQEANCisvKioNCisgIFNTRFQgdGFibGUgcGFyc2VyDQorDQor ICBDb3B5cmlnaHQgKGMpIDIwMTYgLSAyMDE4LCBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl cnZlZC4NCisgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisg IGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0 cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0K KyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KKw0KKyAg VEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJB UyBJUyIgQkFTSVMsDQorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9G IEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KKw0KKyAgQHBhciBSZWZlcmVu Y2Uocyk6DQorICAgIC0gQUNQSSA2LjIgU3BlY2lmaWNhdGlvbiAtIEVycmF0YSBBLCBTZXB0ZW1i ZXIgMjAxNw0KKyoqLw0KKw0KKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL0FjcGkuaD4NCisj aW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQorI2luY2x1ZGUgIkFjcGlQYXJzZXIuaCINCisj aW5jbHVkZSAiQWNwaVRhYmxlUGFyc2VyLmgiDQorDQorLyoqIFRoaXMgZnVuY3Rpb24gcGFyc2Vz IHRoZSBBQ1BJIFNTRFQgdGFibGUuDQorICBXaGVuIHRyYWNlIGlzIGVuYWJsZWQgdGhpcyBmdW5j dGlvbiBwYXJzZXMgdGhlIFNTRFQgdGFibGUgYW5kDQorICB0cmFjZXMgdGhlIEFDUEkgdGFibGUg ZmllbGRzLg0KKyAgRm9yIHRoZSBTU0RUIHRhYmxlIG9ubHkgdGhlIEFDUEkgaGVhZGVyIGZpZWxk cyBhcmUNCisgIHBhcnNlZCBhbmQgdHJhY2VkLg0KKw0KKyAgQHBhcmFtIFtpbl0gVHJhY2UgICAg ICAgICAgICAgIElmIFRSVUUsIHRyYWNlIHRoZSBBQ1BJIGZpZWxkcy4NCisgIEBwYXJhbSBbaW5d IFB0ciAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLg0K KyAgQHBhcmFtIFtpbl0gQWNwaVRhYmxlTGVuZ3RoICAgIExlbmd0aCBvZiB0aGUgQUNQSSB0YWJs ZS4NCisgIEBwYXJhbSBbaW5dIEFjcGlUYWJsZVJldmlzaW9uICBSZXZpc2lvbiBvZiB0aGUgQUNQ SSB0YWJsZS4NCisqLw0KK1ZPSUQNCitFRklBUEkNCitQYXJzZUFjcGlTc2R0ICgNCisgIElOIEJP T0xFQU4gVHJhY2UsDQorICBJTiBVSU5UOCogIFB0ciwNCisgIElOIFVJTlQzMiAgQWNwaVRhYmxl TGVuZ3RoLA0KKyAgSU4gVUlOVDggICBBY3BpVGFibGVSZXZpc2lvbg0KKyAgKQ0KK3sNCisgIGlm ICghVHJhY2UpIHsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgRHVtcEFjcGlIZWFkZXIgKFB0 cik7DQorfQ0KZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdD b21tYW5kTGliL1BhcnNlcnMvWHNkdC9Yc2R0UGFyc2VyLmMgYi9TaGVsbFBrZy9MaWJyYXJ5L1Vl ZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9QYXJzZXJzL1hzZHQvWHNkdFBhcnNlci5jDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uMGVkNjVkMmU3MmNkMjEzYWQ3Njk1ZmVmZDRhNWEwYzA2Zjk2ZmYyYw0KLS0tIC9k ZXYvbnVsbA0KKysrIGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRM aWIvUGFyc2Vycy9Yc2R0L1hzZHRQYXJzZXIuYw0KQEAgLTAsMCArMSwxNTMgQEANCisvKioNCisg IFhTRFQgdGFibGUgcGFyc2VyDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMTYgLSAyMDE4LCBBUk0g TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFj Y29tcGFueWluZyBtYXRlcmlhbHMNCisgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUg dW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KKyAgd2hp Y2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBs aWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2Vz L2JzZC1saWNlbnNlLnBocA0KKw0KKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIg VEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorICBXSVRIT1VUIFdBUlJBTlRJ RVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBM SUVELg0KKw0KKyAgQHBhciBSZWZlcmVuY2Uocyk6DQorICAgIC0gQUNQSSA2LjIgU3BlY2lmaWNh dGlvbiAtIEVycmF0YSBBLCBTZXB0ZW1iZXIgMjAxNw0KKyoqLw0KKw0KKyNpbmNsdWRlIDxJbmR1 c3RyeVN0YW5kYXJkL0FjcGkuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQorI2lu Y2x1ZGUgPExpYnJhcnkvUHJpbnRMaWIuaD4NCisjaW5jbHVkZSAiQWNwaVBhcnNlci5oIg0KKyNp bmNsdWRlICJBY3BpVGFibGVQYXJzZXIuaCINCisNCisvLyBMb2NhbCB2YXJpYWJsZXMNCitTVEFU SUMgQUNQSV9ERVNDUklQVElPTl9IRUFERVJfSU5GTyBBY3BpSGRySW5mbzsNCisNCisvKiogQW4g QUNQSV9QQVJTRVIgYXJyYXkgZGVzY3JpYmluZyB0aGUgQUNQSSBYU0RUIHRhYmxlLg0KKyovDQor U1RBVElDIENPTlNUIEFDUElfUEFSU0VSIFhzZHRQYXJzZXJbXSA9IHsNCisgIFBBUlNFX0FDUElf SEVBREVSICgmQWNwaUhkckluZm8pDQorfTsNCisNCitDT05TVCBBQ1BJX0RFU0NSSVBUSU9OX0hF QURFUl9JTkZPKiBDT05TVA0KK0VGSUFQSQ0KK0dldEFjcGlYc2R0SGVhZGVySW5mbyAoDQorICBW T0lEDQorKQ0KK3sNCisgIHJldHVybiAmQWNwaUhkckluZm87DQorfQ0KKw0KKy8qKiBUaGlzIGZ1 bmN0aW9uIHBhcnNlcyB0aGUgQUNQSSBYU0RUIHRhYmxlDQorICBhbmQgb3B0aW9uYWxseSB0cmFj ZXMgdGhlIEFDUEkgdGFibGUgZmllbGRzLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBhbHNvIHBlcmZv cm1zIHZhbGlkYXRpb24gb2YgdGhlIFhTRFQgdGFibGUuDQorDQorICBAcGFyYW0gW2luXSBUcmFj ZSAgICAgICAgICAgICAgSWYgVFJVRSwgdHJhY2UgdGhlIEFDUEkgZmllbGRzLg0KKyAgQHBhcmFt IFtpbl0gUHRyICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZm ZXIuDQorICBAcGFyYW0gW2luXSBBY3BpVGFibGVMZW5ndGggICAgTGVuZ3RoIG9mIHRoZSBBQ1BJ IHRhYmxlLg0KKyAgQHBhcmFtIFtpbl0gQWNwaVRhYmxlUmV2aXNpb24gIFJldmlzaW9uIG9mIHRo ZSBBQ1BJIHRhYmxlLg0KKyovDQorVk9JRA0KK0VGSUFQSQ0KK1BhcnNlQWNwaVhzZHQgKA0KKyAg SU4gQk9PTEVBTiBUcmFjZSwNCisgIElOIFVJTlQ4KiAgUHRyLA0KKyAgSU4gVUlOVDMyICBBY3Bp VGFibGVMZW5ndGgsDQorICBJTiBVSU5UOCAgIEFjcGlUYWJsZVJldmlzaW9uDQorICApDQorew0K KyAgVUlOVDMyICAgICAgICBPZmZzZXQ7DQorICBVSU5UMzIgICAgICAgIFRhYmxlT2Zmc2V0Ow0K KyAgVUlOVDY0KiAgICAgICBUYWJsZVBvaW50ZXI7DQorICBVSU5UTiAgICAgICAgIEVudHJ5SW5k ZXg7DQorICBDSEFSMTYgICAgICAgIEJ1ZmZlclszMl07DQorDQorICAvLyBQYXJzZSB0aGUgQUNQ SSBoZWFkZXIgdG8gZ2V0IHRoZSBsZW5ndGgNCisgIFBhcnNlQWNwaSAoDQorICAgIEZBTFNFLA0K KyAgICAwLA0KKyAgICAiWFNEVCIsDQorICAgIFB0ciwNCisgICAgQUNQSV9ERVNDUklQVElPTl9I RUFERVJfTEVOR1RILA0KKyAgICBQQVJTRVJfUEFSQU1TIChYc2R0UGFyc2VyKQ0KKyAgICApOw0K Kw0KKyAgT2Zmc2V0ID0gUGFyc2VBY3BpICgNCisgICAgICAgICAgICAgVHJhY2UsDQorICAgICAg ICAgICAgIDAsDQorICAgICAgICAgICAgICJYU0RUIiwNCisgICAgICAgICAgICAgUHRyLA0KKyAg ICAgICAgICAgICAqQWNwaUhkckluZm8uTGVuZ3RoLA0KKyAgICAgICAgICAgICBQQVJTRVJfUEFS QU1TIChYc2R0UGFyc2VyKQ0KKyAgICAgICAgICAgICApOw0KKw0KKyAgVGFibGVPZmZzZXQgPSBP ZmZzZXQ7DQorDQorICBpZiAoVHJhY2UpIHsNCisgICAgRW50cnlJbmRleCA9IDA7DQorICAgIFRh YmxlUG9pbnRlciA9IChVSU5UNjQqKShQdHIgKyBUYWJsZU9mZnNldCk7DQorICAgIHdoaWxlIChP ZmZzZXQgPCAoKkFjcGlIZHJJbmZvLkxlbmd0aCkpIHsNCisgICAgICBDT05TVCBVSU5UMzIqIFNp Z25hdHVyZTsNCisgICAgICBDT05TVCBVSU5UMzIqIExlbmd0aDsNCisgICAgICBDT05TVCBVSU5U OCogIFJldmlzaW9uOw0KKw0KKyAgICAgIGlmICgoVUlOVDY0KikoVUlOVE4pKCpUYWJsZVBvaW50 ZXIpICE9IE5VTEwpIHsNCisgICAgICAgIFVJTlQ4KiAgICAgIFB0cjsNCisNCisgICAgICAgIFBh cnNlQWNwaUhlYWRlciAoDQorICAgICAgICAgIChVSU5UOCopKFVJTlROKSgqVGFibGVQb2ludGVy KSwNCisgICAgICAgICAgJlNpZ25hdHVyZSwNCisgICAgICAgICAgJkxlbmd0aCwNCisgICAgICAg ICAgJlJldmlzaW9uDQorICAgICAgICAgICk7DQorDQorICAgICAgICBQdHIgPSAoVUlOVDgqKVNp Z25hdHVyZTsNCisNCisgICAgICAgIFVuaWNvZGVTUHJpbnQgKA0KKyAgICAgICAgICBCdWZmZXIs DQorICAgICAgICAgIHNpemVvZiAoQnVmZmVyKSwNCisgICAgICAgICAgTCJFbnRyeVslZF0gLSAl YyVjJWMlYyIsDQorICAgICAgICAgIEVudHJ5SW5kZXgrKywNCisgICAgICAgICAgUHRyWzBdLA0K KyAgICAgICAgICBQdHJbMV0sDQorICAgICAgICAgIFB0clsyXSwNCisgICAgICAgICAgUHRyWzNd DQorICAgICAgICAgICk7DQorICAgICAgfSBlbHNlIHsNCisgICAgICAgIFVuaWNvZGVTUHJpbnQg KA0KKyAgICAgICAgICBCdWZmZXIsDQorICAgICAgICAgIHNpemVvZiAoQnVmZmVyKSwNCisgICAg ICAgICAgTCJFbnRyeVslZF0iLA0KKyAgICAgICAgICBFbnRyeUluZGV4KysNCisgICAgICAgICAg KTsNCisgICAgICB9DQorDQorICAgICAgUHJpbnRGaWVsZE5hbWUgKDIsIEJ1ZmZlcik7DQorICAg ICAgUHJpbnQgKEwiMHglbHhcbiIsICpUYWJsZVBvaW50ZXIpOw0KKw0KKyAgICAgIC8vIFZhbGlk YXRlIHRoZSB0YWJsZSBwb2ludGVycyBhcmUgbm90IE5VTEwNCisgICAgICBpZiAoKFVJTlQ2NCop KFVJTlROKSgqVGFibGVQb2ludGVyKSA9PSBOVUxMKSB7DQorICAgICAgICBJbmNyZW1lbnRFcnJv ckNvdW50ICgpOw0KKyAgICAgICAgUHJpbnQgKA0KKyAgICAgICAgICBMIkVSUk9SOiBJbnZhbGlk IHRhYmxlIGVudHJ5IGF0IDB4JWx4LCB0YWJsZSBhZGRyZXNzIGlzIDB4JWx4XG4iLA0KKyAgICAg ICAgICBUYWJsZVBvaW50ZXIsDQorICAgICAgICAgICpUYWJsZVBvaW50ZXINCisgICAgICAgICAg KTsNCisgICAgICB9DQorICAgICAgT2Zmc2V0ICs9IHNpemVvZiAoVUlOVDY0KTsNCisgICAgICBU YWJsZVBvaW50ZXIrKzsNCisgICAgfSAvLyB3aGlsZQ0KKyAgfQ0KKw0KKyAgLy8gUHJvY2VzcyB0 aGUgdGFibGVzDQorICBPZmZzZXQgPSBUYWJsZU9mZnNldDsNCisgIFRhYmxlUG9pbnRlciA9IChV SU5UNjQqKShQdHIgKyBUYWJsZU9mZnNldCk7DQorICB3aGlsZSAoT2Zmc2V0IDwgKCpBY3BpSGRy SW5mby5MZW5ndGgpKSB7DQorICAgIGlmICgoVUlOVDY0KikoVUlOVE4pKCpUYWJsZVBvaW50ZXIp ICE9IE5VTEwpIHsNCisgICAgICBQcm9jZXNzQWNwaVRhYmxlICgoVUlOVDgqKShVSU5UTikoKlRh YmxlUG9pbnRlcikpOw0KKyAgICB9DQorICAgIE9mZnNldCArPSBzaXplb2YgKFVJTlQ2NCk7DQor ICAgIFRhYmxlUG9pbnRlcisrOw0KKyAgfSAvLyB3aGlsZQ0KK30NCmRpZmYgLS1naXQgYS9TaGVs bFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9VZWZpU2hlbGxBY3BpVmll d0NvbW1hbmRMaWIuYyBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5k TGliL1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2RlMjg2OTFi ZTI2YmMxNGUyNmM0YzI4NGU0MDY3MDA2NjljNzdjZg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvU2hl bGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvVWVmaVNoZWxsQWNwaVZp ZXdDb21tYW5kTGliLmMNCkBAIC0wLDAgKzEsMTY3IEBADQorLyoqDQorICBNYWluIGZpbGUgZm9y ICdhY3BpdmlldycgU2hlbGwgY29tbWFuZCBmdW5jdGlvbi4NCisNCisgIENvcHlyaWdodCAoYykg MjAxNiAtIDIwMTgsIEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisgIFRo aXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgIGFyZSBsaWNlbnNl ZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRo ZSBCU0QgTGljZW5zZQ0KKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBU aGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KKyAgaHR0cDovL29w ZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KKw0KKyAgVEhFIFBST0dSQU0g SVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMs DQorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBF SVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KKyoqLw0KKw0KKyNpbmNsdWRlIDxHdWlkL1NoZWxs TGliSGlpR3VpZC5oPg0KKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL0FjcGkuaD4NCisjaW5j bHVkZSA8TGlicmFyeS9IaWlMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9TaGVsbENvbW1hbmRM aWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkv VWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQorI2luY2x1ZGUgPFVlZmkuaD4NCisjaW5jbHVk ZSAiQWNwaVBhcnNlci5oIg0KKyNpbmNsdWRlICJBY3BpVGFibGVQYXJzZXIuaCINCisjaW5jbHVk ZSAiQWNwaVZpZXcuaCINCisjaW5jbHVkZSAiVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliLmgi DQorDQorQ09OU1QgQ0hBUjE2IGdTaGVsbEFjcGlWaWV3RmlsZU5hbWVbXSA9IEwiU2hlbGxDb21t YW5kIjsNCisNCisvKioNCisgIEEgbGlzdCBvZiBhdmFpbGFibGUgdGFibGUgcGFyc2Vycy4NCisq Lw0KK1NUQVRJQw0KK0NPTlNUDQorQUNQSV9UQUJMRV9QQVJTRVIgUGFyc2VyTGlzdFtdID0gew0K KyAge0VGSV9BQ1BJXzZfMl9CT09UX0dSQVBISUNTX1JFU09VUkNFX1RBQkxFX1NJR05BVFVSRSwg UGFyc2VBY3BpQmdydH0sDQorICB7RUZJX0FDUElfNl8yX0RFQlVHX1BPUlRfMl9UQUJMRV9TSUdO QVRVUkUsIFBhcnNlQWNwaURiZzJ9LA0KKyAge0VGSV9BQ1BJXzZfMl9ESUZGRVJFTlRJQVRFRF9T WVNURU1fREVTQ1JJUFRJT05fVEFCTEVfU0lHTkFUVVJFLA0KKyAgIFBhcnNlQWNwaURzZHR9LA0K KyAge0VGSV9BQ1BJXzZfMl9GSVhFRF9BQ1BJX0RFU0NSSVBUSU9OX1RBQkxFX1NJR05BVFVSRSwg UGFyc2VBY3BpRmFkdH0sDQorICB7RUZJX0FDUElfNl8yX0dFTkVSSUNfVElNRVJfREVTQ1JJUFRJ T05fVEFCTEVfU0lHTkFUVVJFLCBQYXJzZUFjcGlHdGR0fSwNCisgIHtFRklfQUNQSV82XzJfSU9f UkVNQVBQSU5HX1RBQkxFX1NJR05BVFVSRSwgUGFyc2VBY3BpSW9ydH0sDQorICB7RUZJX0FDUElf Nl8yX01VTFRJUExFX0FQSUNfREVTQ1JJUFRJT05fVEFCTEVfU0lHTkFUVVJFLCBQYXJzZUFjcGlN YWR0fSwNCisgIHtFRklfQUNQSV82XzJfUENJX0VYUFJFU1NfTUVNT1JZX01BUFBFRF9DT05GSUdV UkFUSU9OX1NQQUNFX0JBU0VfQUREUkVTU19ERVNDUklQVElPTl9UQUJMRV9TSUdOQVRVUkUsDQor ICAgUGFyc2VBY3BpTWNmZ30sDQorICB7UlNEUF9UQUJMRV9JTkZPLCBQYXJzZUFjcGlSc2RwfSwN CisgIHtFRklfQUNQSV82XzJfU1lTVEVNX0xPQ0FMSVRZX0lORk9STUFUSU9OX1RBQkxFX1NJR05B VFVSRSwgUGFyc2VBY3BpU2xpdH0sDQorICB7RUZJX0FDUElfNl8yX1NFUklBTF9QT1JUX0NPTlNP TEVfUkVESVJFQ1RJT05fVEFCTEVfU0lHTkFUVVJFLCBQYXJzZUFjcGlTcGNyfSwNCisgIHtFRklf QUNQSV82XzJfU1lTVEVNX1JFU09VUkNFX0FGRklOSVRZX1RBQkxFX1NJR05BVFVSRSwgUGFyc2VB Y3BpU3JhdH0sDQorICB7RUZJX0FDUElfNl8yX1NFQ09OREFSWV9TWVNURU1fREVTQ1JJUFRJT05f VEFCTEVfU0lHTkFUVVJFLCBQYXJzZUFjcGlTc2R0fSwNCisgIHtFRklfQUNQSV82XzJfRVhURU5E RURfU1lTVEVNX0RFU0NSSVBUSU9OX1RBQkxFX1NJR05BVFVSRSwgUGFyc2VBY3BpWHNkdH0NCit9 Ow0KKw0KKy8qKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhbGwgdGhlIGF2YWlsYWJsZSB0YWJs ZSBwYXJzZXJzLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHBhcnNl ciBpcyByZWdpc3RlcmVkLg0KKyAgQHJldHZhbCBFRklfQUxSRUFEWV9TVEFSVEVEICAgVGhlIHBh cnNlciBmb3IgdGhlIEFDUEkgVGFibGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdhcyBhbHJlYWR5IHJlZ2lzdGVyZWQuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBBIHBhcmFtZXRlciBpcyBpbnZhbGlkLg0KKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNF UyAgTm8gc3BhY2UgdG8gcmVnaXN0ZXIgdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwYXJzZXIuDQorKi8NCitFRklfU1RBVFVTDQorUmVnaXN0ZXJBbGxQYXJzZXJzICgNCisg ICkNCit7DQorICBFRklfU1RBVFVTIFN0YXR1czsNCisgIFVJTlROIENvdW50ID0gc2l6ZW9mIChQ YXJzZXJMaXN0KSAvIHNpemVvZiAoUGFyc2VyTGlzdFswXSk7DQorICB3aGlsZSAoQ291bnQtLSAh PSAwKSB7DQorICAgIFN0YXR1cyA9IFJlZ2lzdGVyUGFyc2VyICgNCisgICAgICAgICAgICAgICBQ YXJzZXJMaXN0W0NvdW50XS5TaWduYXR1cmUsDQorICAgICAgICAgICAgICAgUGFyc2VyTGlzdFtD b3VudF0uUGFyc2VyDQorICAgICAgICAgICAgICAgKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KKyAgICAgIHJldHVybiBTdGF0dXM7DQorICAgIH0NCisgIH0NCisgIHJldHVybiBT dGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgUmV0dXJuIHRoZSBmaWxlIG5hbWUgb2YgdGhlIGhlbHAg dGV4dCBmaWxlIGlmIG5vdCB1c2luZyBISUkuDQorDQorICBAcmV0dXJuIFRoZSBzdHJpbmcgcG9p bnRlciB0byB0aGUgZmlsZSBuYW1lLg0KKyovDQorQ09OU1QgQ0hBUjE2Kg0KK0VGSUFQSQ0KK1No ZWxsQ29tbWFuZEdldE1hbkZpbGVOYW1lQWNwaVZpZXcgKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisg IHJldHVybiBnU2hlbGxBY3BpVmlld0ZpbGVOYW1lOw0KK30NCisNCisvKioNCisgIENvbnN0cnVj dG9yIGZvciB0aGUgU2hlbGwgQWNwaVZpZXcgQ29tbWFuZCBsaWJyYXJ5Lg0KKw0KKyAgSW5zdGFs bCB0aGUgaGFuZGxlcnMgZm9yIGFjcGl2aWV3IFVFRkkgU2hlbGwgY29tbWFuZC4NCisNCisgIEBw YXJhbSBJbWFnZUhhbmRsZSAgICAgICAgICAgIFRoZSBpbWFnZSBoYW5kbGUgb2YgdGhlIHByb2Nl c3MuDQorICBAcGFyYW0gU3lzdGVtVGFibGUgICAgICAgICAgICBUaGUgRUZJIFN5c3RlbSBUYWJs ZSBwb2ludGVyLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFNoZWxs IGNvbW1hbmQgaGFuZGxlcnMgd2VyZSBpbnN0YWxsZWQNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN1Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAg IEhpaSBwYWNrYWdlIGZhaWxlZCB0byBpbnN0YWxsLg0KKyovDQorRUZJX1NUQVRVUw0KK0VGSUFQ SQ0KK1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYkNvbnN0cnVjdG9yICgNCisgIElOIEVGSV9I QU5ETEUgICAgICAgIEltYWdlSGFuZGxlLA0KKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3Rl bVRhYmxlDQorICApDQorew0KKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQorICBnU2hlbGxBY3BpVmll d0hpaUhhbmRsZSA9IE5VTEw7DQorDQorICAvLyBDaGVjayBTaGVsbCBQcm9maWxlIERlYnVnMSBi aXQgb2YgdGhlIHByb2ZpbGVzIG1hc2sNCisgIGlmICgoRml4ZWRQY2RHZXQ4IChQY2RTaGVsbFBy b2ZpbGVNYXNrKSAmIEJJVDEpID09IDApIHsNCisgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KKyAg fQ0KKw0KKyAgU3RhdHVzID0gUmVnaXN0ZXJBbGxQYXJzZXJzICgpOw0KKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KKyAgICBQcmludCAoTCJhY3BpdmlldzogRXJyb3IgZmFpbGVkIHRvIHJl Z2lzdGVyIHBhcnNlci5cbiIpOw0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgZ1No ZWxsQWNwaVZpZXdIaWlIYW5kbGUgPSBIaWlBZGRQYWNrYWdlcyAoDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmdTaGVsbEFjcGlWaWV3SGlpR3VpZCwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnSW1hZ2VIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliU3RyaW5ncywNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCisg IGlmIChnU2hlbGxBY3BpVmlld0hpaUhhbmRsZSA9PSBOVUxMKSB7DQorICAgIHJldHVybiBFRklf REVWSUNFX0VSUk9SOw0KKyAgfQ0KKyAgLy8gSW5zdGFsbCBvdXIgU2hlbGwgY29tbWFuZCBoYW5k bGVyDQorICBTaGVsbENvbW1hbmRSZWdpc3RlckNvbW1hbmROYW1lICgNCisgICAgTCJhY3Bpdmll dyIsDQorICAgIFNoZWxsQ29tbWFuZFJ1bkFjcGlWaWV3LA0KKyAgICBTaGVsbENvbW1hbmRHZXRN YW5GaWxlTmFtZUFjcGlWaWV3LA0KKyAgICAwLA0KKyAgICBMImFjcGl2aWV3IiwNCisgICAgVFJV RSwNCisgICAgZ1NoZWxsQWNwaVZpZXdIaWlIYW5kbGUsDQorICAgIFNUUklOR19UT0tFTiAoU1RS X0dFVF9IRUxQX0FDUElWSUVXKQ0KKyAgICApOw0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K K30NCisNCisvKioNCisgIERlc3RydWN0b3IgZm9yIHRoZSBsaWJyYXJ5LiBmcmVlIGFueSByZXNv dXJjZXMuDQorDQorICBAcGFyYW0gSW1hZ2VIYW5kbGUgICAgICAgICAgICBUaGUgaW1hZ2UgaGFu ZGxlIG9mIHRoZSBwcm9jZXNzLg0KKyAgQHBhcmFtIFN5c3RlbVRhYmxlICAgICAgICAgICAgVGhl IEVGSSBTeXN0ZW0gVGFibGUgcG9pbnRlci4NCisqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitV ZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWJEZXN0cnVjdG9yICgNCisgIElOIEVGSV9IQU5ETEUg ICAgICAgIEltYWdlSGFuZGxlLA0KKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxl DQorICApDQorew0KKyAgaWYgKGdTaGVsbEFjcGlWaWV3SGlpSGFuZGxlICE9IE5VTEwpIHsNCisg ICAgSGlpUmVtb3ZlUGFja2FnZXMgKGdTaGVsbEFjcGlWaWV3SGlpSGFuZGxlKTsNCisgIH0NCisg IHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQpkaWZmIC0tZ2l0IGEvU2hlbGxQa2cvTGlicmFyeS9V ZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliLmgg Yi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9VZWZpU2hlbGxB Y3BpVmlld0NvbW1hbmRMaWIuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5YzhlMjE1NDRkNjgyOWFjODcyOTU4 ZjZiODQzNThlMWY5MWIwMmYNCi0tLSAvZGV2L251bGwNCisrKyBiL1NoZWxsUGtnL0xpYnJhcnkv VWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi5o DQpAQCAtMCwwICsxLDMyIEBADQorLyoqDQorICBIZWFkZXIgZmlsZSBmb3IgJ2FjcGl2aWV3JyBT aGVsbCBjb21tYW5kIGZ1bmN0aW9ucy4NCisNCisgIENvcHlyaWdodCAoYykgMjAxNiAtIDIwMTcs IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisgIFRoaXMgcHJvZ3JhbSBh bmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBh dmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5z ZQ0KKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0 IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KKyAgaHR0cDovL29wZW5zb3VyY2Uub3Jn L2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KKw0KKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVU RUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorICBXSVRIT1VU IFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVT UyBPUiBJTVBMSUVELg0KKyoqLw0KKw0KKyNpZm5kZWYgVUVGSV9TSEVMTF9BQ1BJVklFV19DT01N QU5EX0xJQl9IXw0KKyNkZWZpbmUgVUVGSV9TSEVMTF9BQ1BJVklFV19DT01NQU5EX0xJQl9IXw0K Kw0KK2V4dGVybiBFRklfSElJX0hBTkRMRSBnU2hlbGxBY3BpVmlld0hpaUhhbmRsZTsNCisNCisv KioNCisgIEZ1bmN0aW9uIGZvciAnYWNwaXZpZXcnIGNvbW1hbmQuDQorDQorICBAcGFyYW1baW5d IEltYWdlSGFuZGxlICBIYW5kbGUgdG8gdGhlIEltYWdlIChOVUxMIGlmIEludGVybmFsKS4NCisg IEBwYXJhbVtpbl0gU3lzdGVtVGFibGUgIFBvaW50ZXIgdG8gdGhlIFN5c3RlbSBUYWJsZSAoTlVM TCBpZiBJbnRlcm5hbCkuDQorKi8NCitTSEVMTF9TVEFUVVMNCitFRklBUEkNCitTaGVsbENvbW1h bmRSdW5BY3BpVmlldyAoDQorICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCisg IElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KKyAgKTsNCisNCisjZW5kaWYgLy8g VUVGSV9TSEVMTF9BQ1BJVklFV19DT01NQU5EX0xJQl9IXw0KZGlmZiAtLWdpdCBhL1NoZWxsUGtn L0xpYnJhcnkvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL1VlZmlTaGVsbEFjcGlWaWV3Q29t bWFuZExpYi5pbmYgYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExp Yi9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIuaW5mDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGJkYjdlMzAx YjRhNTNlNTM4ODZlOWExZjA1YjNmYjI5MjFhOTBkOQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvU2hl bGxQa2cvTGlicmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvVWVmaVNoZWxsQWNwaVZp ZXdDb21tYW5kTGliLmluZg0KQEAgLTAsMCArMSw3NCBAQA0KKyMjICBAZmlsZQ0KKyMgUHJvdmlk ZXMgU2hlbGwgJ2FjcGl2aWV3JyBjb21tYW5kIGZ1bmN0aW9ucw0KKyMNCisjIENvcHlyaWdodCAo YykgMjAxNiAtIDIwMTgsIEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisj DQorIyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyMgIGFy ZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KKyMgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJp YnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KKyMg IGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCisjICBUSEUg UFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElT IiBCQVNJUywNCisjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFO WSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KKyMNCisjDQorIyMNCisNCitbRGVm aW5lc10NCisgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMTkNCisg IEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IFVlZmlTaGVsbEFjcGlWaWV3Q29tbWFu ZExpYg0KKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0gRkI1QjMwNUUtODRGNS00 NjFGLTk0MEQtODJEMzQ1NzU3QUZBDQorICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAg PSBVRUZJX0FQUExJQ0FUSU9ODQorICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAx LjANCisgIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgICAgICA9IE5VTEx8VUVGSV9BUFBMSUNB VElPTiBVRUZJX0RSSVZFUg0KKyAgQ09OU1RSVUNUT1IgICAgICAgICAgICAgICAgICAgID0gVWVm aVNoZWxsQWNwaVZpZXdDb21tYW5kTGliQ29uc3RydWN0b3INCisgIERFU1RSVUNUT1IgICAgICAg ICAgICAgICAgICAgICA9IFVlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYkRlc3RydWN0b3INCisN CitbU291cmNlcy5jb21tb25dDQorICBVZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIudW5pDQor ICBVZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIuYw0KKyAgVWVmaVNoZWxsQWNwaVZpZXdDb21t YW5kTGliLmgNCisgIEFjcGlQYXJzZXIuYw0KKyAgQWNwaVRhYmxlUGFyc2VyLmMNCisgIEFjcGlW aWV3LmMNCisgIFBhcnNlcnMvQmdydC9CZ3J0UGFyc2VyLmMNCisgIFBhcnNlcnMvRGJnMi9EYmcy UGFyc2VyLmMNCisgIFBhcnNlcnMvRHNkdC9Ec2R0UGFyc2VyLmMNCisgIFBhcnNlcnMvRmFkdC9G YWR0UGFyc2VyLmMNCisgIFBhcnNlcnMvR3RkdC9HdGR0UGFyc2VyLmMNCisgIFBhcnNlcnMvSW9y dC9Jb3J0UGFyc2VyLmMNCisgIFBhcnNlcnMvTWFkdC9NYWR0UGFyc2VyLmMNCisgIFBhcnNlcnMv TWNmZy9NY2ZnUGFyc2VyLmMNCisgIFBhcnNlcnMvUnNkcC9Sc2RwUGFyc2VyLmMNCisgIFBhcnNl cnMvU2xpdC9TbGl0UGFyc2VyLmMNCisgIFBhcnNlcnMvU3Bjci9TcGNyUGFyc2VyLmMNCisgIFBh cnNlcnMvU3JhdC9TcmF0UGFyc2VyLmMNCisgIFBhcnNlcnMvU3NkdC9Tc2R0UGFyc2VyLmMNCisg IFBhcnNlcnMvWHNkdC9Yc2R0UGFyc2VyLmMNCisNCitbUGFja2FnZXNdDQorICBNZGVQa2cvTWRl UGtnLmRlYw0KKyAgU2hlbGxQa2cvU2hlbGxQa2cuZGVjDQorICBNZGVNb2R1bGVQa2cvTWRlTW9k dWxlUGtnLmRlYw0KKw0KK1tMaWJyYXJ5Q2xhc3Nlc10NCisgIE1lbW9yeUFsbG9jYXRpb25MaWIN CisgIEJhc2VMaWINCisgIEJhc2VNZW1vcnlMaWINCisgIERlYnVnTGliDQorICBTaGVsbENvbW1h bmRMaWINCisgIFNoZWxsTGliDQorICBVZWZpTGliDQorICBVZWZpUnVudGltZVNlcnZpY2VzVGFi bGVMaWINCisgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KKyAgUGNkTGliDQorICBIaWlMaWIN CisgIFByaW50TGliDQorICBGaWxlSGFuZGxlTGliDQorDQorDQorW0ZpeGVkUGNkXQ0KKyAgZ0Vm aVNoZWxsUGtnVG9rZW5TcGFjZUd1aWQuUGNkU2hlbGxQcm9maWxlTWFzayAjIyBDT05TVU1FUw0K Kw0KK1tHdWlkc10NCisgIGdTaGVsbEFjcGlWaWV3SGlpR3VpZCAgICAgICAgICAgIyMgQ09OU1VN RVMgIyMgSElJDQorICBnRWZpQWNwaVRhYmxlR3VpZCAgICAgICAgICAgICAgICMjIFNPTUVUSU1F U19DT05TVU1FUyAjIyBTeXN0ZW1UYWJsZQ0KZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJhcnkv VWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliL1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi51 bmkgYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEFjcGlWaWV3Q29tbWFuZExpYi9VZWZpU2hl bGxBY3BpVmlld0NvbW1hbmRMaWIudW5pDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM0ZDY2ZTFmZjUwNzA1NGQ0 YWE0MmJkNDdiZmFlODgyNGMyMThlNg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvU2hlbGxQa2cvTGli cmFyeS9VZWZpU2hlbGxBY3BpVmlld0NvbW1hbmRMaWIvVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5k TGliLnVuaQ0KQEAgLTAsMCArMSwxMjcgQEANCisvLyAvKioNCisvLw0KKy8vIENvcHlyaWdodCAo YykgMjAxNiAtIDIwMTcsIEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisv LyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorLy8gYXJlIGxp Y2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg b2YgdGhlIEJTRCBMaWNlbnNlDQorLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRp b24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQorLy8gaHR0 cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KKy8vDQorLy8gVEhF IFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJ UyIgQkFTSVMsDQorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBB TlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCisvLw0KKy8vIE1vZHVsZSBOYW1l Og0KKy8vDQorLy8gVWVmaVNoZWxsQWNwaVZpZXdDb21tYW5kTGliLnVuaQ0KKy8vDQorLy8gQWJz dHJhY3Q6DQorLy8NCisvLyBTdHJpbmcgZGVmaW5pdGlvbnMgZm9yIFVFRkkgU2hlbGwgYWNwaXZp ZXcgY29tbWFuZA0KKy8vDQorLy8NCisvLyAqLw0KKw0KKy89Iw0KKw0KKyNsYW5nZGVmICAgZW4t VVMgImVuZ2xpc2giDQorDQorI3N0cmluZyBTVFJfR0VOX1BST0JMRU0gICAgICAgICAgICNsYW5n dWFnZSBlbi1VUyAiJUglcyVOOiBVbmtub3duIGZsYWcgLSAnJUglcyVOJ1xyXG4iDQorI3N0cmlu ZyBTVFJfR0VOX05PX1ZBTFVFICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiJUglcyVOOiBNaXNz aW5nIGFyZ3VtZW50IGZvciBmbGFnIC0gJyVIJXMlTidcclxuIg0KKyNzdHJpbmcgU1RSX0dFTl9U T09fTUFOWSAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIiVIJXMlTjogVG9vIG1hbnkgYXJndW1l bnRzLlxyXG4iDQorI3N0cmluZyBTVFJfR0VOX01JU1NJTkdfT1BUSU9OICAgICNsYW5ndWFnZSBl bi1VUyAiJUglcyVOOiBNaXNzaW5nIG9wdGlvbiAnJUglcyVOJyByZXF1aXJlZCBieSBmbGFnIC0g JyVIJXMlTidcclxuIg0KKyNzdHJpbmcgU1RSX0dFTl9SRUFET05MWV9NRURJQSAgICAjbGFuZ3Vh Z2UgZW4tVVMgIiVIJXMlTjogVW5hYmxlIHRvIHdyaXRlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9y eSwgY2hlY2sgaWYgbWVkaWEgaXMgd3JpdGFibGUuXHJcbiINCisNCisjc3RyaW5nIFNUUl9HRVRf SEVMUF9BQ1BJVklFVyAgICNsYW5ndWFnZSBlbi1VUyAiIg0KKyIuVEggYWNwaXZpZXcgMCAiRGlz cGxheSBBQ1BJIGluZm9ybWF0aW9uLiJcclxuIg0KKyIuU0ggTkFNRVxyXG4iDQorIkRpc3BsYXkg QUNQSSBUYWJsZSBpbmZvcm1hdGlvbi5cclxuIg0KKyIuU0ggU1lOT1BTSVNcclxuIg0KKyIgXHJc biINCisiQUNQSVZJRVcgW1stP10gfCBbWy1sXSB8IFstcyBBY3BpVGFibGUgWy1kXV1dIFstY10g Wy12XSBbLWggSGlnaGxpZ2h0XV1cclxuIg0KKyIgXHJcbiINCisiLlNIIE9QVElPTlNcclxuIg0K KyIgXHJcbiINCisiICAtbCAtIERpc3BsYXkgbGlzdCBvZiBpbnN0YWxsZWQgQUNQSSBUYWJsZXMu XHJcbiINCisiICAtcyAtIERpc3BsYXkgb25seSB0aGUgc3BlY2lmaWVkIEFjcGlUYWJsZSB0eXBl LlxyXG4iDQorIiAgICAgICAgIEFjcGlUYWJsZSAgICA6IFRoZSByZXF1aXJlZCBBQ1BJIFRhYmxl IHR5cGUuXHJcbiINCisiICAtZCAtIEdlbmVyYXRlIGEgYmluYXJ5IGZpbGUgZHVtcCBvZiB0aGUg c3BlY2lmaWVkIEFjcGlUYWJsZS5cclxuIg0KKyIgIC1jIC0gQ29uc2lzdGVuY3kgY2hlY2tpbmcg KGVuYWJsZWQgYnkgZGVmYXVsdCkuXHJcbiINCisiICAtdiAtIERpc3BsYXkgdmVyYm9zZSBkYXRh IChlbmFibGVkIGJ5IGRlZmF1bHQpLlxyXG4iDQorIiAgLWggLSBFbmFibGUvRGlzYWJsZSBDb2xv dXIgSGlnaGxpZ2h0aW5nLlxyXG4iDQorIiAgICAgICAgIEhpZ2hsaWdodCAgICA6IFRSVUUvT04g ZW5hYmxlcyBoaWdobGlnaHRpbmc7XHJcbiINCisiICAgICAgICAgICAgICAgICAgICAgICAgRkFM U0UvT0ZGIChkZWZhdWx0KSBkaXNhYmxlcyBoaWdobGlnaHRpbmcuXHJcbiINCisiICAtPyAtIFNo b3cgaGVscC5cclxuIg0KKyIgXHJcbiINCisiLlNIIERFU0NSSVBUSU9OXHJcbiINCisiIFxyXG4i DQorIiAgVGhpcyBwcm9ncmFtIGlzIHByb3ZpZGVkIHRvIGFsbG93IGV4YW1pbmF0aW9uIG9mIEFD UEkgdGFibGUgdmFsdWVzIGZyb20gdGhlXHJcbiINCisiICBVRUZJIFNoZWxsLiAgVGhpcyBjYW4g aGVscCB3aXRoIGludmVzdGlnYXRpb25zLCBlc3BlY2lhbGx5IGF0IHRoYXQgc3RhZ2Ugd2hlcmVc clxuIg0KKyIgIHRoZSB0YWJsZXMgYXJlIG5vdCBlbmFibGluZyBhbiBPUyB0byBib290LlxyXG4i DQorIiAgVGhlIHByb2dyYW0gaXMgbm90IGV4aGF1c3RpdmUsIGFuZCBvbmx5IGVuY2Fwc3VsYXRl cyBkZXRhaWxlZCBrbm93bGVkZ2Ugb2YgYVxyXG4iDQorIiAgbGltaXRlZCBudW1iZXIgb2YgdGFi bGUgdHlwZXMuXHJcbiINCisiIFxyXG4iDQorIiAgRGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gZGlz cGxheSB0aGUgY29udGVudCBvZiBhbGwgdGFibGVzIGluc3RhbGxlZC5cclxuIg0KKyIgICdLbm93 bicgdGFibGUgdHlwZXMgKGxpc3RlZCBpbiBOT1RFUyBiZWxvdykgd2lsbCBiZSBwYXJzZWQgYW5k IGRpc3BsYXllZFxyXG4iDQorIiAgd2l0aCBkZXNjcmlwdGlvbnMgYW5kIGZpZWxkIHZhbHVlcy4g IFdoZXJlIGFwcHJvcHJpYXRlIGEgZGVncmVlIG9mIGNvbnNpc3RlbmN5XHJcbiINCisiICBjaGVj a2luZyBpcyBkb25lIGFuZCBlcnJvcnMgbWF5IGJlIHJlcG9ydGVkIGluIHRoZSBvdXRwdXQuXHJc biINCisiICBPdGhlciB0YWJsZSB0eXBlcyB3aWxsIGJlIGRpc3BsYXllZCBhcyBhbiBhcnJheSBv ZiBIZXhhZGVjaW1hbCBieXRlcy5cclxuIg0KKyIgXHJcbiINCisiICBUbyBmYWNpbGl0YXRlIGRl YnVnZ2luZywgdGhlIC1zIGFuZCAtZCBvcHRpb25zIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGFc clxuIg0KKyIgIGJpbmFyeSBmaWxlIGltYWdlIG9mIGEgdGFibGUgdGhhdCBjYW4gYmUgY29waWVk IGVsc2V3aGVyZSBmb3IgaW52ZXN0aWdhdGlvblxyXG4iDQorIiAgdXNpbmcgdG9vbHMgc3VjaCBh cyB0aG9zZSBwcm92aWRlZCBieSBhY3BpY2Eub3JnLiAgVGhpcyBpcyBlc3BlY2lhbGx5IHJlbGV2 YW50XHJcbiINCisiICBmb3IgQU1MIHR5cGUgdGFibGVzIGxpa2UgRFNEVCBhbmQgU1NEVC5cclxu Ig0KKyIgXHJcbiINCisiTk9URVM6XHJcbiINCisiICAxLiBUaGUgQWNwaVRhYmxlIHBhcmFtZXRl ciBjYW4gbWF0Y2ggYW55IGluc3RhbGxlZCB0YWJsZSB0eXBlLlxyXG4iDQorIiAgICAgVGFibGVz IHdpdGhvdXQgc3BlY2lmaWMgaGFuZGxpbmcgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgYSByYXcgaGV4 IGR1bXAgKG9yXHJcbiINCisiICAgICBkdW1wZWQgdG8gYSBmaWxlIGlmIC1kIGlzIHVzZWQpLlxy XG4iDQorIiAgMi4gRm9ybWF0dGVkIGRpc3BsYXkgYW5kIGNoZWNraW5nIGlzIHByb3ZpZGVkIGZv ciB0aGVzZSBzaWduYXR1cmUgdHlwZXM6XHJcbiINCisiICAgICAgIEFQSUMgIC0gTXVsdGlwbGUg QVBJQyBEZXNjcmlwdGlvbiBUYWJsZSAoTUFEVClcclxuIg0KKyIgICAgICAgQkdSVCAgLSBCb290 IEdyYXBoaWNzIFJlc291cmNlIFRhYmxlXHJcbiINCisiICAgICAgIERCRzIgIC0gRGVidWcgUG9y dCBUYWJsZSAyXHJcbiINCisiICAgICAgIEZBQ1AgIC0gRml4ZWQgQUNQSSBEZXNjcmlwdGlvbiBU YWJsZSAoRkFEVClcclxuIg0KKyIgICAgICAgR1REVCAgLSBHZW5lcmljIFRpbWVyIERlc2NyaXB0 aW9uIFRhYmxlXHJcbiINCisiICAgICAgIElPUlQgIC0gSU8gUmVtYXBwaW5nIFRhYmxlXHJcbiIN CisiICAgICAgIE1DRkcgIC0gTWVtb3J5IE1hcHBlZCBDb25maWcgU3BhY2UgQmFzZSBBZGRyZXNz IERlc2NyaXB0aW9uIFRhYmxlXHJcbiINCisiICAgICAgIFJTRFAgIC0gUm9vdCBTeXN0ZW0gRGVz Y3JpcHRpb24gUG9pbnRlclxyXG4iDQorIiAgICAgICBTTElUICAtIFN5c3RlbSBMb2NhbGl0eSBJ bmZvcm1hdGlvbiBUYWJsZVxyXG4iDQorIiAgICAgICBTUENSICAtIFNlcmlhbCBQb3J0IENvbnNv bGUgUmVkaXJlY3Rpb24gVGFibGVcclxuIg0KKyIgICAgICAgU1JBVCAgLSBTeXN0ZW0gUmVzb3Vy Y2UgQWZmaW5pdHkgVGFibGVcclxuIg0KKyIgICAgICAgWFNEVCAgLSBFeHRlbmRlZCBTeXN0ZW0g RGVzY3JpcHRpb24gVGFibGVcclxuIg0KKyIgXHJcbiINCisiLlNIIFNUQU5EQVJEU1xyXG4iDQor IiBcclxuIg0KKyIgIFRhYmxlIGRldGFpbHMgY29ycmVzcG9uZCB0byB0aG9zZSBpbiAnQWR2YW5j ZWQgQ29uZmlndXJhdGlvbiBhbmQgUG93ZXJcclxuIg0KKyIgIEludGVyZmFjZSBTcGVjaWZpY2F0 aW9uJyBWZXJzaW9uIDYuMiBFcnJhdGEgQSwgW1NlcHRlbWJlciAyMDE3XVxyXG4iDQorIiAgKGh0 dHA6Ly93d3cudWVmaS5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9yZXNvdXJjZXMvQUNQSSUyMDZf Ml9BX1NlcHQyOS5wZGYpXHJcbiINCisiIFxyXG4iDQorIiAgTk9URTogVGhlIG5hdHVyZSBvZiB0 aGUgQUNQSSBzdGFuZGFyZCBtZWFucyB0aGF0IGFsbW9zdCBhbGwgdGFibGVzIGluIDYuMSB3aWxs XHJcbiINCisiICAgICAgICBiZSAnYmFja3dhcmRzIGNvbXBhdGlibGUnIHdpdGggcHJpb3IgdmVy c2lvbiBvZiB0aGUgc3BlY2lmaWNhdGlvbiBpblxyXG4iDQorIiAgICAgICAgdGVybXMgb2Ygc3Ry dWN0dXJlLCBzbyBmb3JtYXR0ZWQgb3V0cHV0IHNob3VsZCBiZSBjb3JyZWN0LiAgVGhlIG1haW5c clxuIg0KKyIgICAgICAgIGV4Y2VwdGlvbiB3aWxsIGJlIHRoYXQgcHJldmlvdXNseSAncmVzZXJ2 ZWQnIGZpZWxkcyB3aWxsIGJlIHJlcG9ydGVkXHJcbiINCisiICAgICAgICB3aXRoIG5ldyBuYW1l cywgd2hlcmUgdGhleSBoYXZlIGJlZW4gYWRkZWQgaW4gbGF0ZXIgdmVyc2lvbnMgb2YgdGhlXHJc biINCisiICAgICAgICBzcGVjaWZpY2F0aW9uLlxyXG4iDQorIiBcclxuIg0KKyIuU0ggRVhBTVBM RVNcclxuIg0KKyIgXHJcbiINCisiIFxyXG4iDQorIkVYQU1QTEVTOlxyXG4iDQorIiAgKiBUbyBk aXNwbGF5IGEgbGlzdCBvZiB0aGUgaW5zdGFsbGVkIHRhYmxlIHR5cGVzOlxyXG4iDQorIiAgICBm czA6XD4gYWNwaXZpZXcgLWxcclxuIg0KKyIgXHJcbiINCisiICAqIFRvIHBhcnNlIGFuZCBkaXNw bGF5IGEgc3BlY2lmaWMgdGFibGUgdHlwZTpcclxuIg0KKyIgICAgZnMwOlw+IGFjcGl2aWV3IC1z IEdURFRcclxuIg0KKyIgXHJcbiINCisiICAqIFRvIHNhdmUgYSBiaW5hcnkgZHVtcCBvZiB0aGUg Y29udGVudHMgb2YgYSB0YWJsZSB0byBhIGZpbGVcclxuIg0KKyIgICAgaW4gdGhlIGN1cnJlbnQg d29ya2luZyBkaXJlY3Rvcnk6XHJcbiINCisiICAgIGZzMDpcPiBhY3BpdmlldyAtcyBEU0RUIC1k XHJcbiINCisiIFxyXG4iDQorIiAgKiBUbyBkaXNwbGF5IGNvbnRlbnRzIG9mIGFsbCBBQ1BJIHRh YmxlczpcclxuIg0KKyIgICAgZnMwOlw+IGFjcGl2aWV3XHJcbiINCisiIFxyXG4iDQorIi5TSCBS RVRVUk5WQUxVRVNcclxuIg0KKyIgXHJcbiINCisiUkVUVVJOIFZBTFVFUzpcclxuIg0KKyIgIFNI RUxMX1NVQ0NFU1MgICAgICAgICAgICAgRGF0YSB3YXMgZGlzcGxheWVkIGFzIHJlcXVlc3RlZC5c clxuIg0KKyIgIFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSICAgQUNQSSBUYWJsZSBwYXJzaW5nIGZh aWxlZC5cclxuIg0KKyIgXHJcbiINCisNCmRpZmYgLS1naXQgYS9TaGVsbFBrZy9TaGVsbFBrZy5k ZWMgYi9TaGVsbFBrZy9TaGVsbFBrZy5kZWMNCmluZGV4IDBjNGY3NGZmNDE3MjZjNGEyOGVkMDgy ODQ5YzFiODY0YjFjNDg3NTIuLmMwOTBhYTRkMDhiZTNhYWQ0ZDlhZWRiNTQyYzAxMDU2YmNlNDY5 NjkgMTAwNjQ0DQotLS0gYS9TaGVsbFBrZy9TaGVsbFBrZy5kZWMNCisrKyBiL1NoZWxsUGtnL1No ZWxsUGtnLmRlYw0KQEAgLTMsNiArMyw3IEBADQogIw0KICMgKEMpIENvcHlyaWdodCAyMDEzLTIw MTQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC48QlI+DQogIyBDb3B5 cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC48QlI+DQorIyBDb3B5cmlnaHQgKGMpIDIwMTYgLSAyMDE4LCBBUk0gTGltaXRlZC4gQWxs IHJpZ2h0cyByZXNlcnZlZC48QlI+DQogIw0KICMgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21w YW55aW5nIG1hdGVyaWFscyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyDQog IyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlIHdoaWNoIGFjY29t cGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLg0KQEAgLTU2LDcgKzU3LDcgQEAgW0d1aWRzXQ0KICAg Z1NoZWxsTmV0d29yazJIaWlHdWlkICAgICAgICAgICA9IHsweDE3NGIyYjUsIDB4ZjUwNSwgMHg0 YjEyLCB7MHhhYSwgMHg2MCwgMHg1OSwgMHhkZiwgMHhmOCwgMHhkNiwgMHhlYSwgMHgzN319DQog ICBnU2hlbGxUZnRwSGlpR3VpZCAgICAgICAgICAgICAgID0gezB4NzM4YTkzMTQsIDB4ODJjMSwg MHg0NTkyLCB7MHg4ZiwgMHhmNywgMHhjMSwgMHhiZCwgMHhmMSwgMHhiMiwgMHgwZSwgMHhkNH19 DQogICBnU2hlbGxCY2ZnSGlpR3VpZCAgICAgICAgICAgICAgID0gezB4NWY1ZjYwNWQsIDB4MTU4 MywgMHg0YTJkLCB7MHhhNiwgMHhiMiwgMHhlYiwgMHgxMiwgMHhkYSwgMHhiNCwgMHhhMiwgMHhi Nn19DQotDQorICBnU2hlbGxBY3BpVmlld0hpaUd1aWQgICAgICAgICAgID0gezB4ZGE4Y2NkZjQs IDB4ZWQ4ZiwgMHg0ZmZjLCB7MHhiNSwgMHhlZiwgMHgyZSwgMHhmNSwgMHg1ZSwgMHgyNCwgMHg5 MywgMHgyYX19DQogICAjIEZJTEVfR1VJRCBhcyBkZWZpbmVkIGluIFNoZWxsUGtnL0FwcGxpY2F0 aW9uL1NoZWxsL1NoZWxsLmluZg0KICAgZ1VlZmlTaGVsbEZpbGVHdWlkICAgICAgICAgICAgICA9 IHsweDdjMDRhNTgzLCAweDllM2UsIDB4NGYxYywgezB4YWQsIDB4NjUsIDB4ZTAsIDB4NTIsIDB4 NjgsIDB4ZDAsIDB4YjQsIDB4ZDF9fQ0KDQotLQ0KJ0d1aWQoQ0UxNjU2NjktM0VGMy00OTNGLUI4 NUQtNjE5MEVFNUI5NzU5KScNCg0KDQo=