From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2066.outbound.protection.outlook.com [40.107.241.66]) by sourceware.org (Postfix) with ESMTPS id 897BF385137E for ; Fri, 9 Dec 2022 13:35:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 897BF385137E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=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=9U9QLN90LV7kuvNVzLdaHb36JNKPCSPK+/3fvuSx6F0=; b=quRgH8BsqqXPy6r56GXHg3rAJnLIcncBb1xjiJ7qTtJPrgdsUf15SA2ogk3pqQ3YoB9a12IGEQNUJJ+8DUJT4ylFLD43EyOzUBoNqCqsryDE1TEejl1rRfN6IXcrcx0eexfGju7H/3nyHm37aJMteRCKZGnSYAExrx9a+AlnFtY= Received: from AM6P193CA0139.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:85::44) by DU0PR08MB7883.eurprd08.prod.outlook.com (2603:10a6:10:3b1::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.11; Fri, 9 Dec 2022 13:34:59 +0000 Received: from VI1EUR03FT035.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:85:cafe::6a) by AM6P193CA0139.outlook.office365.com (2603:10a6:209:85::44) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.18 via Frontend Transport; Fri, 9 Dec 2022 13:34:59 +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 VI1EUR03FT035.mail.protection.outlook.com (100.127.145.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5901.17 via Frontend Transport; Fri, 9 Dec 2022 13:34:58 +0000 Received: ("Tessian outbound 0800d254cb3b:v130"); Fri, 09 Dec 2022 13:34:58 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: efbf940945bb5b8d X-CR-MTA-TID: 64aa7808 Received: from 7d5b876c0399.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 6DE8E5A5-3EBC-4961-8A1A-EB6EBC59EBA1.1; Fri, 09 Dec 2022 13:32:43 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 7d5b876c0399.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 09 Dec 2022 13:32:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=i21oGWm587WHGx9DMH8Rd6OVK/wglVJojt7iHl9XJuJgHoLlBCmQuYJVgyEG3kV5sqUL7RkPfbxoda3jl1YSxAYjh0QZV1K01X1UBUof1vXdwqg+R7SAtOBdxBbtDXGVs7xQ2Tpnm7/U3c/xDOntXkEgNuxriulK7N8rKR3znvlpzDs+3D8mWOUm//lIGKNrCUYvWBat8ypPdzeBHgR8JQXRnxN/tKP/AvU/diD6rs+vt3eAXRvry7vn/knWV932D7mYONL8DGbOAU1WPUBm/XeU3Kw95T2+nYw/NLSnbJ59B5lEkskrapvL2yD4i6wZiUoSX6d+iRIEV090gNmJSA== 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=9U9QLN90LV7kuvNVzLdaHb36JNKPCSPK+/3fvuSx6F0=; b=FEud/9c0yN493UIzIE4pOH8hTFDbQexZW6wDZ+Zg8TNFuQcMRSDkYdxmGuPLDXSnmT9ZSziIZO6p5eCELW9m9o3XTGb5jTASFHMAvCAAPCYtaDPohWjpzIUKGqNlp5YasGXGekZlj9KKaNfAQyAsp16KWm5wnjlKN/DhjA5fBjzZQB/8fuWgNDLLiwlzSUEIDOl4hoS7y0PVBsEl8fbS1wDjvrj/QmSi8kKslog/TwjnnJjeU77qMKwnqSc/VbLlL8uCOk3F6MMjzq2EXgVDANnheHxt0cL6Ck5rUIrZx4jy1w8DIrct7pF7FHm2XOi2hlO+Xzb5/PAMWohz482fmg== 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=9U9QLN90LV7kuvNVzLdaHb36JNKPCSPK+/3fvuSx6F0=; b=quRgH8BsqqXPy6r56GXHg3rAJnLIcncBb1xjiJ7qTtJPrgdsUf15SA2ogk3pqQ3YoB9a12IGEQNUJJ+8DUJT4ylFLD43EyOzUBoNqCqsryDE1TEejl1rRfN6IXcrcx0eexfGju7H/3nyHm37aJMteRCKZGnSYAExrx9a+AlnFtY= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from DB9PR08MB6507.eurprd08.prod.outlook.com (2603:10a6:10:25a::6) by DU2PR08MB10303.eurprd08.prod.outlook.com (2603:10a6:10:491::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.11; Fri, 9 Dec 2022 13:32:39 +0000 Received: from DB9PR08MB6507.eurprd08.prod.outlook.com ([fe80::77ac:7231:e695:8ff3]) by DB9PR08MB6507.eurprd08.prod.outlook.com ([fe80::77ac:7231:e695:8ff3%8]) with mapi id 15.20.5880.014; Fri, 9 Dec 2022 13:32:39 +0000 Content-Type: multipart/mixed; boundary="------------TvTC0elo2Z6IrhfD0DiPo9dE" Message-ID: <08fcbcb4-c1c5-2e9f-1efd-e1d08fb7a3f6@arm.com> Date: Fri, 9 Dec 2022 13:32:29 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.1 Content-Language: en-US To: "gcc-patches@gcc.gnu.org" Cc: Kyrylo Tkachov , richard Earnshaw , Ramana Radhakrishnan , nickc@redhat.com From: Stam Markianos-Wright Subject: [PATCH] Fix memory constraint on MVE v[ld/st][2/4] instructions [PR107714] X-ClientProxiedBy: SN7PR04CA0048.namprd04.prod.outlook.com (2603:10b6:806:120::23) To DB9PR08MB6507.eurprd08.prod.outlook.com (2603:10a6:10:25a::6) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: DB9PR08MB6507:EE_|DU2PR08MB10303:EE_|VI1EUR03FT035:EE_|DU0PR08MB7883:EE_ X-MS-Office365-Filtering-Correlation-Id: ebcc747e-f824-437d-9990-08dad9ea2ac7 X-LD-Processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr 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: 6rcBerrRnyIjOc7clg1cR4OltZzYSFCEluVSDmwkRDxVVGQY60o85aj6oNtZ6Mg4Fbc2okhlePdcxtLB3L6HOIn0eW3qt/hBiOQbJjDW87JBpya4a95GPuXhCo8EQtPQNZ8KKg3VKjC37s1VuNjDbAZFSinp35vfuNvj++H1HZbXPfRxkxD8TGEXruOe7i6ZdwIJe+v7Sg19wbKyzeaXUF2HpFY+ks/1+mG1ne0/RtTJSi3imxPmFszrnsMt9B5xGYaFn3B3Uhab9GBtfzhpEzSAlSUQVCIGadkhZnaYbK6rhWSmg48cp6fUUw8SbfTAFYGsTb7W+1Y8yCJuDCaRqNvjJZWW+pBpBdU8nj82WdlZMXGTE/Lssyxzgm3HYsbKQ01mDoPJ2M+VgAFM95KbcU8th6rNvVEeCIV+jZfUfbi4U8ysYrJ/uEmgKEbnRHvcRe8+0QAuzo749NahUCqng1wGYKzwSQ6Y99fu2yDzyPPTx8zVWHaZkrPcNgyyhAtF8PQ7b5QXiiC4YM6pFXYq5ebs5AeOF+iJmoVTEibUY5r8pA9goadT11miBu9b/ha+gJOei+kGrKmBA6sRgnOXRNuox+Ma3I5G59ir1vuPGzauuECgmWoN3WkOmUfXt3retSgdbVBW5Uu56M5mMlTL7WBw7thEmHhWcSLQf5TWCRjBNHdhrql73yeg4lUrDXUTCrJlsMK2PtBf8B1BwS3CR/7oUX0IE8iS/V/cqZR3H9Dx5Myed/0A8Y998fbJvPCaThWYmt1tCoXJoa59F0b5y/rhvmyEbKkzyRYqmMV6t04= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR08MB6507.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(39860400002)(346002)(366004)(136003)(396003)(376002)(451199015)(8936002)(235185007)(36756003)(478600001)(31696002)(2616005)(6512007)(38100700002)(86362001)(186003)(6486002)(54906003)(6916009)(41300700001)(26005)(4326008)(66556008)(5660300002)(33964004)(66946007)(8676002)(966005)(6506007)(6666004)(316002)(66476007)(2906002)(31686004)(84970400001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR08MB10303 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: VI1EUR03FT035.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 058a364a-26b9-4f19-eb14-08dad9e9d729 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Row2mainFkJk1DBTrZGlMj13diReja6I70Og8oT0PoUgJRn95EmWbjt6kr1h3hZqAxiBuPRMYf1Lv+avpP0QjE/0MPNilmr2zFZkOihCdqIu8VU23MEosJBouL1MlukQsRZ4OCdLIZNVCkJV4dUw+SrZMvP6VuFwyy1GPY+gKNw/TdvDVdTr8LTIBR29i2aMtqrzFcuvmuz8kwGrMzyBDEVX/EY0+BMiZEprwUavKvaXmy+S/U7qRbTPKPJKEsm0XtQ0Xr7Uy//6Imduvkx6fZl78Vt4yYwRgEvMF79Oi3OxfwlUA6TKT4H5THxbugYKWwJ70yjZr8N4yKAgrOjrigFI379eNPYj8DKUje169a+prk+3vMeOQ1OZUIB3VJ9Sdef+m3JrS5CG+eZDR6x1qqXz7vdd6AzPI6YJx5h8aNShrR8M/2q2ir4JR4AwmvuVyVeH9STesbNVauDbQPNOVSxmXpPvzwv/oqHrScUh5BB8/tzbqN2gpS3QBiZQV8/TXkkBLA3uv415AuvLY0JvEe3Le1Nl4filavzqcK05fXVgM/7Tj4fsmpl0xqW5ma+0jB3KkmlNVdDDkoJpVRN7AJrg7S0Fi5GyphJ05RUK/PI5dtu2R0E6PZmg7/fsD45EQUG1tCxaVtyXv/rpwgFHN5ncvZ0CFN8rdhXSxt8weIseDLh8Mc8wsroIHqBpAPNBliQmP/nWpdon/0j+A+OPmgxS6MqbJEv2NXiqN7oSE1DHAk3TmiedC8bxig/TVqgLGh/J1DLxy2Z5ycKEFsUsyOG6uvDe0QtNz4Tqgpdl1WN+UKjuOB9BC9RUdvVwqm96 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)(346002)(39860400002)(396003)(136003)(376002)(451199015)(40470700004)(46966006)(36840700001)(84970400001)(2906002)(86362001)(31696002)(54906003)(6506007)(6486002)(33964004)(316002)(6512007)(6666004)(186003)(47076005)(26005)(41300700001)(6916009)(5660300002)(40460700003)(2616005)(8676002)(82740400003)(356005)(478600001)(70586007)(36860700001)(31686004)(81166007)(4326008)(70206006)(8936002)(235185007)(107886003)(966005)(336012)(36756003)(82310400005)(40480700001)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Dec 2022 13:34:58.8082 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ebcc747e-f824-437d-9990-08dad9ea2ac7 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: VI1EUR03FT035.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB7883 X-Spam-Status: No, score=-11.2 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: --------------TvTC0elo2Z6IrhfD0DiPo9dE Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi all, In the M-Class Arm-ARM: https://developer.arm.com/documentation/ddi0553/bu/?lang=en these MVE instructions only have '!' writeback variant and at: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107714 we found that the Um constraint would also allow through a register offset writeback, resulting in an assembler error. Here I have added a new constraint and predicate for these instructions, which (uniquely, AFAICT), only support a `!` writeback increment by the data size (inside the compiler this is a POST_INC). No regressions in arm-none-eabi with MVE and MVE.FP. Ok for trunk, and backport to GCC11 and GCC12 (testing pending)? Thanks, Stam gcc/ChangeLog:         PR target/107714         * config/arm/arm-protos.h (mve_struct_mem_operand): New protoype.         * config/arm/arm.cc (mve_struct_mem_operand): New function.         * config/arm/constraints.md (Ug): New constraint.         * config/arm/mve.md (mve_vst4q): Change constraint.         (mve_vst2q): Likewise.         (mve_vld4q): Likewise.         (mve_vld2q): Likewise.         * config/arm/predicates.md (mve_struct_operand): New predicate. gcc/testsuite/ChangeLog:         PR target/107714         * gcc.target/arm/mve/intrinsics/vldst24q_reg_offset.c: New test. --------------TvTC0elo2Z6IrhfD0DiPo9dE Content-Type: text/x-patch; charset=UTF-8; name="rb16665.patch" Content-Disposition: attachment; filename="rb16665.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FybS1wcm90b3MuaCBiL2djYy9jb25maWcvYXJt L2FybS1wcm90b3MuaAppbmRleCA1NTAyNzJmYWNkMTJlNjBhNDliZjhhM2IyMGY4MTFjYzEzNzY1 YjNhLi44ZWEzODExOGIwNTc2OWJkNmZjYjFkMjJkOTAyYTUwOTc5Y2ZkOTUzIDEwMDY0NAotLS0g YS9nY2MvY29uZmlnL2FybS9hcm0tcHJvdG9zLmgKKysrIGIvZ2NjL2NvbmZpZy9hcm0vYXJtLXBy b3Rvcy5oCkBAIC0xMjIsNiArMTIyLDcgQEAgZXh0ZXJuIGludCBhcm1fY29wcm9jX21lbV9vcGVy YW5kX3diIChydHgsIGludCk7CiBleHRlcm4gaW50IG5lb25fdmVjdG9yX21lbV9vcGVyYW5kIChy dHgsIGludCwgYm9vbCk7CiBleHRlcm4gaW50IG12ZV92ZWN0b3JfbWVtX29wZXJhbmQgKG1hY2hp bmVfbW9kZSwgcnR4LCBib29sKTsKIGV4dGVybiBpbnQgbmVvbl9zdHJ1Y3RfbWVtX29wZXJhbmQg KHJ0eCk7CitleHRlcm4gaW50IG12ZV9zdHJ1Y3RfbWVtX29wZXJhbmQgKHJ0eCk7CiAKIGV4dGVy biBydHggKm5lb25fdmNtbGFfbGFuZV9wcmVwYXJlX29wZXJhbmRzIChydHggKik7CiAKZGlmZiAt LWdpdCBhL2djYy9jb25maWcvYXJtL2FybS5jYyBiL2djYy9jb25maWcvYXJtL2FybS5jYwppbmRl eCBiNTg3NTYxZWViZWE5MjFiZGM2ODAxNjkyMmQzNzk0OGUyODcwY2UyLi4zMWYyYTdiOWQ0Njg4 ZGRlNjlkMTQzNWUyNGNmODg1ZTg1NDRiZTcxIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FybS9h cm0uY2MKKysrIGIvZ2NjL2NvbmZpZy9hcm0vYXJtLmNjCkBAIC0xMzczNyw2ICsxMzczNywyNCBA QCBuZW9uX3ZlY3Rvcl9tZW1fb3BlcmFuZCAocnR4IG9wLCBpbnQgdHlwZSwgYm9vbCBzdHJpY3Qp CiAgIHJldHVybiBGQUxTRTsKIH0KIAorLyogUmV0dXJuIFRSVUUgaWYgT1AgaXMgYSBtZW0gc3Vp dGFibGUgZm9yIGxvYWRpbmcvc3RvcmluZyBhbiBNVkUgc3RydWN0CisgICB0eXBlLiAgKi8KK2lu dAorbXZlX3N0cnVjdF9tZW1fb3BlcmFuZCAocnR4IG9wKQoreworICBydHggaW5kID0gWEVYUCAo b3AsIDApOworCisgIC8qIE1hdGNoOiAobWVtIChyZWcpKS4gICovCisgIGlmIChSRUdfUCAoaW5k KSkKKyAgICByZXR1cm4gYXJtX2FkZHJlc3NfcmVnaXN0ZXJfcnR4X3AgKGluZCwgMCk7CisKKyAg LyogQWxsb3cgb25seSBwb3N0LWluY3JlbWVudCBieSB0aGUgbW9kZSBzaXplLiAgKi8KKyAgaWYg KEdFVF9DT0RFIChpbmQpID09IFBPU1RfSU5DKQorICAgIHJldHVybiBhcm1fYWRkcmVzc19yZWdp c3Rlcl9ydHhfcCAoWEVYUCAoaW5kLCAwKSwgMCk7CisKKyAgcmV0dXJuIEZBTFNFOworfQorCiAv KiBSZXR1cm4gVFJVRSBpZiBPUCBpcyBhIG1lbSBzdWl0YWJsZSBmb3IgbG9hZGluZy9zdG9yaW5n IGEgTmVvbiBzdHJ1Y3QKICAgIHR5cGUuICAqLwogaW50CmRpZmYgLS1naXQgYS9nY2MvY29uZmln L2FybS9jb25zdHJhaW50cy5tZCBiL2djYy9jb25maWcvYXJtL2NvbnN0cmFpbnRzLm1kCmluZGV4 IGU1YTM2ZDI5YzcxMzU5NDNiOWJiNWVhMzk2ZjcwZTJlNGJlYjFlNGEuLjg5MDhiN2Y1YjE1Y2Ux NTA2ODU4NjhlNzhlNzUyODBiZjMyMDUzZjEgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYXJtL2Nv bnN0cmFpbnRzLm1kCisrKyBiL2djYy9jb25maWcvYXJtL2NvbnN0cmFpbnRzLm1kCkBAIC00NzQs NiArNDc0LDEyIEBACiAgKGFuZCAobWF0Y2hfY29kZSAibWVtIikKICAgICAgIChtYXRjaF90ZXN0 ICJUQVJHRVRfMzJCSVQgJiYgYXJtX2NvcHJvY19tZW1fb3BlcmFuZCAob3AsIEZBTFNFKSIpKSkK IAorKGRlZmluZV9tZW1vcnlfY29uc3RyYWludCAiVWciCisgIkBpbnRlcm5hbAorICBJbiBUaHVt Yi0yIHN0YXRlIGEgdmFsaWQgTVZFIHN0cnVjdCBsb2FkL3N0b3JlIGFkZHJlc3MuIgorIChhbmQg KG1hdGNoX2NvZGUgIm1lbSIpCisgICAgICAobWF0Y2hfdGVzdCAiVEFSR0VUX0hBVkVfTVZFICYm IG12ZV9zdHJ1Y3RfbWVtX29wZXJhbmQgKG9wKSIpKSkKKwogKGRlZmluZV9tZW1vcnlfY29uc3Ry YWludCAiVWoiCiAgIkBpbnRlcm5hbAogICBJbiBBUk0vVGh1bWItMiBzdGF0ZSBhIFZGUCBsb2Fk L3N0b3JlIGFkZHJlc3MgdGhhdCBzdXBwb3J0cyB3cml0ZWJhY2sKZGlmZiAtLWdpdCBhL2djYy9j b25maWcvYXJtL212ZS5tZCBiL2djYy9jb25maWcvYXJtL212ZS5tZAppbmRleCBiNWU2ZGE0YjEz MzU4MThhM2U4ODE1ZGU1OTg1MGU4NDVhMmQwNDAwLi44NDdiYzAzMmFmYTJjMzk3N2MwNTcyNTU2 MmExNDk0MGJlYjI4MmQ0IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FybS9tdmUubWQKKysrIGIv Z2NjL2NvbmZpZy9hcm0vbXZlLm1kCkBAIC05OSw3ICs5OSw3IEBACiA7OyBbdnN0NHFdKQogOzsK IChkZWZpbmVfaW5zbiAibXZlX3ZzdDRxPG1vZGU+IgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpY SSAwICJuZW9uX3N0cnVjdF9vcGVyYW5kIiAiPVVtIikKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 WEkgMCAibXZlX3N0cnVjdF9vcGVyYW5kIiAiPVVnIikKIAkodW5zcGVjOlhJIFsobWF0Y2hfb3Bl cmFuZDpYSSAxICJzX3JlZ2lzdGVyX29wZXJhbmQiICJ3IikKIAkJICAgICh1bnNwZWM6TVZFX1ZM RF9TVCBbKGNvbnN0X2ludCAwKV0gVU5TUEVDX1ZTVFJVQ1REVU1NWSldCiAJIFZTVDRRKSkKQEAg LTk5NTksNyArOTk1OSw3IEBACiA7OyBbdnN0MnFdKQogOzsKIChkZWZpbmVfaW5zbiAibXZlX3Zz dDJxPG1vZGU+IgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpPSSAwICJuZW9uX3N0cnVjdF9vcGVy YW5kIiAiPVVtIikKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6T0kgMCAibXZlX3N0cnVjdF9vcGVy YW5kIiAiPVVnIikKIAkodW5zcGVjOk9JIFsobWF0Y2hfb3BlcmFuZDpPSSAxICJzX3JlZ2lzdGVy X29wZXJhbmQiICJ3IikKIAkJICAgICh1bnNwZWM6TVZFX1ZMRF9TVCBbKGNvbnN0X2ludCAwKV0g VU5TUEVDX1ZTVFJVQ1REVU1NWSldCiAJIFZTVDJRKSkKQEAgLTk5ODgsNyArOTk4OCw3IEBACiA7 OwogKGRlZmluZV9pbnNuICJtdmVfdmxkMnE8bW9kZT4iCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5k Ok9JIDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgIj13IikKLQkodW5zcGVjOk9JIFsobWF0Y2hfb3Bl cmFuZDpPSSAxICJuZW9uX3N0cnVjdF9vcGVyYW5kIiAiVW0iKQorCSh1bnNwZWM6T0kgWyhtYXRj aF9vcGVyYW5kOk9JIDEgIm12ZV9zdHJ1Y3Rfb3BlcmFuZCIgIlVnIikKIAkJICAgICh1bnNwZWM6 TVZFX1ZMRF9TVCBbKGNvbnN0X2ludCAwKV0gVU5TUEVDX1ZTVFJVQ1REVU1NWSldCiAJIFZMRDJR KSkKICAgXQpAQCAtMTAwMTYsNyArMTAwMTYsNyBAQAogOzsKIChkZWZpbmVfaW5zbiAibXZlX3Zs ZDRxPG1vZGU+IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpYSSAwICJzX3JlZ2lzdGVyX29wZXJh bmQiICI9dyIpCi0JKHVuc3BlYzpYSSBbKG1hdGNoX29wZXJhbmQ6WEkgMSAibmVvbl9zdHJ1Y3Rf b3BlcmFuZCIgIlVtIikKKwkodW5zcGVjOlhJIFsobWF0Y2hfb3BlcmFuZDpYSSAxICJtdmVfc3Ry dWN0X29wZXJhbmQiICJVZyIpCiAJCSAgICAodW5zcGVjOk1WRV9WTERfU1QgWyhjb25zdF9pbnQg MCldIFVOU1BFQ19WU1RSVUNURFVNTVkpXQogCSBWTEQ0USkpCiAgIF0KZGlmZiAtLWdpdCBhL2dj Yy9jb25maWcvYXJtL3ByZWRpY2F0ZXMubWQgYi9nY2MvY29uZmlnL2FybS9wcmVkaWNhdGVzLm1k CmluZGV4IGFhYjVhOTFhZDRkZGM2YTdhMDI2MTFkMDU0NDJkNmRlNjM4NDFhN2MuLjY3ZjJmZGI0 ZjhmNjA3Y2ViNTA4NzFlMWJjMTdkYmRiOWI5ODdjMmMgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcv YXJtL3ByZWRpY2F0ZXMubWQKKysrIGIvZ2NjL2NvbmZpZy9hcm0vcHJlZGljYXRlcy5tZApAQCAt ODc2LDYgKzg3NiwxMCBAQAogICAoYW5kIChtYXRjaF9jb2RlICJtZW0iKQogICAgICAgIChtYXRj aF90ZXN0ICJUQVJHRVRfMzJCSVQgJiYgbmVvbl92ZWN0b3JfbWVtX29wZXJhbmQgKG9wLCAyLCB0 cnVlKSIpKSkKIAorKGRlZmluZV9wcmVkaWNhdGUgIm12ZV9zdHJ1Y3Rfb3BlcmFuZCIKKyAgKGFu ZCAobWF0Y2hfY29kZSAibWVtIikKKyAgICAgICAobWF0Y2hfdGVzdCAiVEFSR0VUX0hBVkVfTVZF ICYmIG12ZV9zdHJ1Y3RfbWVtX29wZXJhbmQgKG9wKSIpKSkKKwogKGRlZmluZV9wcmVkaWNhdGUg Im5lb25fcGVybWlzc2l2ZV9zdHJ1Y3Rfb3BlcmFuZCIKICAgKGFuZCAobWF0Y2hfY29kZSAibWVt IikKICAgICAgICAobWF0Y2hfdGVzdCAiVEFSR0VUXzMyQklUICYmIG5lb25fdmVjdG9yX21lbV9v cGVyYW5kIChvcCwgMiwgZmFsc2UpIikpKQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2FybS9tdmUvaW50cmluc2ljcy92bGRzdDI0cV9yZWdfb2Zmc2V0LmMgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvYXJtL212ZS9pbnRyaW5zaWNzL3ZsZHN0MjRxX3JlZ19vZmZzZXQu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi5kMDI4YjkxZTgxYWVkOTdlNGIzMDk3OGI2ZDEzMGE2Zjk3ZjFjYmMzCi0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9tdmUvaW50cmlu c2ljcy92bGRzdDI0cV9yZWdfb2Zmc2V0LmMKQEAgLTAsMCArMSwzMDAgQEAKKy8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGFybV92OF8xbV9tdmVfb2sgfSAqLworLyogeyBkZy1hZGQt b3B0aW9ucyBhcm1fdjhfMW1fbXZlIH0gKi8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICIt TzEiIH0gKi8KKy8qIHsgZGctZmluYWwgeyBjaGVjay1mdW5jdGlvbi1ib2RpZXMgIioqIiAiIiB9 IH0gKi8KKworI2luY2x1ZGUgImFybV9tdmUuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRl cm4gIkMiIHsKKyNlbmRpZgorCisvKgorKip0ZXN0OgorKioJLi4uCisqKgl2bGQyMC44CXtxWzAt OV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2bGQyMS44CXtxWzAtOV0r LCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgkuLi4KKyoqCXZsZDIwLjgJe3Fb MC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZsZDIxLjgJe3FbMC05 XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCS4uLgorKioJdnN0MjAuOAl7 cVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJdnN0MjEuOAl7cVsw LTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJLi4uCisqKgl2c3QyMC44 CXtxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2c3QyMS44CXtx WzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgkuLi4KKyovCit2b2lk Cit0ZXN0KGNvbnN0IHVpbnQ4X3QgKiBpbiwgdWludDhfdCAqIG91dCwgaW50IHdpZHRoKQorewor ICB1aW50OHgxNngyX3QgcmcgPSB2bGQycShpbik7CisgIHVpbnQ4eDE2eDJfdCBnYiA9IHZsZDJx KGluICsgd2lkdGgpOworICB2c3QycSAob3V0LCByZyk7CisgIHZzdDJxIChvdXQgKyB3aWR0aCwg Z2IpOworfQorCisvKgorKip0ZXN0MjoKKyoqCS4uLgorKioJdmxkMjAuOAl7cVswLTldKywgcVsw LTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJdmxkMjEuOAl7cVswLTldKywgcVswLTld K30sIFxbKD86aXB8ZnB8clswLTldKylcXSEKKyoqCXZsZDIwLjgJe3FbMC05XSssIHFbMC05XSt9 LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZsZDIxLjgJe3FbMC05XSssIHFbMC05XSt9LCBc Wyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZzdDIwLjgJe3FbMC05XSssIHFbMC05XSt9LCBcWyg/ OmlwfGZwfHJbMC05XSspXF0KKyoqCXZzdDIxLjgJe3FbMC05XSssIHFbMC05XSt9LCBcWyg/Omlw fGZwfHJbMC05XSspXF0hCisqKgl2c3QyMC44CXtxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxm cHxyWzAtOV0rKVxdCisqKgl2c3QyMS44CXtxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxy WzAtOV0rKVxdCisqKgkuLi4KKyovCit2b2lkCit0ZXN0Mihjb25zdCB1aW50OF90ICogaW4sIHVp bnQ4X3QgKiBvdXQpCit7CisgIHVpbnQ4eDE2eDJfdCByZyA9IHZsZDJxKGluKTsKKyAgdWludDh4 MTZ4Ml90IGdiID0gdmxkMnEoaW4gKyAzMik7CisgIHZzdDJxIChvdXQsIHJnKTsKKyAgdnN0MnEg KG91dCArIDMyLCBnYik7Cit9CisKKy8qCisqKnRlc3QzOgorKioJLi4uCisqKgl2bGQyMC44CXtx WzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2bGQyMS44CXtxWzAt OV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgkuLi4KKyoqCXZsZDIwLjgJ e3FbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZsZDIxLjgJe3Fb MC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCS4uLgorKioJdnN0MjAu OAl7cVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJdnN0MjEuOAl7 cVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJLi4uCisqKgl2c3Qy MC44CXtxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2c3QyMS44 CXtxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgkuLi4KKyovCit2 b2lkCit0ZXN0Myhjb25zdCB1aW50OF90ICogaW4sIHVpbnQ4X3QgKiBvdXQpCit7CisgIHVpbnQ4 eDE2eDJfdCByZyA9IHZsZDJxKGluKTsKKyAgdWludDh4MTZ4Ml90IGdiID0gdmxkMnEoaW4gLSAz Mik7CisgIHZzdDJxIChvdXQsIHJnKTsKKyAgdnN0MnEgKG91dCAtIDMyLCBnYik7Cit9CisKKy8q CisqKnRlc3Q0OgorKioJLi4uCisqKgl2bGQyMC44CXtxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzpp cHxmcHxyWzAtOV0rKVxdCisqKgl2bGQyMS44CXtxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxm cHxyWzAtOV0rKVxdCisqKgkuLi4KKyoqCXZsZDIwLjgJe3FbMC05XSssIHFbMC05XSt9LCBcWyg/ OmlwfGZwfHJbMC05XSspXF0KKyoqCXZsZDIxLjgJe3FbMC05XSssIHFbMC05XSt9LCBcWyg/Omlw fGZwfHJbMC05XSspXF0KKyoqCS4uLgorKioJdnN0MjAuOAl7cVswLTldKywgcVswLTldK30sIFxb KD86aXB8ZnB8clswLTldKylcXQorKioJdnN0MjEuOAl7cVswLTldKywgcVswLTldK30sIFxbKD86 aXB8ZnB8clswLTldKylcXQorKioJLi4uCisqKgl2c3QyMC44CXtxWzAtOV0rLCBxWzAtOV0rfSwg XFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2c3QyMS44CXtxWzAtOV0rLCBxWzAtOV0rfSwgXFso PzppcHxmcHxyWzAtOV0rKVxdCisqKgkuLi4KKyovCit2b2lkCit0ZXN0NChjb25zdCB1aW50OF90 ICogaW4sIHVpbnQ4X3QgKiBvdXQpCit7CisgIHVpbnQ4eDE2eDJfdCByZyA9IHZsZDJxKGluKTsK KyAgdWludDh4MTZ4Ml90IGdiID0gdmxkMnEoaW4gKyA2NCk7CisgIHZzdDJxIChvdXQsIHJnKTsK KyAgdnN0MnEgKG91dCArIDY0LCBnYik7Cit9CisKKy8qCisqKnRlc3Q1OgorKioJLi4uCisqKgl2 bGQyMC44CXtxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2bGQy MS44CXtxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgkuLi4KKyoq CXZsZDIwLjgJe3FbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZs ZDIxLjgJe3FbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCS4uLgor KioJdnN0MjAuOAl7cVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJ dnN0MjEuOAl7cVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJLi4u CisqKgl2c3QyMC44CXtxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisq Kgl2c3QyMS44CXtxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgku Li4KKyovCit2b2lkCit0ZXN0NShjb25zdCB1aW50OF90ICogaW4sIHVpbnQ4X3QgKiBvdXQpCit7 CisgIHVpbnQ4eDE2eDJfdCByZyA9IHZsZDJxKGluKTsKKyAgdWludDh4MTZ4Ml90IGdiID0gdmxk MnEoaW4gKyA0Mik7CisgIHZzdDJxIChvdXQsIHJnKTsKKyAgdnN0MnEgKG91dCArIDQyLCBnYik7 Cit9CisKKy8qCisqKnRlc3Q2OgorKioJLi4uCisqKgl2bGQ0MC44CXtxWzAtOV0rLCBxWzAtOV0r LCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2bGQ0MS44CXtx WzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxd CisqKgl2bGQ0Mi44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzpp cHxmcHxyWzAtOV0rKVxdCisqKgl2bGQ0My44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBx WzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgkuLi4KKyoqCXZsZDQwLjgJe3FbMC05 XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoq CXZsZDQxLjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZw fHJbMC05XSspXF0KKyoqCXZsZDQyLjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05 XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZsZDQzLjgJe3FbMC05XSssIHFbMC05XSss IHFbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCS4uLgorKioJdnN0 NDAuOAl7cVswLTldKywgcVswLTldKywgcVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clsw LTldKylcXQorKioJdnN0NDEuOAl7cVswLTldKywgcVswLTldKywgcVswLTldKywgcVswLTldK30s IFxbKD86aXB8ZnB8clswLTldKylcXQorKioJdnN0NDIuOAl7cVswLTldKywgcVswLTldKywgcVsw LTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJdnN0NDMuOAl7cVswLTld KywgcVswLTldKywgcVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJ Li4uCisqKgl2c3Q0MC44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFso PzppcHxmcHxyWzAtOV0rKVxdCisqKgl2c3Q0MS44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0r LCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2c3Q0Mi44CXtxWzAtOV0rLCBx WzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2c3Q0 My44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAt OV0rKVxdCisqKgkuLi4KKyovCit2b2lkCit0ZXN0Nihjb25zdCB1aW50OF90ICogaW4sIHVpbnQ4 X3QgKiBvdXQsIGludCB3aWR0aCkKK3sKKyAgdWludDh4MTZ4NF90IHJnID0gdmxkNHEoaW4pOwor ICB1aW50OHgxNng0X3QgZ2IgPSB2bGQ0cShpbiArIHdpZHRoKTsKKyAgdnN0NHEgKG91dCwgcmcp OworICB2c3Q0cSAob3V0ICsgd2lkdGgsIGdiKTsKK30KKworLyoKKyoqdGVzdDc6CisqKgkuLi4K KyoqCXZsZDQwLjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/Omlw fGZwfHJbMC05XSspXF0KKyoqCXZsZDQxLjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFb MC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZsZDQyLjgJe3FbMC05XSssIHFbMC05 XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZsZDQzLjgJ e3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSsp XF0KKyoqCS4uLgorKioJdmxkNDAuOAl7cVswLTldKywgcVswLTldKywgcVswLTldKywgcVswLTld K30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJdmxkNDEuOAl7cVswLTldKywgcVswLTldKywg cVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJdmxkNDIuOAl7cVsw LTldKywgcVswLTldKywgcVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQor KioJdmxkNDMuOAl7cVswLTldKywgcVswLTldKywgcVswLTldKywgcVswLTldK30sIFxbKD86aXB8 ZnB8clswLTldKylcXQorKioJLi4uCisqKgl2c3Q0MC44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAt OV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2c3Q0MS44CXtxWzAtOV0r LCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2 c3Q0Mi44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxy WzAtOV0rKVxdCisqKgl2c3Q0My44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0r fSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgkuLi4KKyoqCXZzdDQwLjgJe3FbMC05XSssIHFb MC05XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZzdDQx LjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05 XSspXF0KKyoqCXZzdDQyLjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05XSt9LCBc Wyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZzdDQzLjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05 XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCS4uLgorKi8KK3ZvaWQKK3Rl c3Q3KGNvbnN0IHVpbnQ4X3QgKiBpbiwgdWludDhfdCAqIG91dCkKK3sKKyAgdWludDh4MTZ4NF90 IHJnID0gdmxkNHEoaW4pOworICB1aW50OHgxNng0X3QgZ2IgPSB2bGQ0cShpbiArIDMyKTsKKyAg dnN0NHEgKG91dCwgcmcpOworICB2c3Q0cSAob3V0ICsgMzIsIGdiKTsKK30KKworLyoKKyoqdGVz dDg6CisqKgkuLi4KKyoqCXZsZDQwLjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05 XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZsZDQxLjgJe3FbMC05XSssIHFbMC05XSss IHFbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZsZDQyLjgJe3Fb MC05XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0K KyoqCXZsZDQzLjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/Omlw fGZwfHJbMC05XSspXF0hCisqKgl2bGQ0MC44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBx WzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2bGQ0MS44CXtxWzAtOV0rLCBxWzAt OV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2bGQ0Mi44 CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0r KVxdCisqKgl2bGQ0My44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFso PzppcHxmcHxyWzAtOV0rKVxdCisqKgl2c3Q0MC44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0r LCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2c3Q0MS44CXtxWzAtOV0rLCBx WzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2c3Q0 Mi44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAt OV0rKVxdCisqKgl2c3Q0My44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwg XFsoPzppcHxmcHxyWzAtOV0rKVxdIQorKioJdnN0NDAuOAl7cVswLTldKywgcVswLTldKywgcVsw LTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJdnN0NDEuOAl7cVswLTld KywgcVswLTldKywgcVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJ dnN0NDIuOAl7cVswLTldKywgcVswLTldKywgcVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8 clswLTldKylcXQorKioJdnN0NDMuOAl7cVswLTldKywgcVswLTldKywgcVswLTldKywgcVswLTld K30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJLi4uCisqLwordm9pZAordGVzdDgoY29uc3Qg dWludDhfdCAqIGluLCB1aW50OF90ICogb3V0KQoreworICB1aW50OHgxNng0X3QgcmcgPSB2bGQ0 cShpbik7CisgIHVpbnQ4eDE2eDRfdCBnYiA9IHZsZDRxKGluICsgNjQpOworICB2c3Q0cSAob3V0 LCByZyk7CisgIHZzdDRxIChvdXQgKyA2NCwgZ2IpOworfQorCisvKgorKip0ZXN0OToKKyoqCS4u LgorKioJdmxkNDAuOAl7cVswLTldKywgcVswLTldKywgcVswLTldKywgcVswLTldK30sIFxbKD86 aXB8ZnB8clswLTldKylcXQorKioJdmxkNDEuOAl7cVswLTldKywgcVswLTldKywgcVswLTldKywg cVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJdmxkNDIuOAl7cVswLTldKywgcVsw LTldKywgcVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJdmxkNDMu OAl7cVswLTldKywgcVswLTldKywgcVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTld KylcXQorKioJLi4uCisqKgl2bGQ0MC44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAt OV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2bGQ0MS44CXtxWzAtOV0rLCBxWzAtOV0r LCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2bGQ0Mi44CXtx WzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxd CisqKgl2bGQ0My44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzpp cHxmcHxyWzAtOV0rKVxdCisqKgkuLi4KKyoqCXZzdDQwLjgJe3FbMC05XSssIHFbMC05XSssIHFb MC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZzdDQxLjgJe3FbMC05 XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoq CXZzdDQyLjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZw fHJbMC05XSspXF0KKyoqCXZzdDQzLjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05 XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCS4uLgorKioJdnN0NDAuOAl7cVswLTldKywg cVswLTldKywgcVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJdnN0 NDEuOAl7cVswLTldKywgcVswLTldKywgcVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clsw LTldKylcXQorKioJdnN0NDIuOAl7cVswLTldKywgcVswLTldKywgcVswLTldKywgcVswLTldK30s IFxbKD86aXB8ZnB8clswLTldKylcXQorKioJdnN0NDMuOAl7cVswLTldKywgcVswLTldKywgcVsw LTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJLi4uCisqLwordm9pZAor dGVzdDkoY29uc3QgdWludDhfdCAqIGluLCB1aW50OF90ICogb3V0KQoreworICB1aW50OHgxNng0 X3QgcmcgPSB2bGQ0cShpbik7CisgIHVpbnQ4eDE2eDRfdCBnYiA9IHZsZDRxKGluIC0gNjQpOwor ICB2c3Q0cSAob3V0LCByZyk7CisgIHZzdDRxIChvdXQgLSA2NCwgZ2IpOworfQorCisvKgorKip0 ZXN0MTA6CisqKgkuLi4KKyoqCXZsZDQwLjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFb MC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZsZDQxLjgJe3FbMC05XSssIHFbMC05 XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZsZDQyLjgJ e3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSsp XF0KKyoqCXZsZDQzLjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/ OmlwfGZwfHJbMC05XSspXF0KKyoqCS4uLgorKioJdmxkNDAuOAl7cVswLTldKywgcVswLTldKywg cVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJdmxkNDEuOAl7cVsw LTldKywgcVswLTldKywgcVswLTldKywgcVswLTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQor KioJdmxkNDIuOAl7cVswLTldKywgcVswLTldKywgcVswLTldKywgcVswLTldK30sIFxbKD86aXB8 ZnB8clswLTldKylcXQorKioJdmxkNDMuOAl7cVswLTldKywgcVswLTldKywgcVswLTldKywgcVsw LTldK30sIFxbKD86aXB8ZnB8clswLTldKylcXQorKioJLi4uCisqKgl2c3Q0MC44CXtxWzAtOV0r LCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2 c3Q0MS44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxy WzAtOV0rKVxdCisqKgl2c3Q0Mi44CXtxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0rLCBxWzAtOV0r fSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgl2c3Q0My44CXtxWzAtOV0rLCBxWzAtOV0rLCBx WzAtOV0rLCBxWzAtOV0rfSwgXFsoPzppcHxmcHxyWzAtOV0rKVxdCisqKgkuLi4KKyoqCXZzdDQw LjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05 XSspXF0KKyoqCXZzdDQxLjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05XSssIHFbMC05XSt9LCBc Wyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZzdDQyLjgJe3FbMC05XSssIHFbMC05XSssIHFbMC05 XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCXZzdDQzLjgJe3FbMC05XSss IHFbMC05XSssIHFbMC05XSssIHFbMC05XSt9LCBcWyg/OmlwfGZwfHJbMC05XSspXF0KKyoqCS4u LgorKi8KK3ZvaWQKK3Rlc3QxMChjb25zdCB1aW50OF90ICogaW4sIHVpbnQ4X3QgKiBvdXQpCit7 CisgIHVpbnQ4eDE2eDRfdCByZyA9IHZsZDRxKGluKTsKKyAgdWludDh4MTZ4NF90IGdiID0gdmxk NHEoaW4gKyA0Mik7CisgIHZzdDRxIChvdXQsIHJnKTsKKyAgdnN0NHEgKG91dCArIDQyLCBnYik7 Cit9CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci1ub3QgIl9fQVJNX3VuZGVmIiB9IH0gKi8KXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCg== --------------TvTC0elo2Z6IrhfD0DiPo9dE--