From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on2052.outbound.protection.outlook.com [40.107.13.52]) by sourceware.org (Postfix) with ESMTPS id 1106A3858D38 for ; Wed, 11 Jan 2023 14:26:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1106A3858D38 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=IDVLJtOeASp1wHXEcLaW3A2EtteKLNBeNbE4Dx2YNnw=; b=1GFqqwNlg0/+G4a+L2rTO0NggE2r5urt1D3AtvkuK5fOPVf3uzTDjRZ5U3LtRkvRaOj+w6DSNafxfXSw+cnt88ZK6TgFKJboNDDQtJAq3Fgx5Gzcw1yYP1brm/bGWACKrIlPjiQMKb9o9N2uee03jbVLjloh4NirMb6HOnt5lzo= Received: from AS9P194CA0003.EURP194.PROD.OUTLOOK.COM (2603:10a6:20b:46d::12) by AS2PR08MB9127.eurprd08.prod.outlook.com (2603:10a6:20b:5fe::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.12; Wed, 11 Jan 2023 14:26:15 +0000 Received: from VI1EUR03FT006.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:46d:cafe::e1) by AS9P194CA0003.outlook.office365.com (2603:10a6:20b:46d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.18 via Frontend Transport; Wed, 11 Jan 2023 14:26:15 +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 VI1EUR03FT006.mail.protection.outlook.com (100.127.144.187) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.18 via Frontend Transport; Wed, 11 Jan 2023 14:26:14 +0000 Received: ("Tessian outbound 333ca28169fa:v132"); Wed, 11 Jan 2023 14:26:14 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 700bbf15ddd305bb X-CR-MTA-TID: 64aa7808 Received: from 40ce1b75bb27.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id EC1BEFF1-76D8-4C22-AD4B-909561661CA2.1; Wed, 11 Jan 2023 14:25:20 +0000 Received: from EUR05-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 40ce1b75bb27.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 11 Jan 2023 14:25:20 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fF7AJaq9RdDWH9/AhPn1i28Vlp7KeSFTXAjbyPfdJPt++uacdQrAWYhO/MBc9oXePHp8csPjX4mf/bl7RPpENgPQyG3pGkfUm8faqTkia7UYxvXLl7v/QWPbB7rwCRl23nN5mhXLLosJEgAo23Ea2G0jrTgQgwAZZcAVSNZpME1qvf+VWL4xMYxJnDGe1i192z3jAXPpmF1RQYlXJf8U/y9oO/1ISeN/tARZJrlr5y2gUYyTymv8In76CqazUfPDc3qfjpCf3qgvAfLxklPv9yrG7rFJ7+XgUOrq3pPWOp7i210gMDPxggy/w8DUc/fu7RWOd5Z1PqmakQXL6S8Tyg== 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=IDVLJtOeASp1wHXEcLaW3A2EtteKLNBeNbE4Dx2YNnw=; b=Wt9tVHp5dFAQx96ipMH5nhq+YW90FBeQiure7zbgD2yE3QeOgJtrpvFIyrPKPo5lVHD4TfFO7EcWxnJmrrHLtFaaNNWXuPgNObM3+QdZUAlhE14uqO7aqLKhYbju/G/Qb2wro1eb60JcwlOAoCqQ2LKtGk1SJb7O0H7SNxN97W1zJvpWwHlBKs349KDJgYhg/SPb9nNilFWgqZJR0MGA9X5D8tsA/yGYi5IWoL0nwTFOUxYMpMgtJSbGF1miVrLkdj4e8RisK2/TuB0i24On3WcNBXMW9kiVwBvXpdsed4Y5iuo2hJTVYyZeh71O00xZGPNeCBeRTxazqDH2WxJFmg== 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=IDVLJtOeASp1wHXEcLaW3A2EtteKLNBeNbE4Dx2YNnw=; b=1GFqqwNlg0/+G4a+L2rTO0NggE2r5urt1D3AtvkuK5fOPVf3uzTDjRZ5U3LtRkvRaOj+w6DSNafxfXSw+cnt88ZK6TgFKJboNDDQtJAq3Fgx5Gzcw1yYP1brm/bGWACKrIlPjiQMKb9o9N2uee03jbVLjloh4NirMb6HOnt5lzo= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from AS8PR08MB6503.eurprd08.prod.outlook.com (2603:10a6:20b:33b::18) by AS2PR08MB8805.eurprd08.prod.outlook.com (2603:10a6:20b:5f5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.18; Wed, 11 Jan 2023 14:25:17 +0000 Received: from AS8PR08MB6503.eurprd08.prod.outlook.com ([fe80::6ba0:d8b5:6133:e36b]) by AS8PR08MB6503.eurprd08.prod.outlook.com ([fe80::6ba0:d8b5:6133:e36b%2]) with mapi id 15.20.6002.012; Wed, 11 Jan 2023 14:25:17 +0000 Content-Type: multipart/mixed; boundary="------------VOxGp2GPbSsmlCf9iVOezAWt" Message-ID: Date: Wed, 11 Jan 2023 14:25:05 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.0 Content-Language: en-US Cc: Kyrylo Tkachov , "Andre Vieira (lists)" , Richard Earnshaw , "nickc@redhat.com" , ramana.gcc@gmail.com From: Stam Markianos-Wright Subject: [PATCH 2/2 v2] arm: Add support for MVE Tail-Predicated Low Overhead Loops To: "gcc-patches@gcc.gnu.org" X-ClientProxiedBy: LO6P265CA0027.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2ff::13) To AS8PR08MB6503.eurprd08.prod.outlook.com (2603:10a6:20b:33b::18) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: AS8PR08MB6503:EE_|AS2PR08MB8805:EE_|VI1EUR03FT006:EE_|AS2PR08MB9127:EE_ X-MS-Office365-Filtering-Correlation-Id: b7057887-033b-4acf-5d4c-08daf3dfcbe1 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: M74EWjqfc4EfPxx7+7dVUS5eFflJWTIPJzkfpaEESN51mNmgSyQYf9+oUr+O1+UxHQRlSVSB17fJRXc3KCdVlbi8l4r/xPFUn6dxoUfoLVdn9Bx5040DjyvNXsbxeqX5TwO1OX53kvD/+zgJKvhMz8G/jKD95ePTVtD/mcCstoemqcJ4PawqK3ypn9niSCrbUKGNAEYZ3ZcvwBriNoNYAFATp0JnnHQaikVilx1QZM/Ws5d6OGEfIJN8VhnpwvIuFgtjs8mtbrPp/YcHlbZoykwmPey9z1GlUk7fDtH8d++H6oIXdjKvzS2/a089OVXPVE8297neCKqXDH/CnCA81tpj4rMZN7TwvVYj+UZ1OrvwcPKUtnAeekgmfDyfAkQ6qBL//c/XLDKNowuxD1tBBUoamOhML1lIYdmKrkqVMqPxQ9aan0riHG/VDnqdXPBW01+4XYafdHNfzMaefOo1EDNQPd2kuXYZtIVQXkuuh6W1LPhWqXdoU06HYu89bCwK9OszM1PHyVA+FKABRsjVgG2vroDtFKTSZaUIN3ncl8yY27jU6mrpgZCI+LQyN2GPOxMp+uOCn/6LWLj+3maJPOedr7jeiwhLbCqLUEhD+jNVnfgFUEkLN9yEBZniFUhBkKFldHChG8rXQ0I3sBVjzN5jr2MDU9w/w1rxEEjKlVn61GQKZn/5jtOFPN6JhRAsBK3ACmx871u8Exb+ppO4ApCrBOfmvop/D0k4LoGLj+yJxWvHKgEId4zklZvwVPLuO/11JbY4gjo3EohesBmuaL0VGmLxQ13WzgsuQGoTdag= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB6503.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(346002)(376002)(366004)(396003)(39860400002)(136003)(451199015)(2906002)(31686004)(84970400001)(54906003)(2616005)(5660300002)(478600001)(235185007)(41300700001)(8936002)(36756003)(66476007)(4326008)(66946007)(8676002)(66556008)(83380400001)(31696002)(86362001)(316002)(6486002)(6916009)(38100700002)(186003)(26005)(6512007)(6506007)(33964004)(6666004)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB8805 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: VI1EUR03FT006.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 3b6083ef-4a97-439b-95a6-08daf3dfa96c X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MJrgzqtoEn51v5UQ6SNFrd+b6IBP3K0z4bwOy1yXBPkvT/Yo/IhjYD1DhDN4xVygQDKQwJO8hiUHimfjUE3+HFQpUMo//9aF5YaJgcStaEBxzSVpjItADdqlzGMjB1Vm0aEgGKeups9fKFlYNEsJqWJok31uIbyb66kaNDIA5WtEplyMFNYWVn5kqbZubrx9NeWSgSX9ks/ht6D1kmLBVC1V+cdZ72EIjLzKBDk4HlRmyAA1abPcqgyk6NNbSWA76SEv5XjRKN7/2DuekdAjZO5+z+rW7uT1pR6F1qUuxYSl3VGPiXy+dScZjCTGbUN1J6yVP3tr5F2pRjp3ZYtFsClnwlSxMWpuIHLmczwMGqvunE0PPn7fV3Ev8d2X482mCf8YoqjQiQ/U1zKDgnnp3p8VKV5U51wTvN7Xp5Xn77QeIn2lGVKYk2c52M4iSmv9NQ1yW3KM5uQ/nnXUVRlD7xE+6CxxQTt/Nu+ibP51nO+i32sUTXwy6GDhT+9fDzJ8UaRx5gbpXrT0Gf2kU17/3rIcrNamvzCgrU0PiJAowPasuQFqqPAz1OeKHGC8SUKacUGpPJbGvo3Wn01Hz+o02frscCt3S58PINspBejZjb07cKetCL7/rQl86phHY7Zu3ZM34HN0XCYK4iIy+mN3ClVTwXaMyHhgQoqUMhfWzbe+a4pfUwClshuuwpQgU1b4MxMD1gbyRIEPRzmxGgmJ/f6OExmeWfG8gFYAwXoNw5qsUbbVWnostfBYkZLSs89Dr3hQBsxLplXARf8p9iOGHgobtH/2luhAGj2kceuuTsRkCZ2L2p5Fmf0w2ODrIWIG 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)(376002)(136003)(451199015)(36840700001)(40470700004)(46966006)(26005)(31686004)(478600001)(6486002)(336012)(33964004)(6512007)(186003)(54906003)(316002)(2616005)(4326008)(6916009)(6506007)(8936002)(36860700001)(8676002)(6666004)(70206006)(41300700001)(70586007)(107886003)(47076005)(84970400001)(83380400001)(2906002)(5660300002)(235185007)(31696002)(40460700003)(82740400003)(82310400005)(40480700001)(86362001)(36756003)(356005)(81166007)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jan 2023 14:26:14.8741 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b7057887-033b-4acf-5d4c-08daf3dfcbe1 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: VI1EUR03FT006.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB9127 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: --------------VOxGp2GPbSsmlCf9iVOezAWt Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit -----  Respin of the below patch ----- In this 2/2 patch, from v1 to v2 I have: * Removed the modification the interface of the doloop_end target-insn (so I no longer need to touch any other target backends) * Added more modes to `arm_get_required_vpr_reg` to make it flexible between searching: all operands/only input arguments/only outputs. Also added helpers: `arm_get_required_vpr_reg_ret_val` `arm_get_required_vpr_reg_param` * Added support for the use of other VPR predicate values within a dlstp/letp loop, as long as they don't originate from the vctp-generated VPR value. Also changed `arm_mve_get_loop_unique_vctp` to the simpler `arm_mve_get_loop_vctp` since now we can support other VCTP insns within the loop. * Added support for loops of the form:      int num_of_iters = (num_of_elem + num_of_lanes - 1) / num_of_lanes      for (i = 0; i < num_of_iters; i++)        {          p = vctp (num_of_elem)          n -= num_of_lanes;        }    to be tranformed into dlstp/letp loops. * Changed the VCTP look-ahead for SIGN_EXTEND and SUBREG insns to use df def/use chains instead of `next_nonnote_nondebug_insn_bb`. * Added support for using unpredicated (but predicable) insns within the dlstp/letp loop. These need to meet some specific conditions, because they _will_ become implicitly tail predicated by the dlstp/letp transformation. * Added a df chain check to any other instructions to make sure that they don't USE the VCTP-generated VPR value. * Added testing of all these various edge cases. Original email with updated Changelog at the end: Hi all, This is the 2/2 patch that contains the functional changes needed for MVE Tail Predicated Low Overhead Loops.  See my previous email for a general introduction of MVE LOLs. This support is added through the already existing loop-doloop mechanisms that are used for non-MVE dls/le looping. Changes are: 1) Relax the loop-doloop mechanism in the mid-end to allow for    decrement numbers other that -1 and for `count` to be an    rtx containing the number of elements to be processed, rather    than an expression for calculating the number of iterations. 2) Add a `allow_elementwise_doloop` target hook. This allows the    target backend to manipulate the iteration count as it needs:    in our case to change it from a pre-calculation of the number    of iterations to the number of elements to be processed. 3) The doloop_end target-insn now had an additional parameter:    the `count` (note: this is before it gets modified to just be    the number of elements), so that the decrement value is    extracted from that parameter. And many things in the backend to implement the above optimisation: 4)  Appropriate changes to the define_expand of doloop_end and new     patterns for dlstp and letp. 5) `arm_attempt_dlstp_transform`: (called from the define_expand of     doloop_end) this function checks for the loop's suitability for     dlstp/letp transformation and then implements it, if possible. 6) `arm_mve_get_loop_unique_vctp`: A function that loops through     the loop contents and returns the vctp VPR-genereting operation     within the loop, if it is unique and there is exclusively one     vctp within the loop. 7) A couple of utility functions: `arm_mve_get_vctp_lanes` to map    from vctp unspecs to number of lanes, and `arm_get_required_vpr_reg`    to check an insn to see if it requires the VPR or not. No regressions on arm-none-eabi with various targets and on aarch64-none-elf. Thoughts on getting this into trunk? Thank you, Stam Markianos-Wright gcc/ChangeLog:         * config/arm/arm-protos.h (arm_attempt_dlstp_transform): New.         * config/arm/arm.cc (TARGET_ALLOW_ELEMENTWISE_DOLOOP): New.         (arm_mve_get_vctp_lanes): New.         (arm_get_required_vpr_reg): New.         (arm_get_required_vpr_reg_ret_val): New.         (arm_get_required_vpr_reg_param): New.         (arm_mve_get_loop_vctp): New.         (arm_attempt_dlstp_transform): New.         (arm_allow_elementwise_doloop): New.         * config/arm/iterators.md (DLSTP): New.         (mode1): Add DLSTP mappings.         * config/arm/mve.md (*predicated_doloop_end_internal): New.         (dlstp_insn): New.         * config/arm/thumb2.md (doloop_end): Update for MVE LOLs.         * config/arm/unspecs.md: New unspecs.         * tm.texi: Document new hook.         * tm.texi.in: Likewise.         * loop-doloop.cc (doloop_condition_get): Relax conditions.         (doloop_optimize): Add support for elementwise LoLs.         * target.def (allow_elementwise_doloop): New hook.         * targhooks.cc (default_allow_elementwise_doloop): New.         * targhooks.h (default_allow_elementwise_doloop): New. gcc/testsuite/ChangeLog:         * gcc.target/arm/lob.h: Update framework.         * gcc.target/arm/lob1.c: Likewise.         * gcc.target/arm/lob6.c: Likewise.         * gcc.target/arm/dlstp-int16x8.c: New test.         * gcc.target/arm/dlstp-int32x4.c: New test.         * gcc.target/arm/dlstp-int64x2.c: New test.         * gcc.target/arm/dlstp-int8x16.c: New test.         * gcc.target/arm/dlstp-invalid-asm.c: New test.         * gcc.target/arm/dlstp-compile-asm.c: Add testcases. --------------VOxGp2GPbSsmlCf9iVOezAWt Content-Type: text/x-patch; charset=UTF-8; name="rb16111.patch" Content-Disposition: attachment; filename="rb16111.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FybS1wcm90b3MuaCBiL2djYy9jb25maWcvYXJt L2FybS1wcm90b3MuaAppbmRleCA4ZWEzODExOGIwNTc2OWJkNmZjYjFkMjJkOTAyYTUwOTc5Y2Zk OTUzLi45YzMwOTdiODQxODM4YTQ1MTg0NmM1YzY1MDU0YWI2NzU5ZDg2MGE5IDEwMDY0NAotLS0g YS9nY2MvY29uZmlnL2FybS9hcm0tcHJvdG9zLmgKKysrIGIvZ2NjL2NvbmZpZy9hcm0vYXJtLXBy b3Rvcy5oCkBAIC02Myw3ICs2Myw3IEBAIGV4dGVybiB2b2lkIGFybV9kZWNvbXBvc2VfZGlfYmlu b3AgKHJ0eCwgcnR4LCBydHggKiwgcnR4ICosIHJ0eCAqLCBydHggKik7CiBleHRlcm4gYm9vbCBh cm1fcV9iaXRfYWNjZXNzICh2b2lkKTsKIGV4dGVybiBib29sIGFybV9nZV9iaXRzX2FjY2VzcyAo dm9pZCk7CiBleHRlcm4gYm9vbCBhcm1fdGFyZ2V0X2luc25fb2tfZm9yX2xvYiAocnR4KTsKLQor ZXh0ZXJuIHJ0eCBhcm1fYXR0ZW1wdF9kbHN0cF90cmFuc2Zvcm0gKHJ0eCk7CiAjaWZkZWYgUlRY X0NPREUKIGVudW0gcmVnX2NsYXNzCiBhcm1fbW9kZV9iYXNlX3JlZ19jbGFzcyAobWFjaGluZV9t b2RlKTsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FybS5jYyBiL2djYy9jb25maWcvYXJt L2FybS5jYwppbmRleCAzMWYyYTdiOWQ0Njg4ZGRlNjlkMTQzNWUyNGNmODg1ZTg1NDRiZTcxLi5k ZTZhNTA3ZTRjZmRlMGNiODEwODFlZDU3NjljNzU0NWE5ZmY0OGZlIDEwMDY0NAotLS0gYS9nY2Mv Y29uZmlnL2FybS9hcm0uY2MKKysrIGIvZ2NjL2NvbmZpZy9hcm0vYXJtLmNjCkBAIC00NzAsNiAr NDcwLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYyBhcm1fYXR0cmlidXRl X3RhYmxlW10gPQogI3VuZGVmIFRBUkdFVF9TQ0hFRF9SRU9SREVSCiAjZGVmaW5lIFRBUkdFVF9T Q0hFRF9SRU9SREVSIGFybV9zY2hlZF9yZW9yZGVyCiAKKyN1bmRlZiBUQVJHRVRfQUxMT1dfRUxF TUVOVFdJU0VfRE9MT09QX1AKKyNkZWZpbmUgVEFSR0VUX0FMTE9XX0VMRU1FTlRXSVNFX0RPTE9P UF9QIGFybV9hbGxvd19lbGVtZW50d2lzZV9kb2xvb3BfcAorCiAjdW5kZWYgVEFSR0VUX1JFR0lT VEVSX01PVkVfQ09TVAogI2RlZmluZSBUQVJHRVRfUkVHSVNURVJfTU9WRV9DT1NUIGFybV9yZWdp c3Rlcl9tb3ZlX2Nvc3QKIApAQCAtMzQxNjgsOCArMzQxNzEsNTA0IEBAIGFybV90YXJnZXRfaW5z bl9va19mb3JfbG9iIChydHggaW5zbikKIAogICByZXR1cm4gc2luZ2xlX3N1Y2NfcCAoYmIpCiAg ICAgJiYgc2luZ2xlX3ByZWRfcCAoYmIpCi0gICAgJiYgc2luZ2xlX3N1Y2NfZWRnZSAoYmIpLT5k ZXN0ID09IHNpbmdsZV9wcmVkX2VkZ2UgKGJiKS0+c3JjCi0gICAgJiYgY29udGFpbnNfbm9fYWN0 aXZlX2luc25fcCAoYmIpOworICAgICYmIHNpbmdsZV9zdWNjX2VkZ2UgKGJiKS0+ZGVzdCA9PSBz aW5nbGVfcHJlZF9lZGdlIChiYiktPnNyYzsKK30KKworc3RhdGljIGludAorYXJtX212ZV9nZXRf dmN0cF9sYW5lcyAocnR4IHgpCit7CisgIGlmIChHRVRfQ09ERSAoeCkgPT0gU0VUICYmIEdFVF9D T0RFIChYRVhQICh4LCAxKSkgPT0gVU5TUEVDKQorICAgIHsKKyAgICAgIHN3aXRjaCAoWElOVCAo WEVYUCAoeCwgMSksIDEpKQorCXsKKwkgIGNhc2UgVkNUUDhROgorCSAgICByZXR1cm4gMTY7CisJ ICBjYXNlIFZDVFAxNlE6CisJICAgIHJldHVybiA4OworCSAgY2FzZSBWQ1RQMzJROgorCSAgICBy ZXR1cm4gNDsKKwkgIGNhc2UgVkNUUDY0UToKKwkgICAgcmV0dXJuIDI7CisJICBkZWZhdWx0Ogor CSAgICBicmVhazsKKwl9CisgICAgfQorICByZXR1cm4gMDsKK30KKworLyogQ2hlY2sgaWYgYW4g aW5zbiByZXF1aXJlcyB0aGUgdXNlIG9mIHRoZSBWUFJfUkVHLCBpZiBpdCBkb2VzLCByZXR1cm4g dGhlCisgICBzdWItcnR4IG9mIHRoZSBWUFJfUkVHLiAgVGhlIGB0eXBlYCBhcmd1bWVudCBjb250 cm9scyB3aGV0aGVyCisgICB0aGlzIGZ1bmN0aW9uIHNob3VsZDoKKyAgICogRm9yIHR5cGUgPT0g MCwgY2hlY2sgYWxsIG9wZXJhbmRzLCBpbmNsdWRpbmcgdGhlIE9VVCBvcGVyYW5kcywKKyAgICAg YW5kIHJldHVybiB0aGUgZmlyc3Qgb2NjdXJhbmNlIG9mIHRoZSBWUFJfUkVHLgorICAgKiBGb3Ig dHlwZSA9PSAxLCBvbmx5IGNoZWNrIHRoZSBpbnB1dCBvcGVyYW5kcy4KKyAgICogRm9yIHR5cGUg PT0gMiwgb25seSBjaGVjayB0aGUgb3V0cHV0IG9wZXJhbmRzLgorICAgKElOT1VUIG9wZXJhbmRz IGFyZSBjb25zaWRlcmVkIGJvdGggYXMgaW5wdXQgYW5kIG91dHB1dCBvcGVyYW5kcykKKyovCitz dGF0aWMgcnR4Cithcm1fZ2V0X3JlcXVpcmVkX3Zwcl9yZWcgKHJ0eF9pbnNuICppbnNuLCBpbnQg dHlwZSA9IDApCit7CisgIGdjY19hc3NlcnQgKHR5cGUgPT0gMCB8fCB0eXBlID09IDEKKwkgICAg ICB8fCB0eXBlID09IDIpOworICBpZiAoIU5PTkpVTVBfSU5TTl9QIChpbnNuKSkKKyAgICByZXR1 cm4gTlVMTF9SVFg7CisKKyAgYm9vbCByZXF1aXJlc192cHI7CisgIGV4dHJhY3RfY29uc3RyYWlu X2luc24gKGluc24pOworICBpbnQgbl9vcGVyYW5kcyA9IHJlY29nX2RhdGEubl9vcGVyYW5kczsK KyAgaWYgKHJlY29nX2RhdGEubl9hbHRlcm5hdGl2ZXMgPT0gMCkKKyAgICByZXR1cm4gTlVMTF9S VFg7CisKKyAgLyogRmlsbCBpbiByZWNvZ19vcF9hbHQgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0 aGUgY29uc3RyYWludHMgb2YKKyAgICAgdGhpcyBpbnNuLiAgKi8KKyAgcHJlcHJvY2Vzc19jb25z dHJhaW50cyAoaW5zbik7CisKKyAgZm9yIChpbnQgb3AgPSAwOyBvcCA8IG5fb3BlcmFuZHM7IG9w KyspCisgICAgeworICAgICAgcmVxdWlyZXNfdnByID0gdHJ1ZTsKKyAgICAgIGlmICh0eXBlID09 IDEgJiYgKHJlY29nX2RhdGEub3BlcmFuZF90eXBlW29wXSA9PSBPUF9PVVQKKwkJCXx8IHJlY29n X2RhdGEub3BlcmFuZF90eXBlW29wXSA9PSBPUF9JTk9VVCkpCisJY29udGludWU7CisgICAgICBl bHNlIGlmICh0eXBlID09IDIgJiYgKHJlY29nX2RhdGEub3BlcmFuZF90eXBlW29wXSA9PSBPUF9J TgorCQkJICAgICB8fCByZWNvZ19kYXRhLm9wZXJhbmRfdHlwZVtvcF0gPT0gT1BfSU5PVVQpKQor CWNvbnRpbnVlOworCisgICAgICAvKiBJdGVyYXRlIHRocm91Z2ggYWx0ZXJuYXRpdmVzIG9mIG9w ZXJhbmQgIm9wIiBpbiByZWNvZ19vcF9hbHQgYW5kCisJIGlkZW50aWZ5IGlmIHRoZSBvcGVyYW5k IGlzIHJlcXVpcmVkIHRvIGJlIHRoZSBWUFIuICAqLworICAgICAgZm9yIChpbnQgYWx0ID0gMDsg YWx0IDwgcmVjb2dfZGF0YS5uX2FsdGVybmF0aXZlczsgYWx0KyspCisJeworCSAgY29uc3Qgb3Bl cmFuZF9hbHRlcm5hdGl2ZSAqb3BfYWx0CisJICAgICAgPSAmcmVjb2dfb3BfYWx0W2FsdCAqIG5f b3BlcmFuZHNdOworCSAgLyogRmV0Y2ggdGhlIHJlZ19jbGFzcyBmb3IgZWFjaCBlbnRyeSBhbmQg Y2hlY2sgaXQgYWdhaW5zdCB0aGUKKwkgICAqIFZQUl9SRUcgcmVnX2NsYXNzLiAgKi8KKwkgIGlm IChhbHRlcm5hdGl2ZV9jbGFzcyAob3BfYWx0LCBvcCkgIT0gVlBSX1JFRykKKwkgICAgcmVxdWly ZXNfdnByID0gZmFsc2U7CisJfQorICAgICAgLyogSWYgYWxsIGFsdGVybmF0aXZlcyBvZiB0aGUg aW5zbiByZXF1aXJlIHRoZSBWUFIgcmVnIGZvciB0aGlzIG9wZXJhbmQsCisJIGl0IG1lYW5zIHRo YXQgZWl0aGVyIHRoaXMgaXMgVlBSLWdlbmVyYXRpbmcgaW5zdHJ1Y3Rpb24sIGxpa2UgYSB2Y3Rw LAorCSB2Y21wLCBldGMuLCBvciBpdCBpcyBhIFZQVC1wcmVkaWNhdGVkIGluc3J1Y3Rpb24uICBS ZXR1cm4gdGhlIHN1YnJ0eAorCSBvZiB0aGUgVlBSIHJlZyBvcGVyYW5kLiAgKi8KKyAgICAgIGlm IChyZXF1aXJlc192cHIpCisJcmV0dXJuIHJlY29nX2RhdGEub3BlcmFuZFtvcF07CisgICAgfQor ICByZXR1cm4gTlVMTF9SVFg7Cit9CisKK3N0YXRpYyBydHgKK2FybV9nZXRfcmVxdWlyZWRfdnBy X3JlZ19yZXRfdmFsIChydHhfaW5zbiAqaW5zbikKK3sKKyAgcmV0dXJuIGFybV9nZXRfcmVxdWly ZWRfdnByX3JlZyAoaW5zbiwgMik7Cit9CisKK3N0YXRpYyBydHgKK2FybV9nZXRfcmVxdWlyZWRf dnByX3JlZ19wYXJhbSAocnR4X2luc24gKmluc24pCit7CisgIHJldHVybiBhcm1fZ2V0X3JlcXVp cmVkX3Zwcl9yZWcgKGluc24sIDEpOworfQorCisvKiBTY2FuIHRoZSBiYXNpYyBibG9jayBvZiBh IGxvb3AgYm9keSBmb3IgYSB2Y3RwIGluc3RydWN0aW9uLiAgSWYgdGhlcmUgaXMKKyAgIGF0IGxl YXN0IHZjdHAgaW5zdHJ1Y3Rpb24sIHJldHVybiB0aGUgZmlyc3QgcnR4X2luc24gKi4gICovCisK K3N0YXRpYyBydHhfaW5zbiAqCithcm1fbXZlX2dldF9sb29wX3ZjdHAgKGJhc2ljX2Jsb2NrIGJi KQoreworICBydHhfaW5zbiAqaW5zbiA9IEJCX0hFQUQgKGJiKTsKKworICAvKiBOb3cgc2NhbiB0 aHJvdWdoIGFsbCB0aGUgaW5zdHJ1Y3Rpb24gcGF0dGVybnMgYW5kCisgICAgIHBpY2sgb3V0IGFu eSBNVkUgaW5zdHJ1Y3Rpb25zLiAgKi8KKyAgRk9SX0JCX0lOU05TIChiYiwgaW5zbikKKyAgICBp ZiAoSU5TTl9QIChpbnNuKSkKKyAgICAgIGlmIChhcm1fbXZlX2dldF92Y3RwX2xhbmVzIChQQVRU RVJOIChpbnNuKSkgIT0gMCkKKwlyZXR1cm4gaW5zbjsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3J0 eAorYXJtX2F0dGVtcHRfZGxzdHBfdHJhbnNmb3JtIChydHggbGFiZWwpCit7CisgIGludCBkZWNy ZW1lbnRudW07CisgIGJhc2ljX2Jsb2NrIGJvZHkgPSBCTE9DS19GT1JfSU5TTiAobGFiZWwpLT5w cmV2X2JiOworCisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYiBpcyB3aXRoaW4gYSBsb29wIHRoYXQg aGFzIGFsbCByZXF1aXJlZCBtZXRhZGF0YS4gICovCisgIGlmICghYm9keS0+bG9vcF9mYXRoZXIg fHwgIWJvZHktPmxvb3BfZmF0aGVyLT5oZWFkZXIKKyAgICAgIHx8ICFib2R5LT5sb29wX2ZhdGhl ci0+c2ltcGxlX2xvb3BfZGVzYykKKyAgICByZXR1cm4gR0VOX0lOVCAoMSk7CisgIGJhc2ljX2Js b2NrIHByZV9sb29wX2JiMSA9IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGJvZHktPmxvb3BfZmF0aGVy KS0+c3JjOworICBiYXNpY19ibG9jayBwcmVfbG9vcF9iYjIgPSBwcmVfbG9vcF9iYjEtPnByZXZf YmI7CisgIHJ0eCBjb3VudCA9IHNpbXBsZV9sb29wX2Rlc2MgKGJvZHktPmxvb3BfZmF0aGVyKS0+ bml0ZXJfZXhwcjsKKyAgcnR4IHNoaWZ0X2V4cHIgPSBOVUxMX1JUWDsKKyAgcnR4IGluaXRpYWxf Y29tcGFyZSA9IE5VTExfUlRYOworCisgIC8qIERvbG9vcCBjYW4gb25seSBiZSBkb25lICJlbGVt ZW50d2lzZSIgd2l0aCBwcmVkaWNhdGVkIGRsc3RwL2xldHAgaWYgaXQKKyAgICAgY29udGFpbnMg YSBWQ1RQIG9uIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgcHJvY2Vzc2VkIGJ5IHRoZSBsb29wLgor ICAgICBGaW5kIHRoZSBWQ1RQIHByZWRpY2F0ZSBnZW5lcmF0aW9uIGluc2lkZSB0aGUgbG9vcCBi b2R5IEJCLiAgKi8KKyAgcnR4X2luc24gKnZjdHBfaW5zbiA9IGFybV9tdmVfZ2V0X2xvb3BfdmN0 cCAoYm9keSk7CisgIGlmICghdmN0cF9pbnNuKQorICAgIHJldHVybiBHRU5fSU5UICgxKTsKKwor ICAvKiBBZGRpdGlvbmFsbHksIHRoZSBpdGVyYXRpb24gY291bnRlciBtdXN0IG9ubHkgZ2V0IGRl Y3JlbWVudGVkIGJ5IHRoZQorICAgICBudW1iZXIgb2YgTVZFIGxhbmVzIChhcyBwZXIgdGhlIGRh dGEgdHlwZSkuCisgICAgIFRoZXJlIGFyZSBvbmx5IHR3byB0eXBlcyBvZiBsb29wcyB0aGF0IGNh biBiZSB0dXJuZWQgaW50byBkbHN0cC9sZXRwIGxvb3BzOgorICAgICBBKSBMb29wcyBvZiB0aGUg Zm9ybToKKwkgd2hpbGUgKG51bV9vZl9lbGVtID4gMCkKKwkgICB7CisJICAgICBwID0gdmN0cDxz aXplPiAobnVtX29mX2VsZW0pCisJICAgICBuIC09IG51bV9vZl9sYW5lczsKKwkgICB9CisgICAg IEIpIExvb3BzIG9mIHRoZSBmb3JtOgorCSBpbnQgbnVtX29mX2l0ZXJzID0gKG51bV9vZl9lbGVt ICsgbnVtX29mX2xhbmVzIC0gMSkgLyBudW1fb2ZfbGFuZXMKKwkgZm9yIChpID0gMDsgaSA8IG51 bV9vZl9pdGVyczsgaSsrKQorCSAgIHsKKwkgICAgIHAgPSB2Y3RwPHNpemU+IChudW1fb2ZfZWxl bSkKKwkgICAgIG4gLT0gbnVtX29mX2xhbmVzOworCSAgIH0KKworICAgICBUaGVzZSBjYW4gYmUg dmVyaWZpZWQgdGhyb3VnaCB0aGUgImNvdW50IiB2YXJpYWJsZSBpbiB0aGUgbWlkZGxlLWVuZAor ICAgICAoYS5rLmEuIGdldF9zaW1wbGVfbG9vcF9kZXNjIChsb29wKS0+ZGVzYy0+bml0ZXJfZXhw cikuICBUaGlzIGlzIHRoZQorICAgICBleHByZXNzaW9uIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBu dW1iZXIgb2YgaXRlcmF0aW9ucyB0aGF0IHRoZSBsb29wIHdvdWxkCisgICAgIGV4ZWN1dGUgZm9y IGEgc3RhbmRhcmQgZGxzL2xlIGxvb3AuCisKKyAgICAgRm9yIGRsc3RwL2xldHAgd2Ugb25seSBz dXBwb3J0IGNhc2VzIHdoZXJlIHRoaXMgaXMgYSBwb3dlciBvZiAyLCBzbyBmcm9tCisgICAgICJj b3VudCIgd2Ugd2FudCB0byBleHRyYWN0IHNvbWV0aGluZyBsaWtlOgorCSggW2wvYV0gc2hpZnRy dDogKHgpIChjb25zdF9pbnQgeSkpCisgICAgIEZvciBsb29wcyBvZiBmb3JtIEEpLCAiY291bnQi IGlzIGFscmVhZHkgYSBzaGlmdHJ0IGV4cHJlc3Npb24uCisgICAgIEZvciBsb29wcyBvZiBmb3Jt IEIpLCAiY291bnQiIGdldHMgZ2l2ZW4gYXM6CisJKHBsdXM6IChub3QgKGkpKSAobnVtX29mX2l0 ZXJzKSkKKyAgICAgd2l0aCBzZXR1cCBoYXBwZW5pbmcgaW4gYSBwcmV2aW91cyBiYXNpYyBibG9j ay4gSGVyZSB3ZSBuZWVkIHRvIHZlcmlmeToKKyAgICAgICAqIFRoYXQgaSBpcyBfYWx3YXlzXyBp bml0aWFsaXplZCB0byAoY29uc3RfaW50IDApCisgICAgICAgKiBUaGF0IG51bV9vZl9pdGVycyBp cyBhIHNoaWZ0cnQgZXhwcmVzc2lvbi4KKyAgKi8KKyAgaWYgKEdFVF9DT0RFIChjb3VudCkgPT0g TFNISUZUUlQKKyAgICAgIHx8IEdFVF9DT0RFIChjb3VudCkgPT0gQVNISUZUUlQpCisgICAgewor CisgICAgICBzaGlmdF9leHByID0gY291bnQ7CisgICAgICAvKiBJbiB0aGlzIHNpdHVhdGlvbiB3 aGVyZSB3ZSBhcmUgbG9vcGluZyBvbiBhIGRlY3JlYXNpbmcgbnVtYmVyIG9mCisJIGVsZW1lbnRz LCBhIGRsc3RwL2xldHAgbG9vcCBjYW4gb25seSB3b3JrIGlmIHRoZSBsb29waW5nIGVuZHMgd2hl biB0aGUKKwkgZWxlbWVudCBjb3VudGVyIHJlYWNoZXMgemVybyBhbmQgbm90IHNvbWUgb3RoZXIg dmFsdWUgKGUuZy4gbiA+IDAKKwkgd29ya3MsIG5vdCBuID4gMSksIG9yIHdlIGNhbiBpbmNvcnJl Y3RseSBlbmQgdXAgcnVubmluZyBvbmUgYWRkaXRpb25hbAorCSBpdGVyYXRpb24uIFRvIGJ5LXBh c3MgYW55IGhvaXN0aW5nIHRoYXQgdGhlIGNvbXBpbGVyIG1heSBoYXZlIGRvbmUKKwkgd2l0aCB0 aGUgZmlyc3QgYXJnIHRvIGBjb3VudGAsIHdlIGNhbiBpbnN0ZWFkIGxvb2sgYXQgdGhlIGJiIGJl Zm9yZQorCSB0aGUgbG9vcCBwcmVoZWFkZXI6IHRoaXMgc2hvdWxkIGVuZCB3aXRoIGEgY21wK2p1 bXAgcGFpciwgd2hlcmUgdGhlCisJIGNtcCBuZWVkcyB0byBiZTogKGNvbnN0X2ludCAwKS4gICov CisgICAgICBpZiAoIXByZV9sb29wX2JiMiB8fCAhQkJfRU5EIChwcmVfbG9vcF9iYjIpCisJICB8 fCAhcHJldl9ub25ub3RlX25vbmRlYnVnX2luc25fYmIgKEJCX0VORCAocHJlX2xvb3BfYmIyKSkK KwkgIHx8ICFJTlNOX1AgKHByZXZfbm9ubm90ZV9ub25kZWJ1Z19pbnNuX2JiIChCQl9FTkQgKHBy ZV9sb29wX2JiMikpKSkKKwlyZXR1cm4gR0VOX0lOVCAoMSk7CisgICAgICBlbHNlCisJaW5pdGlh bF9jb21wYXJlCisJICAgID0gUEFUVEVSTiAocHJldl9ub25ub3RlX25vbmRlYnVnX2luc25fYmIg KEJCX0VORCAocHJlX2xvb3BfYmIyKSkpOworCisgICAgICBpZiAoIShpbml0aWFsX2NvbXBhcmUg JiYgR0VUX0NPREUgKGluaXRpYWxfY29tcGFyZSkgPT0gU0VUCisJICAgICYmIGNjX3JlZ2lzdGVy IChYRVhQIChpbml0aWFsX2NvbXBhcmUsIDApLCBWT0lEbW9kZSkKKwkgICAgJiYgR0VUX0NPREUg KFhFWFAgKGluaXRpYWxfY29tcGFyZSwgMSkpID09IENPTVBBUkUKKwkgICAgJiYgQ09OU1RfSU5U X1AgKFhFWFAgKFhFWFAgKGluaXRpYWxfY29tcGFyZSwgMSksIDEpKQorCSAgICAmJiBJTlRWQUwg KFhFWFAgKFhFWFAgKGluaXRpYWxfY29tcGFyZSwgMSksIDEpKSA9PSAwKSkKKwlyZXR1cm4gR0VO X0lOVCAoMSk7CisgICAgfQorICBlbHNlIGlmIChHRVRfQ09ERSAoY291bnQpID09IFBMVVMpCisg ICAgeworICAgICAgaWYgKCEoR0VUX0NPREUgKFhFWFAgKGNvdW50LCAwKSkgPT0gTk9UCisJICAg ICYmIFJFR19QIChYRVhQIChYRVhQIChjb3VudCwgMCksIDApKSAmJiBSRUdfUCAoWEVYUCAoY291 bnQsIDEpKSkpCisJcmV0dXJuIEdFTl9JTlQgKDEpOworICAgICAgZWxzZQorCXsKKwkgIC8qIFZl cmlmeSB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHBsdXMgKi8KKwkgIHJ0eCBsb29wX2NvdW50 ZXIgPSBYRVhQIChYRVhQIChjb3VudCwgMCksIDApOworCSAgZGZfcmVmIGxvb3BfY291bnRlcl9p bml0X2RlZiA9IE5VTEw7CisJICBsb29wX2NvdW50ZXJfaW5pdF9kZWYKKwkgICAgICA9IGRmX2Ji X3JlZ25vX2xhc3RfZGVmX2ZpbmQgKHByZV9sb29wX2JiMSwgUkVHTk8gKGxvb3BfY291bnRlcikp OworCSAgcnR4IGxvb3BfY291bnRlcl9pbml0CisJICAgICAgPSBQQVRURVJOIChERl9SRUZfSU5T TiAobG9vcF9jb3VudGVyX2luaXRfZGVmKSk7CisJICBpZiAoIShsb29wX2NvdW50ZXJfaW5pdF9k ZWYgJiYgR0VUX0NPREUgKGxvb3BfY291bnRlcl9pbml0KSA9PSBTRVQKKwkJJiYgQ09OU1RfSU5U X1AgKFhFWFAgKGxvb3BfY291bnRlcl9pbml0LCAxKSkKKwkJJiYgSU5UVkFMIChYRVhQIChsb29w X2NvdW50ZXJfaW5pdCwgMSkpID09IDApKQorCSAgICByZXR1cm4gR0VOX0lOVCAoMSk7CisKKwkg IC8qIFZlcmlmeSB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHBsdXMgKi8KKwkgIHJ0eCBjb3Vu dF9tYXggPSBYRVhQIChjb3VudCwgMSk7CisJICBkZl9yZWYgY291bnRlcl9tYXhfZGVmID0gTlVM TDsKKwkgIGNvdW50ZXJfbWF4X2RlZiA9IERGX1JFR19ERUZfQ0hBSU4gKFJFR05PIChjb3VudF9t YXgpKTsKKwkgIGlmIChjb3VudGVyX21heF9kZWYKKwkgICAgICAmJiAoR0VUX0NPREUgKFhFWFAg KHNpbmdsZV9zZXQgKERGX1JFRl9JTlNOIChjb3VudGVyX21heF9kZWYpKSwKKwkJCQkgIDEpKQor CQkgICAgICA9PSBMU0hJRlRSVAorCQkgIHx8IEdFVF9DT0RFICgKKwkJCSBYRVhQIChzaW5nbGVf c2V0IChERl9SRUZfSU5TTiAoY291bnRlcl9tYXhfZGVmKSksIDEpKQorCQkJID09IEFTSElGVFJU KSkKKwkgICAgeworCSAgICAgIHNoaWZ0X2V4cHIKKwkJICA9IFhFWFAgKHNpbmdsZV9zZXQgKERG X1JFRl9JTlNOIChjb3VudGVyX21heF9kZWYpKSwgMSk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAg cmV0dXJuIEdFTl9JTlQgKDEpOworCX0KKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gR0VOX0lO VCAoMSk7CisKKyAgLyogQ2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBzaGlmdDogdGhlIHNlY29u ZCBvcGVyYW5kIG5lZWRzIHRvIGJlIGEKKyAgICAgY29uc3RhbnQuICAqLworICBpZiAoIUNPTlNU QU5UX1AgKFhFWFAgKHNoaWZ0X2V4cHIsIDEpKSkKKyAgICByZXR1cm4gR0VOX0lOVCAoMSk7Cisg IC8qIEV4dHJhY3QgdGhlIGxvb3AgZGVjcmVtZW50IGZyb20gdGhlIFtBL0xdU0hJRlRSIDJuZCBv cGVyYW5kIG9mIGNvdW50LiAgKi8KKyAgZGVjcmVtZW50bnVtID0gKDEgPDwgKElOVFZBTCAoWEVY UCAoc2hpZnRfZXhwciwgMSkpKSk7CisgIC8qIEVuc3VyZSBpdCBtYXRjaGVzIHRoZSBudW1iZXIg b2YgbGFuZXMgb2YgdGhlIHZjdHAgaW5zdHJ1Y3Rpb24uICAqLworICBpZiAoZGVjcmVtZW50bnVt ICE9IGFybV9tdmVfZ2V0X3ZjdHBfbGFuZXMgKFBBVFRFUk4gKHZjdHBfaW5zbikpKQorICAgIHJl dHVybiBHRU5fSU5UICgxKTsKKworICBydHhfaW5zbiAqaW5zbiA9IDA7CisgIHJ0eF9pbnNuICpj dXJfaW5zbiA9IDA7CisgIHJ0eF9pbnNuICpzZXE7CisgIHJ0eCB2Y3RwX3Zwcl9nZW5lcmF0ZWQg PSBOVUxMX1JUWDsKKyAgcnR4IGluc25fdnByX3JlZ19vcGVyYW5kID0gTlVMTF9SVFg7CisKKyAg LyogU2NhbiB0aHJvdWdoIHRoZSBpbnNucyBpbiB0aGUgbG9vcCBiYiBhbmQgZW1pdCB0aGUgdHJh bnNmb3JtZWQgYmIKKyAgICAgaW5zbnMgdG8gYSBzZXF1ZW5jZS4gICovCisgIHN0YXJ0X3NlcXVl bmNlICgpOworICBGT1JfQkJfSU5TTlMgKGJvZHksIGluc24pCisgICAgeworICAgICAgaWYgKEdF VF9DT0RFIChpbnNuKSA9PSBDT0RFX0xBQkVMIHx8IE5PVEVfSU5TTl9CQVNJQ19CTE9DS19QIChp bnNuKSkKKwljb250aW51ZTsKKyAgICAgIGVsc2UgaWYgKE5PVEVfUCAoaW5zbikpCisJZW1pdF9u b3RlICgoZW51bSBpbnNuX25vdGUpTk9URV9LSU5EIChpbnNuKSk7CisgICAgICBlbHNlIGlmIChE RUJVR19JTlNOX1AgKGluc24pKQorCWVtaXRfZGVidWdfaW5zbiAoUEFUVEVSTiAoaW5zbikpOwor ICAgICAgZWxzZSBpZiAoIUlOU05fUCAoaW5zbikpCisJeworCSAgZW5kX3NlcXVlbmNlICgpOwor CSAgcmV0dXJuIEdFTl9JTlQgKDEpOworCX0KKyAgICAgIC8qIFdoZW4gd2UgZmluZCB0aGUgdmN0 cCBpbnN0cnVjdGlvbjogVGhpcyBtYXkgYmUgZm9sbG93ZWQgYnkKKyAgICAgIGEgc2lnbi1leHRl bmQgaW5zbiB0byBTSW1vZGUuICBJZiBpdCBpcywgdGhlbiBzYXZlIHRoZQorICAgICAgc2lnbi1l eHRlbmRlZCBSRUcgaW50byB2Y3RwX3Zwcl9nZW5lcmF0ZWQuICBJZiB0aGVyZSBpcyBubworICAg ICAgc2lnbi1leHRlbmQsIHRoZW4gc3RvcmUgdGhlIHJhdyBvdXRwdXQgb2YgdGhlIHZjdHAuCisg ICAgICBGb3IgYW55IFZQVC1wcmVkaWNhdGVkIGluc3RydWN0aW9ucyB3ZSBuZWVkIHRvIGVuc3Vy ZSB0aGF0CisgICAgICB0aGUgVlBSIHRoZXkgdXNlIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgZ2l2 ZW4gaGVyZSBhbmQKKyAgICAgIHRoZXkgb2Z0ZW4gY29uc3VtZSB0aGUgb3V0cHV0IG9mIGEgc3Vi cmVnIG9mIHRoZSBTSW1vZGUKKyAgICAgIHNpZ24tZXh0ZW5kZWQgVlBSLXJlZy4gIEFzIGEgcmVz dWx0LCBjb21wYXJpbmcgYWdhaW5zdCB0aGUKKyAgICAgIG91dHB1dCBvZiB0aGUgc2lnbi1leHRl bmQgaXMgbW9yZSBsaWtlbHkgdG8gc3VjY2VlZC4KKyAgICAgIFRoaXMgY29kZSBhbHNvIGd1YXJh bnRlZXMgdG8gdXMgdGhhdCB0aGUgdmN0cCBjb21lcyBiZWZvcmUKKyAgICAgIGFueSBpbnN0cnVj dGlvbnMgdGhhdCB1c2UgdGhlIFZQUiB3aXRoaW4gdGhlIGxvb3AsIGZvciB0aGUKKyAgICAgIGRs c3RwL2xldHAgdHJhbnNmb3JtIHRvIHN1Y2NlZWQuICAqLworICAgICAgZWxzZSBpZiAoaW5zbiA9 PSB2Y3RwX2luc24pCisJeworCSAgcnR4X2luc24gKm5leHRfdXNlMSA9IE5VTEw7CisJICBkZl9y ZWYgdXNlOworCSAgZm9yICh1c2UgPSBERl9SRUdfVVNFX0NIQUlOICgKKwkJICAgREZfUkVGX1JF R05PIChERl9JTlNOX0lORk9fREVGUyAoREZfSU5TTl9JTkZPX0dFVCAoaW5zbikpKSk7CisJICAg ICAgIHVzZTsgdXNlID0gREZfUkVGX05FWFRfUkVHICh1c2UpKQorCSAgICBpZiAoIW5leHRfdXNl MSAmJiBOT05ERUJVR19JTlNOX1AgKERGX1JFRl9JTlNOICh1c2UpKSkKKwkgICAgICBuZXh0X3Vz ZTEgPSBERl9SRUZfSU5TTiAodXNlKTsKKworCSAgaWYgKEdFVF9DT0RFIChTRVRfU1JDIChzaW5n bGVfc2V0IChuZXh0X3VzZTEpKSkgPT0gU0lHTl9FWFRFTkQpCisJICAgIHsKKwkgICAgICBydHhf aW5zbiAqbmV4dF91c2UyID0gTlVMTDsKKwkgICAgICBmb3IgKHVzZSA9IERGX1JFR19VU0VfQ0hB SU4gKERGX1JFRl9SRUdOTyAoCisJCSAgICAgICBERl9JTlNOX0lORk9fREVGUyAoREZfSU5TTl9J TkZPX0dFVCAobmV4dF91c2UxKSkpKTsKKwkJICAgdXNlOyB1c2UgPSBERl9SRUZfTkVYVF9SRUcg KHVzZSkpCisJCWlmICghbmV4dF91c2UyICYmIE5PTkRFQlVHX0lOU05fUCAoREZfUkVGX0lOU04g KHVzZSkpKQorCQkgIG5leHRfdXNlMiA9IERGX1JFRl9JTlNOICh1c2UpOworCisJICAgICAgaWYg KEdFVF9DT0RFIChTRVRfU1JDIChzaW5nbGVfc2V0IChuZXh0X3VzZTIpKSkgPT0gU1VCUkVHKQor CQl2Y3RwX3Zwcl9nZW5lcmF0ZWQgPSBYRVhQIChQQVRURVJOIChuZXh0X3VzZTIpLCAwKTsKKwkg ICAgfQorCisJICBpZiAoIXZjdHBfdnByX2dlbmVyYXRlZCkKKwkgICAgdmN0cF92cHJfZ2VuZXJh dGVkID0gWEVYUCAoUEFUVEVSTiAoaW5zbiksIDApOworCSAgLyogQWxzbyBlbWl0IGEgVVNFIG9m IHRoZSBzb3VyY2UgcmVnaXN0ZXIgb2YgdGhlIHZjdHAuCisJICAgICBUaGlzIGhvbGRzIHRoZSBu dW1iZXIgb2YgZWxlbWVudHMgYmVpbmcgcHJvY2Vzc2VkCisJICAgICBieSB0aGUgbG9vcC4gIFRo aXMgbGF0ZXIgZ2V0cyBzdG9yZWQgaW50byBgY291bnRgCisJICAgICBmb3IgdGhlIG1pZGRsZS1l bmQgdG8gaW5pdGlhbGlzZSB0aGUgbG9vcCBjb3VudGVyLiAgKi8KKwkgIGVtaXRfdXNlIChYVkVD RVhQIChYRVhQIChQQVRURVJOIChpbnNuKSwgMSksIDAsIDApKTsKKwkgIGNvbnRpbnVlOworCX0K KyAgICAgICAvKiBJZiB0aGUgaW5zbiBwYXR0ZXJuIHJlcXVpcmVzIHRoZSB1c2Ugb2YgdGhlIFZQ UiB2YWx1ZSBmcm9tIHRoZQorCSAgdmN0cCBhcyBhbiBpbnB1dCBwYXJhbWV0ZXIuICAqLworICAg ICAgZWxzZSBpZiAoKGluc25fdnByX3JlZ19vcGVyYW5kID0gYXJtX2dldF9yZXF1aXJlZF92cHJf cmVnIChpbnNuKSkKKwkgICAgICAgJiYgIWFybV9nZXRfcmVxdWlyZWRfdnByX3JlZ19yZXRfdmFs IChpbnNuKQorCSAgICAgICAmJiBydHhfZXF1YWxfcCAodmN0cF92cHJfZ2VuZXJhdGVkLCBpbnNu X3Zwcl9yZWdfb3BlcmFuZCkpCisJeworCSAgZ2NjX2Fzc2VydCAoTVZFX1ZQVF9QUkVESUNBVEVE X0lOU05fUCAoaW5zbikpOworCSAgaW50IG5ld19pY29kZSA9IGdldF9hdHRyX212ZV91bnByZWRp Y2F0ZWRfaW5zbiAoaW5zbik7CisJICBleHRyYWN0X2luc24gKGluc24pOworCSAgcnR4IGFycls4 XTsKKwkgIGludCBqID0gMDsKKworCSAgLyogV2hlbiB0cmFuc2Zvcm1pbmcgYSBWUFQtcHJlZGlj YXRlZCBpbnN0cnVjdGlvbgorCSAgICAgaW50byBpdHMgdW5wcmVkaWNhdGVkIGVxdWl2YWxlbnQg d2UgbmVlZCB0byBkcm9wCisJICAgICB0aGUgVlBSIG9wZXJhbmQgYW5kIHdlIG1heSBuZWVkIHRv IGFsc28gZHJvcCBhCisJICAgICBtZXJnZSAidnVuaW5pdCIgaW5wdXQgb3BlcmFuZCwgZGVwZW5k aW5nIG9uIHRoZQorCSAgICAgaW5zdHJ1Y3Rpb24gcGF0dGVybi4gIEhlcmUgZW5zdXJlIHRoYXQg d2UgaGF2ZSBhdAorCSAgICAgbW9zdCBhIHR3by1vcGVyYW5kIGRpZmZlcmVuY2UgYmV0d2VlbiB0 aGUgdHdvCisJICAgICBpbnN0cnVuY3Rpb25zLiAgKi8KKwkgIGludCBuX29wZXJhbmRzX2RpZmYK KwkgICAgICA9IHJlY29nX2RhdGEubl9vcGVyYW5kcyAtIGluc25fZGF0YVtuZXdfaWNvZGVdLm5f b3BlcmFuZHM7CisJICBnY2NfYXNzZXJ0IChuX29wZXJhbmRzX2RpZmYgPiAwICYmIG5fb3BlcmFu ZHNfZGlmZiA8PSAyKTsKKworCSAgLyogVGhlbiwgbG9vcCB0aHJvdWdoIHRoZSBvcGVyYW5kcyBv ZiB0aGUgcHJlZGljYXRlZAorCSAgICAgaW5zdHJ1Y3Rpb24sIGFuZCByZXRhaW4gdGhlIG9uZXMg dGhhdCBtYXAgdG8gdGhlCisJICAgICB1bnByZWRpY2F0ZWQgaW5zdHJ1Y3Rpb24uICAqLworCSAg Zm9yIChpbnQgaSA9IDA7IGkgPCByZWNvZ19kYXRhLm5fb3BlcmFuZHM7IGkrKykKKwkgICAgewor CSAgICAgIC8qIElnbm9yZSB0aGUgVlBSIGFuZCwgaWYgbmVlZGVkLCB0aGUgdnVuaW5pdAorCQkg b3BlcmFuZC4gICovCisJICAgICAgaWYgKGluc25fdnByX3JlZ19vcGVyYW5kID09IHJlY29nX2Rh dGEub3BlcmFuZFtpXQorCQkgIHx8IChuX29wZXJhbmRzX2RpZmYgPT0gMgorCQkgICAgICAmJiAh c3RyY21wIChyZWNvZ19kYXRhLmNvbnN0cmFpbnRzW2ldLCAiMCIpKSkKKwkJY29udGludWU7CisJ ICAgICAgZWxzZQorCQl7CisJCSAgYXJyW2pdID0gcmVjb2dfZGF0YS5vcGVyYW5kW2ldOworCQkg IGorKzsKKwkJfQorCSAgICB9CisKKwkgIC8qIEZpbmFsbHksIGVtaXQgdGhlIHVwcmVkaWNhdGVk IGluc3RydWN0aW9uLiAgKi8KKwkgIHN3aXRjaCAoaikKKwkgICAgeworCSAgICAgIGNhc2UgMToK KwkJZW1pdF9pbnNuIChHRU5fRkNOIChuZXdfaWNvZGUpIChhcnJbMF0pKTsKKwkJYnJlYWs7CisJ ICAgICAgY2FzZSAyOgorCQllbWl0X2luc24gKEdFTl9GQ04gKG5ld19pY29kZSkgKGFyclswXSwg YXJyWzFdKSk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgMzoKKwkJZW1pdF9pbnNuIChHRU5fRkNO IChuZXdfaWNvZGUpIChhcnJbMF0sIGFyclsxXSwgYXJyWzJdKSk7CisJCWJyZWFrOworCSAgICAg IGNhc2UgNDoKKwkJZW1pdF9pbnNuIChHRU5fRkNOIChuZXdfaWNvZGUpIChhcnJbMF0sIGFyclsx XSwgYXJyWzJdLAorCQkJCQkJYXJyWzNdKSk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgNToKKwkJ ZW1pdF9pbnNuIChHRU5fRkNOIChuZXdfaWNvZGUpIChhcnJbMF0sIGFyclsxXSwgYXJyWzJdLCBh cnJbM10sCisJCQkJCQlhcnJbNF0pKTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSA2OgorCQllbWl0 X2luc24gKEdFTl9GQ04gKG5ld19pY29kZSkgKGFyclswXSwgYXJyWzFdLCBhcnJbMl0sIGFyclsz XSwKKwkJCQkJCWFycls0XSwgYXJyWzVdKSk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgNzoKKwkJ ZW1pdF9pbnNuIChHRU5fRkNOIChuZXdfaWNvZGUpIChhcnJbMF0sIGFyclsxXSwgYXJyWzJdLCBh cnJbM10sCisJCQkJCQlhcnJbNF0sIGFycls1XSwgYXJyWzZdKSk7CisJCWJyZWFrOworCSAgICAg IGRlZmF1bHQ6CisJCWdjY191bnJlYWNoYWJsZSAoKTsKKwkgICAgfQorCX0KKyAgICAgIC8qIElm IHdpdGhpbiB0aGUgbG9vcCB3ZSBoYXZlIGFuIE1WRSB2ZWN0b3IgaW5zdHJ1Y3Rpb24gdGhhdCBp cworCSB1bnByZWRpY2F0ZWQsIHRoZSBkbHN0cC9sZXRwIGxvb3Bpbmcgd2lsbCBhZGQgYXV0b21h dGljCisJIHByZWRpY2F0aW9uIHRvIGl0LiBUaGlzIE9OTFkgaXMgc2FmZSBpZiBpdCBpcyBub3Qg YSBzdG9yZSBpbnNuCisJIGFuZCBlaXRoZXIgdGhlIG91dHB1dCBvZiB0aGlzIGluc24gaXMgZmVk IHRvIGFuIGluc24gd2hlcmUgd2UKKwkga25vdyB0aGF0IGl0IHdvbid0IGFmZmVjdCB0aGUgcmVz dWx0IChlLmcuIGEgcHJlZGljYXRlZCBpbnNuKS4gICovCisgICAgICBlbHNlIGlmIChNVkVfVlBU X1VOUFJFRElDQVRFRF9JTlNOX1AgKGluc24pCisJICAgICAgICYmICFhcm1fZ2V0X3JlcXVpcmVk X3Zwcl9yZWdfcmV0X3ZhbCAoaW5zbikpCisJeworCSAgaWYgKG12ZV9tZW1vcnlfb3BlcmFuZCAo U0VUX0RFU1QgKHNpbmdsZV9zZXQgKGluc24pKSwKKwkJCQkgIEdFVF9NT0RFIChTRVRfREVTVCAo c2luZ2xlX3NldCAoaW5zbikpKSkpCisJICAgIHsKKwkgICAgICBlbmRfc2VxdWVuY2UgKCk7CisJ ICAgICAgcmV0dXJuIEdFTl9JTlQgKDEpOworCSAgICB9CisJICAvKiBTY2FuIHRocm91Z2ggdGhl IGluc24gdGhhdCBVU0UgdGhlIERFRiBvZiB0aGlzIGluc24KKwkgICAgIGFuZCBiYWlsIG91dCBp ZiBhbnkgb25lIGlzOgorCSAgICAgIGEpIE91dHNpZGUgdGhlIGN1cnJlbnQgYmFzaWMgYmxvY2su CisJICAgICAgYikgTm90IGEgcHJlZGljYWJsZSBpbnNuLgorCSAgICAgIGMpIEFuIHVucHJlZGlj YXRlZCBzdG9yZSBpbnNuLgorCSAgICBIZXJlIHdlIGFsbG93IHVucHJlZGljYXRlZCB2ZWN0b3Ig aW5zbnM6IHdlIGV4cGVjdAorCSAgICB0aGF0IHRoaXMgYW5hbHlzaXMgd2lsbCBhbHNvIGJlIHJ1 biwgc28gd2UgZG9uJ3QgbmVlZAorCSAgICB0byBmb2xsb3cgdGhlbSB0aHJvdWdoIHRvIHRoZWly IERFRnMpLiAgKi8KKwkgIGRmX3JlZiBpbnNuX2RlZiA9IE5VTEw7CisJICBpbnNuX2RlZiA9IERG X0lOU05fSU5GT19ERUZTIChERl9JTlNOX0lORk9fR0VUIChpbnNuKSk7CisJICBmb3IgKGRmX3Jl ZiB1c2UgPSBERl9SRUdfVVNFX0NIQUlOIChERl9SRUZfUkVHTk8gKGluc25fZGVmKSk7IHVzZTsK KwkgICAgICAgdXNlID0gREZfUkVGX05FWFRfUkVHICh1c2UpKQorCSAgICB7CisJICAgICAgcnR4 X2luc24gKm5leHRfdXNlX2luc24gPSBERl9SRUZfSU5TTiAodXNlKTsKKwkgICAgICBpZiAoTk9O REVCVUdfSU5TTl9QIChuZXh0X3VzZV9pbnNuKSkKKwkJeworCQkgIHJ0eCBuZXh0X2luc25fc2V0 X2Rlc3QgPSBTRVRfREVTVCAoc2luZ2xlX3NldCAobmV4dF91c2VfaW5zbikpOworCQkgIGlmIChC TE9DS19GT1JfSU5TTiAoaW5zbikgIT0gQkxPQ0tfRk9SX0lOU04gKG5leHRfdXNlX2luc24pCisJ CSAgICAgIHx8IChOT05ERUJVR19JTlNOX1AgKG5leHRfdXNlX2luc24pCisJCQkgICYmICghTVZF X1ZQVF9QUkVESUNBQkxFX0lOU05fUCAobmV4dF91c2VfaW5zbikKKwkJCSAgICAgIHx8IChNVkVf VlBUX1VOUFJFRElDQVRFRF9JTlNOX1AgKG5leHRfdXNlX2luc24pCisJCQkJICAmJiBtdmVfbWVt b3J5X29wZXJhbmQgKAorCQkJCSAgICAgIG5leHRfaW5zbl9zZXRfZGVzdCwKKwkJCQkgICAgICBH RVRfTU9ERSAobmV4dF9pbnNuX3NldF9kZXN0KSkpKSkpCisJCSAgICB7CisJCSAgICAgIGVuZF9z ZXF1ZW5jZSAoKTsKKwkJICAgICAgcmV0dXJuIEdFTl9JTlQgKDEpOworCQkgICAgfQorCQl9CisJ ICAgIH0KKwkgIGVtaXRfaW5zbiAoUEFUVEVSTiAoaW5zbikpOworCX0KKyAgICAgIC8qIEluc3Ry dWN0aW9ucyB0aGF0IGFyZW4ndCBwcmVkaWNhYmxlIE1WRSB2ZWN0b3IgaW5zdHJ1Y3Rpb25zIGFu ZAorCSBkb24ndCByZXF1aXJlIHRoZSBWUFIgY2FuIGJlIGNhcnJpZWQgb3ZlciBhcy1pcy4gICov CisgICAgICBlbHNlCisJeworCSAgZGZfcmVmIGluc25fdXNlcyA9IE5VTEw7CisJICBGT1JfRUFD SF9JTlNOX1VTRSAoaW5zbl91c2VzLCBpbnNuKQorCSAgeworCSAgICBmb3IgKGRmX3JlZiBkZWYg PSBERl9SRUdfREVGX0NIQUlOIChERl9SRUZfUkVHTk8gKGluc25fdXNlcykpOyBkZWY7CisJCSBk ZWYgPSBERl9SRUZfTkVYVF9SRUcgKGRlZikpCisJICAgICAgeworCQlydHggdnByID0gYXJtX2dl dF9yZXF1aXJlZF92cHJfcmVnX3JldF92YWwgKERGX1JFRl9JTlNOIChkZWYpKTsKKwkJaWYgKHZw ciAmJiBydHhfZXF1YWxfcCAodmN0cF92cHJfZ2VuZXJhdGVkLCB2cHIpKQorCQkgIHsKKwkJICAg IGVuZF9zZXF1ZW5jZSAoKTsKKwkJICAgIHJldHVybiBHRU5fSU5UICgxKTsKKwkJICB9CisJICAg ICAgfQorCSAgfQorCSAgZW1pdF9pbnNuIChQQVRURVJOIChpbnNuKSk7CisJfQorICAgIH0KKyAg c2VxID0gZ2V0X2luc25zICgpOworICBlbmRfc2VxdWVuY2UgKCk7CisKKyAgLyogUmUtd3JpdGUg dGhlIGVudGlyZSBCQiBjb250ZW50cyB3aXRoIHRoZSB0cmFuc2Zvcm1lZAorICAgICBzZXF1ZW5j ZS4gICovCisgIEZPUl9CQl9JTlNOU19TQUZFIChib2R5LCBpbnNuLCBjdXJfaW5zbikKKyAgICBp ZiAoIShHRVRfQ09ERSAoaW5zbikgPT0gQ09ERV9MQUJFTCB8fCBOT1RFX0lOU05fQkFTSUNfQkxP Q0tfUCAoaW5zbikpKQorICAgICAgZGVsZXRlX2luc24gKGluc24pOworICBmb3IgKGluc24gPSBz ZXE7IE5FWFRfSU5TTiAoaW5zbik7IGluc24gPSBORVhUX0lOU04gKGluc24pKQorICAgIGlmIChO T1RFX1AgKGluc24pKQorICAgICAgZW1pdF9ub3RlX2FmdGVyICgoZW51bSBpbnNuX25vdGUpTk9U RV9LSU5EIChpbnNuKSwgQkJfRU5EIChib2R5KSk7CisgICAgZWxzZSBpZiAoREVCVUdfSU5TTl9Q IChpbnNuKSkKKyAgICAgIGVtaXRfZGVidWdfaW5zbl9hZnRlciAoUEFUVEVSTiAoaW5zbiksIEJC X0VORCAoYm9keSkpOworICAgIGVsc2UKKyAgICAgIGVtaXRfaW5zbl9hZnRlciAoUEFUVEVSTiAo aW5zbiksIEJCX0VORCAoYm9keSkpOworCisgIGVtaXRfanVtcF9pbnNuX2FmdGVyIChQQVRURVJO IChpbnNuKSwgQkJfRU5EIChib2R5KSk7CisgIHJldHVybiBHRU5fSU5UIChkZWNyZW1lbnRudW0p OworfQorCisvKiBUYXJnZXQgaG9vayB0byB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIHBy b2Nlc3NlZCBieSBhIGRsc3RwL2xldHAgbG9vcAorICAgaW50byBgY291bnRgIHRvIGludGlhbGlz ZSB0aGUgY291bnRlciByZWdpc3Rlci4gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgd2FzCisgICBw cmV2aW91c2x5IGV4dHJhY3RlZCBmcm9tIHRoZSB2Y3RwIGluc24gYW5kIHBsYWNlZCBpbnRvIGEg VVNFIHJ0eC4KKyAgIFdlIG9ubHkgY2hlY2sgdGhhdCB0aGUgZG9sb29wX2VuZCBwYXR0ZXJuIHN1 Y2Nlc3NmdWxseSBkZWNyZW1lbnRzIGJ5IGEKKyAgIG51bWJlciBvdGhlciB0aGFuIC0xIGZvciBh IHZhbGlkIGRsc3RwL2xldHAgbG9vcC4gIE5vIG90aGVyIGNoZWNraW5nIGlzCisgICBuZWVkZWQg YXMgdGhhdCB3YXMgZG9uZSBwcmV2aW91c2x5LiAgKi8KKworcnR4Cithcm1fYWxsb3dfZWxlbWVu dHdpc2VfZG9sb29wX3AgKHJ0eCBjb3VudCwgcnR4IGxhYmVsLCBydHggZG9sb29wKQoreworICBp ZiAoZG9sb29wCisgICAgICAmJiBJTlRWQUwgKFhFWFAgKFNFVF9TUkMgKFhWRUNFWFAgKFBBVFRF Uk4gKGRvbG9vcCksIDAsIDEpKSwgMSkpICE9IC0xKQorICAgIHsKKyAgICAgIGJhc2ljX2Jsb2Nr IGJvZHkgPSBCTE9DS19GT1JfSU5TTiAobGFiZWwpLT5wcmV2X2JiOworICAgICAgcnR4X2luc24q IGluc247CisgICAgICBGT1JfQkJfSU5TTlMgKGJvZHksIGluc24pCisJeworCSAgaWYgKElOU05f UCAoaW5zbikgJiYgR0VUX0NPREUgKFBBVFRFUk4gKGluc24pKSA9PSBVU0UpCisJICAgIHsKKwkg ICAgICBydHggbnVtX2VsZW1fcmVnID0gY29weV9ydHggKFhFWFAgKFBBVFRFUk4gKGluc24pLCAw KSk7CisJICAgICAgZGVsZXRlX2luc24gKGluc24pOworCSAgICAgIHJldHVybiBudW1fZWxlbV9y ZWc7CisJICAgIH0KKwl9CisgICAgfQorICByZXR1cm4gY291bnQ7CiB9CiAKICNpZiBDSEVDS0lO R19QCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9pdGVyYXRvcnMubWQgYi9nY2MvY29uZmln L2FybS9pdGVyYXRvcnMubWQKaW5kZXggMjkwNjJjZDZmYjNjNjFjMjI0MTdlZjhmYzI1YWJkNzgx OWQyYzAzNC4uYWEyZmRhYzIyZjNjNzg4NGMxOGViZjE5N2IyNmEyZDU0ZGE0NGM5MyAxMDA2NDQK LS0tIGEvZ2NjL2NvbmZpZy9hcm0vaXRlcmF0b3JzLm1kCisrKyBiL2djYy9jb25maWcvYXJtL2l0 ZXJhdG9ycy5tZApAQCAtMTQ2NCw3ICsxNDY0LDkgQEAKIAogKGRlZmluZV9pbnRfYXR0ciBtb2Rl MSBbKFZDVFA4USAiOCIpIChWQ1RQMTZRICIxNiIpIChWQ1RQMzJRICIzMiIpCiAJCQkoVkNUUDY0 USAiNjQiKSAoVkNUUDhRX00gIjgiKSAoVkNUUDE2UV9NICIxNiIpCi0JCQkoVkNUUDMyUV9NICIz MiIpIChWQ1RQNjRRX00gIjY0IildKQorCQkJKFZDVFAzMlFfTSAiMzIiKSAoVkNUUDY0UV9NICI2 NCIpCisJCQkoRExTVFA4ICI4IikgKERMU1RQMTYgIjE2IikgKERMU1RQMzIgIjMyIikKKwkJCShE TFNUUDY0ICI2NCIpXSkKIAogOzsgQm90aCBraW5kcyBvZiByZXR1cm4gaW5zbi4KIChkZWZpbmVf Y29kZV9pdGVyYXRvciBSRVRVUk5TIFtyZXR1cm4gc2ltcGxlX3JldHVybl0pCkBAIC0xNzczLDYg KzE3NzUsOCBAQAogKGRlZmluZV9pbnRfaXRlcmF0b3IgVVFSU0hMTFEgW1VRUlNITExfNjQgVVFS U0hMTF80OF0pCiAoZGVmaW5lX2ludF9pdGVyYXRvciBTUVJTSFJMUSBbU1FSU0hSTF82NCBTUVJT SFJMXzQ4XSkKIChkZWZpbmVfaW50X2l0ZXJhdG9yIFZTSExDUV9NIFtWU0hMQ1FfTV9TIFZTSExD UV9NX1VdKQorKGRlZmluZV9pbnRfaXRlcmF0b3IgRExTVFAgW0RMU1RQOCBETFNUUDE2IERMU1RQ MzIKKwkJCQkgICBETFNUUDY0XSkKIAogOzsgRGVmaW5lIGl0ZXJhdG9ycyBmb3IgVkNNTEEgb3Bl cmF0aW9ucwogKGRlZmluZV9pbnRfaXRlcmF0b3IgVkNNTEFfT1AgW1VOU1BFQ19WQ01MQQpkaWZm IC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbXZlLm1kIGIvZ2NjL2NvbmZpZy9hcm0vbXZlLm1kCmlu ZGV4IDAzZjgxNmZmMGYyOGIyN2M4ODM1ZjE5ODk0ODg5ZmE2MDY2YzFhZDIuLmYwOGFjZmViZjZh NzM3NjdiOGZmNGZlN2RiYzNmMGEyYmNmMGFkNDQgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYXJt L212ZS5tZAorKysgYi9nY2MvY29uZmlnL2FybS9tdmUubWQKQEAgLTExMDk3LDMgKzExMDk3LDM4 IEBACiAgICAgfQogICBET05FOwogfSkKKworOzsgT3JpZ2luYWxseSBleHBhbmRlZCBieSAncHJl ZGljYXRlZF9kb2xvb3BfZW5kJy4KKyhkZWZpbmVfaW5zbiAiKnByZWRpY2F0ZWRfZG9sb29wX2Vu ZF9pbnRlcm5hbCIKKyAgWyhzZXQgKHBjKQorCShpZl90aGVuX2Vsc2UKKwkgICAoZ2UgKHBsdXM6 U0kgKHJlZzpTSSBMUl9SRUdOVU0pCisJCQkobWF0Y2hfb3BlcmFuZDpTSSAwICJjb25zdF9pbnRf b3BlcmFuZCIgIiIpKQorCQkoY29uc3RfaW50IDApKQorCSAobGFiZWxfcmVmIChtYXRjaF9vcGVy YW5kIDEgIiIgIiIpKQorCSAocGMpKSkKKyAgIChzZXQgKHJlZzpTSSBMUl9SRUdOVU0pCisJKHBs dXM6U0kgKHJlZzpTSSBMUl9SRUdOVU0pIChtYXRjaF9kdXAgMCkpKQorICAgKGNsb2JiZXIgKHJl ZzpDQyBDQ19SRUdOVU0pKV0KKyAgIlRBUkdFVF8zMkJJVCAmJiBUQVJHRVRfSEFWRV9MT0IgJiYg VEFSR0VUX0hBVkVfTVZFICYmIFRBUkdFVF9USFVNQjIiCisgIHsKKyAgICBpZiAoZ2V0X2F0dHJf bGVuZ3RoIChpbnNuKSA9PSA0KQorICAgICAgcmV0dXJuICJsZXRwXHQlfGxyLCAlbDEiOworICAg IGVsc2UKKyAgICAgIHJldHVybiAic3Vic1x0JXxsciwgIyUwO2JndFx0JWwxIjsKKyAgfQorICBb KHNldCAoYXR0ciAibGVuZ3RoIikKKwkoaWZfdGhlbl9lbHNlCisJICAgKGx0dSAobWludXMgKHBj KSAobWF0Y2hfZHVwIDEpKSAoY29uc3RfaW50IDEwMjQpKQorCSAgICAoY29uc3RfaW50IDQpCisJ ICAgIChjb25zdF9pbnQgNikpKQorICAgKHNldF9hdHRyICJ0eXBlIiAiYnJhbmNoIildKQorCiso ZGVmaW5lX2luc24gImRsc3RwPG1vZGUxPl9pbnNuIgorICBbCisgICAgKHNldCAocmVnOlNJIExS X1JFR05VTSkKKwkgKHVuc3BlYzpTSSBbKG1hdGNoX29wZXJhbmQ6U0kgMCAic19yZWdpc3Rlcl9v cGVyYW5kIiAiciIpXQorCSAgRExTVFApKQorICBdCisgICJUQVJHRVRfMzJCSVQgJiYgVEFSR0VU X0hBVkVfTE9CICYmIFRBUkdFVF9IQVZFX01WRSAmJiBUQVJHRVRfVEhVTUIyIgorICAiZGxzdHAu PG1vZGUxPlx0JXxsciwgJTAiKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp dCBhL2djYy9jb25maWcvYXJtL3RodW1iMi5tZCBiL2djYy9jb25maWcvYXJtL3RodW1iMi5tZApp bmRleCBiMjMwOWE1MjE2NTUwMTA0ZjI5YTcxZjMzNTA2ZDQyMWY3OWY1ZTJjLi5jNTk1NWQ1OTk3 MjEzNDNmMzZkZWM5ODA1NjY1NzM0ZWNhNWNkYjIxIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2Fy bS90aHVtYjIubWQKKysrIGIvZ2NjL2NvbmZpZy9hcm0vdGh1bWIyLm1kCkBAIC0xNjEzLDcgKzE2 MTMsNyBAQAogICAgKHVzZSAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSldICAgICA7IGxhYmVsCiAg ICJUQVJHRVRfMzJCSVQiCiAgICIKLSB7Cit7CiAgICAvKiBDdXJyZW50bHkgU01TIHJlbGllcyBv biB0aGUgZG8tbG9vcCBwYXR0ZXJuIHRvIHJlY29nbml6ZSBsb29wcwogICAgICAgd2hlcmUgKDEp IHRoZSBjb250cm9sIHBhcnQgY29uc2lzdHMgb2YgYWxsIGluc25zIGRlZmluaW5nIGFuZC9vcgog ICAgICAgdXNpbmcgYSBjZXJ0YWluICdjb3VudCcgcmVnaXN0ZXIgYW5kICgyKSB0aGUgbG9vcCBj b3VudCBjYW4gYmUKQEAgLTE2MjMsNDEgKzE2MjMsNjcgQEAKIAogICAgICAgQWxzbyB1c2VkIHRv IGltcGxlbWVudCB0aGUgbG93IG92ZXIgaGVhZCBsb29wcyBmZWF0dXJlLCB3aGljaCBpcyBwYXJ0 IG9mCiAgICAgICB0aGUgQXJtdjguMS1NIE1haW5saW5lIExvdyBPdmVyaGVhZCBCcmFuY2ggKExP QikgZXh0ZW5zaW9uLiAgKi8KLSAgIGlmIChvcHRpbWl6ZSA+IDAgJiYgKGZsYWdfbW9kdWxvX3Nj aGVkIHx8IFRBUkdFVF9IQVZFX0xPQikpCi0gICB7Ci0gICAgIHJ0eCBzMDsKLSAgICAgcnR4IGJj b21wOwotICAgICBydHggbG9jX3JlZjsKLSAgICAgcnR4IGNjX3JlZzsKLSAgICAgcnR4IGluc247 Ci0gICAgIHJ0eCBjbXA7Ci0KLSAgICAgaWYgKEdFVF9NT0RFIChvcGVyYW5kc1swXSkgIT0gU0lt b2RlKQotICAgICAgIEZBSUw7Ci0KLSAgICAgczAgPSBvcGVyYW5kcyBbMF07Ci0KLSAgICAgLyog TG93IG92ZXIgaGVhZCBsb29wIGluc3RydWN0aW9ucyByZXF1aXJlIHRoZSBmaXJzdCBvcGVyYW5k IHRvIGJlIExSLiAgKi8KLSAgICAgaWYgKFRBUkdFVF9IQVZFX0xPQiAmJiBhcm1fdGFyZ2V0X2lu c25fb2tfZm9yX2xvYiAob3BlcmFuZHMgWzFdKSkKLSAgICAgICBzMCA9IGdlbl9ydHhfUkVHIChT SW1vZGUsIExSX1JFR05VTSk7Ci0KLSAgICAgaWYgKFRBUkdFVF9USFVNQjIpCi0gICAgICAgaW5z biA9IGVtaXRfaW5zbiAoZ2VuX3RodW1iMl9hZGRzaTNfY29tcGFyZTAgKHMwLCBzMCwgR0VOX0lO VCAoLTEpKSk7Ci0gICAgIGVsc2UKLSAgICAgICBpbnNuID0gZW1pdF9pbnNuIChnZW5fYWRkc2kz X2NvbXBhcmUwIChzMCwgczAsIEdFTl9JTlQgKC0xKSkpOwotCi0gICAgIGNtcCA9IFhWRUNFWFAg KFBBVFRFUk4gKGluc24pLCAwLCAwKTsKLSAgICAgY2NfcmVnID0gU0VUX0RFU1QgKGNtcCk7Ci0g ICAgIGJjb21wID0gZ2VuX3J0eF9ORSAoVk9JRG1vZGUsIGNjX3JlZywgY29uc3QwX3J0eCk7Ci0g ICAgIGxvY19yZWYgPSBnZW5fcnR4X0xBQkVMX1JFRiAoVk9JRG1vZGUsIG9wZXJhbmRzIFsxXSk7 Ci0gICAgIGVtaXRfanVtcF9pbnNuIChnZW5fcnR4X1NFVCAocGNfcnR4LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdlbl9ydHhfSUZfVEhFTl9FTFNFIChWT0lEbW9kZSwgYmNv bXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxvY19yZWYsIHBjX3J0eCkpKTsKLSAgICAgRE9ORTsKLSAgIH0KLSBlbHNlCi0gICBGQUlM OwotIH0iKQorICBpZiAob3B0aW1pemUgPiAwICYmIChmbGFnX21vZHVsb19zY2hlZCB8fCBUQVJH RVRfSEFWRV9MT0IpKQorICAgIHsKKyAgICAgIHJ0eCBzMDsKKyAgICAgIHJ0eCBiY29tcDsKKyAg ICAgIHJ0eCBsb2NfcmVmOworICAgICAgcnR4IGNjX3JlZzsKKyAgICAgIHJ0eCBpbnNuOworICAg ICAgcnR4IGNtcDsKKyAgICAgIHJ0eCBkZWNyZW1lbnRfbnVtOworCisgICAgICBpZiAoR0VUX01P REUgKG9wZXJhbmRzWzBdKSAhPSBTSW1vZGUpCisJRkFJTDsKKworICAgICAgczAgPSBvcGVyYW5k c1swXTsKKworICAgICAgIGlmIChUQVJHRVRfSEFWRV9MT0IgJiYgYXJtX3RhcmdldF9pbnNuX29r X2Zvcl9sb2IgKG9wZXJhbmRzWzFdKSkKKwl7CisJICBzMCA9IGdlbl9ydHhfUkVHIChTSW1vZGUs IExSX1JFR05VTSk7CisKKwkgIC8qIElmIHdlIGhhdmUgYSBjb21wYXRpYmUgTVZFIHRhcmdldCwg dHJ5IGFuZCBhbmFseXNlIHRoZSBsb29wCisJICAgICBjb250ZW50cyB0byBkZXRlcm1pbmUgaWYg d2UgY2FuIHVzZSBwcmVkaWNhdGVkIGRsc3RwL2xldHAKKwkgICAgIGxvb3BpbmcuICAqLworCSAg aWYgKFRBUkdFVF9IQVZFX01WRSAmJiBUQVJHRVRfVEhVTUIyCisJICAgICAgJiYgKGRlY3JlbWVu dF9udW0gPSBhcm1fYXR0ZW1wdF9kbHN0cF90cmFuc2Zvcm0gKG9wZXJhbmRzWzFdKSkKKwkgICAg ICAmJiAoSU5UVkFMIChkZWNyZW1lbnRfbnVtKSAhPSAxKSkKKwkgICAgeworCSAgICAgIGluc24g PSBlbWl0X2luc24KKwkJICAgICAgKGdlbl90aHVtYjJfYWRkc2kzX2NvbXBhcmUwCisJCQkgIChz MCwgczAsIEdFTl9JTlQgKCgtMSkgKiAoSU5UVkFMIChkZWNyZW1lbnRfbnVtKSkpKSk7CisJICAg ICAgY21wID0gWFZFQ0VYUCAoUEFUVEVSTiAoaW5zbiksIDAsIDApOworCSAgICAgIGNjX3JlZyA9 IFNFVF9ERVNUIChjbXApOworCSAgICAgIGJjb21wID0gZ2VuX3J0eF9HRSAoVk9JRG1vZGUsIGNj X3JlZywgY29uc3QwX3J0eCk7CisJICAgICAgbG9jX3JlZiA9IGdlbl9ydHhfTEFCRUxfUkVGIChW T0lEbW9kZSwgb3BlcmFuZHNbMV0pOworCSAgICAgIGVtaXRfanVtcF9pbnNuIChnZW5fcnR4X1NF VCAocGNfcnR4LAorCQkJCSAgICAgICBnZW5fcnR4X0lGX1RIRU5fRUxTRSAoVk9JRG1vZGUsIGJj b21wLAorCQkJCQkJCSAgICAgbG9jX3JlZiwgcGNfcnR4KSkpOworCSAgICAgIERPTkU7CisJICAg IH0KKworCSAgLyogT3RoZXJ3aXNlLCB0cnkgc3RhbmRhcmQgZGVjcmVtZW50LWJ5LW9uZSBkbHMv bGUgbG9vcGluZy4gICovCisJICBpZiAoVEFSR0VUX1RIVU1CMikKKwkgICAgaW5zbiA9IGVtaXRf aW5zbiAoZ2VuX3RodW1iMl9hZGRzaTNfY29tcGFyZTAgKHMwLCBzMCwKKwkJCQkJCQkgIEdFTl9J TlQgKC0xKSkpOworCSAgZWxzZQorCSAgICBpbnNuID0gZW1pdF9pbnNuIChnZW5fYWRkc2kzX2Nv bXBhcmUwIChzMCwgczAsIEdFTl9JTlQgKC0xKSkpOworCisJICBjbXAgPSBYVkVDRVhQIChQQVRU RVJOIChpbnNuKSwgMCwgMCk7CisJICBjY19yZWcgPSBTRVRfREVTVCAoY21wKTsKKwkgIGJjb21w ID0gZ2VuX3J0eF9ORSAoVk9JRG1vZGUsIGNjX3JlZywgY29uc3QwX3J0eCk7CisJICBsb2NfcmVm ID0gZ2VuX3J0eF9MQUJFTF9SRUYgKFZPSURtb2RlLCBvcGVyYW5kc1sxXSk7CisJICBlbWl0X2p1 bXBfaW5zbiAoZ2VuX3J0eF9TRVQgKHBjX3J0eCwKKwkJCQkgICAgICAgZ2VuX3J0eF9JRl9USEVO X0VMU0UgKFZPSURtb2RlLCBiY29tcCwKKwkJCQkJCQkgICAgIGxvY19yZWYsIHBjX3J0eCkpKTsK KwkgIERPTkU7CisJfQorICAgICAgZWxzZQorCUZBSUw7CisgICAgfQorICBlbHNlCisgICAgRkFJ TDsKK30iKQogCiAoZGVmaW5lX2luc24gIipjbGVhcl9hcHNyIgogICBbKHVuc3BlY192b2xhdGls ZTpTSSBbKGNvbnN0X2ludCAwKV0gVlVOU1BFQ19DTFJNX0FQU1IpCkBAIC0xNzU1LDcgKzE3ODEs MzcgQEAKICAgewogICAgIGlmIChSRUdOTyAob3BlcmFuZHNbMF0pID09IExSX1JFR05VTSkKICAg ICAgIHsKLQllbWl0X2luc24gKGdlbl9kbHNfaW5zbiAob3BlcmFuZHNbMF0pKTsKKwkvKiBQaWNr IG91dCB0aGUgbnVtYmVyIGJ5IHdoaWNoIHdlIGFyZSBkZWNyZW1lbnRpbmcgdGhlIGxvb3AgY291 bnRlcgorCSAgIGluIGV2ZXJ5IGl0ZXJhdGlvbi4gIElmIGl0J3MgPiAxLCB0aGVuIHVzZSBkbHN0 cC4gICovCisJaW50IGNvbnN0X2ludF9kZWNfbnVtCisJICAgICA9IGFicyAoSU5UVkFMIChYRVhQ IChYRVhQIChYVkVDRVhQIChQQVRURVJOIChvcGVyYW5kc1sxXSksIDAsIDEpLAorCQkJCSAgMSks CisJCQkgICAgMSkpKTsKKwlzd2l0Y2ggKGNvbnN0X2ludF9kZWNfbnVtKQorCSAgeworCSAgICBj YXNlIDE2OgorCSAgICAgIGVtaXRfaW5zbiAoZ2VuX2Rsc3RwOF9pbnNuIChvcGVyYW5kc1swXSkp OworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgODoKKwkgICAgICBlbWl0X2luc24gKGdlbl9k bHN0cDE2X2luc24gKG9wZXJhbmRzWzBdKSk7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSA0 OgorCSAgICAgIGVtaXRfaW5zbiAoZ2VuX2Rsc3RwMzJfaW5zbiAob3BlcmFuZHNbMF0pKTsKKwkg ICAgICBicmVhazsKKworCSAgICBjYXNlIDI6CisJICAgICAgZW1pdF9pbnNuIChnZW5fZGxzdHA2 NF9pbnNuIChvcGVyYW5kc1swXSkpOworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgMToKKwkg ICAgICBlbWl0X2luc24gKGdlbl9kbHNfaW5zbiAob3BlcmFuZHNbMF0pKTsKKwkgICAgICBicmVh azsKKworCSAgICBkZWZhdWx0OgorCSAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKwkgIH0KIAlE T05FOwogICAgICAgfQogICAgIGVsc2UKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL3Vuc3Bl Y3MubWQgYi9nY2MvY29uZmlnL2FybS91bnNwZWNzLm1kCmluZGV4IDc3NDhlNzg0Mzc5NDNjYTBj ZDBkODkwOTMzMGVhOGQzYjQ5NDhhZTMuLjc0NGU3YWI1NzMxYjUwMTBjZTI4MGEwNDZjNWE5NGY2 ZjU5MGMzNTAgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYXJtL3Vuc3BlY3MubWQKKysrIGIvZ2Nj L2NvbmZpZy9hcm0vdW5zcGVjcy5tZApAQCAtNTc5LDYgKzU3OSwxMCBAQAogICBWQ1RQMTZRCiAg IFZDVFAzMlEKICAgVkNUUDY0UQorICBETFNUUDgKKyAgRExTVFAxNgorICBETFNUUDMyCisgIERM U1RQNjQKICAgVlBOT1QKICAgVkNSRUFURVFfRgogICBWQ1ZUUV9OX1RPX0ZfUwpkaWZmIC0tZ2l0 IGEvZ2NjL2RvYy90bS50ZXhpIGIvZ2NjL2RvYy90bS50ZXhpCmluZGV4IDhmZTQ5YzJiYTNkYmI0 ZWZkNjE0Mzc3MjA4MmM0ZjhmNWNjOTcyOGQuLjZiOWQzOGUzNGNjOWE4MWMwNmE3YmE1MTY5OWZl YjcwNWZmZDY5ODEgMTAwNjQ0Ci0tLSBhL2djYy9kb2MvdG0udGV4aQorKysgYi9nY2MvZG9jL3Rt LnRleGkKQEAgLTExNzk2LDYgKzExNzk2LDE0IEBAIGxvb3BzLCBhbmQgd2lsbCBoZWxwIGl2b3B0 cyB0byBtYWtlIHNvbWUgZGVjaXNpb25zLgogVGhlIGRlZmF1bHQgdmVyc2lvbiBvZiB0aGlzIGhv b2sgcmV0dXJucyBmYWxzZS4KIEBlbmQgZGVmdHlwZWZuCiAKK0BkZWZ0eXBlZm4ge1RhcmdldCBI b29rfSBydHggVEFSR0VUX0FMTE9XX0VMRU1FTlRXSVNFX0RPTE9PUF9QIChydHggQHZhcntjb3Vu dH0sIHJ0eCBAdmFye2xhYmVsfSwgcnR4IEB2YXJ7ZG9sb29wfSkKK1RoaXMgdGFyZ2V0IGhvb2sg YWxsb3dzIHRoZSB0YXJnZXQgdG8gc3VwcG9ydCBsb29wLWRvbG9vcCBvcHRpbWlzYXRpb25zCit3 aGVyZSB0aGUgdmFsdWUgdGhhdCBnZXRzIHB1dCBpbnRvIHRoZSBsb29wIGNvdW50ZXIgcmVnaXN0 ZXIgaXMgbm90IGEKK3ByZS1jYWxjdWxhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbiBv ZiB0aGUgbG9vcC4gIEZvciBpbnN0YW5jZSwKK3RoZSB2YWx1ZSB1c2VkIGNhbiBiZSB0aGUgbnVt YmVyIG9mIGVsZW1lbnRzIHRoYXQgdGhlIGxvb3Agd2lsbCBwcm9jZXNzLgorVGhlIGRlZmF1bHQg dmVyc2lvbiBvZiB0aGlzIGhvb2sgcmV0dXJucyB0aGUgc2FtZSBydHggaXQgd2FzIGdpdmVuLgor QGVuZCBkZWZ0eXBlZm4KKwogQGRlZnR5cGV2ciB7VGFyZ2V0IEhvb2t9IGJvb2wgVEFSR0VUX0hB VkVfQ09VTlRfUkVHX0RFQ1JfUAogUmV0dXJuIHRydWUgaWYgdGhlIHRhcmdldCBzdXBwb3J0cyBo YXJkd2FyZSBjb3VudCByZWdpc3RlciBmb3IgZGVjcmVtZW50CiBhbmQgYnJhbmNoLgpkaWZmIC0t Z2l0IGEvZ2NjL2RvYy90bS50ZXhpLmluIGIvZ2NjL2RvYy90bS50ZXhpLmluCmluZGV4IDYyYzQ5 YWM0NmRlNjlmNWJkZDUwNzcwYmEwMGNlYjM3NTQzNmRmMmQuLjJlNjA5MjJmNmI2OGEwMzRiMThl YjA0ZDQ4MTU1NGVhODk4M2QyNTQgMTAwNjQ0Ci0tLSBhL2djYy9kb2MvdG0udGV4aS5pbgorKysg Yi9nY2MvZG9jL3RtLnRleGkuaW4KQEAgLTc3MzIsNiArNzczMiw4IEBAIHRvIGJ5IEB2YXJ7Y2Vf aW5mb30uCiAKIEBob29rIFRBUkdFVF9QUkVESUNUX0RPTE9PUF9QCiAKK0Bob29rIFRBUkdFVF9B TExPV19FTEVNRU5UV0lTRV9ET0xPT1BfUAorCiBAaG9vayBUQVJHRVRfSEFWRV9DT1VOVF9SRUdf REVDUl9QCiAKIEBob29rIFRBUkdFVF9ET0xPT1BfQ09TVF9GT1JfR0VORVJJQwpkaWZmIC0tZ2l0 IGEvZ2NjL2xvb3AtZG9sb29wLmNjIGIvZ2NjL2xvb3AtZG9sb29wLmNjCmluZGV4IDMwYjQ1Yzgw NzFhNzA5ZDlmMGQwMzAzN2MzODc2YjUzMjcyN2U2ZjAuLmUxNDNjNGQwZTVlNjg4ODQxNzk1NjAw YzllMTRlNzZlZTllOTc3ZTkgMTAwNjQ0Ci0tLSBhL2djYy9sb29wLWRvbG9vcC5jYworKysgYi9n Y2MvbG9vcC1kb2xvb3AuY2MKQEAgLTg1LDI5ICs4NSwyOSBAQCBkb2xvb3BfY29uZGl0aW9uX2dl dCAocnR4X2luc24gKmRvbG9vcF9wYXQpCiAgICAgIGZvcm1zOgogCiAgICAgIDEpICAocGFyYWxs ZWwgWyhzZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChjb25kaXRpb24pCi0JICAJCQkgICAgICAgICAg ICAobGFiZWxfcmVmIChsYWJlbCkpCi0JCQkJICAgICAgICAgICAgKHBjKSkpCi0JICAgICAgICAg ICAgIChzZXQgKHJlZykgKHBsdXMgKHJlZykgKGNvbnN0X2ludCAtMSkpKQotCSAgICAgICAgICAg ICAoYWRkaXRpb25hbCBjbG9iYmVycyBhbmQgdXNlcyldKQorCQkJCQkgICAgKGxhYmVsX3JlZiAo bGFiZWwpKQorCQkJCQkgICAgKHBjKSkpCisJCSAgICAgKHNldCAocmVnKSAocGx1cyAocmVnKSAo Y29uc3RfaW50IC1uKSkpCisJCSAgICAgKGFkZGl0aW9uYWwgY2xvYmJlcnMgYW5kIHVzZXMpXSkK IAogICAgICBUaGUgYnJhbmNoIG11c3QgYmUgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBwYXJhbGxl bCAoYWxzbyByZXF1aXJlZAogICAgICBieSBqdW1wLmNjKSwgYW5kIHRoZSBzZWNvbmQgZW50cnkg b2YgdGhlIHBhcmFsbGVsIG11c3QgYmUgYSBzZXQgb2YKICAgICAgdGhlIGxvb3AgY291bnRlciBy ZWdpc3Rlci4gIFNvbWUgdGFyZ2V0cyAoSUEtNjQpIHdyYXAgdGhlIHNldCBvZgogICAgICB0aGUg bG9vcCBjb3VudGVyIGluIGFuIGlmX3RoZW5fZWxzZSB0b28uCiAKLSAgICAgMikgIChzZXQgKHJl ZykgKHBsdXMgKHJlZykgKGNvbnN0X2ludCAtMSkpCi0gICAgICAgICAoc2V0IChwYykgKGlmX3Ro ZW5fZWxzZSAocmVnICE9IDApCi0JICAgICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYg KGxhYmVsKSkKLQkJCSAgICAgICAgIChwYykpKS4gIAorICAgICAyKSAgKHNldCAocmVnKSAocGx1 cyAocmVnKSAoY29uc3RfaW50IC1uKSkKKwkgKHNldCAocGMpIChpZl90aGVuX2Vsc2UgKHJlZyAh PSAwKQorCQkJCSAobGFiZWxfcmVmIChsYWJlbCkpCisJCQkJIChwYykpKS4KIAogICAgICBTb21l IHRhcmdldHMgKEFSTSkgZG8gdGhlIGNvbXBhcmlzb24gYmVmb3JlIHRoZSBicmFuY2gsIGFzIGlu IHRoZQogICAgICBmb2xsb3dpbmcgZm9ybToKIAotICAgICAzKSAocGFyYWxsZWwgWyhzZXQgKGNj KSAoY29tcGFyZSAoKHBsdXMgKHJlZykgKGNvbnN0X2ludCAtMSksIDApKSkKLSAgICAgICAgICAg ICAgICAgICAoc2V0IChyZWcpIChwbHVzIChyZWcpIChjb25zdF9pbnQgLTEpKSldKQotICAgICAg ICAoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAoY2MgPT0gTkUpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsYWJlbF9yZWYgKGxhYmVsKSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHBjKSkpICovCisgICAgIDMpIChwYXJhbGxlbCBbKHNldCAoY2MpIChjb21wYXJl ICgocGx1cyAocmVnKSAoY29uc3RfaW50IC1uKSwgMCkpKQorCQkgICAoc2V0IChyZWcpIChwbHVz IChyZWcpIChjb25zdF9pbnQgLW4pKSldKQorCShzZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChjYyA9 PSBORSkKKwkJCQkobGFiZWxfcmVmIChsYWJlbCkpCisJCQkJKHBjKSkpICovCiAKICAgcGF0dGVy biA9IFBBVFRFUk4gKGRvbG9vcF9wYXQpOwogCkBAIC0xNDMsNyArMTQzLDcgQEAgZG9sb29wX2Nv bmRpdGlvbl9nZXQgKHJ0eF9pbnNuICpkb2xvb3BfcGF0KQogCSAgICAgIHx8IEdFVF9DT0RFIChj bXBfYXJnMSkgIT0gUExVUykKIAkgICAgcmV0dXJuIDA7CiAJICByZWdfb3JpZyA9IFhFWFAgKGNt cF9hcmcxLCAwKTsKLQkgIGlmIChYRVhQIChjbXBfYXJnMSwgMSkgIT0gR0VOX0lOVCAoLTEpIAor CSAgaWYgKCFDT05TVF9JTlRfUCAoWEVYUCAoY21wX2FyZzEsIDEpKQogCSAgICAgIHx8ICFSRUdf UCAocmVnX29yaWcpKQogCSAgICByZXR1cm4gMDsKIAkgIGNjX3JlZyA9IFNFVF9ERVNUIChjbXBf b3JpZyk7CkBAIC0xNTYsNyArMTU2LDggQEAgZG9sb29wX2NvbmRpdGlvbl9nZXQgKHJ0eF9pbnNu ICpkb2xvb3BfcGF0KQogCXsKIAkgIC8qIFdlIGV4cGVjdCB0aGUgY29uZGl0aW9uIHRvIGJlIG9m IHRoZSBmb3JtIChyZWcgIT0gMCkgICovCiAJICBjb25kID0gWEVYUCAoU0VUX1NSQyAoY21wKSwg MCk7Ci0JICBpZiAoR0VUX0NPREUgKGNvbmQpICE9IE5FIHx8IFhFWFAgKGNvbmQsIDEpICE9IGNv bnN0MF9ydHgpCisJICBpZiAoKEdFVF9DT0RFIChjb25kKSAhPSBORSAmJiBHRVRfQ09ERSAoY29u ZCkgIT0gR0UpCisJICAgICAgfHwgWEVYUCAoY29uZCwgMSkgIT0gY29uc3QwX3J0eCkKIAkgICAg cmV0dXJuIDA7CiAJfQogICAgIH0KQEAgLTE3MywxNCArMTc0LDE0IEBAIGRvbG9vcF9jb25kaXRp b25fZ2V0IChydHhfaW5zbiAqZG9sb29wX3BhdCkKICAgaWYgKCEgUkVHX1AgKHJlZykpCiAgICAg cmV0dXJuIDA7CiAKLSAgLyogQ2hlY2sgaWYgc29tZXRoaW5nID0gKHBsdXMgKHJlZykgKGNvbnN0 X2ludCAtMSkpLgorICAvKiBDaGVjayBpZiBzb21ldGhpbmcgPSAocGx1cyAocmVnKSAoY29uc3Rf aW50IC1uKSkuCiAgICAgIE9uIElBLTY0LCB0aGlzIGRlY3JlbWVudCBpcyB3cmFwcGVkIGluIGFu IGlmX3RoZW5fZWxzZS4gICovCiAgIGluY19zcmMgPSBTRVRfU1JDIChpbmMpOwogICBpZiAoR0VU X0NPREUgKGluY19zcmMpID09IElGX1RIRU5fRUxTRSkKICAgICBpbmNfc3JjID0gWEVYUCAoaW5j X3NyYywgMSk7CiAgIGlmIChHRVRfQ09ERSAoaW5jX3NyYykgIT0gUExVUwogICAgICAgfHwgWEVY UCAoaW5jX3NyYywgMCkgIT0gcmVnCi0gICAgICB8fCBYRVhQIChpbmNfc3JjLCAxKSAhPSBjb25z dG0xX3J0eCkKKyAgICAgIHx8ICFDT05TVF9JTlRfUCAoWEVYUCAoaW5jX3NyYywgMSkpKQogICAg IHJldHVybiAwOwogCiAgIC8qIENoZWNrIGZvciAoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAoY29u ZGl0aW9uKQpAQCAtMjExLDQyICsyMTIsNDkgQEAgZG9sb29wX2NvbmRpdGlvbl9nZXQgKHJ0eF9p bnNuICpkb2xvb3BfcGF0KQogICAgICAgfHwgKEdFVF9DT0RFIChYRVhQIChjb25kaXRpb24sIDAp KSA9PSBQTFVTCiAJICAmJiBYRVhQIChYRVhQIChjb25kaXRpb24sIDApLCAwKSA9PSByZWcpKQog ICAgewotICAgICBpZiAoR0VUX0NPREUgKHBhdHRlcm4pICE9IFBBUkFMTEVMKQogICAgICAvKiAg Rm9yIHRoZSBzZWNvbmQgZm9ybSB3ZSBleHBlY3Q6CiAKLSAgICAgICAgIChzZXQgKHJlZykgKHBs dXMgKHJlZykgKGNvbnN0X2ludCAtMSkpCi0gICAgICAgICAoc2V0IChwYykgKGlmX3RoZW5fZWxz ZSAocmVnICE9IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVm IChsYWJlbCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGMpKSkuCisJIChz ZXQgKHJlZykgKHBsdXMgKHJlZykgKGNvbnN0X2ludCAtbikpCisJIChzZXQgKHBjKSAoaWZfdGhl bl9lbHNlIChyZWcgIT0gMCkKKwkJCQkgKGxhYmVsX3JlZiAobGFiZWwpKQorCQkJCSAocGMpKSku CiAKLSAgICAgICAgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZzoKKwkgSWYgbiA9PSAx LCB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZzoKIAotICAgICAgICAgKHBhcmFs bGVsIFsoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAocmVnICE9IDEpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKGxhYmVsKSkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCi0gICAgICAgICAgICAg ICAgICAgICAoc2V0IChyZWcpIChwbHVzIChyZWcpIChjb25zdF9pbnQgLTEpKSkKLSAgICAgICAg ICAgICAgICAgICAgIChhZGRpdGlvbmFsIGNsb2JiZXJzIGFuZCB1c2VzKV0pCisJIChwYXJhbGxl bCBbKHNldCAocGMpIChpZl90aGVuX2Vsc2UgKHJlZyAhPSAxKQorCQkJCQkgICAgKGxhYmVsX3Jl ZiAobGFiZWwpKQorCQkJCQkgICAgKHBjKSkpCisJCSAgICAgKHNldCAocmVnKSAocGx1cyAocmVn KSAoY29uc3RfaW50IC0xKSkpCisJCSAgICAgKGFkZGl0aW9uYWwgY2xvYmJlcnMgYW5kIHVzZXMp XSkKIAotICAgICAgICBGb3IgdGhlIHRoaXJkIGZvcm0gd2UgZXhwZWN0OgorCUZvciB0aGUgdGhp cmQgZm9ybSB3ZSBleHBlY3Q6CiAKLSAgICAgICAgKHBhcmFsbGVsIFsoc2V0IChjYykgKGNvbXBh cmUgKChwbHVzIChyZWcpIChjb25zdF9pbnQgLTEpKSwgMCkpCi0gICAgICAgICAgICAgICAgICAg KHNldCAocmVnKSAocGx1cyAocmVnKSAoY29uc3RfaW50IC0xKSkpXSkKLSAgICAgICAgKHNldCAo cGMpIChpZl90aGVuX2Vsc2UgKGNjID09IE5FKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobGFiZWxfcmVmIChsYWJlbCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChwYykpKSAKKwkocGFyYWxsZWwgWyhzZXQgKGNjKSAoY29tcGFyZSAoKHBsdXMgKHJlZykgKGNv bnN0X2ludCAtbikpLCAwKSkKKwkJICAgKHNldCAocmVnKSAocGx1cyAocmVnKSAoY29uc3RfaW50 IC1uKSkpXSkKKwkoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAoY2MgPT0gTkUpCisJCQkJKGxhYmVs X3JlZiAobGFiZWwpKQorCQkJCShwYykpKQogCi0gICAgICAgIHdoaWNoIGlzIGVxdWl2YWxlbnQg dG8gdGhlIGZvbGxvd2luZzoKKwlXaGljaCBhbHNvIGZvciBuID09IDEgaXMgZXF1aXZhbGVudCB0 byB0aGUgZm9sbG93aW5nOgogCi0gICAgICAgIChwYXJhbGxlbCBbKHNldCAoY2MpIChjb21wYXJl IChyZWcsICAxKSkKLSAgICAgICAgICAgICAgICAgICAoc2V0IChyZWcpIChwbHVzIChyZWcpIChj b25zdF9pbnQgLTEpKSkKLSAgICAgICAgICAgICAgICAgICAoc2V0IChwYykgKGlmX3RoZW5fZWxz ZSAoTkUgPT0gY2MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxhYmVsX3JlZiAobGFiZWwpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChwYykpKSldKQorCShwYXJhbGxlbCBbKHNldCAoY2MpIChjb21wYXJlIChyZWcsICAx KSkKKwkJICAgKHNldCAocmVnKSAocGx1cyAocmVnKSAoY29uc3RfaW50IC0xKSkpCisJCSAgIChz ZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChORSA9PSBjYykKKwkJCQkJICAgKGxhYmVsX3JlZiAobGFi ZWwpKQorCQkJCQkgICAocGMpKSkpXSkKIAotICAgICAgICBTbyB3ZSByZXR1cm4gdGhlIHNlY29u ZCBmb3JtIGluc3RlYWQgZm9yIHRoZSB0d28gY2FzZXMuCisJU28gd2UgcmV0dXJuIHRoZSBzZWNv bmQgZm9ybSBpbnN0ZWFkIGZvciB0aGUgdHdvIGNhc2VzLgogCisJRm9yIHRoZSAiZWxlbWVudHdp c2UiIGZvcm0gd2hlcmUgdGhlIGRlY3JlbWVudCBudW1iZXIgaXNuJ3QgLTEsCisJdGhlIGZpbmFs IHZhbHVlIG1heSBiZSBleGNlZWRlZCwgc28gdXNlIEdFIGluc3RlYWQgb2YgTkUuCiAgICAgICov Ci0gICAgICAgIGNvbmRpdGlvbiA9IGdlbl9ydHhfZm10X2VlIChORSwgVk9JRG1vZGUsIGluY19z cmMsIGNvbnN0MV9ydHgpOworICAgICBpZiAoR0VUX0NPREUgKHBhdHRlcm4pICE9IFBBUkFMTEVM KQorICAgICAgIHsKKwlpZiAoSU5UVkFMIChYRVhQIChpbmNfc3JjLCAxKSkgIT0gLTEpCisJICBj b25kaXRpb24gPSBnZW5fcnR4X2ZtdF9lZSAoR0UsIFZPSURtb2RlLCBpbmNfc3JjLCBjb25zdDBf cnR4KTsKKwllbHNlCisJICBjb25kaXRpb24gPSBnZW5fcnR4X2ZtdF9lZSAoTkUsIFZPSURtb2Rl LCBpbmNfc3JjLCBjb25zdDFfcnR4KTs7CisgICAgICAgfQogCiAgICAgcmV0dXJuIGNvbmRpdGlv bjsKICAgIH0KQEAgLTY4NSwxNyArNjkzLDYgQEAgZG9sb29wX29wdGltaXplIChjbGFzcyBsb29w ICpsb29wKQogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICBtYXhfY29zdAotICAgID0g Q09TVFNfTl9JTlNOUyAocGFyYW1fbWF4X2l0ZXJhdGlvbnNfY29tcHV0YXRpb25fY29zdCk7Ci0g IGlmIChzZXRfc3JjX2Nvc3QgKGRlc2MtPm5pdGVyX2V4cHIsIG1vZGUsIG9wdGltaXplX2xvb3Bf Zm9yX3NwZWVkX3AgKGxvb3ApKQotICAgICAgPiBtYXhfY29zdCkKLSAgICB7Ci0gICAgICBpZiAo ZHVtcF9maWxlKQotCWZwcmludGYgKGR1bXBfZmlsZSwKLQkJICJEb2xvb3A6IG51bWJlciBvZiBp dGVyYXRpb25zIHRvbyBjb3N0bHkgdG8gY29tcHV0ZS5cbiIpOwotICAgICAgcmV0dXJuIGZhbHNl OwotICAgIH0KLQogICBpZiAoZGVzYy0+Y29uc3RfaXRlcikKICAgICBpdGVyYXRpb25zID0gd2lk ZXN0X2ludDo6ZnJvbSAocnR4X21vZGVfdCAoZGVzYy0+bml0ZXJfZXhwciwgbW9kZSksCiAJCQkJ ICAgVU5TSUdORUQpOwpAQCAtNzIyLDYgKzcxOSwyMyBAQCBkb2xvb3Bfb3B0aW1pemUgKGNsYXNz IGxvb3AgKmxvb3ApCiAgIGRvbG9vcF9yZWcgPSBnZW5fcmVnX3J0eCAobW9kZSk7CiAgIHJ0eF9p bnNuICpkb2xvb3Bfc2VxID0gdGFyZ2V0bS5nZW5fZG9sb29wX2VuZCAoZG9sb29wX3JlZywgc3Rh cnRfbGFiZWwpOwogCisgIC8qIE5vdCBhbGwgdGFyZ2V0cyBuZWVkIHRvIHByZS1jYWxjdWxhdGUg dGhlIG51bWJlciBvZiB0aGUgaXRlcmF0aW9ucyBvZgorICAgICB0aGUgbG9vcCwgdGhleSBpbnN0 ZWFkIHdvcmsgYnkgc3RvcmluZyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZQorICAgICBj b3VudGVyX3JlZyBhbmQgZGVjcmVtZW50aW5nIHRoYXQuICBDYWxsIHRoZSBhcHByb3ByaWF0ZSB0 YXJnZXQgaG9vayB0bworICAgICBjaGFuZ2UgdGhlIHZhbHVlIG9mIGNvdW50LiAgKi8KKyAgY291 bnQgPSB0YXJnZXRtLmFsbG93X2VsZW1lbnR3aXNlX2RvbG9vcF9wIChjb3VudCwgc3RhcnRfbGFi ZWwsIGRvbG9vcF9zZXEpOworCisgIG1heF9jb3N0CisgICAgPSBDT1NUU19OX0lOU05TIChwYXJh bV9tYXhfaXRlcmF0aW9uc19jb21wdXRhdGlvbl9jb3N0KTsKKyAgaWYgKHNldF9zcmNfY29zdCAo Y291bnQsIG1vZGUsIG9wdGltaXplX2xvb3BfZm9yX3NwZWVkX3AgKGxvb3ApKQorICAgICAgPiBt YXhfY29zdCkKKyAgICB7CisgICAgICBpZiAoZHVtcF9maWxlKQorCWZwcmludGYgKGR1bXBfZmls ZSwKKwkJICJEb2xvb3A6IG51bWJlciBvZiBpdGVyYXRpb25zIHRvbyBjb3N0bHkgdG8gY29tcHV0 ZS5cbiIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICB3b3JkX21vZGVfc2l6ZSA9 IEdFVF9NT0RFX1BSRUNJU0lPTiAod29yZF9tb2RlKTsKICAgd29yZF9tb2RlX21heCA9IChIT1NU X1dJREVfSU5UXzFVIDw8ICh3b3JkX21vZGVfc2l6ZSAtIDEpIDw8IDEpIC0gMTsKICAgaWYgKCEg ZG9sb29wX3NlcQpkaWZmIC0tZ2l0IGEvZ2NjL3RhcmdldC5kZWYgYi9nY2MvdGFyZ2V0LmRlZgpp bmRleCAwODJhN2M2MmYzNGQ3ZTczYWJiMDQ2YmY5NDlmNGI4Y2MxZWQzY2Y2Li5lMmI2NzJkNzU3 NWI4YmM3YzE5YzQxZDYzMDQzZjU3OGRlYmZkMWVkIDEwMDY0NAotLS0gYS9nY2MvdGFyZ2V0LmRl ZgorKysgYi9nY2MvdGFyZ2V0LmRlZgpAQCAtNDQxMSw2ICs0NDExLDE2IEBAIFRoZSBkZWZhdWx0 IHZlcnNpb24gb2YgdGhpcyBob29rIHJldHVybnMgZmFsc2UuIiwKICBib29sLCAoY2xhc3MgbG9v cCAqbG9vcCksCiAgZGVmYXVsdF9wcmVkaWN0X2RvbG9vcF9wKQogCitERUZIT09LCisoYWxsb3df ZWxlbWVudHdpc2VfZG9sb29wX3AsCisgIlRoaXMgdGFyZ2V0IGhvb2sgYWxsb3dzIHRoZSB0YXJn ZXQgdG8gc3VwcG9ydCBsb29wLWRvbG9vcCBvcHRpbWlzYXRpb25zXG5cCit3aGVyZSB0aGUgdmFs dWUgdGhhdCBnZXRzIHB1dCBpbnRvIHRoZSBsb29wIGNvdW50ZXIgcmVnaXN0ZXIgaXMgbm90IGFc blwKK3ByZS1jYWxjdWxhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbiBvZiB0aGUgbG9v cC4gIEZvciBpbnN0YW5jZSxcblwKK3RoZSB2YWx1ZSB1c2VkIGNhbiBiZSB0aGUgbnVtYmVyIG9m IGVsZW1lbnRzIHRoYXQgdGhlIGxvb3Agd2lsbCBwcm9jZXNzLlxuXAorVGhlIGRlZmF1bHQgdmVy c2lvbiBvZiB0aGlzIGhvb2sgcmV0dXJucyB0aGUgc2FtZSBydHggaXQgd2FzIGdpdmVuLiIsCisg cnR4LCAocnR4IGNvdW50LCBydHggbGFiZWwsIHJ0eCBkb2xvb3ApLAorIGRlZmF1bHRfYWxsb3df ZWxlbWVudHdpc2VfZG9sb29wX3ApCisKIERFRkhPT0tQT0QKIChoYXZlX2NvdW50X3JlZ19kZWNy X3AsCiAgIlJldHVybiB0cnVlIGlmIHRoZSB0YXJnZXQgc3VwcG9ydHMgaGFyZHdhcmUgY291bnQg cmVnaXN0ZXIgZm9yIGRlY3JlbWVudFxuXApkaWZmIC0tZ2l0IGEvZ2NjL3Rhcmdob29rcy5oIGIv Z2NjL3Rhcmdob29rcy5oCmluZGV4IDNjYTI1YWI2ZWRiNTliOTgyMjVlN2YyMmMwNzAzNzMwZTU2 OWMzMGIuLjY3ZjM2NGM5NDdiYjUxYWRhOTRhZDU3OTRmZGUyZDU4MjQzOTM2ZTcgMTAwNjQ0Ci0t LSBhL2djYy90YXJnaG9va3MuaAorKysgYi9nY2MvdGFyZ2hvb2tzLmgKQEAgLTg4LDYgKzg4LDcg QEAgZXh0ZXJuIGJvb2wgZGVmYXVsdF9maXhlZF9wb2ludF9zdXBwb3J0ZWRfcCAodm9pZCk7CiBl eHRlcm4gYm9vbCBkZWZhdWx0X2hhc19pZnVuY19wICh2b2lkKTsKIAogZXh0ZXJuIGJvb2wgZGVm YXVsdF9wcmVkaWN0X2RvbG9vcF9wIChjbGFzcyBsb29wICopOworZXh0ZXJuIHJ0eCBkZWZhdWx0 X2FsbG93X2VsZW1lbnR3aXNlX2RvbG9vcF9wIChydHgsIHJ0eCwgcnR4KTsKIGV4dGVybiBtYWNo aW5lX21vZGUgZGVmYXVsdF9wcmVmZXJyZWRfZG9sb29wX21vZGUgKG1hY2hpbmVfbW9kZSk7CiBl eHRlcm4gY29uc3QgY2hhciAqIGRlZmF1bHRfaW52YWxpZF93aXRoaW5fZG9sb29wIChjb25zdCBy dHhfaW5zbiAqKTsKIApkaWZmIC0tZ2l0IGEvZ2NjL3Rhcmdob29rcy5jYyBiL2djYy90YXJnaG9v a3MuY2MKaW5kZXggZDllNjE1NTJhZDVhN2I3YTkyZWIxNzJiMDExMDc1Y2Y3ZjI5Y2MxMS4uNWQ2 YzQyZTQwODUyNzEwNTM2MTgxOGVmZDY1ZGQ2ZTViMzBmNzdkYyAxMDA2NDQKLS0tIGEvZ2NjL3Rh cmdob29rcy5jYworKysgYi9nY2MvdGFyZ2hvb2tzLmNjCkBAIC02NjEsNiArNjYxLDEyIEBAIGRl ZmF1bHRfcHJlZGljdF9kb2xvb3BfcCAoY2xhc3MgbG9vcCAqbG9vcCBBVFRSSUJVVEVfVU5VU0VE KQogICByZXR1cm4gZmFsc2U7CiB9CiAKK3J0eAorZGVmYXVsdF9hbGxvd19lbGVtZW50d2lzZV9k b2xvb3BfcCAocnR4IGNvdW50LCBydHgsIHJ0eCkKK3sKKyAgcmV0dXJuIGNvdW50OworfQorCiAv KiBCeSBkZWZhdWx0LCBqdXN0IHVzZSB0aGUgaW5wdXQgTU9ERSBpdHNlbGYuICAqLwogCiBtYWNo aW5lX21vZGUKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vZGxzdHAt Y29tcGlsZS1hc20uYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vZGxzdHAtY29tcGls ZS1hc20uYwppbmRleCBhY2YwODM2MDUwYzE5Yjk4M2ZlZWFmOTdjM2U1MmUxMzE4YmIxOTRkLi5l ZDkzM2E0MDFlNzg4ODU3NjM3NzIwOTI5NWFhOWJiY2Q5MDM4ODg5IDEwMDY0NAotLS0gYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Rsc3RwLWNvbXBpbGUtYXNtLmMKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9kbHN0cC1jb21waWxlLWFzbS5jCkBAIC0xNDAsMTAgKzE0 MCwxNjIgQEAgVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVEX1RF Uk5BUllfTV9OICh2YnJzcnEsIF9tKQogVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lH TkVEX1VOU0lHTkVEX1RFUk5BUllfTV9OICh2c2hscSwgX20pCiBURVNUX0NPTVBJTEVfSU5fRExT VFBfSU5UQklUU19TSUdORURfVU5TSUdORURfVEVSTkFSWV9NX04gKHZzaHJxLCBfbSkKIAorLyog Tm93IHRlc3Qgc29tZSBtb3JlIGNvbmZpZ3VyYXRpb25zLiAgKi8KKworLyogVGVzdCBhIGZvciBs b29wIGZvcm1hdCBvZiBkZWNyZW1lbnRpbmcgdG8gemVybyAqLworaW50MzJfdCBhW10gPSB7MCwg MSwgMiwgMywgNCwgNSwgNiwgN307Cit2b2lkIHRlc3QxIChpbnQzMl90ICpiLCBpbnQgbnVtX2Vs ZW1zKQoreworICAgIGZvciAoaW50IGkgPSBudW1fZWxlbXM7IGkgPj0gMDsgaS09IDQpCisgICAg eworICAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAzMnEgKGkpOworICAgICAgICBpbnQzMng0 X3QgdmEgPSB2bGRyd3Ffel9zMzIgKCYoYVtpXSksIHApOworICAgICAgICB2c3Ryd3FfcF9zMzIg KGIgKyBpLCB2YSwgcCk7CisgICAgfQorfQorCisvKiBJdGVyYXRpb24gY291bnRlciBjb3VudGlu ZyB1cCB0byBudW1faXRlci4gICovCit2b2lkIHRlc3QyICh1aW50OF90ICphLCB1aW50OF90ICpi LCB1aW50OF90ICpjLCBpbnQgbikKK3sKKyAgICBpbnQgbnVtX2l0ZXIgPSAobiArIDE1KS8xNjsK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9pdGVyOyBpKyspCisgICAgeworICAgICAgICBt dmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobik7CisgICAgICAgIHVpbnQ4eDE2X3QgdmEgPSB2bGRy YnFfel91OCAoYSwgcCk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmIgPSB2bGRyYnFfel91OCAoYiwg cCk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmMgPSB2YWRkcV94X3U4ICh2YSwgdmIsIHApOworICAg ICAgICB2c3RyYnFfcF91OCAoYywgdmMsIHApOworICAgICAgICBuLT0xNjsKKyAgICB9Cit9CisK Ky8qIFVzaW5nIGFuIHVucHJlZGljYXRlZCBhcml0aG1ldGljIGluc3RydWN0aW9uIHdpdGhpbiB0 aGUgbG9vcC4gICovCit2b2lkIHRlc3Q1ICh1aW50OF90ICphLCB1aW50OF90ICpiLCB1aW50OF90 ICpjLCAgdWludDhfdCAqZCwgaW50IG4pCit7CisgICAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAg ICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwOHEgKG4pOworICAgICAgICB1aW50OHgxNl90IHZh ID0gdmxkcmJxX3pfdTggKGEsIHApOworICAgICAgICB1aW50OHgxNl90IHZiID0gdmxkcmJxX3U4 IChiKTsKKyAgICAgICAgdWludDh4MTZfdCB2YyA9IHZhZGRxX3U4ICh2YSwgdmIpOworICAgICAg ICB1aW50OHgxNl90IHZkID0gdmFkZHFfeF91OCAodmEsIHZiLCBwKTsKKyAgICAgICAgdnN0cmJx X3BfdTggKGMsIHZjLCBwKTsKKyAgICAgICAgdnN0cmJxX3BfdTggKGQsIHZkLCBwKTsKKyAgICAg ICAgbi09MTY7CisgICAgfQorfQorCisvKiBVc2luZyBhIGRpZmZlcmVudCBWUFIgdmFsdWUgZm9y IG9uZSBpbnN0cnVjdGlvbiBpbiB0aGUgbG9vcC4gICovCit2b2lkIHRlc3QxMSAoaW50MzJfdCAq YSwgaW50MzJfdCAqYiwgaW50MzJfdCAqYywgaW50IG4sIG12ZV9wcmVkMTZfdCBwMSkKK3sKKyAg d2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDMycSAobik7 CisgICAgICBpbnQzMng0X3QgdmEgPSB2bGRyd3Ffel9zMzIgKGEsIHApOworICAgICAgaW50MzJ4 NF90IHZiID0gdmxkcndxX3pfczMyIChiLCBwMSk7CisgICAgICBpbnQzMng0X3QgdmMgPSB2YWRk cV94X3MzMiAodmEsIHZiLCBwKTsKKyAgICAgIHZzdHJ3cV9wX3MzMiAoYywgdmMsIHApOworICAg ICAgYyArPSA0OworICAgICAgYSArPSA0OworICAgICAgYiArPSA0OworICAgICAgbiAtPSA0Owor ICAgIH0KK30KKworCisKKy8qIEdlbmVyYXRpbmcgYW5kIHVzaW5nIGEgY29uc3RhbnQgVlBSIHZh bHVlIGluIHRoZSBsb29wLCB3aXRoIGEgdmN0cC4gICovCit2b2lkIHRlc3QxMiAoaW50MzJfdCAq YSwgaW50MzJfdCAqYiwgaW50MzJfdCAqYywgaW50IG4sIGludCBnKQoreworICB3aGlsZSAobiA+ IDApCisgICAgeworICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwMzJxIChuKTsKKyAgICAgIGlu dDMyeDRfdCB2YSA9IHZsZHJ3cV96X3MzMiAoYSwgcCk7CisgICAgICBtdmVfcHJlZDE2X3QgcDEg PSB2Y3RwMzJxIChnKTsKKyAgICAgIGludDMyeDRfdCB2YiA9IHZsZHJ3cV96X3MzMiAoYiwgcDEp OworICAgICAgaW50MzJ4NF90IHZjID0gdmFkZHFfeF9zMzIgKHZhLCB2YiwgcCk7CisgICAgICB2 c3Ryd3FfcF9zMzIgKGMsIHZjLCBwKTsKKyAgICAgIGMgKz0gNDsKKyAgICAgIGEgKz0gNDsKKyAg ICAgIGIgKz0gNDsKKyAgICAgIG4gLT0gNDsKKyAgICB9Cit9CisKKy8qIEdlbmVyYXRpbmcgYW5k IHVzaW5nIGEgZGlmZmVyZW50IFZQUiB2YWx1ZSBpbiB0aGUgbG9vcCwgd2l0aCBhIHZjdHAuICAq Lwordm9pZCB0ZXN0MTIyIChpbnQzMl90ICphLCBpbnQzMl90ICpiLCBpbnQzMl90ICpjLCBpbnQg biwgaW50IGcpCit7CisgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICBtdmVfcHJlZDE2X3Qg cCA9IHZjdHAzMnEgKG4pOworICAgICAgaW50MzJ4NF90IHZhID0gdmxkcndxX3pfczMyIChhLCBw KTsKKyAgICAgIG12ZV9wcmVkMTZfdCBwMSA9IHZjdHAzMnEgKGcpOworICAgICAgaW50MzJ4NF90 IHZiID0gdmxkcndxX3pfczMyIChiLCBwMSk7CisgICAgICBpbnQzMng0X3QgdmMgPSB2YWRkcV94 X3MzMiAodmEsIHZiLCBwKTsKKyAgICAgIHZzdHJ3cV9wX3MzMiAoYywgdmMsIHApOworICAgICAg YyArPSA0OworICAgICAgYSArPSA0OworICAgICAgYiArPSA0OworICAgICAgbiAtPSA0OworICAg ICAgZysrOworICAgIH0KK30KKworLyogR2VuZXJhdGluZyBhbmQgdXNpbmcgYSBkaWZmZXJlbnQg VlBSIHZhbHVlIGluIHRoZSBsb29wLCB3aXRoIGEgdmN0cF9tLiAgKi8KK3ZvaWQgdGVzdDEzIChp bnQzMl90ICphLCBpbnQzMl90ICpiLCBpbnQzMl90ICpjLCBpbnQgbiwgbXZlX3ByZWQxNl90IHAx KQoreworICB3aGlsZSAobiA+IDApCisgICAgeworICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3Rw MzJxIChuKTsKKyAgICAgIGludDMyeDRfdCB2YSA9IHZsZHJ3cV96X3MzMiAoYSwgcCk7CisgICAg ICBtdmVfcHJlZDE2X3QgcDIgPSB2Y3RwMzJxX20gKG4sIHAxKTsKKyAgICAgIGludDMyeDRfdCB2 YiA9IHZsZHJ3cV96X3MzMiAoYiwgcDEpOworICAgICAgaW50MzJ4NF90IHZjID0gdmFkZHFfeF9z MzIgKHZhLCB2YiwgcDIpOworICAgICAgdnN0cndxX3BfczMyIChjLCB2YywgcCk7CisgICAgICBj ICs9IDQ7CisgICAgICBhICs9IDQ7CisgICAgICBiICs9IDQ7CisgICAgICBuIC09IDQ7CisgICAg fQorfQorCisvKiBHZW5lcmF0aW5nIGFuZCB1c2luZyBhIGRpZmZlcmVudCBWUFIgdmFsdWUgaW4g dGhlIGxvb3AsIHdpdGggYSB2Y21wLiAgKi8KK3ZvaWQgdGVzdDE0IChpbnQzMl90ICphLCBpbnQz Ml90ICpiLCBpbnQzMl90ICpjLCBpbnQgbikKK3sKKyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAg ICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDMycSAobik7CisgICAgICBpbnQzMng0X3QgdmEgPSB2 bGRyd3Ffel9zMzIgKGEsIHApOworICAgICAgaW50MzJ4NF90IHZiID0gdmxkcndxX3pfczMyIChi LCBwKTsKKyAgICAgIG12ZV9wcmVkMTZfdCBwMSA9IHZjbXBlcXFfczMyICh2YSwgdmIpOworICAg ICAgaW50MzJ4NF90IHZjID0gdmFkZHFfeF9zMzIgKHZhLCB2YiwgcDEpOworICAgICAgdnN0cndx X3BfczMyIChjLCB2YywgcCk7CisgICAgICBjICs9IDQ7CisgICAgICBhICs9IDQ7CisgICAgICBi ICs9IDQ7CisgICAgICBuIC09IDQ7CisgICAgfQorfQorCisvKiBHZW5lcmF0aW5nIGFuZCB1c2lu ZyBhIGRpZmZlcmVudCBWUFIgdmFsdWUgaW4gdGhlIGxvb3AsIHdpdGggYSB2Y21wX20uICAqLwor dm9pZCB0ZXN0MTUgKGludDMyX3QgKmEsIGludDMyX3QgKmIsIGludDMyX3QgKmMsIGludCBuLCBt dmVfcHJlZDE2X3QgcDEpCit7CisgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICBtdmVfcHJl ZDE2X3QgcCA9IHZjdHAzMnEgKG4pOworICAgICAgaW50MzJ4NF90IHZhID0gdmxkcndxX3pfczMy IChhLCBwKTsKKyAgICAgIGludDMyeDRfdCB2YiA9IHZsZHJ3cV96X3MzMiAoYiwgcCk7CisgICAg ICBtdmVfcHJlZDE2X3QgcDIgPSB2Y21wZXFxX21fczMyICh2YSwgdmIsIHAxKTsKKyAgICAgIGlu dDMyeDRfdCB2YyA9IHZhZGRxX3hfczMyICh2YSwgdmIsIHAyKTsKKyAgICAgIHZzdHJ3cV9wX3Mz MiAoYywgdmMsIHApOworICAgICAgYyArPSA0OworICAgICAgYSArPSA0OworICAgICAgYiArPSA0 OworICAgICAgbiAtPSA0OworICAgIH0KK30KKwogLyogVGhlIGZpbmFsIG51bWJlciBvZiBETFNU UHMgY3VycmVudGx5IGlzIGNhbGN1bGF0ZWQgYnkgdGhlIG51bWJlciBvZgotICBgVEVTVF9DT01Q SUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUlkuKmAgbWFjcm9zICog Ni4gICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZGxzdHB9IDE0 NCB9IH0gKi8KLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRsZXRwfSAx NDQgfSB9ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJcdHZjdHBcdCIg fSB9ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJcdHZwc3RcdCIgfSB9 ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJwMCIgfSB9ICovCisgIGBU RVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklUU19TSUdORURfVU5TSUdORURfVEVSTkFSWS4qYCBt YWNyb3MgKiA2ICsgOS4gICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg e1x0ZGxzdHB9IDE1MyB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1l cyB7XHRsZXRwfSAxNTMgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYXJtL2Rsc3RwLWludDE2eDguYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vZGxz dHAtaW50MTZ4OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxYzAzYjYxOGUwZGNjN2Q0MjY4ZjJmMDA0NjYzYjZl MzMyYTQwMmEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJt L2Rsc3RwLWludDE2eDguYwpAQCAtMCwwICsxLDY4IEBACisvKiB7IGRnLWRvIHJ1biB7IHRhcmdl dCB7IGFybSotKi0qIH0gfSB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBh cm1fdjhfMW1fbXZlX29rIH0gKi8KKy8qIHsgZGctc2tpcC1pZiAiYXZvaWQgY29uZmxpY3Rpbmcg bXVsdGlsaWIgb3B0aW9ucyIgeyAqLSotKiB9IHsgIi1tYXJtIiAiLW1jcHU9KiIgfSB9ICovCisv KiB7IGRnLW9wdGlvbnMgIi1tYXJjaD1hcm12OC4xLW0ubWFpbitmcC5kcCttdmUuZnAgLW1mbG9h dC1hYmk9aGFyZCAtbWZwdT1hdXRvIC1PMyAtLXNhdmUtdGVtcHMiIH0gKi8KKworI2luY2x1ZGUg PGFybV9tdmUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lu Y2x1ZGUgImxvYi5oIgorCit2b2lkICBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKSB0ZXN0IChp bnQxNl90ICphLCBpbnQxNl90ICpiLCBpbnQxNl90ICpjLCBpbnQgbikKK3sKKyAgd2hpbGUgKG4g PiAwKQorICAgIHsKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDE2cSAobik7CisgICAgICBp bnQxNng4X3QgdmEgPSB2bGRyaHFfel9zMTYgKGEsIHApOworICAgICAgaW50MTZ4OF90IHZiID0g dmxkcmhxX3pfczE2IChiLCBwKTsKKyAgICAgIGludDE2eDhfdCB2YyA9IHZhZGRxX3hfczE2ICh2 YSwgdmIsIHApOworICAgICAgdnN0cmhxX3BfczE2IChjLCB2YywgcCk7CisgICAgICBjKz04Owor ICAgICAgYSs9ODsKKyAgICAgIGIrPTg7CisgICAgICBuLT04OworICAgIH0KK30KKworaW50IG1h aW4gKCkKK3sKKyAgaW50IGk7CisgIGludDE2X3QgdGVtcDFbTl07CisgIGludDE2X3QgdGVtcDJb Tl07CisgIGludDE2X3QgdGVtcDNbTl07CisgIHJlc2V0X2RhdGExNiAodGVtcDEsIHRlbXAyLCB0 ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDApOworICBjaGVja19wbHVz MTYgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDApOworCisgIHJlc2V0X2RhdGExNiAodGVtcDEsIHRl bXAyLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDEpOworICBjaGVj a19wbHVzMTYgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDEpOworCisgIHJlc2V0X2RhdGExNiAodGVt cDEsIHRlbXAyLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDcpOwor ICBjaGVja19wbHVzMTYgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDcpOworCisgIHJlc2V0X2RhdGEx NiAodGVtcDEsIHRlbXAyLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMiwgdGVtcDMs IDgpOworICBjaGVja19wbHVzMTYgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDgpOworCisgIHJlc2V0 X2RhdGExNiAodGVtcDEsIHRlbXAyLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMiwg dGVtcDMsIDkpOworICBjaGVja19wbHVzMTYgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDkpOworCisg IHJlc2V0X2RhdGExNiAodGVtcDEsIHRlbXAyLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0 ZW1wMiwgdGVtcDMsIDE2KTsKKyAgY2hlY2tfcGx1czE2ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAx Nik7CisKKyAgcmVzZXRfZGF0YTE2ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCBOKTsKKyAgdGVzdCAo dGVtcDEsIHRlbXAyLCB0ZW1wMywgMTcpOworICBjaGVja19wbHVzMTYgKHRlbXAxLCB0ZW1wMiwg dGVtcDMsIDE3KTsKKworICByZXNldF9kYXRhMTYgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOwor fQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZGxzdHAuMTZ9IDEg fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0bGV0cH0gMSB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIlx0dmN0cCIgfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJcdHZwc3QiIH0gfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAicDAiIH0gfSAqLwpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9kbHN0cC1pbnQzMng0LmMgYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvYXJtL2Rsc3RwLWludDMyeDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YTNlYjA1Nzdi ZTA2MzFhYjRlMDdmNmY3NWMyYzgwMmI1MzVjODhjCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9kbHN0cC1pbnQzMng0LmMKQEAgLTAsMCArMSw2OCBAQAor LyogeyBkZy1kbyBydW4geyB0YXJnZXQgeyBhcm0qLSotKiB9IH0gfSAqLworLyogeyBkZy1yZXF1 aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXJtX3Y4XzFtX212ZV9vayB9ICovCisvKiB7IGRnLXNraXAt aWYgImF2b2lkIGNvbmZsaWN0aW5nIG11bHRpbGliIG9wdGlvbnMiIHsgKi0qLSogfSB7ICItbWFy bSIgIi1tY3B1PSoiIH0gfSAqLworLyogeyBkZy1vcHRpb25zICItbWFyY2g9YXJtdjguMS1tLm1h aW4rZnAuZHArbXZlLmZwIC1tZmxvYXQtYWJpPWhhcmQgLW1mcHU9YXV0byAtTzMgLS1zYXZlLXRl bXBzIiB9ICovCisKKyNpbmNsdWRlIDxhcm1fbXZlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNp bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsb2IuaCIKKwordm9pZCAgX19hdHRyaWJ1dGVf XyAoKG5vaW5saW5lKSkgdGVzdCAoaW50MzJfdCAqYSwgaW50MzJfdCAqYiwgaW50MzJfdCAqYywg aW50IG4pCit7CisgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICBtdmVfcHJlZDE2X3QgcCA9 IHZjdHAzMnEgKG4pOworICAgICAgaW50MzJ4NF90IHZhID0gdmxkcndxX3pfczMyIChhLCBwKTsK KyAgICAgIGludDMyeDRfdCB2YiA9IHZsZHJ3cV96X3MzMiAoYiwgcCk7CisgICAgICBpbnQzMng0 X3QgdmMgPSB2YWRkcV94X3MzMiAodmEsIHZiLCBwKTsKKyAgICAgIHZzdHJ3cV9wX3MzMiAoYywg dmMsIHApOworICAgICAgYys9NDsKKyAgICAgIGErPTQ7CisgICAgICBiKz00OworICAgICAgbi09 NDsKKyAgICB9Cit9CisKK2ludCBtYWluICgpCit7CisgIGludCBpOworICBpbnQzMl90IHRlbXAx W05dOworICBpbnQzMl90IHRlbXAyW05dOworICBpbnQzMl90IHRlbXAzW05dOworICByZXNldF9k YXRhMzIgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRl bXAzLCAwKTsKKyAgY2hlY2tfcGx1czMyICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAwKTsKKworICBy ZXNldF9kYXRhMzIgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVt cDIsIHRlbXAzLCAxKTsKKyAgY2hlY2tfcGx1czMyICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAxKTsK KworICByZXNldF9kYXRhMzIgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOworICB0ZXN0ICh0ZW1w MSwgdGVtcDIsIHRlbXAzLCAzKTsKKyAgY2hlY2tfcGx1czMyICh0ZW1wMSwgdGVtcDIsIHRlbXAz LCAzKTsKKworICByZXNldF9kYXRhMzIgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOworICB0ZXN0 ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA0KTsKKyAgY2hlY2tfcGx1czMyICh0ZW1wMSwgdGVtcDIs IHRlbXAzLCA0KTsKKworICByZXNldF9kYXRhMzIgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOwor ICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA1KTsKKyAgY2hlY2tfcGx1czMyICh0ZW1wMSwg dGVtcDIsIHRlbXAzLCA1KTsKKworICByZXNldF9kYXRhMzIgKHRlbXAxLCB0ZW1wMiwgdGVtcDMs IE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA4KTsKKyAgY2hlY2tfcGx1czMyICh0 ZW1wMSwgdGVtcDIsIHRlbXAzLCA4KTsKKworICByZXNldF9kYXRhMzIgKHRlbXAxLCB0ZW1wMiwg dGVtcDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA5KTsKKyAgY2hlY2tfcGx1 czMyICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA5KTsKKworICByZXNldF9kYXRhMzIgKHRlbXAxLCB0 ZW1wMiwgdGVtcDMsIE4pOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGlt ZXMge1x0ZGxzdHAuMzJ9IDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMge1x0bGV0cH0gMSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1u b3QgIlx0dmN0cCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJc dHZwc3QiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAicDAiIH0g fSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9kbHN0cC1pbnQ2 NHgyLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Rsc3RwLWludDY0eDIuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwLi5mMDVmZjgzNDM2M2UyYTQ3YTlmYWRkYjZiOGIwOWI2MGViOTRhM2MyCi0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9kbHN0cC1pbnQ2NHgyLmMK QEAgLTAsMCArMSw2OCBAQAorLyogeyBkZy1kbyBydW4geyB0YXJnZXQgeyBhcm0qLSotKiB9IH0g fSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXJtX3Y4XzFtX212ZV9vayB9 ICovCisvKiB7IGRnLXNraXAtaWYgImF2b2lkIGNvbmZsaWN0aW5nIG11bHRpbGliIG9wdGlvbnMi IHsgKi0qLSogfSB7ICItbWFybSIgIi1tY3B1PSoiIH0gfSAqLworLyogeyBkZy1vcHRpb25zICIt bWFyY2g9YXJtdjguMS1tLm1haW4rZnAuZHArbXZlLmZwIC1tZmxvYXQtYWJpPWhhcmQgLW1mcHU9 YXV0byAtTzMgLS1zYXZlLXRlbXBzIiB9ICovCisKKyNpbmNsdWRlIDxhcm1fbXZlLmg+CisjaW5j bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsb2IuaCIKKwor dm9pZCAgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkgdGVzdCAoaW50NjRfdCAqYSwgaW50NjRf dCAqYywgaW50IG4pCit7CisgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICBtdmVfcHJlZDE2 X3QgcCA9IHZjdHA2NHEgKG4pOworICAgICAgaW50NjR4Ml90IHZhID0gdmxkcmRxX2dhdGhlcl9v ZmZzZXRfel9zNjQgKGEsIHZjcmVhdGVxX3U2NCAoOCwgMCksIHApOworICAgICAgdnN0cmRxX3Nj YXR0ZXJfb2Zmc2V0X3BfczY0IChjLCB2Y3JlYXRlcV91NjQgKDgsIDApLCB2YSwgcCk7CisgICAg ICBjKz0yOworICAgICAgYSs9MjsKKyAgICAgIG4tPTI7CisgICAgfQorfQorCitpbnQgbWFpbiAo KQoreworICBpbnQgaTsKKyAgaW50NjRfdCB0ZW1wMVtOXTsKKyAgaW50NjRfdCB0ZW1wM1tOXTsK KyAgcmVzZXRfZGF0YTY0ICAodGVtcDEsIHRlbXAzLCBOKTsKKyAgdGVzdCAodGVtcDEsIHRlbXAz LCAwKTsKKyAgY2hlY2tfbWVtY3B5NjQgKHRlbXAxLCB0ZW1wMywgMCk7CisKKyAgcmVzZXRfZGF0 YTY0ICAodGVtcDEsIHRlbXAzLCBOKTsKKyAgdGVzdCAodGVtcDEsIHRlbXAzLCAxKTsKKyAgY2hl Y2tfbWVtY3B5NjQgKHRlbXAxLCB0ZW1wMywgMSk7CisKKyAgcmVzZXRfZGF0YTY0ICAodGVtcDEs IHRlbXAzLCBOKTsKKyAgdGVzdCAodGVtcDEsIHRlbXAzLCAyKTsKKyAgY2hlY2tfbWVtY3B5NjQg KHRlbXAxLCB0ZW1wMywgMik7CisKKyAgcmVzZXRfZGF0YTY0ICAodGVtcDEsIHRlbXAzLCBOKTsK KyAgdGVzdCAodGVtcDEsIHRlbXAzLCAzKTsKKyAgY2hlY2tfbWVtY3B5NjQgKHRlbXAxLCB0ZW1w MywgMyk7CisKKyAgcmVzZXRfZGF0YTY0ICAodGVtcDEsIHRlbXAzLCBOKTsKKyAgdGVzdCAodGVt cDEsIHRlbXAzLCA0KTsKKyAgY2hlY2tfbWVtY3B5NjQgKHRlbXAxLCB0ZW1wMywgNCk7CisKKyAg cmVzZXRfZGF0YTY0ICAodGVtcDEsIHRlbXAzLCBOKTsKKyAgdGVzdCAodGVtcDEsIHRlbXAzLCA1 KTsKKyAgY2hlY2tfbWVtY3B5NjQgKHRlbXAxLCB0ZW1wMywgNSk7CisKKyAgcmVzZXRfZGF0YTY0 ICAodGVtcDEsIHRlbXAzLCBOKTsKKyAgdGVzdCAodGVtcDEsIHRlbXAzLCA2KTsKKyAgY2hlY2tf bWVtY3B5NjQgKHRlbXAxLCB0ZW1wMywgNik7CisKKyAgcmVzZXRfZGF0YTY0ICAodGVtcDEsIHRl bXAzLCBOKTsKKyAgdGVzdCAodGVtcDEsIHRlbXAzLCA3KTsKKyAgY2hlY2tfbWVtY3B5NjQgKHRl bXAxLCB0ZW1wMywgNyk7CisKKyAgcmVzZXRfZGF0YTY0ICAodGVtcDEsIHRlbXAzLCBOKTsKK30K KworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGRsc3RwLjY0fSAxIH0g fSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGxldHB9IDEgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJcdHZjdHAiIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiXHR2cHN0IiB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInAwIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vZGxzdHAtaW50OHgxNi5jIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2FybS9kbHN0cC1pbnQ4eDE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI4MWJhNzg0OGQx YmEzMzIxMTI0ZTk5NmViNWJlYTQ0OTc3YzJhYgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9hcm0vZGxzdHAtaW50OHgxNi5jCkBAIC0wLDAgKzEsNjggQEAKKy8q IHsgZGctZG8gcnVuIHsgdGFyZ2V0IHsgYXJtKi0qLSogfSB9IH0gKi8KKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IGFybV92OF8xbV9tdmVfb2sgfSAqLworLyogeyBkZy1za2lwLWlm ICJhdm9pZCBjb25mbGljdGluZyBtdWx0aWxpYiBvcHRpb25zIiB7ICotKi0qIH0geyAiLW1hcm0i ICItbWNwdT0qIiB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1hcmNoPWFybXY4LjEtbS5tYWlu K2ZwLmRwK212ZS5mcCAtbWZsb2F0LWFiaT1oYXJkIC1tZnB1PWF1dG8gLU8zIC0tc2F2ZS10ZW1w cyIgfSAqLworCisjaW5jbHVkZSA8YXJtX212ZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibG9iLmgiCisKK3ZvaWQgIF9fYXR0cmlidXRlX18g KChub2lubGluZSkpIHRlc3QgKGludDhfdCAqYSwgaW50OF90ICpiLCBpbnQ4X3QgKmMsIGludCBu KQoreworICB3aGlsZSAobiA+IDApCisgICAgeworICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3Rw OHEgKG4pOworICAgICAgaW50OHgxNl90IHZhID0gdmxkcmJxX3pfczggKGEsIHApOworICAgICAg aW50OHgxNl90IHZiID0gdmxkcmJxX3pfczggKGIsIHApOworICAgICAgaW50OHgxNl90IHZjID0g dmFkZHFfeF9zOCAodmEsIHZiLCBwKTsKKyAgICAgIHZzdHJicV9wX3M4IChjLCB2YywgcCk7Cisg ICAgICBjKz0xNjsKKyAgICAgIGErPTE2OworICAgICAgYis9MTY7CisgICAgICBuLT0xNjsKKyAg ICB9Cit9CisKK2ludCBtYWluICgpCit7CisgIGludCBpOworICBpbnQ4X3QgdGVtcDFbTl07Cisg IGludDhfdCB0ZW1wMltOXTsKKyAgaW50OF90IHRlbXAzW05dOworICByZXNldF9kYXRhOCAodGVt cDEsIHRlbXAyLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDApOwor ICBjaGVja19wbHVzOCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgMCk7CisKKyAgcmVzZXRfZGF0YTgg KHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAx KTsKKyAgY2hlY2tfcGx1czggKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDEpOworCisgIHJlc2V0X2Rh dGE4ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCBOKTsKKyAgdGVzdCAodGVtcDEsIHRlbXAyLCB0ZW1w MywgMTUpOworICBjaGVja19wbHVzOCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgMTUpOworCisgIHJl c2V0X2RhdGE4ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCBOKTsKKyAgdGVzdCAodGVtcDEsIHRlbXAy LCB0ZW1wMywgMTYpOworICBjaGVja19wbHVzOCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgMTYpOwor CisgIHJlc2V0X2RhdGE4ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCBOKTsKKyAgdGVzdCAodGVtcDEs IHRlbXAyLCB0ZW1wMywgMTcpOworICBjaGVja19wbHVzOCAodGVtcDEsIHRlbXAyLCB0ZW1wMywg MTcpOworCisgIHJlc2V0X2RhdGE4ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCBOKTsKKyAgdGVzdCAo dGVtcDEsIHRlbXAyLCB0ZW1wMywgMzIpOworICBjaGVja19wbHVzOCAodGVtcDEsIHRlbXAyLCB0 ZW1wMywgMzIpOworCisgIHJlc2V0X2RhdGE4ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCBOKTsKKyAg dGVzdCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgMzMpOworICBjaGVja19wbHVzOCAodGVtcDEsIHRl bXAyLCB0ZW1wMywgMzMpOworCisgIHJlc2V0X2RhdGE4ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCBO KTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGRsc3RwLjh9 IDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0bGV0cH0g MSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIlx0dmN0cCIgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJcdHZwc3QiIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAicDAiIH0gfSAqLwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9kbHN0cC1pbnZhbGlkLWFzbS5jIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9kbHN0cC1pbnZhbGlkLWFzbS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LmMwZDA0OTM2MDI4NWY0Mjc4MzdiN2Q4MTVhMzM0OGE4MTVjZDQxZmEKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Rsc3RwLWludmFsaWQtYXNtLmMKQEAg LTAsMCArMSwxODkgQEAKKworLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IHsgYXJtKi0qLSog fSB9IH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGFybV92OF8xbV9tdmVf b2sgfSAqLworLyogeyBkZy1za2lwLWlmICJhdm9pZCBjb25mbGljdGluZyBtdWx0aWxpYiBvcHRp b25zIiB7ICotKi0qIH0geyAiLW1hcm0iICItbWNwdT0qIiB9IH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLW1hcmNoPWFybXY4LjEtbS5tYWluK2ZwLmRwK212ZS5mcCAtbWZsb2F0LWFiaT1oYXJkIC1t ZnB1PWF1dG8gLU8zIC0tc2F2ZS10ZW1wcyIgfSAqLworCisjaW5jbHVkZSA8YXJtX212ZS5oPgor CisvKiBUZXJtaW5hdGluZyBvbiBhIG5vbi16ZXJvIG51bWJlciBvZiBlbGVtZW50cy4gICovCit2 b2lkIHRlc3QxICh1aW50OF90ICphLCB1aW50OF90ICpiLCB1aW50OF90ICpjLCBpbnQgbikKK3sK KyAgICB3aGlsZSAobiA+IDEpCisgICAgeworICAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4 cSAobik7CisgICAgICAgIHVpbnQ4eDE2X3QgdmEgPSB2bGRyYnFfel91OCAoYSwgcCk7CisgICAg ICAgIHVpbnQ4eDE2X3QgdmIgPSB2bGRyYnFfel91OCAoYiwgcCk7CisgICAgICAgIHVpbnQ4eDE2 X3QgdmMgPSB2YWRkcV94X3U4ICh2YSwgdmIsIHApOworICAgICAgICB2c3RyYnFfcF91OCAoYywg dmMsIHApOworICAgICAgICBuIC09IDE2OworICAgIH0KK30KKworLyogU2ltaWxhciwgdGVybWlu YXRpbmcgb24gYSBub24temVybyBudW1iZXIgb2YgZWxlbWVudHMsIGJ1dCBpbiBhIGZvciBsb29w CisgICBmb3JtYXQuICAqLworaW50MzJfdCBhW10gPSB7MCwgMSwgMiwgMywgNCwgNSwgNiwgN307 Cit2b2lkIHRlc3QyIChpbnQzMl90ICpiLCBpbnQgbnVtX2VsZW1zKQoreworICAgIGZvciAoaW50 IGkgPSBudW1fZWxlbXM7IGkgPj0gMjsgaS09IDQpCisgICAgeworICAgICAgICBtdmVfcHJlZDE2 X3QgcCA9IHZjdHAzMnEgKGkpOworICAgICAgICBpbnQzMng0X3QgdmEgPSB2bGRyd3Ffel9zMzIg KCYoYVtpXSksIHApOworICAgICAgICB2c3Ryd3FfcF9zMzIgKGIgKyBpLCB2YSwgcCk7CisgICAg fQorfQorCisvKiBJdGVyYXRpb24gY291bnRlciBjb3VudGluZyB1cCB0byBudW1faXRlciwgd2l0 aCBhIG5vbi16ZXJvIHN0YXJ0aW5nIG51bS4gICovCit2b2lkIHRlc3QzICh1aW50OF90ICphLCB1 aW50OF90ICpiLCB1aW50OF90ICpjLCBpbnQgbikKK3sKKyAgICBpbnQgbnVtX2l0ZXIgPSAobiAr IDE1KS8xNjsKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IG51bV9pdGVyOyBpKyspCisgICAgewor ICAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobik7CisgICAgICAgIHVpbnQ4eDE2X3Qg dmEgPSB2bGRyYnFfel91OCAoYSwgcCk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmIgPSB2bGRyYnFf el91OCAoYiwgcCk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmMgPSB2YWRkcV94X3U4ICh2YSwgdmIs IHApOworICAgICAgICB2c3RyYnFfcF91OCAoYywgdmMsIHApOworICAgICAgICBuIC09IDE2Owor ICAgIH0KK30KKworLyogSXRlcmF0aW9uIGNvdW50ZXIgY291bnRpbmcgdXAgdG8gbnVtX2l0ZXIs IHdpdGggYSBsYXJnZXIgaW5jcmVtZW50ICAqLwordm9pZCB0ZXN0NCAodWludDhfdCAqYSwgdWlu dDhfdCAqYiwgdWludDhfdCAqYywgaW50IG4pCit7CisgICAgaW50IG51bV9pdGVyID0gKG4gKyAx NSkvMTY7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1faXRlcjsgaSs9MikKKyAgICB7Cisg ICAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDhxIChuKTsKKyAgICAgICAgdWludDh4MTZfdCB2 YSA9IHZsZHJicV96X3U4IChhLCBwKTsKKyAgICAgICAgdWludDh4MTZfdCB2YiA9IHZsZHJicV96 X3U4IChiLCBwKTsKKyAgICAgICAgdWludDh4MTZfdCB2YyA9IHZhZGRxX3hfdTggKHZhLCB2Yiwg cCk7CisgICAgICAgIHZzdHJicV9wX3U4IChjLCB2YywgcCk7CisgICAgICAgIG4gLT0gMTY7Cisg ICAgfQorfQorCisvKiBVc2luZyBhbiB1bnByZWRpY2F0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24gd2l0 aGluIHRoZSBsb29wLiAgKi8KK3ZvaWQgdGVzdDUgKHVpbnQ4X3QgKmEsIHVpbnQ4X3QgKmIsIHVp bnQ4X3QgKmMsICB1aW50OF90ICpkLCBpbnQgbikKK3sKKyAgICB3aGlsZSAobiA+IDApCisgICAg eworICAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobik7CisgICAgICAgIHVpbnQ4eDE2 X3QgdmEgPSB2bGRyYnFfel91OCAoYSwgcCk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmIgPSB2bGRy YnFfel91OCAoYiwgcCk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmMgPSB2YWRkcV91OCAodmEsIHZi KTsKKyAgICAgICAgdWludDh4MTZfdCB2ZCA9IHZhZGRxX3hfdTggKHZhLCB2YiwgcCk7CisgICAg ICAgIHZzdHJicV91OCAoZCwgdmQpOworICAgICAgICBuIC09IDE2OworICAgIH0KK30KKworLyog VXNpbmcgYW4gdW5wcmVkaWNhdGVkIHN0b3JlIG91dHNpZGUgdGhlIGxvb3AuICAqLwordm9pZCB0 ZXN0MTYgKHVpbnQ4X3QgKmEsIHVpbnQ4X3QgKmIsIHVpbnQ4X3QgKmMsIGludCBuLCB1aW50OHgx Nl90IHZ4KQoreworICAgIHVpbnQ4X3Qgc3VtID0gMDsKKyAgICB3aGlsZSAobiA+IDApCisgICAg eworICAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobik7CisgICAgICAgIHVpbnQ4eDE2 X3QgdmEgPSB2bGRyYnFfel91OCAoYSwgcCk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmIgPSB2bGRy YnFfel91OCAoYiwgcCk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmMgPSB2YWRkcV9tX3U4ICh2eCwg dmEsIHZiLCBwKTsKKyAgICAgICAgdnggPSB2YWRkcV91OCAodngsIHZjKTsKKyAgICAgICAgYSAr PSAxNjsKKyAgICAgICAgYiArPSAxNjsKKyAgICAgICAgbiAtPSAxNjsKKyAgICB9CisgICAgdnN0 cmJxX3U4IChjLCB2eCk7Cit9CisKKy8qIFVzaW5nIGFuIHVucHJlZGljYXRlZCBvcCB3aGVyZSB0 aGUgcmVzdWx0IGlzIHZhbGlkIG91dHNpZGUgdGhlIGJiLiAgKi8KK3VpbnQ4X3QgdGVzdDE3ICh1 aW50OF90ICphLCB1aW50OF90ICpiLCB1aW50OF90ICpjLCBpbnQgbiwgdWludDh4MTZfdCB2eCkK K3sKKyAgICB1aW50OF90IHN1bSA9IDA7CisgICAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAg ICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwOHEgKG4pOworICAgICAgICB1aW50OHgxNl90IHZhID0g dmxkcmJxX3pfdTggKGEsIHApOworICAgICAgICB1aW50OHgxNl90IHZiID0gdmxkcmJxX3pfdTgg KGIsIHApOworICAgICAgICB1aW50OHgxNl90IHZjID0gdmFkZHFfbV91OCAodngsIHZhLCB2Yiwg cCk7CisgICAgICAgIHN1bSArPSB2YWRkdnFfdTggKHZjKTsKKyAgICAgICAgYSArPSAxNjsKKyAg ICAgICAgYiArPSAxNjsKKyAgICAgICAgbiAtPSAxNjsKKyAgICB9CisgICAgcmV0dXJuIHN1bTsK K30KKworLyogVXNpbmcgYSBWUFIgdGhhdCBnZXRzIG1vZGlmaWVkIHdpdGhpbiB0aGUgbG9vcC4g ICovCit2b2lkIHRlc3Q3IChpbnQzMl90ICphLCBpbnQzMl90ICpiLCBpbnQzMl90ICpjLCBpbnQg bikKK3sKKyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0 cDMycSAobik7CisgICAgICBpbnQzMng0X3QgdmEgPSB2bGRyd3Ffel9zMzIgKGEsIHApOworICAg ICAgcCsrOworICAgICAgaW50MzJ4NF90IHZiID0gdmxkcndxX3pfczMyIChiLCBwKTsKKyAgICAg IGludDMyeDRfdCB2YyA9IHZhZGRxX3hfczMyICh2YSwgdmIsIHApOworICAgICAgdnN0cndxX3Bf czMyIChjLCB2YywgcCk7CisgICAgICBjICs9IDQ7CisgICAgICBhICs9IDQ7CisgICAgICBiICs9 IDQ7CisgICAgICBuIC09IDQ7CisgICAgfQorfQorCisvKiBVc2luZyBhIFZQUiB0aGF0IGdldHMg cmUtZ2VuZXJhdGVkIHdpdGhpbiB0aGUgbG9vcC4gICovCit2b2lkIHRlc3Q4IChpbnQzMl90ICph LCBpbnQzMl90ICpiLCBpbnQzMl90ICpjLCBpbnQgbikKK3sKKyAgbXZlX3ByZWQxNl90IHAgPSB2 Y3RwMzJxIChuKTsKKyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgIGludDMyeDRfdCB2YSA9 IHZsZHJ3cV96X3MzMiAoYSwgcCk7CisgICAgICBwID0gdmN0cDMycSAobik7CisgICAgICBpbnQz Mng0X3QgdmIgPSB2bGRyd3Ffel9zMzIgKGIsIHApOworICAgICAgaW50MzJ4NF90IHZjID0gdmFk ZHFfeF9zMzIgKHZhLCB2YiwgcCk7CisgICAgICB2c3Ryd3FfcF9zMzIgKGMsIHZjLCBwKTsKKyAg ICAgIGMgKz0gNDsKKyAgICAgIGEgKz0gNDsKKyAgICAgIGIgKz0gNDsKKyAgICAgIG4gLT0gNDsK KyAgICB9Cit9CisKKy8qIFVzaW5nIHZjdHAzMnFfbSBpbnN0ZWFkIG9mIHZjdHAzMnEuICAqLwor dm9pZCB0ZXN0OSAoaW50MzJfdCAqYSwgaW50MzJfdCAqYiwgaW50MzJfdCAqYywgaW50IG4sIG12 ZV9wcmVkMTZfdCBwMCkKK3sKKyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgIG12ZV9wcmVk MTZfdCBwID0gdmN0cDMycV9tIChuLCBwMCk7CisgICAgICBpbnQzMng0X3QgdmEgPSB2bGRyd3Ff el9zMzIgKGEsIHApOworICAgICAgaW50MzJ4NF90IHZiID0gdmxkcndxX3pfczMyIChiLCBwKTsK KyAgICAgIGludDMyeDRfdCB2YyA9IHZhZGRxX3hfczMyICh2YSwgdmIsIHApOworICAgICAgdnN0 cndxX3BfczMyIChjLCB2YywgcCk7CisgICAgICBjICs9IDQ7CisgICAgICBhICs9IDQ7CisgICAg ICBiICs9IDQ7CisgICAgICBuIC09IDQ7CisgICAgfQorfQorCisvKiBHZW5lcmF0aW5nIGFuZCB1 c2luZyBhIGRpZmZlcmVudCBWUFIgdmFsdWUgaW4gdGhlIGxvb3AsIHdpdGggYSB2Y3RwX20gdGhh dCBpcyB0aWVkIHRvIHRoZSBiYXNlIHZjdHAgVlBSLiAgKi8KK3ZvaWQgdGVzdDEwIChpbnQzMl90 ICphLCBpbnQzMl90ICpiLCBpbnQzMl90ICpjLCBpbnQgbikKK3sKKyAgd2hpbGUgKG4gPiAwKQor ICAgIHsKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDMycSAobik7CisgICAgICBpbnQzMng0 X3QgdmEgPSB2bGRyd3Ffel9zMzIgKGEsIHApOworICAgICAgbXZlX3ByZWQxNl90IHAxID0gdmN0 cDMycV9tIChuLCBwKTsKKyAgICAgIGludDMyeDRfdCB2YiA9IHZsZHJ3cV96X3MzMiAoYiwgcDEp OworICAgICAgaW50MzJ4NF90IHZjID0gdmFkZHFfeF9zMzIgKHZhLCB2YiwgcDEpOworICAgICAg dnN0cndxX3BfczMyIChjLCB2YywgcCk7CisgICAgICBjICs9IDQ7CisgICAgICBhICs9IDQ7Cisg ICAgICBiICs9IDQ7CisgICAgICBuIC09IDQ7CisgICAgfQorfQorCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItbm90ICJcdGRsc3RwIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci1ub3QgIlx0bGV0cCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvYXJtL2xvYi5oIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9sb2Iu aAppbmRleCBmZWFhZTdjYzg5OTU5YjMxNDczNjg5ODAxMjA3MDBiYmMzZTg1ZWNiLi4zOTQxZmU3 YThiNjIwZTYyYTVmNzQyNzIyYmUxYmEyZDAzMWY1YThkIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvYXJtL2xvYi5oCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9h cm0vbG9iLmgKQEAgLTEsMTUgKzEsMTMxIEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0KKyNpbmNs dWRlIDxzdGRpbnQuaD4KIC8qIENvbW1vbiBjb2RlIGZvciBsb2IgdGVzdHMuICAqLwogCiAjZGVm aW5lIE5PX0xPQiBhc20gdm9sYXRpbGUgKCJAIGNsb2JiZXIgbHIiIDogOiA6ICJsciIgKQogCi0j ZGVmaW5lIE4gMTAwMDAKKyNkZWZpbmUgTiAxMDAKKworc3RhdGljIHZvaWQKK3Jlc2V0X2RhdGEg KGludCAqYSwgaW50ICpiLCBpbnQgKmMsIGludCB4KQoreworICBtZW1zZXQgKGEsIC0xLCB4ICog c2l6ZW9mICgqYSkpOworICBtZW1zZXQgKGIsIC0xLCB4ICogc2l6ZW9mICgqYikpOworICBtZW1z ZXQgKGMsIDAsIHggKiBzaXplb2YgKCpjKSk7Cit9CisKK3N0YXRpYyB2b2lkCityZXNldF9kYXRh OCAoaW50OF90ICphLCBpbnQ4X3QgKmIsIGludDhfdCAqYywgaW50IHgpCit7CisgIG1lbXNldCAo YSwgLTEsIHggKiBzaXplb2YgKCphKSk7CisgIG1lbXNldCAoYiwgLTEsIHggKiBzaXplb2YgKCpi KSk7CisgIG1lbXNldCAoYywgMCwgeCAqIHNpemVvZiAoKmMpKTsKK30KKworc3RhdGljIHZvaWQK K3Jlc2V0X2RhdGExNiAoaW50MTZfdCAqYSwgaW50MTZfdCAqYiwgaW50MTZfdCAqYywgaW50IHgp Cit7CisgIG1lbXNldCAoYSwgLTEsIHggKiBzaXplb2YgKCphKSk7CisgIG1lbXNldCAoYiwgLTEs IHggKiBzaXplb2YgKCpiKSk7CisgIG1lbXNldCAoYywgMCwgeCAqIHNpemVvZiAoKmMpKTsKK30K Kworc3RhdGljIHZvaWQKK3Jlc2V0X2RhdGEzMiAoaW50MzJfdCAqYSwgaW50MzJfdCAqYiwgaW50 MzJfdCAqYywgaW50IHgpCit7CisgIG1lbXNldCAoYSwgLTEsIHggKiBzaXplb2YgKCphKSk7Cisg IG1lbXNldCAoYiwgLTEsIHggKiBzaXplb2YgKCpiKSk7CisgIG1lbXNldCAoYywgMCwgeCAqIHNp emVvZiAoKmMpKTsKK30KKworc3RhdGljIHZvaWQKK3Jlc2V0X2RhdGE2NCAoaW50NjRfdCAqYSwg aW50NjRfdCAqYywgaW50IHgpCit7CisgIG1lbXNldCAoYSwgLTEsIHggKiBzaXplb2YgKCphKSk7 CisgIG1lbXNldCAoYywgMCwgeCAqIHNpemVvZiAoKmMpKTsKK30KKworc3RhdGljIHZvaWQKK2No ZWNrX3BsdXMgKGludCAqYSwgaW50ICpiLCBpbnQgKmMsIGludCB4KQoreworICBmb3IgKGludCBp ID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAgICBOT19MT0I7CisgICAgICBpZiAoaSA8IHgp CisJeworCSAgaWYgKGNbaV0gIT0gKGFbaV0gKyBiW2ldKSkgYWJvcnQgKCk7CisJfQorICAgICAg ZWxzZQorCXsKKwkgIGlmIChjW2ldICE9IDApIGFib3J0ICgpOworCX0KKyAgICB9Cit9CisKK3N0 YXRpYyB2b2lkCitjaGVja19wbHVzOCAoaW50OF90ICphLCBpbnQ4X3QgKmIsIGludDhfdCAqYywg aW50IHgpCit7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgIE5P X0xPQjsKKyAgICAgIGlmIChpIDwgeCkKKwl7CisJICBpZiAoY1tpXSAhPSAoYVtpXSArIGJbaV0p KSBhYm9ydCAoKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKGNbaV0gIT0gMCkgYWJvcnQg KCk7CisJfQorICAgIH0KK30KKworc3RhdGljIHZvaWQKK2NoZWNrX3BsdXMxNiAoaW50MTZfdCAq YSwgaW50MTZfdCAqYiwgaW50MTZfdCAqYywgaW50IHgpCit7CisgIGZvciAoaW50IGkgPSAwOyBp IDwgTjsgaSsrKQorICAgIHsKKyAgICAgIE5PX0xPQjsKKyAgICAgIGlmIChpIDwgeCkKKwl7CisJ ICBpZiAoY1tpXSAhPSAoYVtpXSArIGJbaV0pKSBhYm9ydCAoKTsKKwl9CisgICAgICBlbHNlCisJ eworCSAgaWYgKGNbaV0gIT0gMCkgYWJvcnQgKCk7CisJfQorICAgIH0KK30KKworc3RhdGljIHZv aWQKK2NoZWNrX3BsdXMzMiAoaW50MzJfdCAqYSwgaW50MzJfdCAqYiwgaW50MzJfdCAqYywgaW50 IHgpCit7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgIE5PX0xP QjsKKyAgICAgIGlmIChpIDwgeCkKKwl7CisJICBpZiAoY1tpXSAhPSAoYVtpXSArIGJbaV0pKSBh Ym9ydCAoKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKGNbaV0gIT0gMCkgYWJvcnQgKCk7 CisJfQorICAgIH0KK30KIAogc3RhdGljIHZvaWQKLXJlc2V0X2RhdGEgKGludCAqYSwgaW50ICpi LCBpbnQgKmMpCitjaGVja19tZW1jcHk2NCAoaW50NjRfdCAqYSwgaW50NjRfdCAqYywgaW50IHgp CiB7Ci0gIG1lbXNldCAoYSwgLTEsIE4gKiBzaXplb2YgKCphKSk7Ci0gIG1lbXNldCAoYiwgLTEs IE4gKiBzaXplb2YgKCpiKSk7Ci0gIG1lbXNldCAoYywgLTEsIE4gKiBzaXplb2YgKCpjKSk7Cisg IGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgIE5PX0xPQjsKKyAgICAg IGlmIChpIDwgeCkKKwl7CisJICBpZiAoY1tpXSAhPSBhW2ldKSBhYm9ydCAoKTsKKwl9CisgICAg ICBlbHNlCisJeworCSAgaWYgKGNbaV0gIT0gMCkgYWJvcnQgKCk7CisJfQorICAgIH0KIH0KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbG9iMS5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2FybS9sb2IxLmMKaW5kZXggYmE1YzgyY2Q1NWM1ODJjOTZhMThhZDQx N2EzMDQxZTQzZDg0MzYxMy4uYzhjZTY1M2E1YzM5ZmIxZmZjZjgyYTZlNTg0ZDlhMDQ2N2ExMzBj MCAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9sb2IxLmMKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9sb2IxLmMKQEAgLTU0LDI5ICs1NCwxOCBAQCBs b29wMyAoaW50ICphLCBpbnQgKmIsIGludCAqYykKICAgICB9IHdoaWxlIChpIDwgTik7CiB9CiAK LXZvaWQKLWNoZWNrIChpbnQgKmEsIGludCAqYiwgaW50ICpjKQotewotICBmb3IgKGludCBpID0g MDsgaSA8IE47IGkrKykKLSAgICB7Ci0gICAgICBOT19MT0I7Ci0gICAgICBpZiAoY1tpXSAhPSBh W2ldICsgYltpXSkKLQlhYm9ydCAoKTsKLSAgICB9Ci19Ci0KIGludAogbWFpbiAodm9pZCkKIHsK LSAgcmVzZXRfZGF0YSAoYSwgYiwgYyk7CisgIHJlc2V0X2RhdGEgKGEsIGIsIGMsIE4pOwogICBs b29wMSAoYSwgYiAsYyk7Ci0gIGNoZWNrIChhLCBiICxjKTsKLSAgcmVzZXRfZGF0YSAoYSwgYiwg Yyk7CisgIGNoZWNrX3BsdXMgKGEsIGIsIGMsIE4pOworICByZXNldF9kYXRhIChhLCBiLCBjLCBO KTsKICAgbG9vcDIgKGEsIGIgLGMpOwotICBjaGVjayAoYSwgYiAsYyk7Ci0gIHJlc2V0X2RhdGEg KGEsIGIsIGMpOworICBjaGVja19wbHVzIChhLCBiLCBjLCBOKTsKKyAgcmVzZXRfZGF0YSAoYSwg YiwgYywgTik7CiAgIGxvb3AzIChhLCBiICxjKTsKLSAgY2hlY2sgKGEsIGIgLGMpOworICBjaGVj a19wbHVzIChhLCBiLCBjLCBOKTsKIAogICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbG9iNi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2FybS9sb2I2LmMKaW5kZXggMTdiNjEyNDI5NWU4YWU5ZTFjYjU3ZTQxZmE0M2E5NTRiMzM5MGVl Yy4uNGZlMTE2ZTJjMmJlMzc0OGQxYmI2ZGE3YmI5MDkyZGI4Zjk2MmFiYyAxMDA2NDQKLS0tIGEv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9sb2I2LmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2FybS9sb2I2LmMKQEAgLTc5LDE0ICs3OSwxNCBAQCBjaGVjayAodm9pZCkKIGlu dAogbWFpbiAodm9pZCkKIHsKLSAgcmVzZXRfZGF0YSAoYTEsIGIxLCBjMSk7Ci0gIHJlc2V0X2Rh dGEgKGEyLCBiMiwgYzIpOworICByZXNldF9kYXRhIChhMSwgYjEsIGMxLCBOKTsKKyAgcmVzZXRf ZGF0YSAoYTIsIGIyLCBjMiwgTik7CiAgIGxvb3AxIChhMSwgYjEsIGMxKTsKICAgcmVmMSAoYTIs IGIyLCBjMik7CiAgIGNoZWNrICgpOwogCi0gIHJlc2V0X2RhdGEgKGExLCBiMSwgYzEpOwotICBy ZXNldF9kYXRhIChhMiwgYjIsIGMyKTsKKyAgcmVzZXRfZGF0YSAoYTEsIGIxLCBjMSwgTik7Cisg IHJlc2V0X2RhdGEgKGEyLCBiMiwgYzIsIE4pOwogICBsb29wMiAoYTEsIGIxLCBjMSk7CiAgIHJl ZjIgKGEyLCBiMiwgYzIpOwogICBjaGVjayAoKTsK --------------VOxGp2GPbSsmlCf9iVOezAWt--