From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140079.outbound.protection.outlook.com [40.107.14.79]) by sourceware.org (Postfix) with ESMTPS id 92A743842435 for ; Wed, 9 Nov 2022 16:02:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 92A743842435 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=UsYwf5pmr1PLOqk8tg1FYCgUxU/RCmu2gzcVZuM85+CcgXbU9TJyaGFdWPJpNK725hfUrOvHKNQc32USuGd7AxdyGb0nyu4HlR7ma5qszXkzITFr7riZVNIyXhJF8ViD0CqMclGludW3YRqGKVoDjmWabieLmp+a8Yn/3JRhoyeexT4HeXswfniwwnZcmazhHBr3B+4N+1Ueimh48WUPxNvf1ixzXQAYxbyNdD1mcerJVsrOLSzj72SQxrbvy25wrZeDzz2HRVTAM1uaG8/mloZttW4rif81k+fIztUyWl9SLCu/YKpoEpeAgkYVGvE3af0QMnM1NKrKafNBTBtpTA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+mEcdhKfiFmywsr12sHiLzNWjreXuceOTVDTSczR5XA=; b=ahHTh7o8fZmUTT0n90SfcmOUouIdUlPGfNmbp8mFDfW2lGKMOQGHebRmLzF0tya4hnVBuynH74rl92bqANI8OkkAFCpw8tqGAWg/sPH1oKRBO7f4qxiCXkszvAhAaUBV5Nrb/lrvD6qi+FP0trPXL8X4oNGzp1ZQG7uA1A3cK1SNlTxEMDt8JB5ejRk1mAG3EASCjRI2QE7wGBgUXRQ5S0VA75dvadp0dwvMSEo8r9Xci7AgMdQ2t3C4L+phTt2LV2hTC0akNO11yneCHPbwl7pJzQc/dd57WevBcVj+6tCR1UmIleE5VTL1K7D3JdLPaXKfsz/aDTJ9otBB2TjwAQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+mEcdhKfiFmywsr12sHiLzNWjreXuceOTVDTSczR5XA=; b=KT1RKB6VMXGrdLRaKW7UgJRajONlfaSfES/Qk/EPAwcS5KZfL2MuIGkykN1fYH2aGUxqKj3OkBfwQb+DvwIfD3rJ2NU+iV6RqCwOwk9yDaIb3u4y86TdKcWVm5ATcRRB/qFUxIsWW8lpWCTLQu7FGkz7F2lEJGfVV9tJZYMuGRs= Received: from DB8PR04CA0001.eurprd04.prod.outlook.com (2603:10a6:10:110::11) by AS2PR08MB8480.eurprd08.prod.outlook.com (2603:10a6:20b:55e::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.12; Wed, 9 Nov 2022 16:02:39 +0000 Received: from DBAEUR03FT029.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:110:cafe::1a) by DB8PR04CA0001.outlook.office365.com (2603:10a6:10:110::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.22 via Frontend Transport; Wed, 9 Nov 2022 16:02:39 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DBAEUR03FT029.mail.protection.outlook.com (100.127.142.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.12 via Frontend Transport; Wed, 9 Nov 2022 16:02:39 +0000 Received: ("Tessian outbound 73ab5f36653e:v130"); Wed, 09 Nov 2022 16:02:39 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: c8a490a97f5c29d5 X-CR-MTA-TID: 64aa7808 Received: from 8d796b0fb08a.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 7A3407F7-C52E-4810-BAC5-EBDED3DFA297.1; Wed, 09 Nov 2022 16:02:27 +0000 Received: from EUR01-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 8d796b0fb08a.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 09 Nov 2022 16:02:27 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CCfBLAYviY2JLtF8P5ZM6nvraULgF/b1ZPU9KIvu1k5tOSESc7jFRm5t31y3j+AoAy4U+TBcTHyaENhoDzBJnkQsaREH5+alJ3ze08ClocP5lxysqmv5dfbwBDzK5nvY9OksZawfkiTfK74EONVNgjhR62DxqsPoZ2Akc7GxsvC62UtnTZlmFlQzKiMSqvaOJQLa7Ota0wScLHEnDXmVGbs8C1zrBWunxVZSdgPHqyXjBg3Aqm3djvNqJkt9f5askMhVD16qKsIQcSJ+TV2FcZrDh0VcrUsa/ZcICB5N84/eMS/8FHjp7rF2it2v2jhVSM5kVuP0fuw1wmA75S4x6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+mEcdhKfiFmywsr12sHiLzNWjreXuceOTVDTSczR5XA=; b=CR3dnLswAznpM6aRlaViNTB0HDNRhVEK9asAdlceGDyX0y2RwYBtWNX9B1pMJVJ1PrXl8OPmRAhry/RYT8h7IKqDzGjj42aNolPUOAqaqdAtPTRLRjDk3p41uaNySESJT4NXykTiXWhd2GWNmldwhTPgHSh1UVRxpJwjxd+7/rRXfuySuQL2djTMWeM19OInaagM7VnPKXDFWhtxu5yLK8fkmfNUPbj44Nu7bWa0F6DvfMkYjFDIuFQo1TggLWetgDdMzceA4Eio/SDPIIIK3yN6GNksKmh5mOhne4ozLF++wrIfNfdwEz6pQv0sQfSunz5Z9o5hThsjcsYxMdZSrA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+mEcdhKfiFmywsr12sHiLzNWjreXuceOTVDTSczR5XA=; b=KT1RKB6VMXGrdLRaKW7UgJRajONlfaSfES/Qk/EPAwcS5KZfL2MuIGkykN1fYH2aGUxqKj3OkBfwQb+DvwIfD3rJ2NU+iV6RqCwOwk9yDaIb3u4y86TdKcWVm5ATcRRB/qFUxIsWW8lpWCTLQu7FGkz7F2lEJGfVV9tJZYMuGRs= Received: from PAXPR08MB6926.eurprd08.prod.outlook.com (2603:10a6:102:138::24) by PAWPR08MB9807.eurprd08.prod.outlook.com (2603:10a6:102:2ee::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.12; Wed, 9 Nov 2022 16:02:23 +0000 Received: from PAXPR08MB6926.eurprd08.prod.outlook.com ([fe80::eae6:18d0:2b57:347f]) by PAXPR08MB6926.eurprd08.prod.outlook.com ([fe80::eae6:18d0:2b57:347f%9]) with mapi id 15.20.5813.011; Wed, 9 Nov 2022 16:02:23 +0000 From: Kyrylo Tkachov To: Tamar Christina , "gcc-patches@gcc.gnu.org" CC: nd , Richard Earnshaw , Marcus Shawcroft , Richard Sandiford Subject: RE: [PATCH 2/4]AArch64 Add implementation for pow2 bitmask division. Thread-Topic: [PATCH 2/4]AArch64 Add implementation for pow2 bitmask division. Thread-Index: AQHYzy+VUJ+WnzeV3EuBVJghaDyGvq4omywAgA5uTSA= Date: Wed, 9 Nov 2022 16:02:22 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: PAXPR08MB6926:EE_|PAWPR08MB9807:EE_|DBAEUR03FT029:EE_|AS2PR08MB8480:EE_ X-MS-Office365-Filtering-Correlation-Id: 383ea4b0-c702-4255-b360-08dac26bd37f x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: cfG2TL1Or8KtnMgWYHw8yFTGDvBzk8CSvkt3FUBmJv1m1N7F7g+MoX0DTHabhQsR6f9j31JtqnjeEjEVWlkcoq1usV2q4pJvk/u0yCoy0XrE83M280rvIQ+wm3iimkGHlHi8JhT9PqZJLLUqKfuoR9Qv1hI8d8HMxayJFj92mMAVAOSjDT0XY6ZYXz9EOl/tFzmC4Nu14oESxFV4HJs9ptvr1G+iIhnQ5MY03BtL7gqHJocmOTH/wE6Kc/VHcoPg7nfbH7R4L8KVFIZVErVtLXqvJ2lWesxGTs2e6ZKudM5w8EhNV0OrAKwHIJZNtOVDEOsNWpY0xFJYyIhrea+e6levbptklK68moEJ6WLQ6vx6QGQ8BSW+6Hx1ADDBAss66eSOqpqruwKzZfgz+xTqo0hFsPLmPeeYv69gKkVlJLChwRAZc8vM5Ks6rXnbQkiRZCWLlC+qMTWbmqxqn4IY8y6XW/QY95esD6HvG1d19+xxbFv66hRSoNfyQkP/RCqB2wFGcFmqVXVj7Fc4tn2Qgc+N8kmsNW1hgMteT+jT+zjzgfLCEf2bH//nHFZQznYEx8aJXzsCh2YAQroouGAWjb/5GKLK4zi1T0tQdVC/E/jjgRfSKaPYySf8XZ/3hoHbw5f/nNGK/QJBA6tYYZpYDteftz1woMRlwihjQj/orjQ4lgRAbnMiVvZL9TuFin78uE8tHMRWmeeGopQTXqj9/NcajeXkD1hfDUlXWAAipotVOJxhGEujp+wUMZHtEtlnV0H4uHUYeqRDaFQBk9PipmXTvMxE4iHnD66dh48vUck= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6926.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(366004)(39860400002)(396003)(346002)(376002)(136003)(451199015)(122000001)(38100700002)(33656002)(38070700005)(86362001)(478600001)(71200400001)(55016003)(5660300002)(30864003)(8936002)(52536014)(76116006)(4326008)(66946007)(64756008)(66446008)(66476007)(316002)(41300700001)(8676002)(66556008)(110136005)(54906003)(186003)(83380400001)(2906002)(9686003)(53546011)(26005)(4743002)(7696005)(6506007)(84970400001)(559001)(579004);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR08MB9807 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT029.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: c6292dd3-93b7-4ab7-9024-08dac26bc9a9 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: cEF1z/JzvCppqWvPnCFf/NagdISlIIXxpHYdGWJWc1eSSSGHl/Ge19e8Iacbxf/ouSk3gCfka7kTfhW9MWN7RTF9ByOLkqMdgcyPhRaElywPq8ObrYolBkD12Bq1XMWvO+uaHHuI6kwjJurWQJsGvptTtuPwZHmLhimon45QUiQrmt5GsU6XsIYTXKKfcXeauRpwJt6YzxGf+2rcDqh01Hw1SmqXeQQbHIjFxGqrW6hktKp6ub9lm9ugtPjfejpFmtFh5hPame3vdAt4yiHPdYZ0McLv0xTyWY7UpOoAYWMS/sGXSNrne51acdN3zk8/iZQK6gkmuWb26wfL0c3qccFQJCGx4hWvtlPqwjbyCb8xj9SIk1+TI4GfDg5Hs5L6XA7ZjEOfxFLkdJGGWTLD3Jx1tVgnqLY5Krcdl1vzZun+EW6H3oc+4prrw5yTI4FBXfyFLmXx5E4ck8nifxJdDgkR+HGutz/vvQhOE7WNhJt9gXANglrpdg3Bu+O7lu9fefQb8SkKB9ANLkdUXG7LGvOgVFEnYHFZsBoeqK0Q3mLxdunzpFv6Wkq/sStqbuiecBb06sVOZx/x/x2uwfTeTpirhjUP1P9glMmn6VqXk7ZvpYaaPtLF7bYbY82DVzJB/7+G+gBm5ZrglW/znATLcvoRsi0IuhzpY0GW8V4QtnyzvrkMCL28xtJ70SRahsu+kMmZYrzinW/DfNM/r+jJ2uDKZLEHHp0Wc/lOC+7SXxRfkgh1K5DhAw0IaZDgZaeQpEFP29a8GfILBLCBElIfW4n3Jj+Y9dktjkGykdWpxZA= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230022)(4636009)(396003)(376002)(346002)(136003)(39860400002)(451199015)(40470700004)(46966006)(36840700001)(84970400001)(82740400003)(36860700001)(33656002)(8676002)(4326008)(41300700001)(52536014)(356005)(81166007)(47076005)(82310400005)(86362001)(54906003)(83380400001)(8936002)(110136005)(336012)(186003)(478600001)(40480700001)(2906002)(55016003)(40460700003)(316002)(70206006)(70586007)(9686003)(4743002)(53546011)(6506007)(7696005)(26005)(5660300002)(30864003)(579004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Nov 2022 16:02:39.1997 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 383ea4b0-c702-4255-b360-08dac26bd37f X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DBAEUR03FT029.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB8480 X-Spam-Status: No, score=-9.9 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: SGkgVGFtYXIsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogVGFtYXIg Q2hyaXN0aW5hIDxUYW1hci5DaHJpc3RpbmFAYXJtLmNvbT4NCj4gU2VudDogTW9uZGF5LCBPY3Rv YmVyIDMxLCAyMDIyIDExOjM1IEFNDQo+IFRvOiBUYW1hciBDaHJpc3RpbmEgPFRhbWFyLkNocmlz dGluYUBhcm0uY29tPjsgZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcNCj4gQ2M6IG5kIDxuZEBhcm0u Y29tPjsgUmljaGFyZCBFYXJuc2hhdyA8UmljaGFyZC5FYXJuc2hhd0Bhcm0uY29tPjsNCj4gTWFy Y3VzIFNoYXdjcm9mdCA8TWFyY3VzLlNoYXdjcm9mdEBhcm0uY29tPjsgS3lyeWxvIFRrYWNob3YN Cj4gPEt5cnlsby5Ua2FjaG92QGFybS5jb20+OyBSaWNoYXJkIFNhbmRpZm9yZA0KPiA8UmljaGFy ZC5TYW5kaWZvcmRAYXJtLmNvbT4NCj4gU3ViamVjdDogUkU6IFtQQVRDSCAyLzRdQUFyY2g2NCBB ZGQgaW1wbGVtZW50YXRpb24gZm9yIHBvdzIgYml0bWFzaw0KPiBkaXZpc2lvbi4NCj4gDQo+IEhp IEFsbCwNCj4gDQo+IFBpbmcsIGFuZCB1cGRhdGVkIHBhdGNoIGJhc2VkIG9uIG1pZC1lbmQgY2hh bmdlcy4NCj4gDQo+IEJvb3RzdHJhcHBlZCBSZWd0ZXN0ZWQgb24gYWFyY2g2NC1ub25lLWxpbnV4 LWdudSBhbmQgbm8gaXNzdWVzLg0KPiANCj4gT2sgZm9yIG1hc3Rlcj8NCj4gDQo+IFRoYW5rcywN Cj4gVGFtYXINCj4gDQo+IGdjYy9DaGFuZ2VMb2c6DQo+IA0KPiAJKiBjb25maWcvYWFyY2g2NC9h YXJjaDY0LXNpbWQubWQNCj4gKEBhYXJjaDY0X2JpdG1hc2tfdWRpdjxtb2RlPjMpOiBOZXcuDQo+ IAkqIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQuY2MNCj4gKGFhcmNoNjRfdmVjdG9yaXplX2Nhbl9z cGVjaWFsX2Rpdl9ieV9jb25zdGFudCk6IE5ldy4NCj4gDQo+IGdjYy90ZXN0c3VpdGUvQ2hhbmdl TG9nOg0KPiANCj4gCSogZ2NjLnRhcmdldC9hYXJjaDY0L2Rpdi1ieS1iaXRtYXNrLmM6IE5ldyB0 ZXN0Lg0KPiANCj4gLS0tIGlubGluZSBjb3B5IG9mIHBhdGNoIC0tLQ0KPiANCj4gZGlmZiAtLWdp dCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXNpbWQubWQNCj4gYi9nY2MvY29uZmlnL2Fh cmNoNjQvYWFyY2g2NC1zaW1kLm1kDQo+IGluZGV4DQo+IDU4N2E0NWQ3NzcyMWUxYjM5YWNjYmFk N2RiZWNhNGQ3NDFlY2NiMTAuLmY0MTUyMTYwMDg0ZDZiNmYzNGJkNjlmDQo+IDBiYTYzODZjMWFi NTBmNzdlIDEwMDY0NA0KPiAtLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1zaW1kLm1k DQo+ICsrKyBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXNpbWQubWQNCj4gQEAgLTQ4MzEs NiArNDgzMSw2NSBAQCAoZGVmaW5lX2V4cGFuZA0KPiAiYWFyY2g2NF88c3VyPjxhZGRzdWI+aG4y PG1vZGU+Ig0KPiAgICB9DQo+ICApDQoNClNvbWUgZWRpdG9yaWFsIGNvbW1lbnRzLg0KDQo+IA0K PiArOzsgZGl2IG9wdGltaXphdGlvbnMgdXNpbmcgbmFycm93aW5ncw0KPiArOzsgd2UgY2FuIGRv IHRoZSBkaXZpc2lvbiBlLmcuIHNob3J0cyBieSAyNTUgZmFzdGVyIGJ5IGNhbGN1bGF0aW5nIGl0 IGFzDQo+ICs7OyAoeCArICgoeCArIDI1NykgPj4gOCkpID4+IDggYXNzdW1pbmcgdGhlIG9wZXJh dGlvbiBpcyBkb25lIGluDQo+ICs7OyBkb3VibGUgdGhlIHByZWNpc2lvbiBvZiB4Lg0KPiArOzsN Cj4gKzs7IElmIHdlIGltYWdpbmUgYSBzaG9ydCBhcyBiZWluZyBjb21wb3NlZCBvZiB0d28gYmxv Y2tzIG9mIGJ5dGVzIHRoZW4NCj4gKzs7IGFkZGluZyAyNTcgb3IgMGIwMDAwXzAwMDFfMDAwMF8w MDAxIHRvIHRoZSBudW1iZXIgaXMgZXF1aXZhbGVuIHRvDQoNClR5cG8gImVxdWl2YWxlbnQiDQoN Cj4gKzs7IGFkZGluZyAxIHRvIGVhY2ggc3ViIGNvbXBvbmVudDoNCj4gKzs7DQo+ICs7OyAgICAg IHNob3J0IHZhbHVlIG9mIDE2LWJpdHMNCj4gKzs7IOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUkA0KPiArOzsg4pSCICAgICAgICAgICAgICDilIIgICAgICAgICAgICAg ICAg4pSCDQo+ICs7OyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgN Cj4gKzs7ICAgOC1iaXQgcGFydDEg4payICA4LWJpdCBwYXJ0MiAgIOKWsg0KPiArOzsgICAgICAg ICAgICAgICDilIIgICAgICAgICAgICAgICAg4pSCDQo+ICs7OyAgICAgICAgICAgICAgIOKUgiAg ICAgICAgICAgICAgICDilIINCj4gKzs7ICAgICAgICAgICAgICArMSAgICAgICAgICAgICAgICsx DQo+ICs7Ow0KPiArOzsgYWZ0ZXIgdGhlIGZpcnN0IGFkZGl0aW9uLCB3ZSBoYXZlIHRvIHNoaWZ0 IHJpZ2h0IGJ5IDgsIGFuZCBuYXJyb3cgdGhlDQo+ICs7OyByZXN1bHRzIGJhY2sgdG8gYSBieXRl LiAgUmVtZW1iZXIgdGhhdCB0aGUgYWRkaXRpb24gbXVzdCBiZSBkb25lIGluDQo+ICs7OyBkb3Vi bGUgdGhlIHByZWNpc2lvbiBvZiB0aGUgaW5wdXQuICBTaW5jZSA4IGlzIGhhbGYgdGhlIHNpemUg b2YgYSBzaG9ydA0KPiArOzsgd2UgY2FuIHVzZSBhIG5hcnJvd2luZyBoYWxmaW5nIGluc3RydWN0 aW9uIGluIEFBcmNoNjQsIGFkZGhuIHdoaWNoIGFsc28NCj4gKzs7IGRvZXMgdGhlIGFkZGl0aW9u IGluIGEgd2lkZXIgcHJlY2lzaW9uIGFuZCBuYXJyb3dzIGJhY2sgdG8gYSBieXRlLiAgVGhlDQo+ ICs7OyBzaGlmdCBpdHNlbGYgaXMgaW1wbGljaXQgaW4gdGhlIG9wZXJhdGlvbiBhcyBpdCB3cml0 ZXMgYmFjayBvbmx5IHRoZSB0b3ANCj4gKzs7IGhhbGYgb2YgdGhlIHJlc3VsdC4gaS5lLiBiaXRz IDIqZXNpemUtMTplc2l6ZS4NCj4gKzs7DQo+ICs7OyBTaW5jZSB3ZSBoYXZlIG5hcnJvd2VkIHRo ZSByZXN1bHQgb2YgdGhlIGZpcnN0IHBhcnQgYmFjayB0byBhIGJ5dGUsIGZvcg0KPiArOzsgdGhl IHNlY29uZCBhZGRpdGlvbiB3ZSBjYW4gdXNlIGEgd2lkZW5pbmcgYWRkaXRpb24sIHVhZGR3Lg0K PiArOzsNCj4gKzs7IEZvciB0aGUgZmluYWx5IHNoaWZ0LCBzaW5jZSBpdCdzIHVuc2lnbmVkIGFy aXRobWF0aWMgd2UgZW1pdCBhbiB1c2hyIGJ5IDgNCg0KImZpbmFsIHNoaWZ0IiwgInVuc2lnbmVk IGFyaXRobWV0aWMiDQoNCj4gKzs7IHRvIHNoaWZ0IGFuZCB0aGUgdmVjdG9yaXplci4NCg0KSW5j b21wbGV0ZSBzZW50ZW5jZT8NCg0KPiArOzsNCj4gKzs7IFRoZSBzaGlmdCBpcyBsYXRlciBvcHRp bWl6ZWQgYnkgY29tYmluZSB0byBhIHV6cDIgd2l0aCBtb3ZpICMwLg0KPiArKGRlZmluZV9leHBh bmQgIkBhYXJjaDY0X2JpdG1hc2tfdWRpdjxtb2RlPjMiDQo+ICsgIFsobWF0Y2hfb3BlcmFuZDpW UU4gMCAicmVnaXN0ZXJfb3BlcmFuZCIpDQo+ICsgICAobWF0Y2hfb3BlcmFuZDpWUU4gMSAicmVn aXN0ZXJfb3BlcmFuZCIpDQo+ICsgICAobWF0Y2hfb3BlcmFuZDpWUU4gMiAiaW1tZWRpYXRlX29w ZXJhbmQiKV0NCj4gKyAgIlRBUkdFVF9TSU1EIg0KPiArew0KPiArICB1bnNpZ25lZCBIT1NUX1dJ REVfSU5UIHNpemUNCj4gKyAgICA9ICgxVUxMIDw8IEdFVF9NT0RFX1VOSVRfQklUU0laRSAoPFZO QVJST1dRPm1vZGUpKSAtIDE7DQo+ICsgIGlmICghQ09OU1RfVkVDVE9SX1AgKG9wZXJhbmRzWzJd KQ0KPiArICAgICAgfHwgY29uc3RfdmVjdG9yX2VuY29kZWRfbmVsdHMgKG9wZXJhbmRzWzJdKSAh PSAxDQo+ICsgICAgICB8fCBzaXplICE9IFVJTlRWQUwgKENPTlNUX1ZFQ1RPUl9FTFQgKG9wZXJh bmRzWzJdLCAwKSkpDQo+ICsgICAgRkFJTDsNCj4gKw0KPiArICBydHggYWRkZW5kID0gZ2VuX3Jl Z19ydHggKDxNT0RFPm1vZGUpOw0KPiArICBydHggdmFsID0gYWFyY2g2NF9zaW1kX2dlbl9jb25z dF92ZWN0b3JfZHVwICg8Vk5BUlJPV1EyPm1vZGUsIDEpOw0KPiArICBlbWl0X21vdmVfaW5zbiAo YWRkZW5kLCBsb3dwYXJ0X3N1YnJlZyAoPE1PREU+bW9kZSwgdmFsLA0KPiA8Vk5BUlJPV1EyPm1v ZGUpKTsNCj4gKyAgcnR4IHRtcDEgPSBnZW5fcmVnX3J0eCAoPFZOQVJST1dRPm1vZGUpOw0KPiAr ICBydHggdG1wMiA9IGdlbl9yZWdfcnR4ICg8TU9ERT5tb2RlKTsNCj4gKyAgZW1pdF9pbnNuIChn ZW5fYWFyY2g2NF9hZGRobjxtb2RlPiAodG1wMSwgb3BlcmFuZHNbMV0sIGFkZGVuZCkpOw0KPiAr ICB1bnNpZ25lZCBiaXRzaXplID0gR0VUX01PREVfVU5JVF9CSVRTSVpFICg8Vk5BUlJPV1E+bW9k ZSk7DQo+ICsgIHJ0eCBzaGlmdF92ZWN0b3IgPSBhYXJjaDY0X3NpbWRfZ2VuX2NvbnN0X3ZlY3Rv cl9kdXAgKDxNT0RFPm1vZGUsDQo+IGJpdHNpemUpOw0KPiArICBlbWl0X2luc24gKGdlbl9hYXJj aDY0X3VhZGR3PFZuYXJyb3dxPiAodG1wMiwgb3BlcmFuZHNbMV0sIHRtcDEpKTsNCj4gKyAgZW1p dF9pbnNuIChnZW5fYWFyY2g2NF9zaW1kX2xzaHI8bW9kZT4gKG9wZXJhbmRzWzBdLCB0bXAyLA0K PiBzaGlmdF92ZWN0b3IpKTsNCj4gKyAgRE9ORTsNCj4gK30pDQoNCkRvZXMgYWxsIHRoaXMgd29y ayBmb3IgYmlnLWVuZGlhbiB0b28/IEkgdGhpbmsgaXQgZG9lcywgYnV0IHdvbmRlciB3aGV0aGVy IHlvdSd2ZSB0ZXN0ZWQuDQoNCk9rIGlmIHNvLCB3aXRoIHRoZSBjb21tZW50cyBhZGRyZXNzZWQu DQpUaGFua3MsDQpLeXJpbGwNCg0KPiArDQo+ICA7OyBwbXVsLg0KPiANCj4gIChkZWZpbmVfaW5z biAiYWFyY2g2NF9wbXVsPG1vZGU+Ig0KPiBkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0 L2FhcmNoNjQuY2MgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jYw0KPiBpbmRleA0KPiA0 YjQ4NmFlZWE5MGVhMmFmYjljZGQ5NmE0ZGJlMTVjNWJiMmFiZDdhLi5kM2MzNjUwZDdkNzI4ZjU2 YWRiNjUxDQo+IDU0MTI3ZGM3YjcyMzg2YzVhNyAxMDA2NDQNCj4gLS0tIGEvZ2NjL2NvbmZpZy9h YXJjaDY0L2FhcmNoNjQuY2MNCj4gKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuY2MN Cj4gQEAgLTI0MTQ2LDYgKzI0MTQ2LDQwIEBAIGFhcmNoNjRfdmVjdG9yaXplX3ZlY19wZXJtX2Nv bnN0DQo+IChtYWNoaW5lX21vZGUgdm1vZGUsIG1hY2hpbmVfbW9kZSBvcF9tb2RlLA0KPiAgICBy ZXR1cm4gcmV0Ow0KPiAgfQ0KPiANCj4gKy8qIEltcGxlbWVudCBUQVJHRVRfVkVDVE9SSVpFX0NB Tl9TUEVDSUFMX0RJVl9CWV9DT05TVC4gICovDQo+ICsNCj4gK2Jvb2wNCj4gK2FhcmNoNjRfdmVj dG9yaXplX2Nhbl9zcGVjaWFsX2Rpdl9ieV9jb25zdGFudCAoZW51bSB0cmVlX2NvZGUgY29kZSwN Cj4gKwkJCQkJICAgICAgIHRyZWUgdmVjdHlwZSwgd2lkZV9pbnQgY3N0LA0KPiArCQkJCQkgICAg ICAgcnR4ICpvdXRwdXQsIHJ0eCBpbjAsIHJ0eCBpbjEpDQo+ICt7DQo+ICsgIGlmIChjb2RlICE9 IFRSVU5DX0RJVl9FWFBSDQo+ICsgICAgICB8fCAhVFlQRV9VTlNJR05FRCAodmVjdHlwZSkpDQo+ ICsgICAgcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsgIHVuc2lnbmVkIGludCBmbGFncyA9IGFhcmNo NjRfY2xhc3NpZnlfdmVjdG9yX21vZGUgKFRZUEVfTU9ERQ0KPiAodmVjdHlwZSkpOw0KPiArICBp ZiAoKGZsYWdzICYgVkVDX0FOWV9TVkUpICYmICFUQVJHRVRfU1ZFMikNCj4gKyAgICByZXR1cm4g ZmFsc2U7DQo+ICsNCj4gKyAgaWYgKGluMCA9PSBOVUxMX1JUWCAmJiBpbjEgPT0gTlVMTF9SVFgp DQo+ICsgICAgew0KPiArICAgICAgd2lkZV9pbnQgdmFsID0gd2k6OmFkZCAoY3N0LCAxKTsNCj4g KyAgICAgIGludCBwb3cgPSB3aTo6ZXhhY3RfbG9nMiAodmFsKTsNCj4gKyAgICAgIHJldHVybiBw b3cgPT0gKGludCkoZWxlbWVudF9wcmVjaXNpb24gKHZlY3R5cGUpIC8gMik7DQo+ICsgICAgfQ0K PiArDQo+ICsgIGlmICghVkVDVE9SX1RZUEVfUCAodmVjdHlwZSkpDQo+ICsgICByZXR1cm4gZmFs c2U7DQo+ICsNCj4gKyAgZ2NjX2Fzc2VydCAob3V0cHV0KTsNCj4gKw0KPiArICBpZiAoISpvdXRw dXQpDQo+ICsgICAgKm91dHB1dCA9IGdlbl9yZWdfcnR4IChUWVBFX01PREUgKHZlY3R5cGUpKTsN Cj4gKw0KPiArICBlbWl0X2luc24gKGdlbl9hYXJjaDY0X2JpdG1hc2tfdWRpdjMgKFRZUEVfTU9E RSAodmVjdHlwZSksICpvdXRwdXQsDQo+IGluMCwgaW4xKSk7DQo+ICsgIHJldHVybiB0cnVlOw0K PiArfQ0KPiArDQo+ICAvKiBHZW5lcmF0ZSBhIGJ5dGUgcGVybXV0ZSBtYXNrIGZvciBhIHJlZ2lz dGVyIG9mIG1vZGUgTU9ERSwNCj4gICAgIHdoaWNoIGhhcyBOVU5JVFMgdW5pdHMuICAqLw0KPiAN Cj4gQEAgLTI3NjA2LDYgKzI3NjQwLDEwIEBAIGFhcmNoNjRfbGliZ2NjX2Zsb2F0aW5nX21vZGVf c3VwcG9ydGVkX3ANCj4gICN1bmRlZiBUQVJHRVRfVkVDVE9SX0FMSUdOTUVOVA0KPiAgI2RlZmlu ZSBUQVJHRVRfVkVDVE9SX0FMSUdOTUVOVCBhYXJjaDY0X3NpbWRfdmVjdG9yX2FsaWdubWVudA0K PiANCj4gKyN1bmRlZiBUQVJHRVRfVkVDVE9SSVpFX0NBTl9TUEVDSUFMX0RJVl9CWV9DT05TVA0K PiArI2RlZmluZSBUQVJHRVRfVkVDVE9SSVpFX0NBTl9TUEVDSUFMX0RJVl9CWV9DT05TVCBcDQo+ ICsgIGFhcmNoNjRfdmVjdG9yaXplX2Nhbl9zcGVjaWFsX2Rpdl9ieV9jb25zdGFudA0KPiArDQo+ ICAjdW5kZWYgVEFSR0VUX1ZFQ1RPUklaRV9QUkVGRVJSRURfVkVDVE9SX0FMSUdOTUVOVA0KPiAg I2RlZmluZSBUQVJHRVRfVkVDVE9SSVpFX1BSRUZFUlJFRF9WRUNUT1JfQUxJR05NRU5UIFwNCj4g ICAgYWFyY2g2NF92ZWN0b3JpemVfcHJlZmVycmVkX3ZlY3Rvcl9hbGlnbm1lbnQNCj4gZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2Rpdi1ieS1iaXRtYXNrLmMN Cj4gYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9kaXYtYnktYml0bWFzay5jDQo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLjJhNTM1NzkxYmE3MjU4MzAyZTBjMmNmDQo+IDQ0YWIyMTFjZDI0 NmQ4MmQ1DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2FhcmNoNjQvZGl2LWJ5LWJpdG1hc2suYw0KPiBAQCAtMCwwICsxLDYxIEBADQo+ICsvKiB7IGRn LWRvIGNvbXBpbGUgfSAqLw0KPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PMyAtc3Rk PWM5OSIgfSAqLw0KPiArLyogeyBkZy1maW5hbCB7IGNoZWNrLWZ1bmN0aW9uLWJvZGllcyAiKioi ICIiICIiIHsgdGFyZ2V0IHsgbGUgfSB9IH0gfSAqLw0KPiArDQo+ICsjaW5jbHVkZSA8c3RkaW50 Lmg+DQo+ICsNCj4gKyNwcmFnbWEgR0NDIHRhcmdldCAiK25vc3ZlIg0KPiArDQo+ICsvKg0KPiAr KiogZHJhd19iaXRtYXAxOg0KPiArKiogLi4uDQo+ICsqKiAJYWRkaG4JdlswLTldKy44Yiwgdlsw LTldKy44aCwgdlswLTldKy44aA0KPiArKiogCWFkZGhuCXZbMC05XSsuOGIsIHZbMC05XSsuOGgs IHZbMC05XSsuOGgNCj4gKyoqIAl1YWRkdwl2WzAtOV0rLjhoLCB2WzAtOV0rLjhoLCB2WzAtOV0r LjhiDQo+ICsqKiAJdWFkZHcJdlswLTldKy44aCwgdlswLTldKy44aCwgdlswLTldKy44Yg0KPiAr KiogCXV6cDIJdlswLTldKy4xNmIsIHZbMC05XSsuMTZiLCB2WzAtOV0rLjE2Yg0KPiArKiogLi4u DQo+ICsqLw0KPiArdm9pZCBkcmF3X2JpdG1hcDEodWludDhfdCogcmVzdHJpY3QgcGl4ZWwsIHVp bnQ4X3QgbGV2ZWwsIGludCBuKQ0KPiArew0KPiArICBmb3IgKGludCBpID0gMDsgaSA8IChuICYg LTE2KTsgaSs9MSkNCj4gKyAgICBwaXhlbFtpXSA9IChwaXhlbFtpXSAqIGxldmVsKSAvIDB4ZmY7 DQo+ICt9DQo+ICsNCj4gK3ZvaWQgZHJhd19iaXRtYXAyKHVpbnQ4X3QqIHJlc3RyaWN0IHBpeGVs LCB1aW50OF90IGxldmVsLCBpbnQgbikNCj4gK3sNCj4gKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAo biAmIC0xNik7IGkrPTEpDQo+ICsgICAgcGl4ZWxbaV0gPSAocGl4ZWxbaV0gKiBsZXZlbCkgLyAw eGZlOw0KPiArfQ0KPiArDQo+ICsvKg0KPiArKiogZHJhd19iaXRtYXAzOg0KPiArKiogLi4uDQo+ ICsqKiAJYWRkaG4JdlswLTldKy40aCwgdlswLTldKy40cywgdlswLTldKy40cw0KPiArKiogCWFk ZGhuCXZbMC05XSsuNGgsIHZbMC05XSsuNHMsIHZbMC05XSsuNHMNCj4gKyoqIAl1YWRkdwl2WzAt OV0rLjRzLCB2WzAtOV0rLjRzLCB2WzAtOV0rLjRoDQo+ICsqKiAJdWFkZHcJdlswLTldKy40cywg dlswLTldKy40cywgdlswLTldKy40aA0KPiArKiogCXV6cDIJdlswLTldKy44aCwgdlswLTldKy44 aCwgdlswLTldKy44aA0KPiArKiogLi4uDQo+ICsqLw0KPiArdm9pZCBkcmF3X2JpdG1hcDModWlu dDE2X3QqIHJlc3RyaWN0IHBpeGVsLCB1aW50MTZfdCBsZXZlbCwgaW50IG4pDQo+ICt7DQo+ICsg IGZvciAoaW50IGkgPSAwOyBpIDwgKG4gJiAtMTYpOyBpKz0xKQ0KPiArICAgIHBpeGVsW2ldID0g KHBpeGVsW2ldICogbGV2ZWwpIC8gMHhmZmZmVTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyoqIGRy YXdfYml0bWFwNDoNCj4gKyoqIC4uLg0KPiArKiogCWFkZGhuCXZbMC05XSsuMnMsIHZbMC05XSsu MmQsIHZbMC05XSsuMmQNCj4gKyoqIAlhZGRobgl2WzAtOV0rLjJzLCB2WzAtOV0rLjJkLCB2WzAt OV0rLjJkDQo+ICsqKiAJdWFkZHcJdlswLTldKy4yZCwgdlswLTldKy4yZCwgdlswLTldKy4ycw0K PiArKiogCXVhZGR3CXZbMC05XSsuMmQsIHZbMC05XSsuMmQsIHZbMC05XSsuMnMNCj4gKyoqIAl1 enAyCXZbMC05XSsuNHMsIHZbMC05XSsuNHMsIHZbMC05XSsuNHMNCj4gKyoqIC4uLg0KPiArKi8N Cj4gK3ZvaWQgZHJhd19iaXRtYXA0KHVpbnQzMl90KiByZXN0cmljdCBwaXhlbCwgdWludDMyX3Qg bGV2ZWwsIGludCBuKQ0KPiArew0KPiArICBmb3IgKGludCBpID0gMDsgaSA8IChuICYgLTE2KTsg aSs9MSkNCj4gKyAgICBwaXhlbFtpXSA9IChwaXhlbFtpXSAqICh1aW50NjRfdClsZXZlbCkgLyAw eGZmZmZmZmZmVUw7DQo+ICt9DQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ ID4gRnJvbTogVGFtYXIgQ2hyaXN0aW5hIDx0YW1hci5jaHJpc3RpbmFAYXJtLmNvbT4NCj4gPiBT ZW50OiBGcmlkYXksIFNlcHRlbWJlciAyMywgMjAyMiAxMDozNCBBTQ0KPiA+IFRvOiBnY2MtcGF0 Y2hlc0BnY2MuZ251Lm9yZw0KPiA+IENjOiBuZCA8bmRAYXJtLmNvbT47IFJpY2hhcmQgRWFybnNo YXcgPFJpY2hhcmQuRWFybnNoYXdAYXJtLmNvbT47DQo+ID4gTWFyY3VzIFNoYXdjcm9mdCA8TWFy Y3VzLlNoYXdjcm9mdEBhcm0uY29tPjsgS3lyeWxvIFRrYWNob3YNCj4gPiA8S3lyeWxvLlRrYWNo b3ZAYXJtLmNvbT47IFJpY2hhcmQgU2FuZGlmb3JkDQo+ID4gPFJpY2hhcmQuU2FuZGlmb3JkQGFy bS5jb20+DQo+ID4gU3ViamVjdDogW1BBVENIIDIvNF1BQXJjaDY0IEFkZCBpbXBsZW1lbnRhdGlv biBmb3IgcG93MiBiaXRtYXNrDQo+IGRpdmlzaW9uLg0KPiA+DQo+ID4gSGkgQWxsLA0KPiA+DQo+ ID4gVGhpcyBhZGRzIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGUgbmV3IG9wdGFiIGZvciB1bnNp Z25lZCBwb3cyIGJpdG1hc2sNCj4gPiBmb3IgQUFyY2g2NC4NCj4gPg0KPiA+IFRoZSBpbXBsZW1l bnRhdGlvbiByZXdyaXRlczoNCj4gPg0KPiA+ICAgIHggPSB5IC8gKDIgXiAoc2l6ZW9mICh5KS8y KS0xDQo+ID4NCj4gPiBpbnRvIGUuZy4gKGZvciBieXRlcykNCj4gPg0KPiA+ICAgICh4ICsgKCh4 ICsgMjU3KSA+PiA4KSkgPj4gOA0KPiA+DQo+ID4gd2hlcmUgaXQncyByZXF1aXJlZCB0aGF0IHRo ZSBhZGRpdGlvbnMgYmUgZG9uZSBpbiBkb3VibGUgdGhlIHByZWNpc2lvbiBvZiB4DQo+ID4gc3Vj aCB0aGF0IHdlIGRvbid0IGxvc2UgYW55IGJpdHMgZHVyaW5nIGFuIG92ZXJmbG93Lg0KPiA+DQo+ ID4gRXNzZW50aWFsbHkgdGhlIHNlcXVlbmNlIGRlY29tcG9zZXMgdGhlIGRpdmlzaW9uIGludG8g ZG9pbmcgdHdvIHNtYWxsZXINCj4gPiBkaXZpc2lvbnMsIG9uZSBmb3IgdGhlIHRvcCBhbmQgYm90 dG9tIHBhcnRzIG9mIHRoZSBudW1iZXIgYW5kIGFkZGluZyB0aGUNCj4gPiByZXN1bHRzIGJhY2sg dG9nZXRoZXIuDQo+ID4NCj4gPiBUbyBhY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0IHNoaWZ0IGJ5 IDggd291bGQgYmUgZGl2aXNpb24gYnkgMjU2IHdlIGFkZCAxIHRvDQo+ID4gYm90aCBwYXJ0cyBv ZiB4IHN1Y2ggdGhhdCB3aGVuIDI1NSB3ZSBzdGlsbCBnZXQgMSBhcyB0aGUgYW5zd2VyLg0KPiA+ DQo+ID4gQmVjYXVzZSB0aGUgYW1vdW50IHdlIHNoaWZ0IGFyZSBoYWxmIHRoZSBvcmlnaW5hbCBk YXRhdHlwZSB3ZSBjYW4gdXNlIHRoZQ0KPiA+IGhhbGZpbmcgaW5zdHJ1Y3Rpb25zIHRoZSBJU0Eg cHJvdmlkZXMgdG8gZG8gdGhlIG9wZXJhdGlvbiBpbnN0ZWFkIG9mIHVzaW5nDQo+ID4gYWN0dWFs IHNoaWZ0cy4NCj4gPg0KPiA+IEZvciBBQXJjaDY0IHRoaXMgbWVhbnMgd2UgZ2VuZXJhdGUgZm9y Og0KPiA+DQo+ID4gdm9pZCBkcmF3X2JpdG1hcDEodWludDhfdCogcmVzdHJpY3QgcGl4ZWwsIHVp bnQ4X3QgbGV2ZWwsIGludCBuKSB7DQo+ID4gICBmb3IgKGludCBpID0gMDsgaSA8IChuICYgLTE2 KTsgaSs9MSkNCj4gPiAgICAgcGl4ZWxbaV0gPSAocGl4ZWxbaV0gKiBsZXZlbCkgLyAweGZmOyB9 DQo+ID4NCj4gPiB0aGUgZm9sbG93aW5nOg0KPiA+DQo+ID4gCW1vdmkgICAgdjMuMTZiLCAweDEN Cj4gPiAJdW11bGwyICB2MS44aCwgdjAuMTZiLCB2Mi4xNmINCj4gPiAJdW11bGwgICB2MC44aCwg djAuOGIsIHYyLjhiDQo+ID4gCWFkZGhuICAgdjUuOGIsIHYxLjhoLCB2My44aA0KPiA+IAlhZGRo biAgIHY0LjhiLCB2MC44aCwgdjMuOGgNCj4gPiAJdWFkZHcgICB2MS44aCwgdjEuOGgsIHY1Ljhi DQo+ID4gCXVhZGR3ICAgdjAuOGgsIHYwLjhoLCB2NC44Yg0KPiA+IAl1enAyICAgIHYwLjE2Yiwg djAuMTZiLCB2MS4xNmINCj4gPg0KPiA+IGluc3RlYWQgb2Y6DQo+ID4NCj4gPiAJdW11bGwgICB2 Mi44aCwgdjEuOGIsIHY1LjhiDQo+ID4gCXVtdWxsMiAgdjEuOGgsIHYxLjE2YiwgdjUuMTZiDQo+ ID4gCXVtdWxsICAgdjAuNHMsIHYyLjRoLCB2My40aA0KPiA+IAl1bXVsbDIgIHYyLjRzLCB2Mi44 aCwgdjMuOGgNCj4gPiAJdW11bGwgICB2NC40cywgdjEuNGgsIHYzLjRoDQo+ID4gCXVtdWxsMiAg djEuNHMsIHYxLjhoLCB2My44aA0KPiA+IAl1enAyICAgIHYwLjhoLCB2MC44aCwgdjIuOGgNCj4g PiAJdXpwMiAgICB2MS44aCwgdjQuOGgsIHYxLjhoDQo+ID4gCXNocm4gICAgdjAuOGIsIHYwLjho LCA3DQo+ID4gCXNocm4yICAgdjAuMTZiLCB2MS44aCwgNw0KPiA+DQo+ID4gV2hpY2ggcmVzdWx0 cyBpbiBzaWduaWZpY2FudGx5IGZhc3RlciBjb2RlLg0KPiA+DQo+ID4gVGhhbmtzIGZvciBXaWxj byBmb3IgdGhlIGNvbmNlcHQuDQo+ID4NCj4gPiBCb290c3RyYXBwZWQgUmVndGVzdGVkIG9uIGFh cmNoNjQtbm9uZS1saW51eC1nbnUgYW5kIG5vIGlzc3Vlcy4NCj4gPg0KPiA+IE9rIGZvciBtYXN0 ZXI/DQo+ID4NCj4gPiBUaGFua3MsDQo+ID4gVGFtYXINCj4gPg0KPiA+IGdjYy9DaGFuZ2VMb2c6 DQo+ID4NCj4gPiAJKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LXNpbWQubWQNCj4gPiAoQGFhcmNo NjRfYml0bWFza191ZGl2PG1vZGU+Myk6IE5ldy4NCj4gPiAJKiBjb25maWcvYWFyY2g2NC9hYXJj aDY0LmNjDQo+ID4gKGFhcmNoNjRfdmVjdG9yaXplX2Nhbl9zcGVjaWFsX2Rpdl9ieV9jb25zdGFu dCk6IE5ldy4NCj4gPg0KPiA+IGdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOg0KPiA+DQo+ID4gCSog Z2NjLnRhcmdldC9hYXJjaDY0L2Rpdi1ieS1iaXRtYXNrLmM6IE5ldyB0ZXN0Lg0KPiA+DQo+ID4g LS0tIGlubGluZSBjb3B5IG9mIHBhdGNoIC0tDQo+ID4gZGlmZiAtLWdpdCBhL2djYy9jb25maWcv YWFyY2g2NC9hYXJjaDY0LXNpbWQubWQNCj4gPiBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0 LXNpbWQubWQNCj4gPiBpbmRleA0KPiA+DQo+IDU4N2E0NWQ3NzcyMWUxYjM5YWNjYmFkN2RiZWNh NGQ3NDFlY2NiMTAuLmY0MTUyMTYwMDg0ZDZiNmYzNGJkNjlmDQo+IDBiDQo+ID4gYTYzODZjMWFi NTBmNzdlIDEwMDY0NA0KPiA+IC0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXNpbWQu bWQNCj4gPiArKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1zaW1kLm1kDQo+ID4gQEAg LTQ4MzEsNiArNDgzMSw2NSBAQCAoZGVmaW5lX2V4cGFuZA0KPiA+ICJhYXJjaDY0XzxzdXI+PGFk ZHN1Yj5objI8bW9kZT4iDQo+ID4gICAgfQ0KPiA+ICApDQo+ID4NCj4gPiArOzsgZGl2IG9wdGlt aXphdGlvbnMgdXNpbmcgbmFycm93aW5ncw0KPiA+ICs7OyB3ZSBjYW4gZG8gdGhlIGRpdmlzaW9u IGUuZy4gc2hvcnRzIGJ5IDI1NSBmYXN0ZXIgYnkgY2FsY3VsYXRpbmcgaXQNCj4gPiArYXMgOzsg KHggKyAoKHggKyAyNTcpID4+IDgpKSA+PiA4IGFzc3VtaW5nIHRoZSBvcGVyYXRpb24gaXMgZG9u ZSBpbiA7Ow0KPiA+ICtkb3VibGUgdGhlIHByZWNpc2lvbiBvZiB4Lg0KPiA+ICs7Ow0KPiA+ICs7 OyBJZiB3ZSBpbWFnaW5lIGEgc2hvcnQgYXMgYmVpbmcgY29tcG9zZWQgb2YgdHdvIGJsb2NrcyBv ZiBieXRlcyB0aGVuDQo+ID4gKzs7IGFkZGluZyAyNTcgb3IgMGIwMDAwXzAwMDFfMDAwMF8wMDAx IHRvIHRoZSBudW1iZXIgaXMgZXF1aXZhbGVuIHRvIDs7DQo+ID4gK2FkZGluZyAxIHRvIGVhY2gg c3ViIGNvbXBvbmVudDoNCj4gPiArOzsNCj4gPiArOzsgICAgICBzaG9ydCB2YWx1ZSBvZiAxNi1i aXRzDQo+ID4gKzs7IOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkA0K PiA+ICs7OyDilIIgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICDilIINCj4gPiArOzsg 4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYDQo+ID4gKzs7ICAgOC1i aXQgcGFydDEg4payICA4LWJpdCBwYXJ0MiAgIOKWsg0KPiA+ICs7OyAgICAgICAgICAgICAgIOKU giAgICAgICAgICAgICAgICDilIINCj4gPiArOzsgICAgICAgICAgICAgICDilIIgICAgICAgICAg ICAgICAg4pSCDQo+ID4gKzs7ICAgICAgICAgICAgICArMSAgICAgICAgICAgICAgICsxDQo+ID4g Kzs7DQo+ID4gKzs7IGFmdGVyIHRoZSBmaXJzdCBhZGRpdGlvbiwgd2UgaGF2ZSB0byBzaGlmdCBy aWdodCBieSA4LCBhbmQgbmFycm93DQo+ID4gK3RoZSA7OyByZXN1bHRzIGJhY2sgdG8gYSBieXRl LiAgUmVtZW1iZXIgdGhhdCB0aGUgYWRkaXRpb24gbXVzdCBiZSBkb25lDQo+ID4gK2luIDs7IGRv dWJsZSB0aGUgcHJlY2lzaW9uIG9mIHRoZSBpbnB1dC4gIFNpbmNlIDggaXMgaGFsZiB0aGUgc2l6 ZSBvZiBhDQo+ID4gK3Nob3J0IDs7IHdlIGNhbiB1c2UgYSBuYXJyb3dpbmcgaGFsZmluZyBpbnN0 cnVjdGlvbiBpbiBBQXJjaDY0LCBhZGRobg0KPiA+ICt3aGljaCBhbHNvIDs7IGRvZXMgdGhlIGFk ZGl0aW9uIGluIGEgd2lkZXIgcHJlY2lzaW9uIGFuZCBuYXJyb3dzIGJhY2sNCj4gPiArdG8gYSBi eXRlLiAgVGhlIDs7IHNoaWZ0IGl0c2VsZiBpcyBpbXBsaWNpdCBpbiB0aGUgb3BlcmF0aW9uIGFz IGl0DQo+ID4gK3dyaXRlcyBiYWNrIG9ubHkgdGhlIHRvcCA7OyBoYWxmIG9mIHRoZSByZXN1bHQu IGkuZS4gYml0cyAyKmVzaXplLTE6ZXNpemUuDQo+ID4gKzs7DQo+ID4gKzs7IFNpbmNlIHdlIGhh dmUgbmFycm93ZWQgdGhlIHJlc3VsdCBvZiB0aGUgZmlyc3QgcGFydCBiYWNrIHRvIGEgYnl0ZSwN Cj4gPiArZm9yIDs7IHRoZSBzZWNvbmQgYWRkaXRpb24gd2UgY2FuIHVzZSBhIHdpZGVuaW5nIGFk ZGl0aW9uLCB1YWRkdy4NCj4gPiArOzsNCj4gPiArOzsgRm9yIHRoZSBmaW5hbHkgc2hpZnQsIHNp bmNlIGl0J3MgdW5zaWduZWQgYXJpdGhtYXRpYyB3ZSBlbWl0IGFuIHVzaHINCj4gPiArYnkgOCA7 OyB0byBzaGlmdCBhbmQgdGhlIHZlY3Rvcml6ZXIuDQo+ID4gKzs7DQo+ID4gKzs7IFRoZSBzaGlm dCBpcyBsYXRlciBvcHRpbWl6ZWQgYnkgY29tYmluZSB0byBhIHV6cDIgd2l0aCBtb3ZpICMwLg0K PiA+ICsoZGVmaW5lX2V4cGFuZCAiQGFhcmNoNjRfYml0bWFza191ZGl2PG1vZGU+MyINCj4gPiAr ICBbKG1hdGNoX29wZXJhbmQ6VlFOIDAgInJlZ2lzdGVyX29wZXJhbmQiKQ0KPiA+ICsgICAobWF0 Y2hfb3BlcmFuZDpWUU4gMSAicmVnaXN0ZXJfb3BlcmFuZCIpDQo+ID4gKyAgIChtYXRjaF9vcGVy YW5kOlZRTiAyICJpbW1lZGlhdGVfb3BlcmFuZCIpXQ0KPiA+ICsgICJUQVJHRVRfU0lNRCINCj4g PiArew0KPiA+ICsgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgc2l6ZQ0KPiA+ICsgICAgPSAoMVVM TCA8PCBHRVRfTU9ERV9VTklUX0JJVFNJWkUgKDxWTkFSUk9XUT5tb2RlKSkgLSAxOw0KPiA+ICsg IGlmICghQ09OU1RfVkVDVE9SX1AgKG9wZXJhbmRzWzJdKQ0KPiA+ICsgICAgICB8fCBjb25zdF92 ZWN0b3JfZW5jb2RlZF9uZWx0cyAob3BlcmFuZHNbMl0pICE9IDENCj4gPiArICAgICAgfHwgc2l6 ZSAhPSBVSU5UVkFMIChDT05TVF9WRUNUT1JfRUxUIChvcGVyYW5kc1syXSwgMCkpKQ0KPiA+ICsg ICAgRkFJTDsNCj4gPiArDQo+ID4gKyAgcnR4IGFkZGVuZCA9IGdlbl9yZWdfcnR4ICg8TU9ERT5t b2RlKTsNCj4gPiArICBydHggdmFsID0gYWFyY2g2NF9zaW1kX2dlbl9jb25zdF92ZWN0b3JfZHVw ICg8Vk5BUlJPV1EyPm1vZGUsDQo+IDEpOw0KPiA+ICsgIGVtaXRfbW92ZV9pbnNuIChhZGRlbmQs IGxvd3BhcnRfc3VicmVnICg8TU9ERT5tb2RlLCB2YWwsDQo+ID4gKzxWTkFSUk9XUTI+bW9kZSkp Ow0KPiA+ICsgIHJ0eCB0bXAxID0gZ2VuX3JlZ19ydHggKDxWTkFSUk9XUT5tb2RlKTsNCj4gPiAr ICBydHggdG1wMiA9IGdlbl9yZWdfcnR4ICg8TU9ERT5tb2RlKTsNCj4gPiArICBlbWl0X2luc24g KGdlbl9hYXJjaDY0X2FkZGhuPG1vZGU+ICh0bXAxLCBvcGVyYW5kc1sxXSwgYWRkZW5kKSk7DQo+ ID4gKyAgdW5zaWduZWQgYml0c2l6ZSA9IEdFVF9NT0RFX1VOSVRfQklUU0laRSAoPFZOQVJST1dR Pm1vZGUpOw0KPiA+ICsgIHJ0eCBzaGlmdF92ZWN0b3IgPSBhYXJjaDY0X3NpbWRfZ2VuX2NvbnN0 X3ZlY3Rvcl9kdXAgKDxNT0RFPm1vZGUsDQo+ID4gK2JpdHNpemUpOw0KPiA+ICsgIGVtaXRfaW5z biAoZ2VuX2FhcmNoNjRfdWFkZHc8Vm5hcnJvd3E+ICh0bXAyLCBvcGVyYW5kc1sxXSwNCj4gdG1w MSkpOw0KPiA+ICsgIGVtaXRfaW5zbiAoZ2VuX2FhcmNoNjRfc2ltZF9sc2hyPG1vZGU+IChvcGVy YW5kc1swXSwgdG1wMiwNCj4gPiArc2hpZnRfdmVjdG9yKSk7DQo+ID4gKyAgRE9ORTsNCj4gPiAr fSkNCj4gPiArDQo+ID4gIDs7IHBtdWwuDQo+ID4NCj4gPiAgKGRlZmluZV9pbnNuICJhYXJjaDY0 X3BtdWw8bW9kZT4iDQo+ID4gZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0 LmNjIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuY2MNCj4gPiBpbmRleA0KPiA+DQo+IDRi NDg2YWVlYTkwZWEyYWZiOWNkZDk2YTRkYmUxNWM1YmIyYWJkN2EuLjkxYmI3ZDMwNmYzNmRjNGM5 ZWVhYWZjDQo+IDMNCj4gPiA3NDg0YjZmYzY5MDFiZmI0IDEwMDY0NA0KPiA+IC0tLSBhL2djYy9j b25maWcvYWFyY2g2NC9hYXJjaDY0LmNjDQo+ID4gKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2Fh cmNoNjQuY2MNCj4gPiBAQCAtMjQxNDYsNiArMjQxNDYsNTEgQEAgYWFyY2g2NF92ZWN0b3JpemVf dmVjX3Blcm1fY29uc3QNCj4gPiAobWFjaGluZV9tb2RlIHZtb2RlLCBtYWNoaW5lX21vZGUgb3Bf bW9kZSwNCj4gPiAgICByZXR1cm4gcmV0Ow0KPiA+ICB9DQo+ID4NCj4gPiArLyogSW1wbGVtZW50 IFRBUkdFVF9WRUNUT1JJWkVfQ0FOX1NQRUNJQUxfRElWX0JZX0NPTlNULiAgKi8NCj4gPiArDQo+ ID4gK2Jvb2wNCj4gPiArYWFyY2g2NF92ZWN0b3JpemVfY2FuX3NwZWNpYWxfZGl2X2J5X2NvbnN0 YW50IChlbnVtIHRyZWVfY29kZSBjb2RlLA0KPiA+ICsJCQkJCSAgICAgICB0cmVlIHZlY3R5cGUs DQo+ID4gKwkJCQkJICAgICAgIHRyZWUgdHJlZW9wMCwgdHJlZSB0cmVlb3AxLA0KPiA+ICsJCQkJ CSAgICAgICBydHggKm91dHB1dCwgcnR4IGluMCwgcnR4IGluMSkgew0KPiA+ICsNCj4gPiArICBp ZiAoKCF0cmVlb3AwIHx8ICF0cmVlb3AxKSAmJiAoaW4wID09IE5VTExfUlRYIHx8IGluMSA9PSBO VUxMX1JUWCkpDQo+ID4gKyAgICByZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsgIHRyZWUgY3N0 ID0gdW5pZm9ybV9pbnRlZ2VyX2NzdF9wICh0cmVlb3AxKTsgIHRyZWUgdHlwZTsgIGlmIChjb2Rl ICE9DQo+ID4gKyBUUlVOQ19ESVZfRVhQUg0KPiA+ICsgICAgICB8fCAhY3N0DQo+ID4gKyAgICAg IHx8ICFUWVBFX1VOU0lHTkVEICgodHlwZSA9IFRSRUVfVFlQRSAoY3N0KSkpDQo+ID4gKyAgICAg IHx8IHRyZWVfaW50X2NzdF9zZ24gKGNzdCkgIT0gMSkNCj4gPiArICAgIHJldHVybiBmYWxzZTsN Cj4gPiArDQo+ID4gKyAgdW5zaWduZWQgaW50IGZsYWdzID0gYWFyY2g2NF9jbGFzc2lmeV92ZWN0 b3JfbW9kZSAoVFlQRV9NT0RFDQo+ID4gKyAodmVjdHlwZSkpOyAgaWYgKChmbGFncyAmIFZFQ19B TllfU1ZFKSAmJiAhVEFSR0VUX1NWRTIpDQo+ID4gKyAgICByZXR1cm4gZmFsc2U7DQo+ID4gKw0K PiA+ICsgIGlmIChpbjAgPT0gTlVMTF9SVFggJiYgaW4xID09IE5VTExfUlRYKQ0KPiA+ICsgICAg ew0KPiA+ICsgICAgICBnY2NfYXNzZXJ0ICh0cmVlb3AwICYmIHRyZWVvcDEpOw0KPiA+ICsgICAg ICB3aWRlX2ludCBpY3N0ID0gd2k6OnRvX3dpZGUgKGNzdCk7DQo+ID4gKyAgICAgIHdpZGVfaW50 IHZhbCA9IHdpOjphZGQgKGljc3QsIDEpOw0KPiA+ICsgICAgICBpbnQgcG93ID0gd2k6OmV4YWN0 X2xvZzIgKHZhbCk7DQo+ID4gKyAgICAgIHJldHVybiBwb3cgPT0gKFRZUEVfUFJFQ0lTSU9OICh0 eXBlKSAvIDIpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICBpZiAoIVZFQ1RPUl9UWVBFX1Ag KHZlY3R5cGUpKQ0KPiA+ICsgICByZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsgIGdjY19hc3Nl cnQgKG91dHB1dCk7DQo+ID4gKw0KPiA+ICsgIGlmICghKm91dHB1dCkNCj4gPiArICAgICpvdXRw dXQgPSBnZW5fcmVnX3J0eCAoVFlQRV9NT0RFICh2ZWN0eXBlKSk7DQo+ID4gKw0KPiA+ICsgIGVt aXRfaW5zbiAoZ2VuX2FhcmNoNjRfYml0bWFza191ZGl2MyAoVFlQRV9NT0RFICh2ZWN0eXBlKSwg Km91dHB1dCwNCj4gPiAraW4wLCBpbjEpKTsNCj4gPiArICByZXR1cm4gdHJ1ZTsNCj4gPiArfQ0K PiA+ICsNCj4gPiAgLyogR2VuZXJhdGUgYSBieXRlIHBlcm11dGUgbWFzayBmb3IgYSByZWdpc3Rl ciBvZiBtb2RlIE1PREUsDQo+ID4gICAgIHdoaWNoIGhhcyBOVU5JVFMgdW5pdHMuICAqLw0KPiA+ DQo+ID4gZGlmZiAtLWdpdCBhL2djYy9kb2MvdG0udGV4aSBiL2djYy9kb2MvdG0udGV4aSBpbmRl eA0KPiA+DQo+IDkyYmRhMWE3ZTE0YTNjOWVhNjNlMTUxZTRhNDlhODE4YmY0ZDFiZGIuLmFkYmE5 ZmU5N2E5YjQzNzI5YzVlODZkDQo+IDINCj4gPiA0NGEyYTIzZTc2Y2FjMDk3IDEwMDY0NA0KPiA+ IC0tLSBhL2djYy9kb2MvdG0udGV4aQ0KPiA+ICsrKyBiL2djYy9kb2MvdG0udGV4aQ0KPiA+IEBA IC02MTEyLDYgKzYxMTIsMjIgQEAgaW5zdHJ1Y3Rpb24gcGF0dGVybi4gIFRoZXJlIGlzIG5vIG5l ZWQgZm9yIHRoZQ0KPiBob29rDQo+ID4gdG8gaGFuZGxlIHRoZXNlIHR3byAgaW1wbGVtZW50YXRp b24gYXBwcm9hY2hlcyBpdHNlbGYuDQo+ID4gIEBlbmQgZGVmdHlwZWZuDQo+ID4NCj4gPiArQGRl ZnR5cGVmbiB7VGFyZ2V0IEhvb2t9IGJvb2wNCj4gPiBUQVJHRVRfVkVDVE9SSVpFX0NBTl9TUEVD SUFMX0RJVl9CWV9DT05TVA0KPiA+ICsoZW51bSBAdmFye3RyZWVfY29kZX0sIHRyZWUgQHZhcnt2 ZWN0eXBlfSwgdHJlZSBAdmFye3RyZWVvcDB9LCB0cmVlDQo+ID4gK0B2YXJ7dHJlZW9wMX0sIHJ0 eCAqQHZhcntvdXRwdXR9LCBydHggQHZhcntpbjB9LCBydHggQHZhcntpbjF9KSBUaGlzDQo+ID4g K2hvb2sgaXMgdXNlZCB0byB0ZXN0IHdoZXRoZXIgdGhlIHRhcmdldCBoYXMgYSBzcGVjaWFsIG1l dGhvZCBvZg0KPiA+ICtkaXZpc2lvbiBvZiB2ZWN0b3JzIG9mIHR5cGUgQHZhcnt2ZWN0eXBlfSB1 c2luZyB0aGUgdHdvIG9wZXJhbmRzDQo+ID4gQGNvZGV7dHJlZW9wMH0sIGFuZCBAY29kZXt0cmVl b3AxfSBhbmQgcHJvZHVjaW5nIGEgdmVjdG9yIG9mIHR5cGUNCj4gPiBAdmFye3ZlY3R5cGV9LiAg VGhlIGRpdmlzaW9uIHdpbGwgdGhlbiBub3QgYmUgZGVjb21wb3NlZCBieSB0aGUgYW5kIGtlcHQN Cj4gYXMNCj4gPiBhIGRpdi4NCj4gPiArDQo+ID4gK1doZW4gdGhlIGhvb2sgaXMgYmVpbmcgdXNl ZCB0byB0ZXN0IHdoZXRoZXIgdGhlIHRhcmdldCBzdXBwb3J0cyBhDQo+ID4gK3NwZWNpYWwgZGl2 aWRlLCBAdmFye2luMH0sIEB2YXJ7aW4xfSwgYW5kIEB2YXJ7b3V0cHV0fSBhcmUgYWxsIG51bGwu DQo+ID4gK1doZW4gdGhlIGhvb2sgaXMgYmVpbmcgdXNlZCB0byBlbWl0IGEgZGl2aXNpb24sIEB2 YXJ7aW4wfSBhbmQgQHZhcntpbjF9DQo+ID4gK2FyZSB0aGUgc291cmNlIHZlY3RvcnMgb2YgdHlw ZSBAdmFye3ZlY3R0eXBlfSBhbmQgQHZhcntvdXRwdXR9IGlzIHRoZQ0KPiA+ICtkZXN0aW5hdGlv biB2ZWN0b3Igb2YgdHlwZSBAdmFye3ZlY3R5cGV9Lg0KPiA+ICsNCj4gPiArUmV0dXJuIHRydWUg aWYgdGhlIG9wZXJhdGlvbiBpcyBwb3NzaWJsZSwgZW1pdHRpbmcgaW5zdHJ1Y3Rpb25zIGZvciBp dA0KPiA+ICtpZiBydHhlcyBhcmUgcHJvdmlkZWQgYW5kIHVwZGF0aW5nIEB2YXJ7b3V0cHV0fS4N Cj4gPiArQGVuZCBkZWZ0eXBlZm4NCj4gPiArDQo+ID4gIEBkZWZ0eXBlZm4ge1RhcmdldCBIb29r fSB0cmVlDQo+ID4gVEFSR0VUX1ZFQ1RPUklaRV9CVUlMVElOX1ZFQ1RPUklaRURfRlVOQ1RJT04g KHVuc2lnbmVkDQo+ID4gQHZhcntjb2RlfSwgdHJlZSBAdmFye3ZlY190eXBlX291dH0sIHRyZWUg QHZhcnt2ZWNfdHlwZV9pbn0pICBUaGlzIGhvb2sNCj4gPiBzaG91bGQgcmV0dXJuIHRoZSBkZWNs IG9mIGEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIHRoZSAgdmVjdG9yaXplZCB2YXJpYW50DQo+ ID4gb2YgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIEBjb2Rle2NvbWJpbmVkX2ZufSBjb2RlIGRpZmYg LS1naXQNCj4gPiBhL2djYy9kb2MvdG0udGV4aS5pbiBiL2djYy9kb2MvdG0udGV4aS5pbiBpbmRl eA0KPiA+DQo+IDExMjQ2MjMxMGIxMzQ3MDVkODYwMTUzMjk0Mjg3Y2ZkN2Q0YWY4MWQuLmQ1YTc0 NWEwMmFjZGYwNTFlYTFkYTFiDQo+IDA0DQo+ID4gMDc2ZDA1OGMyNGNlMDkzIDEwMDY0NA0KPiA+ IC0tLSBhL2djYy9kb2MvdG0udGV4aS5pbg0KPiA+ICsrKyBiL2djYy9kb2MvdG0udGV4aS5pbg0K PiA+IEBAIC00MTY0LDYgKzQxNjQsOCBAQCBhZGRyZXNzOyAgYnV0IG9mdGVuIGEgbWFjaGluZS1k ZXBlbmRlbnQNCj4gc3RyYXRlZ3kNCj4gPiBjYW4gZ2VuZXJhdGUgYmV0dGVyIGNvZGUuDQo+ID4N Cj4gPiAgQGhvb2sgVEFSR0VUX1ZFQ1RPUklaRV9WRUNfUEVSTV9DT05TVA0KPiA+DQo+ID4gK0Bo b29rIFRBUkdFVF9WRUNUT1JJWkVfQ0FOX1NQRUNJQUxfRElWX0JZX0NPTlNUDQo+ID4gKw0KPiA+ ICBAaG9vayBUQVJHRVRfVkVDVE9SSVpFX0JVSUxUSU5fVkVDVE9SSVpFRF9GVU5DVElPTg0KPiA+ DQo+ID4gIEBob29rIFRBUkdFVF9WRUNUT1JJWkVfQlVJTFRJTl9NRF9WRUNUT1JJWkVEX0ZVTkNU SU9ODQo+ID4gZGlmZiAtLWdpdCBhL2djYy9leHBsb3cuY2MgYi9nY2MvZXhwbG93LmNjIGluZGV4 DQo+ID4NCj4gZGRiNGQ2YWUzNjAwNTQyZjhkMmJiNTYxN2NkZDM5MzNhOWZhZTZjMC4uNTY4ZTBl YjFhMTU4YzY5NjQ1OGFlNjcNCj4gOGYNCj4gPiA1ZTM0NmJmMzRiYTAwMzYgMTAwNjQ0DQo+ID4g LS0tIGEvZ2NjL2V4cGxvdy5jYw0KPiA+ICsrKyBiL2djYy9leHBsb3cuY2MNCj4gPiBAQCAtMTAz Nyw3ICsxMDM3LDcgQEAgcm91bmRfcHVzaCAocnR4IHNpemUpDQo+ID4gICAgICAgVFJVTkNfRElW X0VYUFIuICAqLw0KPiA+ICAgIHNpemUgPSBleHBhbmRfYmlub3AgKFBtb2RlLCBhZGRfb3B0YWIs IHNpemUsIGFsaWdubTFfcnR4LA0KPiA+ICAJCSAgICAgICBOVUxMX1JUWCwgMSwgT1BUQUJfTElC X1dJREVOKTsNCj4gPiAtICBzaXplID0gZXhwYW5kX2Rpdm1vZCAoMCwgVFJVTkNfRElWX0VYUFIs IFBtb2RlLCBzaXplLCBhbGlnbl9ydHgsDQo+ID4gKyAgc2l6ZSA9IGV4cGFuZF9kaXZtb2QgKDAs IFRSVU5DX0RJVl9FWFBSLCBQbW9kZSwgTlVMTCwgTlVMTCwgc2l6ZSwNCj4gPiArIGFsaWduX3J0 eCwNCj4gPiAgCQkJTlVMTF9SVFgsIDEpOw0KPiA+ICAgIHNpemUgPSBleHBhbmRfbXVsdCAoUG1v ZGUsIHNpemUsIGFsaWduX3J0eCwgTlVMTF9SVFgsIDEpOw0KPiA+DQo+ID4gQEAgLTEyMDMsNyAr MTIwMyw3IEBAIGFsaWduX2R5bmFtaWNfYWRkcmVzcyAocnR4IHRhcmdldCwgdW5zaWduZWQNCj4g PiByZXF1aXJlZF9hbGlnbikNCj4gPiAgCQkJIGdlbl9pbnRfbW9kZSAocmVxdWlyZWRfYWxpZ24g LyBCSVRTX1BFUl9VTklUIC0gMSwNCj4gPiAgCQkJCSAgICAgICBQbW9kZSksDQo+ID4gIAkJCSBO VUxMX1JUWCwgMSwgT1BUQUJfTElCX1dJREVOKTsNCj4gPiAtICB0YXJnZXQgPSBleHBhbmRfZGl2 bW9kICgwLCBUUlVOQ19ESVZfRVhQUiwgUG1vZGUsIHRhcmdldCwNCj4gPiArICB0YXJnZXQgPSBl eHBhbmRfZGl2bW9kICgwLCBUUlVOQ19ESVZfRVhQUiwgUG1vZGUsIE5VTEwsIE5VTEwsDQo+ID4g dGFyZ2V0LA0KPiA+ICAJCQkgIGdlbl9pbnRfbW9kZSAocmVxdWlyZWRfYWxpZ24gLyBCSVRTX1BF Ul9VTklULA0KPiA+ICAJCQkJCVBtb2RlKSwNCj4gPiAgCQkJICBOVUxMX1JUWCwgMSk7DQo+ID4g ZGlmZiAtLWdpdCBhL2djYy9leHBtZWQuaCBiL2djYy9leHBtZWQuaCBpbmRleA0KPiA+DQo+IDBi MjUzOGM0YzZiZDUxZGZkYzc3MmVmNzBiZGY2MzFjMGJlZDg3MTcuLjBkYjI5ODZmMTFmZjRhNGIx MGI1OTUwMQ0KPiBjNg0KPiA+IGYzM2NiMzU5NTY1OWI1IDEwMDY0NA0KPiA+IC0tLSBhL2djYy9l eHBtZWQuaA0KPiA+ICsrKyBiL2djYy9leHBtZWQuaA0KPiA+IEBAIC03MDgsOCArNzA4LDkgQEAg ZXh0ZXJuIHJ0eCBleHBhbmRfdmFyaWFibGVfc2hpZnQgKGVudW0gdHJlZV9jb2RlLA0KPiA+IG1h Y2hpbmVfbW9kZSwgIGV4dGVybiBydHggZXhwYW5kX3NoaWZ0IChlbnVtIHRyZWVfY29kZSwNCj4g bWFjaGluZV9tb2RlLA0KPiA+IHJ0eCwgcG9seV9pbnQ2NCwgcnR4LA0KPiA+ICAJCQkgaW50KTsN Cj4gPiAgI2lmZGVmIEdDQ19PUFRBQlNfSA0KPiA+IC1leHRlcm4gcnR4IGV4cGFuZF9kaXZtb2Qg KGludCwgZW51bSB0cmVlX2NvZGUsIG1hY2hpbmVfbW9kZSwgcnR4LCBydHgsDQo+ID4gLQkJCSAg cnR4LCBpbnQsIGVudW0gb3B0YWJfbWV0aG9kcyA9DQo+ID4gT1BUQUJfTElCX1dJREVOKTsNCj4g PiArZXh0ZXJuIHJ0eCBleHBhbmRfZGl2bW9kIChpbnQsIGVudW0gdHJlZV9jb2RlLCBtYWNoaW5l X21vZGUsIHRyZWUsDQo+ID4gdHJlZSwNCj4gPiArCQkJICBydHgsIHJ0eCwgcnR4LCBpbnQsDQo+ ID4gKwkJCSAgZW51bSBvcHRhYl9tZXRob2RzID0gT1BUQUJfTElCX1dJREVOKTsNCj4gPiAgI2Vu ZGlmDQo+ID4gICNlbmRpZg0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2djYy9leHBtZWQuY2MgYi9n Y2MvZXhwbWVkLmNjIGluZGV4DQo+ID4NCj4gOGQ3NDE4YmU0MTg0MDZlNzJhODk1ZWNkZGYyZGM3 ZmRiOTUwYzc2Yy4uYjY0ZWE1YWM0NmE5ZGE4NTc3MGE1YmINCj4gMDkNCj4gPiA5MGRiOGI5N2Qz YWY0MTQgMTAwNjQ0DQo+ID4gLS0tIGEvZ2NjL2V4cG1lZC5jYw0KPiA+ICsrKyBiL2djYy9leHBt ZWQuY2MNCj4gPiBAQCAtNDIyMiw4ICs0MjIyLDggQEAgZXhwYW5kX3NkaXZfcG93MiAoc2NhbGFy X2ludF9tb2RlIG1vZGUsIHJ0eA0KPiA+IG9wMCwgSE9TVF9XSURFX0lOVCBkKQ0KPiA+DQo+ID4g IHJ0eA0KPiA+ICBleHBhbmRfZGl2bW9kIChpbnQgcmVtX2ZsYWcsIGVudW0gdHJlZV9jb2RlIGNv ZGUsIG1hY2hpbmVfbW9kZQ0KPiA+IG1vZGUsDQo+ID4gLQkgICAgICAgcnR4IG9wMCwgcnR4IG9w MSwgcnR4IHRhcmdldCwgaW50IHVuc2lnbmVkcCwNCj4gPiAtCSAgICAgICBlbnVtIG9wdGFiX21l dGhvZHMgbWV0aG9kcykNCj4gPiArCSAgICAgICB0cmVlIHRyZWVvcDAsIHRyZWUgdHJlZW9wMSwg cnR4IG9wMCwgcnR4IG9wMSwgcnR4IHRhcmdldCwNCj4gPiArCSAgICAgICBpbnQgdW5zaWduZWRw LCBlbnVtIG9wdGFiX21ldGhvZHMgbWV0aG9kcykNCj4gPiAgew0KPiA+ICAgIG1hY2hpbmVfbW9k ZSBjb21wdXRlX21vZGU7DQo+ID4gICAgcnR4IHRxdW90aWVudDsNCj4gPiBAQCAtNDM3NSw2ICs0 Mzc1LDE0IEBAIGV4cGFuZF9kaXZtb2QgKGludCByZW1fZmxhZywgZW51bSB0cmVlX2NvZGUNCj4g PiBjb2RlLCBtYWNoaW5lX21vZGUgbW9kZSwNCj4gPg0KPiA+ICAgIGxhc3RfZGl2X2NvbnN0ID0g ISByZW1fZmxhZyAmJiBvcDFfaXNfY29uc3RhbnQgPyBJTlRWQUwgKG9wMSkgOiAwOw0KPiA+DQo+ ID4gKyAgLyogQ2hlY2sgaWYgdGhlIHRhcmdldCBoYXMgc3BlY2lmaWMgZXhwYW5zaW9ucyBmb3Ig dGhlIGRpdmlzaW9uLiAgKi8NCj4gPiArICBpZiAodHJlZW9wMA0KPiA+ICsgICAgICAmJiB0YXJn ZXRtLnZlY3Rvcml6ZS5jYW5fc3BlY2lhbF9kaXZfYnlfY29uc3QgKGNvZGUsIFRSRUVfVFlQRQ0K PiA+ICh0cmVlb3AwKSwNCj4gPiArCQkJCQkJICAgICB0cmVlb3AwLCB0cmVlb3AxLA0KPiA+ICsJ CQkJCQkgICAgICZ0YXJnZXQsIG9wMCwgb3AxKSkNCj4gPiArICAgIHJldHVybiB0YXJnZXQ7DQo+ ID4gKw0KPiA+ICsNCj4gPiAgICAvKiBOb3cgY29udmVydCB0byB0aGUgYmVzdCBtb2RlIHRvIHVz ZS4gICovDQo+ID4gICAgaWYgKGNvbXB1dGVfbW9kZSAhPSBtb2RlKQ0KPiA+ICAgICAgew0KPiA+ IEBAIC00NjE4LDggKzQ2MjYsOCBAQCBleHBhbmRfZGl2bW9kIChpbnQgcmVtX2ZsYWcsIGVudW0g dHJlZV9jb2RlDQo+ID4gY29kZSwgbWFjaGluZV9tb2RlIG1vZGUsDQo+ID4gIAkJCSAgICB8fCAo b3B0YWJfaGFuZGxlciAoc2Rpdm1vZF9vcHRhYiwgaW50X21vZGUpDQo+ID4gIAkJCQkhPSBDT0RF X0ZPUl9ub3RoaW5nKSkpDQo+ID4gIAkJICAgICAgcXVvdGllbnQgPSBleHBhbmRfZGl2bW9kICgw LCBUUlVOQ19ESVZfRVhQUiwNCj4gPiAtCQkJCQkJaW50X21vZGUsIG9wMCwNCj4gPiAtCQkJCQkJ Z2VuX2ludF9tb2RlIChhYnNfZCwNCj4gPiArCQkJCQkJaW50X21vZGUsIHRyZWVvcDAsIHRyZWVv cDEsDQo+ID4gKwkJCQkJCW9wMCwgZ2VuX2ludF9tb2RlIChhYnNfZCwNCj4gPiAgCQkJCQkJCSAg ICAgIGludF9tb2RlKSwNCj4gPiAgCQkJCQkJTlVMTF9SVFgsIDApOw0KPiA+ICAJCSAgICBlbHNl DQo+ID4gQEAgLTQ4MDgsOCArNDgxNiw4IEBAIGV4cGFuZF9kaXZtb2QgKGludCByZW1fZmxhZywg ZW51bSB0cmVlX2NvZGUNCj4gPiBjb2RlLCBtYWNoaW5lX21vZGUgbW9kZSwNCj4gPiAgCQkJCSAg ICAgIHNpemUgLSAxLCBOVUxMX1JUWCwgMCk7DQo+ID4gIAkJdDMgPSBmb3JjZV9vcGVyYW5kIChn ZW5fcnR4X01JTlVTIChpbnRfbW9kZSwgdDEsIG5zaWduKSwNCj4gPiAgCQkJCSAgICBOVUxMX1JU WCk7DQo+ID4gLQkJdDQgPSBleHBhbmRfZGl2bW9kICgwLCBUUlVOQ19ESVZfRVhQUiwgaW50X21v ZGUsIHQzLA0KPiA+IG9wMSwNCj4gPiAtCQkJCSAgICBOVUxMX1JUWCwgMCk7DQo+ID4gKwkJdDQg PSBleHBhbmRfZGl2bW9kICgwLCBUUlVOQ19ESVZfRVhQUiwgaW50X21vZGUsDQo+ID4gdHJlZW9w MCwNCj4gPiArCQkJCSAgICB0cmVlb3AxLCB0Mywgb3AxLCBOVUxMX1JUWCwgMCk7DQo+ID4gIAkJ aWYgKHQ0KQ0KPiA+ICAJCSAgew0KPiA+ICAJCSAgICBydHggdDU7DQo+ID4gZGlmZiAtLWdpdCBh L2djYy9leHByLmNjIGIvZ2NjL2V4cHIuY2MNCj4gPiBpbmRleA0KPiA+DQo+IDgwYmIxYjhhNGM1 YjgzNTBmYjFiOGY1N2E5OWZkNTJlNTg4MmZjYjYuLmI3ODZmMWQ3NWUyNWYzNDEwYzA2NDBjZA0K PiA5Ng0KPiA+IGE4YWJjMDU1ZmEzNGQ5IDEwMDY0NA0KPiA+IC0tLSBhL2djYy9leHByLmNjDQo+ ID4gKysrIGIvZ2NjL2V4cHIuY2MNCj4gPiBAQCAtODAyOCwxNiArODAyOCwxNyBAQCBmb3JjZV9v cGVyYW5kIChydHggdmFsdWUsIHJ0eCB0YXJnZXQpDQo+ID4gIAkgICAgcmV0dXJuIGV4cGFuZF9k aXZtb2QgKDAsDQo+ID4gIAkJCQkgIEZMT0FUX01PREVfUCAoR0VUX01PREUgKHZhbHVlKSkNCj4g PiAgCQkJCSAgPyBSRElWX0VYUFIgOiBUUlVOQ19ESVZfRVhQUiwNCj4gPiAtCQkJCSAgR0VUX01P REUgKHZhbHVlKSwgb3AxLCBvcDIsIHRhcmdldCwgMCk7DQo+ID4gKwkJCQkgIEdFVF9NT0RFICh2 YWx1ZSksIE5VTEwsIE5VTEwsIG9wMSwgb3AyLA0KPiA+ICsJCQkJICB0YXJnZXQsIDApOw0KPiA+ ICAJY2FzZSBNT0Q6DQo+ID4gLQkgIHJldHVybiBleHBhbmRfZGl2bW9kICgxLCBUUlVOQ19NT0Rf RVhQUiwgR0VUX01PREUgKHZhbHVlKSwNCj4gPiBvcDEsIG9wMiwNCj4gPiAtCQkJCXRhcmdldCwg MCk7DQo+ID4gKwkgIHJldHVybiBleHBhbmRfZGl2bW9kICgxLCBUUlVOQ19NT0RfRVhQUiwgR0VU X01PREUgKHZhbHVlKSwNCj4gPiBOVUxMLCBOVUxMLA0KPiA+ICsJCQkJb3AxLCBvcDIsIHRhcmdl dCwgMCk7DQo+ID4gIAljYXNlIFVESVY6DQo+ID4gLQkgIHJldHVybiBleHBhbmRfZGl2bW9kICgw LCBUUlVOQ19ESVZfRVhQUiwgR0VUX01PREUgKHZhbHVlKSwNCj4gPiBvcDEsIG9wMiwNCj4gPiAt CQkJCXRhcmdldCwgMSk7DQo+ID4gKwkgIHJldHVybiBleHBhbmRfZGl2bW9kICgwLCBUUlVOQ19E SVZfRVhQUiwgR0VUX01PREUgKHZhbHVlKSwNCj4gPiBOVUxMLCBOVUxMLA0KPiA+ICsJCQkJb3Ax LCBvcDIsIHRhcmdldCwgMSk7DQo+ID4gIAljYXNlIFVNT0Q6DQo+ID4gLQkgIHJldHVybiBleHBh bmRfZGl2bW9kICgxLCBUUlVOQ19NT0RfRVhQUiwgR0VUX01PREUgKHZhbHVlKSwNCj4gPiBvcDEs IG9wMiwNCj4gPiAtCQkJCXRhcmdldCwgMSk7DQo+ID4gKwkgIHJldHVybiBleHBhbmRfZGl2bW9k ICgxLCBUUlVOQ19NT0RfRVhQUiwgR0VUX01PREUgKHZhbHVlKSwNCj4gPiBOVUxMLCBOVUxMLA0K PiA+ICsJCQkJb3AxLCBvcDIsIHRhcmdldCwgMSk7DQo+ID4gIAljYXNlIEFTSElGVFJUOg0KPiA+ ICAJICByZXR1cm4gZXhwYW5kX3NpbXBsZV9iaW5vcCAoR0VUX01PREUgKHZhbHVlKSwgY29kZSwg b3AxLCBvcDIsDQo+ID4gIAkJCQkgICAgICB0YXJnZXQsIDAsIE9QVEFCX0xJQl9XSURFTik7DQo+ ID4gQEAgLTg5OTAsMTEgKzg5OTEsMTMgQEAgZXhwYW5kX2V4cHJfZGl2bW9kICh0cmVlX2NvZGUg Y29kZSwNCj4gPiBtYWNoaW5lX21vZGUgbW9kZSwgdHJlZSB0cmVlb3AwLA0KPiA+ICAgICAgICBi b29sIHNwZWVkX3AgPSBvcHRpbWl6ZV9pbnNuX2Zvcl9zcGVlZF9wICgpOw0KPiA+ICAgICAgICBk b19wZW5kaW5nX3N0YWNrX2FkanVzdCAoKTsNCj4gPiAgICAgICAgc3RhcnRfc2VxdWVuY2UgKCk7 DQo+ID4gLSAgICAgIHJ0eCB1bnNfcmV0ID0gZXhwYW5kX2Rpdm1vZCAobW9kX3AsIGNvZGUsIG1v ZGUsIG9wMCwgb3AxLCB0YXJnZXQsDQo+IDEpOw0KPiA+ICsgICAgICBydHggdW5zX3JldCA9IGV4 cGFuZF9kaXZtb2QgKG1vZF9wLCBjb2RlLCBtb2RlLCB0cmVlb3AwLCB0cmVlb3AxLA0KPiA+ICsJ CQkJICAgb3AwLCBvcDEsIHRhcmdldCwgMSk7DQo+ID4gICAgICAgIHJ0eF9pbnNuICp1bnNfaW5z bnMgPSBnZXRfaW5zbnMgKCk7DQo+ID4gICAgICAgIGVuZF9zZXF1ZW5jZSAoKTsNCj4gPiAgICAg ICAgc3RhcnRfc2VxdWVuY2UgKCk7DQo+ID4gLSAgICAgIHJ0eCBzZ25fcmV0ID0gZXhwYW5kX2Rp dm1vZCAobW9kX3AsIGNvZGUsIG1vZGUsIG9wMCwgb3AxLCB0YXJnZXQsDQo+IDApOw0KPiA+ICsg ICAgICBydHggc2duX3JldCA9IGV4cGFuZF9kaXZtb2QgKG1vZF9wLCBjb2RlLCBtb2RlLCB0cmVl b3AwLCB0cmVlb3AxLA0KPiA+ICsJCQkJICAgb3AwLCBvcDEsIHRhcmdldCwgMCk7DQo+ID4gICAg ICAgIHJ0eF9pbnNuICpzZ25faW5zbnMgPSBnZXRfaW5zbnMgKCk7DQo+ID4gICAgICAgIGVuZF9z ZXF1ZW5jZSAoKTsNCj4gPiAgICAgICAgdW5zaWduZWQgdW5zX2Nvc3QgPSBzZXFfY29zdCAodW5z X2luc25zLCBzcGVlZF9wKTsgQEAgLTkwMTYsNw0KPiArOTAxOSw4DQo+ID4gQEAgZXhwYW5kX2V4 cHJfZGl2bW9kICh0cmVlX2NvZGUgY29kZSwgbWFjaGluZV9tb2RlIG1vZGUsIHRyZWUNCj4gPiB0 cmVlb3AwLA0KPiA+ICAgICAgICBlbWl0X2luc24gKHNnbl9pbnNucyk7DQo+ID4gICAgICAgIHJl dHVybiBzZ25fcmV0Ow0KPiA+ICAgICAgfQ0KPiA+IC0gIHJldHVybiBleHBhbmRfZGl2bW9kICht b2RfcCwgY29kZSwgbW9kZSwgb3AwLCBvcDEsIHRhcmdldCwNCj4gdW5zaWduZWRwKTsNCj4gPiAr ICByZXR1cm4gZXhwYW5kX2Rpdm1vZCAobW9kX3AsIGNvZGUsIG1vZGUsIHRyZWVvcDAsIHRyZWVv cDEsDQo+ID4gKwkJCW9wMCwgb3AxLCB0YXJnZXQsIHVuc2lnbmVkcCk7DQo+ID4gIH0NCj4gPg0K PiA+ICBydHgNCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL29wdGFicy5jYyBiL2djYy9vcHRhYnMuY2Mg aW5kZXgNCj4gPg0KPiAxNjVmOGQxZmEyMjQzMmI5Njk2N2M2OWE1OGRiYjdiNGJmMTgxMjBkLi5j ZmYzN2NjYjBkZmMzZGQ3OWI5N2QwYWJmDQo+IGQNCj4gPiA4NzJmMzQwODU1ZGM5NiAxMDA2NDQN Cj4gPiAtLS0gYS9nY2Mvb3B0YWJzLmNjDQo+ID4gKysrIGIvZ2NjL29wdGFicy5jYw0KPiA+IEBA IC0xMTA0LDggKzExMDQsOSBAQCBleHBhbmRfZG91Ymxld29yZF9tb2QgKG1hY2hpbmVfbW9kZQ0K PiBtb2RlLA0KPiA+IHJ0eCBvcDAsIHJ0eCBvcDEsIGJvb2wgdW5zaWduZWRwKQ0KPiA+ICAJCXJl dHVybiBOVUxMX1JUWDsNCj4gPiAgCSAgICB9DQo+ID4gIAl9DQo+ID4gLSAgICAgIHJ0eCByZW1h aW5kZXIgPSBleHBhbmRfZGl2bW9kICgxLCBUUlVOQ19NT0RfRVhQUiwgd29yZF9tb2RlLA0KPiA+ IHN1bSwNCj4gPiAtCQkJCSAgICAgZ2VuX2ludF9tb2RlIChJTlRWQUwgKG9wMSksDQo+ID4gd29y ZF9tb2RlKSwNCj4gPiArICAgICAgcnR4IHJlbWFpbmRlciA9IGV4cGFuZF9kaXZtb2QgKDEsIFRS VU5DX01PRF9FWFBSLCB3b3JkX21vZGUsDQo+ID4gTlVMTCwgTlVMTCwNCj4gPiArCQkJCSAgICAg c3VtLCBnZW5faW50X21vZGUgKElOVFZBTCAob3AxKSwNCj4gPiArCQkJCQkJCXdvcmRfbW9kZSks DQo+ID4gIAkJCQkgICAgIE5VTExfUlRYLCAxLCBPUFRBQl9ESVJFQ1QpOw0KPiA+ICAgICAgICBp ZiAocmVtYWluZGVyID09IE5VTExfUlRYKQ0KPiA+ICAJcmV0dXJuIE5VTExfUlRYOw0KPiA+IEBA IC0xMjA4LDggKzEyMDksOCBAQCBleHBhbmRfZG91Ymxld29yZF9kaXZtb2QgKG1hY2hpbmVfbW9k ZQ0KPiA+IG1vZGUsIHJ0eCBvcDAsIHJ0eCBvcDEsIHJ0eCAqcmVtLA0KPiA+DQo+ID4gICAgaWYg KG9wMTEgIT0gY29uc3QxX3J0eCkNCj4gPiAgICAgIHsNCj4gPiAtICAgICAgcnR4IHJlbTIgPSBl eHBhbmRfZGl2bW9kICgxLCBUUlVOQ19NT0RfRVhQUiwgbW9kZSwgcXVvdDEsIG9wMTEsDQo+ID4g LQkJCQlOVUxMX1JUWCwgdW5zaWduZWRwLCBPUFRBQl9ESVJFQ1QpOw0KPiA+ICsgICAgICBydHgg cmVtMiA9IGV4cGFuZF9kaXZtb2QgKDEsIFRSVU5DX01PRF9FWFBSLCBtb2RlLCBOVUxMLCBOVUxM LA0KPiA+IHF1b3QxLA0KPiA+ICsJCQkJb3AxMSwgTlVMTF9SVFgsIHVuc2lnbmVkcCwNCj4gPiBP UFRBQl9ESVJFQ1QpOw0KPiA+ICAgICAgICBpZiAocmVtMiA9PSBOVUxMX1JUWCkNCj4gPiAgCXJl dHVybiBOVUxMX1JUWDsNCj4gPg0KPiA+IEBAIC0xMjIzLDggKzEyMjQsOCBAQCBleHBhbmRfZG91 Ymxld29yZF9kaXZtb2QgKG1hY2hpbmVfbW9kZQ0KPiA+IG1vZGUsIHJ0eCBvcDAsIHJ0eCBvcDEs IHJ0eCAqcmVtLA0KPiA+ICAgICAgICBpZiAocmVtMiA9PSBOVUxMX1JUWCkNCj4gPiAgCXJldHVy biBOVUxMX1JUWDsNCj4gPg0KPiA+IC0gICAgICBydHggcXVvdDIgPSBleHBhbmRfZGl2bW9kICgw LCBUUlVOQ19ESVZfRVhQUiwgbW9kZSwgcXVvdDEsIG9wMTEsDQo+ID4gLQkJCQkgTlVMTF9SVFgs IHVuc2lnbmVkcCwgT1BUQUJfRElSRUNUKTsNCj4gPiArICAgICAgcnR4IHF1b3QyID0gZXhwYW5k X2Rpdm1vZCAoMCwgVFJVTkNfRElWX0VYUFIsIG1vZGUsIE5VTEwsIE5VTEwsDQo+ID4gcXVvdDEs DQo+ID4gKwkJCQkgb3AxMSwgTlVMTF9SVFgsIHVuc2lnbmVkcCwNCj4gPiBPUFRBQl9ESVJFQ1Qp Ow0KPiA+ICAgICAgICBpZiAocXVvdDIgPT0gTlVMTF9SVFgpDQo+ID4gIAlyZXR1cm4gTlVMTF9S VFg7DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RhcmdldC5kZWYgYi9nY2MvdGFyZ2V0LmRl ZiBpbmRleA0KPiA+DQo+IDJhN2ZhNjhmODNkZDE1ZGNkZDJjMzMyZTg0MzFlNjE0MmVjN2QzMDUu LjkyZWJkMmFmMThmZThhYmI2ZWQ5NWIwDQo+IDcwDQo+ID4gODFjZGQ3MDExM2RiOWIxIDEwMDY0 NA0KPiA+IC0tLSBhL2djYy90YXJnZXQuZGVmDQo+ID4gKysrIGIvZ2NjL3RhcmdldC5kZWYNCj4g PiBAQCAtMTkwMiw2ICsxOTAyLDI1IEBAIGltcGxlbWVudGF0aW9uIGFwcHJvYWNoZXMgaXRzZWxm LiIsDQo+ID4gIAljb25zdCB2ZWNfcGVybV9pbmRpY2VzICZzZWwpLA0KPiA+ICAgTlVMTCkNCj4g Pg0KPiA+ICtERUZIT09LDQo+ID4gKyhjYW5fc3BlY2lhbF9kaXZfYnlfY29uc3QsDQo+ID4gKyAi VGhpcyBob29rIGlzIHVzZWQgdG8gdGVzdCB3aGV0aGVyIHRoZSB0YXJnZXQgaGFzIGEgc3BlY2lh bCBtZXRob2QNCj4gPiArb2ZcblwgZGl2aXNpb24gb2YgdmVjdG9ycyBvZiB0eXBlIEB2YXJ7dmVj dHlwZX0gdXNpbmcgdGhlIHR3byBvcGVyYW5kcw0KPiA+ICtAY29kZXt0cmVlb3AwfSxcblwgYW5k IEBjb2Rle3RyZWVvcDF9IGFuZCBwcm9kdWNpbmcgYSB2ZWN0b3Igb2YgdHlwZQ0KPiA+ICtAdmFy e3ZlY3R5cGV9LiAgVGhlIGRpdmlzaW9uXG5cIHdpbGwgdGhlbiBub3QgYmUgZGVjb21wb3NlZCBi eSB0aGUgYW5kDQo+ID4gK2tlcHQgYXMgYSBkaXYuXG5cIFxuXCBXaGVuIHRoZSBob29rIGlzIGJl aW5nIHVzZWQgdG8gdGVzdCB3aGV0aGVyIHRoZQ0KPiA+ICt0YXJnZXQgc3VwcG9ydHMgYSBzcGVj aWFsXG5cIGRpdmlkZSwgQHZhcntpbjB9LCBAdmFye2luMX0sIGFuZA0KPiA+ICtAdmFye291dHB1 dH0gYXJlIGFsbCBudWxsLiAgV2hlbiB0aGUgaG9va1xuXCBpcyBiZWluZyB1c2VkIHRvIGVtaXQg YQ0KPiA+ICtkaXZpc2lvbiwgQHZhcntpbjB9IGFuZCBAdmFye2luMX0gYXJlIHRoZSBzb3VyY2Vc blwgdmVjdG9ycyBvZiB0eXBlDQo+ID4gK0B2YXJ7dmVjdHR5cGV9IGFuZCBAdmFye291dHB1dH0g aXMgdGhlIGRlc3RpbmF0aW9uIHZlY3RvciBvZlxuXCB0eXBlDQo+ID4gK0B2YXJ7dmVjdHlwZX0u XG5cIFxuXCBSZXR1cm4gdHJ1ZSBpZiB0aGUgb3BlcmF0aW9uIGlzIHBvc3NpYmxlLA0KPiA+ICtl bWl0dGluZyBpbnN0cnVjdGlvbnMgZm9yIGl0XG5cIGlmIHJ0eGVzIGFyZSBwcm92aWRlZCBhbmQg dXBkYXRpbmcNCj4gPiArQHZhcntvdXRwdXR9LiIsICBib29sLCAoZW51bSB0cmVlX2NvZGUsIHRy ZWUgdmVjdHlwZSwgdHJlZSB0cmVlb3AwLA0KPiA+ICt0cmVlIHRyZWVvcDEsIHJ0eCAqb3V0cHV0 LA0KPiA+ICsJcnR4IGluMCwgcnR4IGluMSksDQo+ID4gKyBkZWZhdWx0X2Nhbl9zcGVjaWFsX2Rp dl9ieV9jb25zdCkNCj4gPiArDQo+ID4gIC8qIFJldHVybiB0cnVlIGlmIHRoZSB0YXJnZXQgc3Vw cG9ydHMgbWlzYWxpZ25lZCBzdG9yZS9sb2FkIG9mIGENCj4gPiAgICAgc3BlY2lmaWMgZmFjdG9y IGRlbm90ZWQgaW4gdGhlIHRoaXJkIHBhcmFtZXRlci4gIFRoZSBsYXN0IHBhcmFtZXRlcg0KPiA+ ICAgICBpcyB0cnVlIGlmIHRoZSBhY2Nlc3MgaXMgZGVmaW5lZCBpbiBhIHBhY2tlZCBzdHJ1Y3Qu ICAqLyBkaWZmIC0tZ2l0DQo+IGEvZ2NjL3RhcmdldC5oDQo+ID4gYi9nY2MvdGFyZ2V0LmggaW5k ZXgNCj4gPg0KPiBkNmZhNjkzMTQ5OWQxNWVkZmYzZTVhZjNlNDI5NTQwZDAwMWM3MDU4Li5jODM2 MDM2YWM3ZmE3OTEwZDYyYmQzZGENCj4gNTYNCj4gPiBmMzljMDYxZjY4YjY2NSAxMDA2NDQNCj4g PiAtLS0gYS9nY2MvdGFyZ2V0LmgNCj4gPiArKysgYi9nY2MvdGFyZ2V0LmgNCj4gPiBAQCAtNTEs NiArNTEsNyBAQA0KPiA+ICAjaW5jbHVkZSAiaW5zbi1jb2Rlcy5oIg0KPiA+ICAjaW5jbHVkZSAi dG0uaCINCj4gPiAgI2luY2x1ZGUgImhhcmQtcmVnLXNldC5oIg0KPiA+ICsjaW5jbHVkZSAidHJl ZS1jb3JlLmgiDQo+ID4NCj4gPiAgI2lmIENIRUNLSU5HX1ANCj4gPg0KPiA+IGRpZmYgLS1naXQg YS9nY2MvdGFyZ2hvb2tzLmggYi9nY2MvdGFyZ2hvb2tzLmggaW5kZXgNCj4gPg0KPiBlY2NlNTVl YmU3OTdjZWRjOTQwNjIwZThkODk4MTY5NzNhMDQ1ZDQ5Li40MjQ1MWEzZTIyZTg2ZmVlOWRhMmY1 NmUNCj4gPiAyNjQwZDYzZjkzNmIzMzZkIDEwMDY0NA0KPiA+IC0tLSBhL2djYy90YXJnaG9va3Mu aA0KPiA+ICsrKyBiL2djYy90YXJnaG9va3MuaA0KPiA+IEBAIC0yMDcsNiArMjA3LDggQEAgZXh0 ZXJuIHZvaWQgZGVmYXVsdF9hZGRyX3NwYWNlX2RpYWdub3NlX3VzYWdlDQo+ID4gKGFkZHJfc3Bh Y2VfdCwgbG9jYXRpb25fdCk7ICBleHRlcm4gcnR4IGRlZmF1bHRfYWRkcl9zcGFjZV9jb252ZXJ0 IChydHgsDQo+ID4gdHJlZSwgdHJlZSk7ICBleHRlcm4gdW5zaWduZWQgaW50IGRlZmF1bHRfY2Fz ZV92YWx1ZXNfdGhyZXNob2xkICh2b2lkKTsNCj4gPiBleHRlcm4gYm9vbCBkZWZhdWx0X2hhdmVf Y29uZGl0aW9uYWxfZXhlY3V0aW9uICh2b2lkKTsNCj4gPiArZXh0ZXJuIGJvb2wgZGVmYXVsdF9j YW5fc3BlY2lhbF9kaXZfYnlfY29uc3QgKGVudW0gdHJlZV9jb2RlLCB0cmVlLA0KPiA+IHRyZWUs IHRyZWUsDQo+ID4gKwkJCQkJICAgICAgcnR4ICosIHJ0eCwgcnR4KTsNCj4gPg0KPiA+ICBleHRl cm4gYm9vbCBkZWZhdWx0X2xpYmNfaGFzX2Z1bmN0aW9uIChlbnVtIGZ1bmN0aW9uX2NsYXNzLCB0 cmVlKTsgIGV4dGVybg0KPiA+IGJvb2wgZGVmYXVsdF9saWJjX2hhc19mYXN0X2Z1bmN0aW9uIChp bnQgZmNvZGUpOyBkaWZmIC0tZ2l0IGEvZ2NjL3Rhcmdob29rcy5jYw0KPiA+IGIvZ2NjL3Rhcmdo b29rcy5jYyBpbmRleA0KPiA+DQo+IGIxNWFlMTliY2I2MGM1OWFlODExMmU2N2I1ZjA2YTI0MWE5 YmRiZjEuLjgyMDY1MzMzODI2MTFhNzY0MGVmYmEyDQo+IDQxDQo+ID4gMjc5OTM2Y2VkNDFlZTk1 IDEwMDY0NA0KPiA+IC0tLSBhL2djYy90YXJnaG9va3MuY2MNCj4gPiArKysgYi9nY2MvdGFyZ2hv b2tzLmNjDQo+ID4gQEAgLTE4MDcsNiArMTgwNywxNCBAQCBkZWZhdWx0X2hhdmVfY29uZGl0aW9u YWxfZXhlY3V0aW9uICh2b2lkKQ0KPiA+ICAgIHJldHVybiBIQVZFX2NvbmRpdGlvbmFsX2V4ZWN1 dGlvbjsNCj4gPiAgfQ0KPiA+DQo+ID4gKy8qIERlZmF1bHQgdGhhdCBubyBkaXZpc2lvbiBieSBj b25zdGFudCBvcGVyYXRpb25zIGFyZSBzcGVjaWFsLiAgKi8NCj4gPiArYm9vbCBkZWZhdWx0X2Nh bl9zcGVjaWFsX2Rpdl9ieV9jb25zdCAoZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsDQo+ID4g K3RyZWUsIHJ0eCAqLCBydHgsDQo+ID4gKwkJCQkgIHJ0eCkNCj4gPiArew0KPiA+ICsgIHJldHVy biBmYWxzZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgLyogQnkgZGVmYXVsdCB3ZSBhc3N1bWUgdGhh dCBjOTkgZnVuY3Rpb25zIGFyZSBwcmVzZW50IGF0IHRoZSBydW50aW1lLA0KPiA+ICAgICBidXQg c2luY29zIGlzIG5vdC4gICovDQo+ID4gIGJvb2wNCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWRpdi1iaXRtYXNrLTEuYw0KPiA+IGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LWRpdi1iaXRtYXNrLTEuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwLi40NzJjZDcxMDUzNGJjOGFhOWIxYjQ5MQ0KPiA2ZjMNCj4gPiBkN2I0ZDViNjRhMTli OQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZGl2LWJpdG1hc2stMS5jDQo+ID4gQEAgLTAsMCArMSwyNSBAQA0KPiA+ICsvKiB7IGRn LXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ID4gKw0KPiA+ICsjaW5j bHVkZSA8c3RkaW50Lmg+DQo+ID4gKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCINCj4gPiArDQo+ID4g KyNkZWZpbmUgTiA1MA0KPiA+ICsjZGVmaW5lIFRZUEUgdWludDhfdA0KPiA+ICsNCj4gPiArX19h dHRyaWJ1dGVfXygobm9pcGEsIG5vaW5saW5lLCBvcHRpbWl6ZSgiTzEiKSkpIHZvaWQgZnVuMShU WVBFKg0KPiA+ICtyZXN0cmljdCBwaXhlbCwgVFlQRSBsZXZlbCwgaW50IG4pIHsNCj4gPiArICBm b3IgKGludCBpID0gMDsgaSA8IG47IGkrPTEpDQo+ID4gKyAgICBwaXhlbFtpXSA9IChwaXhlbFtp XSAqIGxldmVsKSAvIDB4ZmY7IH0NCj4gPiArDQo+ID4gK19fYXR0cmlidXRlX18oKG5vaXBhLCBu b2lubGluZSwgb3B0aW1pemUoIk8zIikpKSB2b2lkIGZ1bjIoVFlQRSoNCj4gPiArcmVzdHJpY3Qg cGl4ZWwsIFRZUEUgbGV2ZWwsIGludCBuKSB7DQo+ID4gKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBu OyBpKz0xKQ0KPiA+ICsgICAgcGl4ZWxbaV0gPSAocGl4ZWxbaV0gKiBsZXZlbCkgLyAweGZmOyB9 DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAidmVjdC1kaXYtYml0bWFzay5oIg0KPiA+ICsNCj4gPiAr LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAidmVjdF9yZWNvZ19kaXZtb2RfcGF0 dGVybjoNCj4gPiArZGV0ZWN0ZWQiICJ2ZWN0IiB7IHRhcmdldCBhYXJjaDY0Ki0qLSogfSB9IH0g Ki8NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWRpdi1i aXRtYXNrLTIuYw0KPiA+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWRpdi1iaXRt YXNrLTIuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gPg0KPiAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTA0YTcxODg1YjJlODQ4NzU5 M2EyYw0KPiBkMw0KPiA+IGRiNzViM2U0MTEyZTJjYw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiAr KysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZGl2LWJpdG1hc2stMi5jDQo+ID4g QEAgLTAsMCArMSwyNSBAQA0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2 ZWN0X2ludCB9ICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ID4gKyNpbmNs dWRlICJ0cmVlLXZlY3QuaCINCj4gPiArDQo+ID4gKyNkZWZpbmUgTiA1MA0KPiA+ICsjZGVmaW5l IFRZUEUgdWludDE2X3QNCj4gPiArDQo+ID4gK19fYXR0cmlidXRlX18oKG5vaXBhLCBub2lubGlu ZSwgb3B0aW1pemUoIk8xIikpKSB2b2lkIGZ1bjEoVFlQRSoNCj4gPiArcmVzdHJpY3QgcGl4ZWws IFRZUEUgbGV2ZWwsIGludCBuKSB7DQo+ID4gKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKz0x KQ0KPiA+ICsgICAgcGl4ZWxbaV0gPSAocGl4ZWxbaV0gKiBsZXZlbCkgLyAweGZmZmZVOyB9DQo+ ID4gKw0KPiA+ICtfX2F0dHJpYnV0ZV9fKChub2lwYSwgbm9pbmxpbmUsIG9wdGltaXplKCJPMyIp KSkgdm9pZCBmdW4yKFRZUEUqDQo+ID4gK3Jlc3RyaWN0IHBpeGVsLCBUWVBFIGxldmVsLCBpbnQg bikgew0KPiA+ICsgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSs9MSkNCj4gPiArICAgIHBpeGVs W2ldID0gKHBpeGVsW2ldICogbGV2ZWwpIC8gMHhmZmZmVTsgfQ0KPiA+ICsNCj4gPiArI2luY2x1 ZGUgInZlY3QtZGl2LWJpdG1hc2suaCINCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcC1ub3QgInZlY3RfcmVjb2dfZGl2bW9kX3BhdHRlcm46DQo+ID4gK2RldGVjdGVk IiAidmVjdCIgeyB0YXJnZXQgYWFyY2g2NCotKi0qIH0gfSB9ICovDQo+ID4gZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1kaXYtYml0bWFzay0zLmMNCj4gPiBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1kaXYtYml0bWFzay0zLmMNCj4gPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uYTE0MThlYmJmNWVhODczMWVkNGUzZTcNCj4gMjANCj4gPiAxNTc3 MDFkOWQxY2Y4NTINCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC92ZWN0LWRpdi1iaXRtYXNrLTMuYw0KPiA+IEBAIC0wLDAgKzEsMjYgQEANCj4g PiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiA+ICsv KiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZuby12ZWN0LWNvc3QtbW9kZWwiIHsgdGFyZ2V0 IGFhcmNoNjQqLSotKg0KPiA+ICt9IH0gKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxzdGRpbnQu aD4NCj4gPiArI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0KPiA+ICsNCj4gPiArI2RlZmluZSBOIDUw DQo+ID4gKyNkZWZpbmUgVFlQRSB1aW50MzJfdA0KPiA+ICsNCj4gPiArX19hdHRyaWJ1dGVfXygo bm9pcGEsIG5vaW5saW5lLCBvcHRpbWl6ZSgiTzEiKSkpIHZvaWQgZnVuMShUWVBFKg0KPiA+ICty ZXN0cmljdCBwaXhlbCwgVFlQRSBsZXZlbCwgaW50IG4pIHsNCj4gPiArICBmb3IgKGludCBpID0g MDsgaSA8IG47IGkrPTEpDQo+ID4gKyAgICBwaXhlbFtpXSA9IChwaXhlbFtpXSAqICh1aW50NjRf dClsZXZlbCkgLyAweGZmZmZmZmZmVUw7IH0NCj4gPiArDQo+ID4gK19fYXR0cmlidXRlX18oKG5v aXBhLCBub2lubGluZSwgb3B0aW1pemUoIk8zIikpKSB2b2lkIGZ1bjIoVFlQRSoNCj4gPiArcmVz dHJpY3QgcGl4ZWwsIFRZUEUgbGV2ZWwsIGludCBuKSB7DQo+ID4gKyAgZm9yIChpbnQgaSA9IDA7 IGkgPCBuOyBpKz0xKQ0KPiA+ICsgICAgcGl4ZWxbaV0gPSAocGl4ZWxbaV0gKiAodWludDY0X3Qp bGV2ZWwpIC8gMHhmZmZmZmZmZlVMOyB9DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAidmVjdC1kaXYt Yml0bWFzay5oIg0KPiA+ICsNCj4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5v dCAidmVjdF9yZWNvZ19kaXZtb2RfcGF0dGVybjoNCj4gPiArZGV0ZWN0ZWQiICJ2ZWN0IiB7IHRh cmdldCBhYXJjaDY0Ki0qLSogfSB9IH0gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LWRpdi1iaXRtYXNrLmgNCj4gPiBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC1kaXYtYml0bWFzay5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4g PiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LjI5YTE2NzM5YWE0YjcwNjYxNjM2N2JmDQo+IGQxDQo+ID4gODMyZjI4ZWJkMDc5OTNlDQo+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1k aXYtYml0bWFzay5oDQo+ID4gQEAgLTAsMCArMSw0MyBAQA0KPiA+ICsjaW5jbHVkZSA8c3RkaW8u aD4NCj4gPiArDQo+ID4gKyNpZm5kZWYgTg0KPiA+ICsjZGVmaW5lIE4gNjUNCj4gPiArI2VuZGlm DQo+ID4gKw0KPiA+ICsjaWZuZGVmIFRZUEUNCj4gPiArI2RlZmluZSBUWVBFIHVpbnQzMl90DQo+ ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArI2lmbmRlZiBERUJVRw0KPiA+ICsjZGVmaW5lIERFQlVH IDANCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEJBU0UgKChUWVBFKSAtMSA8IDAg PyAtMTI2IDogNCkNCj4gPiArDQo+ID4gK2ludCBtYWluICgpDQo+ID4gK3sNCj4gPiArICBUWVBF IGFbTl07DQo+ID4gKyAgVFlQRSBiW05dOw0KPiA+ICsNCj4gPiArICBmb3IgKGludCBpID0gMDsg aSA8IE47ICsraSkNCj4gPiArICAgIHsNCj4gPiArICAgICAgYVtpXSA9IEJBU0UgKyBpICogMTM7 DQo+ID4gKyAgICAgIGJbaV0gPSBCQVNFICsgaSAqIDEzOw0KPiA+ICsgICAgICBpZiAoREVCVUcp DQo+ID4gKyAgICAgICAgcHJpbnRmICgiJWQ6IDB4JXhcbiIsIGksIGFbaV0pOw0KPiA+ICsgICAg fQ0KPiA+ICsNCj4gPiArICBmdW4xIChhLCBOIC8gMiwgTik7DQo+ID4gKyAgZnVuMiAoYiwgTiAv IDIsIE4pOw0KPiA+ICsNCj4gPiArICBmb3IgKGludCBpID0gMDsgaSA8IE47ICsraSkNCj4gPiAr ICAgIHsNCj4gPiArICAgICAgaWYgKERFQlVHKQ0KPiA+ICsgICAgICAgIHByaW50ZiAoIiVkID0g MHgleCA9PSAweCV4XG4iLCBpLCBhW2ldLCBiW2ldKTsNCj4gPiArDQo+ID4gKyAgICAgIGlmIChh W2ldICE9IGJbaV0pDQo+ID4gKyAgICAgICAgX19idWlsdGluX2Fib3J0ICgpOw0KPiA+ICsgICAg fQ0KPiA+ICsgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+IGRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9kaXYtYnktYml0bWFzay5jDQo+ID4gYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9kaXYtYnktYml0bWFzay5jDQo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLjJhNTM1NzkxYmE3MjU4MzAyZTBjMmNmDQo+IDQ0YQ0KPiA+IGIy MTFjZDI0NmQ4MmQ1DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9hYXJjaDY0L2Rpdi1ieS1iaXRtYXNrLmMNCj4gPiBAQCAtMCwwICsxLDYxIEBA DQo+ID4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1v cHRpb25zICItTzMgLXN0ZD1jOTkiIH0gKi8NCj4gPiArLyogeyBkZy1maW5hbCB7IGNoZWNrLWZ1 bmN0aW9uLWJvZGllcyAiKioiICIiICIiIHsgdGFyZ2V0IHsgbGUgfSB9IH0gfQ0KPiA+ICsqLw0K PiA+ICsNCj4gPiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiA+ICsNCj4gPiArI3ByYWdtYSBHQ0Mg dGFyZ2V0ICIrbm9zdmUiDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsqKiBkcmF3X2JpdG1hcDE6DQo+ ID4gKyoqIC4uLg0KPiA+ICsqKiAJYWRkaG4JdlswLTldKy44YiwgdlswLTldKy44aCwgdlswLTld Ky44aA0KPiA+ICsqKiAJYWRkaG4JdlswLTldKy44YiwgdlswLTldKy44aCwgdlswLTldKy44aA0K PiA+ICsqKiAJdWFkZHcJdlswLTldKy44aCwgdlswLTldKy44aCwgdlswLTldKy44Yg0KPiA+ICsq KiAJdWFkZHcJdlswLTldKy44aCwgdlswLTldKy44aCwgdlswLTldKy44Yg0KPiA+ICsqKiAJdXpw Mgl2WzAtOV0rLjE2YiwgdlswLTldKy4xNmIsIHZbMC05XSsuMTZiDQo+ID4gKyoqIC4uLg0KPiA+ ICsqLw0KPiA+ICt2b2lkIGRyYXdfYml0bWFwMSh1aW50OF90KiByZXN0cmljdCBwaXhlbCwgdWlu dDhfdCBsZXZlbCwgaW50IG4pIHsNCj4gPiArICBmb3IgKGludCBpID0gMDsgaSA8IChuICYgLTE2 KTsgaSs9MSkNCj4gPiArICAgIHBpeGVsW2ldID0gKHBpeGVsW2ldICogbGV2ZWwpIC8gMHhmZjsg fQ0KPiA+ICsNCj4gPiArdm9pZCBkcmF3X2JpdG1hcDIodWludDhfdCogcmVzdHJpY3QgcGl4ZWws IHVpbnQ4X3QgbGV2ZWwsIGludCBuKSB7DQo+ID4gKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAobiAm IC0xNik7IGkrPTEpDQo+ID4gKyAgICBwaXhlbFtpXSA9IChwaXhlbFtpXSAqIGxldmVsKSAvIDB4 ZmU7IH0NCj4gPiArDQo+ID4gKy8qDQo+ID4gKyoqIGRyYXdfYml0bWFwMzoNCj4gPiArKiogLi4u DQo+ID4gKyoqIAlhZGRobgl2WzAtOV0rLjRoLCB2WzAtOV0rLjRzLCB2WzAtOV0rLjRzDQo+ID4g KyoqIAlhZGRobgl2WzAtOV0rLjRoLCB2WzAtOV0rLjRzLCB2WzAtOV0rLjRzDQo+ID4gKyoqIAl1 YWRkdwl2WzAtOV0rLjRzLCB2WzAtOV0rLjRzLCB2WzAtOV0rLjRoDQo+ID4gKyoqIAl1YWRkdwl2 WzAtOV0rLjRzLCB2WzAtOV0rLjRzLCB2WzAtOV0rLjRoDQo+ID4gKyoqIAl1enAyCXZbMC05XSsu OGgsIHZbMC05XSsuOGgsIHZbMC05XSsuOGgNCj4gPiArKiogLi4uDQo+ID4gKyovDQo+ID4gK3Zv aWQgZHJhd19iaXRtYXAzKHVpbnQxNl90KiByZXN0cmljdCBwaXhlbCwgdWludDE2X3QgbGV2ZWws IGludCBuKSB7DQo+ID4gKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAobiAmIC0xNik7IGkrPTEpDQo+ ID4gKyAgICBwaXhlbFtpXSA9IChwaXhlbFtpXSAqIGxldmVsKSAvIDB4ZmZmZlU7IH0NCj4gPiAr DQo+ID4gKy8qDQo+ID4gKyoqIGRyYXdfYml0bWFwNDoNCj4gPiArKiogLi4uDQo+ID4gKyoqIAlh ZGRobgl2WzAtOV0rLjJzLCB2WzAtOV0rLjJkLCB2WzAtOV0rLjJkDQo+ID4gKyoqIAlhZGRobgl2 WzAtOV0rLjJzLCB2WzAtOV0rLjJkLCB2WzAtOV0rLjJkDQo+ID4gKyoqIAl1YWRkdwl2WzAtOV0r LjJkLCB2WzAtOV0rLjJkLCB2WzAtOV0rLjJzDQo+ID4gKyoqIAl1YWRkdwl2WzAtOV0rLjJkLCB2 WzAtOV0rLjJkLCB2WzAtOV0rLjJzDQo+ID4gKyoqIAl1enAyCXZbMC05XSsuNHMsIHZbMC05XSsu NHMsIHZbMC05XSsuNHMNCj4gPiArKiogLi4uDQo+ID4gKyovDQo+ID4gK3ZvaWQgZHJhd19iaXRt YXA0KHVpbnQzMl90KiByZXN0cmljdCBwaXhlbCwgdWludDMyX3QgbGV2ZWwsIGludCBuKSB7DQo+ ID4gKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAobiAmIC0xNik7IGkrPTEpDQo+ID4gKyAgICBwaXhl bFtpXSA9IChwaXhlbFtpXSAqICh1aW50NjRfdClsZXZlbCkgLyAweGZmZmZmZmZmVUw7IH0NCj4g PiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1nZW5lcmljLmNjIGIvZ2NjL3RyZWUtdmVjdC1n ZW5lcmljLmNjIGluZGV4DQo+ID4NCj4gMzUwMTI5NTU1YTBjNzFjMDg5NmM0ZjEwMDMxNjNmM2Iz NTU3YzExYi4uZWJlZTVlMjRiMTg2OTE1ZWJjYjNhODE3DQo+IGMNCj4gPiA5YTEyMDQ2YjZlYzk0 ZjMgMTAwNjQ0DQo+ID4gLS0tIGEvZ2NjL3RyZWUtdmVjdC1nZW5lcmljLmNjDQo+ID4gKysrIGIv Z2NjL3RyZWUtdmVjdC1nZW5lcmljLmNjDQo+ID4gQEAgLTEyMzcsNiArMTIzNywxNCBAQCBleHBh bmRfdmVjdG9yX29wZXJhdGlvbg0KPiAoZ2ltcGxlX3N0bXRfaXRlcmF0b3INCj4gPiAqZ3NpLCB0 cmVlIHR5cGUsIHRyZWUgY29tcHV0ZV90eXBlDQo+ID4gIAkgIHRyZWUgcmhzMiA9IGdpbXBsZV9h c3NpZ25fcmhzMiAoYXNzaWduKTsNCj4gPiAgCSAgdHJlZSByZXQ7DQo+ID4NCj4gPiArCSAgLyog Q2hlY2sgaWYgdGhlIHRhcmdldCB3YXMgZ29pbmcgdG8gaGFuZGxlIGl0IHRocm91Z2ggdGhlIHNw ZWNpYWwNCj4gPiArCSAgICAgZGl2aXNpb24gY2FsbGJhY2sgaG9vay4gICovDQo+ID4gKwkgIGlm ICh0YXJnZXRtLnZlY3Rvcml6ZS5jYW5fc3BlY2lhbF9kaXZfYnlfY29uc3QgKGNvZGUsIHR5cGUs IHJoczEsDQo+ID4gKwkJCQkJCQkgIHJoczIsIE5VTEwsDQo+ID4gKwkJCQkJCQkgIE5VTExfUlRY LA0KPiA+IE5VTExfUlRYKSkNCj4gPiArCSAgICByZXR1cm4gTlVMTF9UUkVFOw0KPiA+ICsNCj4g PiArDQo+ID4gIAkgIGlmICghb3B0aW1pemUNCj4gPiAgCSAgICAgIHx8ICFWRUNUT1JfSU5URUdF Ul9UWVBFX1AgKHR5cGUpDQo+ID4gIAkgICAgICB8fCBUUkVFX0NPREUgKHJoczIpICE9IFZFQ1RP Ul9DU1QgZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3QtDQo+ID4gcGF0dGVybnMuY2MgYi9nY2Mv dHJlZS12ZWN0LXBhdHRlcm5zLmNjIGluZGV4DQo+ID4NCj4gMDk1NzRiYjFhMjY5NmIzNDM4YTRj ZTlmMDlmNzRiNDJlNzg0YWNhMC4uNjA3YWNkZjk1ZWIzMDMzNWQ4YmMwZTg1DQo+IGFmDQo+ID4g MGIxYmZlYTEwZmU0NDMgMTAwNjQ0DQo+ID4gLS0tIGEvZ2NjL3RyZWUtdmVjdC1wYXR0ZXJucy5j Yw0KPiA+ICsrKyBiL2djYy90cmVlLXZlY3QtcGF0dGVybnMuY2MNCj4gPiBAQCAtMzU5Niw2ICsz NTk2LDEyIEBAIHZlY3RfcmVjb2dfZGl2bW9kX3BhdHRlcm4gKHZlY19pbmZvICp2aW5mbywNCj4g Pg0KPiA+ICAgICAgICByZXR1cm4gcGF0dGVybl9zdG10Ow0KPiA+ICAgICAgfQ0KPiA+ICsgIGVs c2UgaWYgKHRhcmdldG0udmVjdG9yaXplLmNhbl9zcGVjaWFsX2Rpdl9ieV9jb25zdCAocmhzX2Nv ZGUsIHZlY3R5cGUsDQo+ID4gKwkJCQkJCSAgICAgICBvcHJuZDAsIG9wcm5kMSwgTlVMTCwNCj4g PiArCQkJCQkJICAgICAgIE5VTExfUlRYLCBOVUxMX1JUWCkpDQo+ID4gKyAgICB7DQo+ID4gKyAg ICAgIHJldHVybiBOVUxMOw0KPiA+ICsgICAgfQ0KPiA+DQo+ID4gICAgaWYgKHByZWMgPiBIT1NU X0JJVFNfUEVSX1dJREVfSU5UDQo+ID4gICAgICAgIHx8IGludGVnZXJfemVyb3AgKG9wcm5kMSkp DQo+ID4gZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MgYi9nY2MvdHJlZS12ZWN0 LXN0bXRzLmNjIGluZGV4DQo+ID4NCj4gYzlkYWIyMTdmMDU5ZjE3ZTkxZTlhNzU4MjUyM2U2Mjdk N2E0NWI2Ni4uNmQwNWM0OGE3MzM5ZGUwOTRkNzI4OGINCj4gZDYNCj4gPiA4ZTBlMWMxZTkzZmFh ZmUgMTAwNjQ0DQo+ID4gLS0tIGEvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYw0KPiA+ICsrKyBiL2dj Yy90cmVlLXZlY3Qtc3RtdHMuY2MNCj4gPiBAQCAtNjI2MCw2ICs2MjYwLDExIEBAIHZlY3Rvcml6 YWJsZV9vcGVyYXRpb24gKHZlY19pbmZvICp2aW5mbywNCj4gPiAgCX0NCj4gPiAgICAgICAgdGFy Z2V0X3N1cHBvcnRfcCA9IChvcHRhYl9oYW5kbGVyIChvcHRhYiwgdmVjX21vZGUpDQo+ID4gIAkJ CSAgIT0gQ09ERV9GT1Jfbm90aGluZyk7DQo+ID4gKyAgICAgIGlmICghdGFyZ2V0X3N1cHBvcnRf cCkNCj4gPiArCXRhcmdldF9zdXBwb3J0X3ANCj4gPiArCSAgPSB0YXJnZXRtLnZlY3Rvcml6ZS5j YW5fc3BlY2lhbF9kaXZfYnlfY29uc3QgKGNvZGUsIHZlY3R5cGUsDQo+ID4gKwkJCQkJCQlvcDAs IG9wMSwgTlVMTCwNCj4gPiArCQkJCQkJCU5VTExfUlRYLA0KPiA+IE5VTExfUlRYKTsNCj4gPiAg ICAgIH0NCj4gPg0KPiA+ICAgIGJvb2wgdXNpbmdfZW11bGF0ZWRfdmVjdG9yc19wID0gdmVjdF9l bXVsYXRlZF92ZWN0b3JfcCAodmVjdHlwZSk7DQo+ID4NCj4gPg0KPiA+DQo+ID4NCj4gPiAtLQ0K DQo=