From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id EC49E385840D for ; Mon, 22 Jan 2024 16:54:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EC49E385840D Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org EC49E385840D Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1705942476; cv=pass; b=EGEIzGQekBht+7/mmVDn7fJXXgENFuUIWlWQAGFHM1F9y9m67owVjMqys7I0xTKKXIPoNeEmuyIw4iAlSRZa/2vSpgH2fQErqULYvBsRK+y329epmP2QhMbqcPZW9AYSwzeZRr+bDpLn+AzvSIk7GtRfllzMQWbof6blf0BE48w= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1705942476; c=relaxed/simple; bh=5pNC2OFVa9sH/4L/MoUi8FlVu3L9SbB/CFaIpckXLzw=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=aSgzp/nGwsxcWQ4BvRTq45KrSykorxgvnR6po6idZukQz7WF/HNXgondFdc2lfm2uJE+F19asB/PDlxvjYjKXpRRQ4vHCD/0nJlnm2tsK1uQBye/bJgexBT3Xr1WISOyOF1Q+1npcqCXVqvbz/Ht/C6M8Lry6et83AjFg2AGNdo= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 40MGK7uw007708; Mon, 22 Jan 2024 16:54:33 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=corp-2023-11-20; bh=5pNC2OFVa9sH/4L/MoUi8FlVu3L9SbB/CFaIpckXLzw=; b=WXmtOB/Mv+btc0GS8E0PtLyJ7k+ni2W0/V1AsrKbjB2ETH0Uf1veJriBGw0GlC0vxIp1 I2vrq6djW1PY33z32A3oP8n7Wb6107kL0W8uzgUyYrc+Ey+/SkAUPr7jx7HKNovFdnNu LcuV+9D47Lf42oM9yMa8ZEIW2YmlNInGFOj+tTXTlt8N1eSrUUFW5nRzcLGq1Gz+J4oa csnioA/sdckPNMJHDrxWQ0ODFkCyPrbi7GiqrdZxdPwbtbov8Xl2EhVPcLOKE3kj0KGf /PsDZTNW1P2X5/EWphXfKzcJGnFSNv7w7kyIM7JSAQWAQzgtVanbfQQ0gOpKLeOrpRbg dg== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3vr7abv4cp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 22 Jan 2024 16:54:32 +0000 Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 40MGVVij033511; Mon, 22 Jan 2024 16:54:32 GMT Received: from nam04-dm6-obe.outbound.protection.outlook.com (mail-dm6nam04lp2041.outbound.protection.outlook.com [104.47.73.41]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3vs36yxsbm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 22 Jan 2024 16:54:32 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FMEtkSK6pkTdv36T32yEuePAKVxzA8HdQyGC0WZq7CQc4wpV4SYX4hjCyokdXj16mOZZ070KyZNIjU8s8jvyUWl1ujXzIe8v5WTLUl1i6iZn61cYyMHGCRy0pE1L+aX5BNx8vXwfNAPGEPD76IEcxXTFDOXi3y0ZKYthBqT3ATtHe8/4WNB1n9fWpgS2/nFYMkVyHOUEBE+s6cyG5Pd/bHhFlziDhClG0N4eSkcZ/53W8M4WB6rqErCMAlYByuKI/S5460jmbMwd3zimkkQBPlx2m+2TePcbuTocIKTOmhQLDdr4iR9QIjgJDRzejK2aiC/CbpeFuKnp+PqgsORUKA== 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=5pNC2OFVa9sH/4L/MoUi8FlVu3L9SbB/CFaIpckXLzw=; b=hZE2vBBMBqH+8FJUMihhNGxrG+G12XlqIBDciFcw4MnNpTMHwWzphVOIlG0UGDX+MPeQwsE8ily1xzPnDZ3ATrGhs7m0LfOYWkob4KEufpuTY7OKDx3BbUDDTtRvFDWThmgry3SYeAzf+9GXSibaFo95wWRGES0p68Lu0YyAYo6rrF+IWRO8hBrMa+ZN419s25S+NGr51tUvJmvG4jfFLoGIJ0uFjctD2iD+UkYSK7F/5eVlqBRvGst+sGHWYH7wtMGJMqjtU11tB2onr3C7nZSBxsDuxZucX2p4q/70+By9gvcieh+FWpFwbf/JFpZlxcXQn5m/HJ1sOVqTTpFJvA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5pNC2OFVa9sH/4L/MoUi8FlVu3L9SbB/CFaIpckXLzw=; b=GhthOvt77tikDqgv+WAWMBwEGpjOyC0I2/ef/nnzcb4LDGSYklVT57vSQr/nab6AP9JQppe5gDJJV32vptJ9S55rxcPh8xy1iK8522ieCp71X+PFHZLTA/NgWbjxw4Rg6wBUkY7DQ/3SOY/MsN889Ku/5X+6yhbqu4X7Gd7VNdM= Received: from CH3PR10MB7957.namprd10.prod.outlook.com (2603:10b6:610:1bf::19) by IA1PR10MB5995.namprd10.prod.outlook.com (2603:10b6:208:3ed::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7202.32; Mon, 22 Jan 2024 16:54:29 +0000 Received: from CH3PR10MB7957.namprd10.prod.outlook.com ([fe80::6234:e7a1:b517:c44]) by CH3PR10MB7957.namprd10.prod.outlook.com ([fe80::6234:e7a1:b517:c44%6]) with mapi id 15.20.7202.031; Mon, 22 Jan 2024 16:54:29 +0000 From: Qing Zhao To: Richard Biener CC: "jakub@redhat.com" , gcc Patches Subject: Re: HELP: Questions on unshare_expr Thread-Topic: HELP: Questions on unshare_expr Thread-Index: AQHaRW+uruqoybhuuUCPXa2beNzsb7DWXdUAgAARQACABDFGAIACSSOAgACsa4CAAAA8AIACGPkAgAE6Q4CAAHQJgIAEJEkAgAB4nYCAACIXAA== Date: Mon, 22 Jan 2024 16:54:29 +0000 Message-ID: References: <50C8811D-9C2A-4FFB-9FC5-D24C5A76F868@oracle.com> <70C34042-B741-4697-9524-396CB9D40DF8@gmail.com> <4D91B027-0B34-4DB4-9338-1B9DE6E2EB00@oracle.com> <63DEF4CB-18DA-48C5-842B-B743EF365B24@oracle.com> <97EDB4A5-1A68-4D46-A060-F550AEB2812A@oracle.com> <4AFCA347-8A7C-4A96-B76A-33529E20D546@oracle.com> In-Reply-To: <4AFCA347-8A7C-4A96-B76A-33529E20D546@oracle.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Apple Mail (2.3731.700.6) x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH3PR10MB7957:EE_|IA1PR10MB5995:EE_ x-ms-office365-filtering-correlation-id: 634c357a-82a4-47fd-9247-08dc1b6acc88 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: V8F0YBcvRh8SLfMzzDg2I3SABlx4EvpVCas6xgZnicyeHP7AGoSgAFi6Z2XmU4/K63ctnJ0+1N0DXycNkiJWYB3a1cglKk5KAV7MHCU+pIXqVet0EAQidYfKZ+eCSNKgfjftHeOnUu0gUfYIuxnPQSSQUe6BjcR3jvZbxPWwmrfZA0Rg4Bsn/d4tzKsnTAPaeSeBHq9tcsItvPPMd2+j3BVKF4rH3g0NDi4ysTx5AikVvzbtchg97x2+bJWLg1iZmxac2suYEo/E/6MaqGp7czbzAt24AgxKWeGpQixBlbdpENIsdiBT3ll0STXJiooT+Hdrcs+o5+QMxtnWUrkm0yH7ZNRqWrS2QmLNiQBxgRsx4BA9UsJZPgzg/xlp6PiSqRWussvRzVQA8VGncoP3nUBzORu9WApRs4OuaSK+DxxMKalMvt3qyB3gSJQM+PzH8YR0k22bTXLzj7cd7CgKDn6desSCa82uzNXmXtTrtJAV2dPpasUrrbhyzmu/l6et44ltJU7pxEQCr3ATp97+PaDxbu2Y5D+Jfskg8Ec6fIjUGi6SIJGxlAHiiRbGJPQrgEKxLvDSsx2VlqcIGJibtVQvKbxvX0NWUNLXdmyHuaFGP8blimjUFVxWxKpfQRAggfEb1CfXhc8bLl4cgrxcSiDF0u1lXoy1qy7k1jG9b2wEnvKwOyoWmDXIdWfi1+9v x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH3PR10MB7957.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(366004)(346002)(136003)(396003)(376002)(230922051799003)(186009)(1800799012)(451199024)(64100799003)(38070700009)(5660300002)(966005)(66556008)(76116006)(66446008)(6916009)(66946007)(54906003)(64756008)(91956017)(30864003)(2906002)(6486002)(66476007)(6512007)(6506007)(71200400001)(4326008)(316002)(478600001)(8676002)(8936002)(44832011)(53546011)(2616005)(122000001)(83380400001)(38100700002)(36756003)(33656002)(41300700001)(86362001)(45980500001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?L1pIY2d2MUFSM3JZLzd0d3hnb3FHeE82V25VeTc5QS90aHpoRDQ2dnlPbWd6?= =?utf-8?B?SjFud0ZhMXQrMUM3NTdSUzd2WUpHRlc0VWtFRWUyTGRjQWdHNWtXcnBEeXpz?= =?utf-8?B?Uk9SMHV6d010bDUySDJJUzBkYk9xVUwzUDl1UCtlOXlwZzJwWWpjWHU5SGha?= =?utf-8?B?RFZJMS9VVEEzSkxwdmNWSTYwRG5DRFhwMkFFSHBvR3A5WllFNVJuSlVOQ3Ni?= =?utf-8?B?aTA3cWo2R1oxQWovMzBCNTBXRTZOR0IwWTN2VGhIMGJPRWUveFhYcFVtTGJO?= =?utf-8?B?NUpQcHl6SlJWRE5xV1ZNbm85c29QV0NGTEhTN01uc29qZThUamlEQmFXTkl5?= =?utf-8?B?eDlwVE5jSnlOWm1lZE5sNFBGY29qRURzWE5hcHJOVzZhNkQ0ZzR3WlJ6RGND?= =?utf-8?B?a3pQSndGeUlEdzkwd2dRTTdpUEVsOW5iZFdzMzlleTFQR2cvRTJsQmdndHVi?= =?utf-8?B?d2hEN1lUN0ljRTJGc1YxRGdwV09qS2F0U2J5aVc4WWY2OEk3OFdFYloyQUNp?= =?utf-8?B?cUo3VmNEclVCbUpGZUxlVlVUT2YxWDIwR084VHV1RkpEZkt4b1VpcUFhN2tS?= =?utf-8?B?R1VzUzFld3E2VWJkbnEzV2JTYndqQmRhTjFEa2hTdXdhaHdJK0owR1RwSUlR?= =?utf-8?B?WjlGK09zZGN0VGNoR1drMmJtbmg5bzBZVlIxRkxKWktqKzd1RUxNcjNYTGk5?= =?utf-8?B?Si9Ja3JBTWxYVDBoNXovME5CWUZ1OGR1bzlHT0tmWHdFbk1rNXFVRkZhR0dl?= =?utf-8?B?N3ROMDgvZ2RGTkJHaUcwTmE1WUx3WnJFSTY1YmRjV0dkd0xVZzgrQ3RWcGxH?= =?utf-8?B?VjhDamtHREVqNXJ6UkVnZndkQTJob1hxWkxrZjhndTlaN3Q5UDIzNXZQR2M1?= =?utf-8?B?bzFoMlVSSjhONzJWeklodlRIQmttRkpZRVhOS1BraThtQ09LNmdsTXlkUWtS?= =?utf-8?B?ZlVWbFYwVEVCY3kzYVE0RVJEVGx6dEpwbUM3VU40eXlaYmovdERNZnZYS0o0?= =?utf-8?B?eTVpaWFaa2d3dWJyaDgrb2wzTnoyWnVXdFVKL2Z6VVhvQWx3Zi93cGZubTgz?= =?utf-8?B?a2dpTXgwWm4xZ2xuMWxyQzBIalVCdzRZdlU4T0k3OFROMTltNGtvTlB5ZmQv?= =?utf-8?B?Q1J1NURsOEVQQU5INWRGTm12Sy9JYUw0ZmFUdlRRU2s3dHRIQmhIck1LUFFJ?= =?utf-8?B?Q0lwQXZQR2h3K1drRjRTay9KdWNGWkowZnJFaEdxdFVONlRPclZsTE1NYWEx?= =?utf-8?B?SVpvY2FXM283Kzh4U05QOGJWaXBvYUU5cnFBVXlDckQ1OUlicUVXbnR2ZFp2?= =?utf-8?B?WmkyRWhEa0crczMwelJDQ0prVWdmN1BoYkhJdEhiQ05VVXV1Zko4MjZmL1R6?= =?utf-8?B?b2Fad3VDQy9zZ3FOS3pQWmxEb3huOUMwbXFrQWJzdW51VzBwUlpTMmwvZFF4?= =?utf-8?B?WE1LT0ovaUxrZTBvWXUwNnpnbkd6T3hIZFlNOHBxZlB1RGFINDk5QWs4NllL?= =?utf-8?B?SFliN1VYdGdHZHVzeU5CM2hoZDZYdDVsdXVFbXJvR2ZaeW5keVBzRUQ3UWRy?= =?utf-8?B?MXh4MERYVVplUE9SV09PQ3A2NGNDSHRvY3hwQ0M5NmFPamNwZk1RTk1vZE9a?= =?utf-8?B?b2F3eGN0eVM0Q0k0ZTNPSzVkT3JXUEplek50eEg3OHdZVkp6cTNaU1hNb1Er?= =?utf-8?B?ckZIYnZoSVZDWEp5aWhKaTFLYWJNMk1abkRuZTZNR0x0SVFKcjcvUUFSUlZk?= =?utf-8?B?eEpCcUU4WXNOekFGa3ZJd0hiL1NCMmpPM1k1WkRscUtpbkdoZDJBTjFKZWlY?= =?utf-8?B?LzdIREx2RnFhUzZ2Tm95S3lVWmF5TEM3eXNKZjVvRGdrSC9pQWc3cVcxRExh?= =?utf-8?B?SVYvV1RZdUMvcVM1clZlUG9IZXhOTWg3clNudnhJdXFqR1o0cE1jNE1GeW5B?= =?utf-8?B?UkFmcFpyUHZXcEgxeG02V1VpUmo0THdiaUl4Zzl1NUw2L1hJVG1UMjUxQVov?= =?utf-8?B?MHVBTnpockQ0VEtKamtxVVRtdzhDMUR6TlV2TjdYVmpjVmZxZDV3NThzaTky?= =?utf-8?B?Z1YycnFadm11VjJPVFZBM3dHUjNmbVFhZ1ppSXpxQkJhaWpralgrN2lDZ2hq?= =?utf-8?B?cGQ1VGJ2T1FpcCs2bnhPTVpFTHlaSVhqRWRQY2k3Vy9oNC9KbG4yTkdydFJU?= =?utf-8?Q?FZbm2wlPbxMz5SLyz5ta1fI=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: xbYaRiyYJgsjIAUgYOBDWYal019fzMtANO8+YmX03cM+derYscKeiUZFpzIY2s9tLiXze4DjLSz1fA432YwBq2BWMx0d9YCIsDGjLtD+tuBz+gwmTBtCGx4i2I3QBeLWBITfLMwkbERVEzOzyIa2jIprFQ6hIy2uzu/VVM6t8jMhNSZX5BfehA6kOYkRt5u7/HifdW7mPxrt2SJrYtrjQSfqANQPcQNsWcFYpLyCAug5pcAfpjpF0caeuJa6S5Sw+R46EY9Hk83zqiWi4E7xj+2YrDKZGmlol2b1btuXvjEIpaOtIXdAXIE51Mpl7Q1GpZgmv+QAHGx77Wt8BGQ6q10YGRx2eB7qkLIb0Gj4mSlKPm3TwzXurWQhYpUJa1fwGNkc9JK1kdJj9q8a6zoTDUdi09kyBhUwyX6mTvItL8JegXfQTaHHq6oN1h4+Oe4fx8dWcAoR3uAqKXZUfitnaBRE1IV6Zi7IMqRg6xmS+gEnd8rb5x8JSN+nERy44A1EYx4q9bufhRlVpSS9SSXMLnQga0pH3KwVDS2h5f7EDgbTuJ6QIcggnBVS80ve7UrIZflyMcC22cY7W4bXHOEyiOYEfX0t5pMAcgbaHJ8UD50= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH3PR10MB7957.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 634c357a-82a4-47fd-9247-08dc1b6acc88 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Jan 2024 16:54:29.1421 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: AIW+1NB0oLneglNmVUlJ9Tkb/8N4wbK7bdkgTW0olwrbVyUQX2pmtHUX3WPwJU6qciIPfz3rZ0w+18JOcbiLgQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR10MB5995 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-01-22_07,2024-01-22_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 phishscore=0 bulkscore=0 suspectscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311290000 definitions=main-2401220117 X-Proofpoint-GUID: FCAnKTQAIL5NSY4KCIiZMmlCktnxzkxy X-Proofpoint-ORIG-GUID: FCAnKTQAIL5NSY4KCIiZMmlCktnxzkxy X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,KAM_SHORT,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE,WEIRD_PORT 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: T25lIHVwZGF0ZSwgbGFzdCBGcmlkYXksIEkgbWVyZ2VkIGFsbCBteSBwYXRjaGVzIGZvciBjb3Vu dGVkLWJ5IHN1cHBvcnQgDQooaW5jbHVkaW5nIHRoZSBQYXRjaCB0byB3b3JrYXJvdW5kIHRoZSBM VE8gaXNzdWUpICB3aXRoIHRoZSBsYXRlc3QgdHJ1bmssIGJvb3RzdHJhcHBlZA0KIGFuZCBydW4g dGhlIHRlc3RpbmcsIGV2ZXJ5dGhpbmcgaXMgZ29vZC4NCg0KVG9kYXksIHdoZW4gSSBkaXNhYmxl ZCB0aGUgUGF0Y2ggdGhhdCB3b3JrYXJvdW5kIHRoZSBMVE8gaXNzdWUsIHN1cnByaXNpbmdseSwg SSBjYW5ub3QNCnJlcGVhdCB0aGUgTFRPIGlzc3VlIGFueW1vcmUgd2l0aCB0aGUgbGF0ZXN0IHRy dW5rICsgbXkgY291bnRlZC1ieSBzdXBwb3J0IHBhdGNoZXMuDQpJLmUuLCB3aXRob3V0IHRoZSBM VE8gd29ya2Fyb3VuZCwgZXZlcnl0aGluZyB3b3JrcyBqdXN0IGZpbmUgd2l0aCB0aGUgbGF0ZXN0 IGdjYy4NCg0KSSBzdXNwZWN0ZWQgdGhhdCBzb21lIGNoYW5nZSBpbiB0aGUgbGF0ZXN0IEdDQyDi gJxmaXhlZOKAnSAob3IgaGlkZSkgdGhlIGlzc3VlLiANCg0KUWluZw0KDQo+IE9uIEphbiAyMiwg MjAyNCwgYXQgOTo1MiBBTSwgUWluZyBaaGFvIDxxaW5nLnpoYW9Ab3JhY2xlLmNvbT4gd3JvdGU6 DQo+IA0KPiANCj4gDQo+PiBPbiBKYW4gMjIsIDIwMjQsIGF0IDI6NDAgQU0sIFJpY2hhcmQgQmll bmVyIDxyaWNoYXJkLmd1ZW50aGVyQGdtYWlsLmNvbT4gd3JvdGU6DQo+PiANCj4+IE9uIEZyaSwg SmFuIDE5LCAyMDI0IGF0IDU6MjbigK9QTSBRaW5nIFpoYW8gPHFpbmcuemhhb0BvcmFjbGUuY29t PiB3cm90ZToNCj4+PiANCj4+PiANCj4+PiANCj4+Pj4gT24gSmFuIDE5LCAyMDI0LCBhdCA0OjMw IEFNLCBSaWNoYXJkIEJpZW5lciA8cmljaGFyZC5ndWVudGhlckBnbWFpbC5jb20+IHdyb3RlOg0K Pj4+PiANCj4+Pj4gT24gVGh1LCBKYW4gMTgsIDIwMjQgYXQgMzo0NuKAr1BNIFFpbmcgWmhhbyA8 cWluZy56aGFvQG9yYWNsZS5jb20+IHdyb3RlOg0KPj4+Pj4gDQo+Pj4+PiANCj4+Pj4+IA0KPj4+ Pj4+IE9uIEphbiAxNywgMjAyNCwgYXQgMTo0MyBBTSwgUmljaGFyZCBCaWVuZXIgPHJpY2hhcmQu Z3VlbnRoZXJAZ21haWwuY29tPiB3cm90ZToNCj4+Pj4+PiANCj4+Pj4+PiBPbiBXZWQsIEphbiAx NywgMjAyNCBhdCA3OjQy4oCvQU0gUmljaGFyZCBCaWVuZXINCj4+Pj4+PiA8cmljaGFyZC5ndWVu dGhlckBnbWFpbC5jb20+IHdyb3RlOg0KPj4+Pj4+PiANCj4+Pj4+Pj4gT24gVHVlLCBKYW4gMTYs IDIwMjQgYXQgOToyNuKAr1BNIFFpbmcgWmhhbyA8cWluZy56aGFvQG9yYWNsZS5jb20+IHdyb3Rl Og0KPj4+Pj4+Pj4gDQo+Pj4+Pj4+PiANCj4+Pj4+Pj4+IA0KPj4+Pj4+Pj4+IE9uIEphbiAxNSwg MjAyNCwgYXQgNDozMSBBTSwgUmljaGFyZCBCaWVuZXIgPHJpY2hhcmQuZ3VlbnRoZXJAZ21haWwu Y29tPiB3cm90ZToNCj4+Pj4+Pj4+PiANCj4+Pj4+Pj4+Pj4gQWxsIG15IHF1ZXN0aW9ucyBmb3Ig dW5zaGFyZV9leHByIHJlbGF0ZSB0byBhICBMVE8gYnVnIHRoYXQgSSBjdXJyZW50bHkgc3R1Y2sg d2l0aA0KPj4+Pj4+Pj4+PiB3aGVuIHVzaW5nIC5BQ0NFU1NfV0lUSF9TSVpFIGluIGJvdW5kIHNh bml0aXplciAob25seSB3aXRoIC1mbHRvLCB3aXRob3V0IC1mbHRvLCBubyBpc3N1ZSk6DQo+Pj4+ Pj4+Pj4+IA0KPj4+Pj4+Pj4+PiBbb3BjQHFpbnpoYW8tYWFyY2g2NC1vbDggZ2NjXSQgc2ggdA0K Pj4+Pj4+Pj4+PiBkdXJpbmcgSVBBIHBhc3M6IG1vZHJlZg0KPj4+Pj4+Pj4+PiB0LmM6MjA6MTog aW50ZXJuYWwgY29tcGlsZXIgZXJyb3I6IHRyZWUgY29kZSDigJhzc2FfbmFtZeKAmSBpcyBub3Qg c3VwcG9ydGVkIGluIExUTyBzdHJlYW1zDQo+Pj4+Pj4+Pj4+IDB4MTRjMzk5MyBsdG9fd3JpdGVf dHJlZQ0KPj4+Pj4+Pj4+PiAgICAuLi8uLi9sYXRlc3QtZ2NjLXdyaXRlL2djYy9sdG8tc3RyZWFt ZXItb3V0LmNjOjU2MQ0KPj4+Pj4+Pj4+PiAweDE0YzNhZWIgbHRvX291dHB1dF90cmVlXzENCj4+ Pj4+Pj4+Pj4gDQo+Pj4+Pj4+Pj4+IEFuZCB0aGUgdmFsdWUgb2YgdGhlIHRyZWUgbm9kZSB0aGF0 IHRyaWdnZXJlZCB0aGUgSUNFIGlzOg0KPj4+Pj4+Pj4+PiAoZ2RiKSBjYWxsIGRlYnVnX3RyZWUo ZXhwcikNCj4+Pj4+Pj4+Pj4gPHNzYV9uYW1lIDB4ZmZmZmY1NzYxZTYwIHR5cGUgPGVycm9yX21h cmsgMHhmZmZmZjU2YzBlNTg+DQo+Pj4+Pj4+Pj4+IG5vdGhyb3cNCj4+Pj4+Pj4+Pj4gZGVmX3N0 bXQNCj4+Pj4+Pj4+Pj4gdmVyc2lvbjoxMyBpbi1mcmVlLWxpc3Q+DQo+Pj4+Pj4+Pj4+IA0KPj4+ Pj4+Pj4+PiBJcyB0aGVyZSBhbnkgZ29vZCB3YXkgdG8gZGVidWcgTFRPIGJ1Zz8NCj4+Pj4+Pj4+ PiANCj4+Pj4+Pj4+PiBUaGlzIGhhcHBlbnMgdXN1YWxseSB3aGVuIHlvdSBoYXZlIGEgVkxBIHR5 cGUgYW5kIGl0cyB0eXBlIGZpZWxkcyBhcmUgbm90DQo+Pj4+Pj4+Pj4gcHJvcGVybHkgZ2ltcGxp ZmllZCB3aGljaCB1c3VhbGx5IGhhcHBlbnMgYmVjYXVzZSB0aGUgZnJvbnRlbmQgZmFpbHMgdG8N Cj4+Pj4+Pj4+PiBpbnNlcnQgYSBnaW1wbGlmaWNhdGlvbiBwb2ludCBmb3IgaXQgKGEgREVDTF9F WFBSKS4NCj4+Pj4+Pj4+IA0KPj4+Pj4+Pj4gSSBmb3VuZCBhbiBvbGQgZ2NjIGJ1Zw0KPj4+Pj4+ Pj4gaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9OTcxNzINCj4+ Pj4+Pj4+IElDRTogdHJlZSBjb2RlIOKAmHNzYV9uYW1l4oCZIGlzIG5vdCBzdXBwb3J0ZWQgaW4g TFRPIHN0cmVhbXMgc2luY2UgcjExLTMzMDMtZzY0NTBmMDczODhmOWZlNTcNCj4+Pj4+Pj4+IA0K Pj4+Pj4+Pj4gV2hpY2ggaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBidWcgSSBhbSBoYXZpbmcgcmln aHQgbm93Lg0KPj4+Pj4+Pj4gDQo+Pj4+Pj4+PiBBZnRlciBmdXJ0aGVyIHN0dWR5LCBJIHN1c3Bl Y3QgdGhhdCB0aGUgaXNzdWUgSSBhbSBoYXZpbmcgcmlnaHQgbm93IHdpdGggdGhlIExUTyBzdHJl YW1pbmcgYWxzbw0KPj4+Pj4+Pj4gcmVsYXRlIHRvIOKAnHVuc2hhcmVfZXhwcuKAnSwg4oCcc2F2 ZV9leHBy4oCdLCBhbmQgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZXNlIHR3bywgSSBzdXNwZWN0IHRo YXQNCj4+Pj4+Pj4+IHRoZSBjdXJyZW50IGdjYyBjYW5ub3QgaGFuZGxlIHRoZSBjb21iaW5hdGlv biBvZiB0aGVzZSB0d28gY29ycmVjdGx5IGZvciBteSBjYXNlLg0KPj4+Pj4+Pj4gDQo+Pj4+Pj4+ PiBNeSB0ZXN0aW5nIGNhc2UgaXM6DQo+Pj4+Pj4+PiANCj4+Pj4+Pj4+ICNpbmNsdWRlIDxzdGRs aWIuaD4NCj4+Pj4+Pj4+IHZvaWQgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkgc2V0dXBf YW5kX3Rlc3RfdmxhIChpbnQgbjEsIGludCBuMiwgaW50IG0pDQo+Pj4+Pj4+PiB7DQo+Pj4+Pj4+ PiBzdHJ1Y3QgZm9vIHsNCj4+Pj4+Pj4+ICAgIGludCBuOw0KPj4+Pj4+Pj4gICAgaW50IHBbXVtu Ml1bbjFdIF9fYXR0cmlidXRlX18oKGNvdW50ZWRfYnkobikpKTsNCj4+Pj4+Pj4+IH0gKmY7DQo+ Pj4+Pj4+PiANCj4+Pj4+Pj4+IGYgPSAoc3RydWN0IGZvbyAqKSBtYWxsb2MgKHNpemVvZihzdHJ1 Y3QgZm9vKSArIG0qc2l6ZW9mKGludFtuMl1bbjFdKSk7DQo+Pj4+Pj4+PiBmLT5uID0gbTsNCj4+ Pj4+Pj4+IGYtPnBbbV1bbjJdW24xXT0xOw0KPj4+Pj4+Pj4gcmV0dXJuOw0KPj4+Pj4+Pj4gfQ0K Pj4+Pj4+Pj4gDQo+Pj4+Pj4+PiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KPj4+ Pj4+Pj4gew0KPj4+Pj4+Pj4gc2V0dXBfYW5kX3Rlc3RfdmxhICgxMCwgMTEsIDIwKTsNCj4+Pj4+ Pj4+IHJldHVybiAwOw0KPj4+Pj4+Pj4gfQ0KPj4+Pj4+Pj4gDQo+Pj4+Pj4+PiBGYWlsZWQgd2l0 aA0KPj4+Pj4+Pj4gbXlfZ2NjIC1PcyAtZnNhbml0aXplPWJvdW5kcyAtZmx0bw0KPj4+Pj4+Pj4g DQo+Pj4+Pj4+PiBJZiBjaGFuZ2luZyBlaXRoZXIgbjEgb3IgbjIgdG8gYSBjb25zdGFudCwgdGhl IHRlc3RpbmcgcGFzc2VkLg0KPj4+Pj4+Pj4gSWYgZGVsZXRpbmcgLWZsdG8sIHRoZSB0ZXN0aW5n IHBhc3NlZCB0b28uDQo+Pj4+Pj4+PiANCj4+Pj4+Pj4+IEkgZG91YmxlIGNoZWNrZWQgbXkgY29k ZSBwZXIgdGhlIHN1Z2dlc3Rpb25zIHByb3ZpZGVkIGJ5IHlvdSBhbmQgSmFrdWIgaW4gdGhpcw0K Pj4+Pj4+Pj4gZW1haWwgdGhyZWFkLCBhbmQgSSB0aGluayB0aGUgY29kZSBzaG91bGQgYmUgZmlu ZS4NCj4+Pj4+Pj4+IA0KPj4+Pj4+Pj4gVGhlIGNvZGUgaXMgZm9sbG93aW5nOg0KPj4+Pj4+Pj4g DQo+Pj4+Pj4+PiA9PT09PQ0KPj4+Pj4+Pj4gNTA0IC8qIEluc3RydW1lbnQgYXJyYXkgYm91bmRz IGZvciBJTkRJUkVDVF9SRUZzIHdob3NlIHBvaW50ZXJzIGFyZQ0KPj4+Pj4+Pj4gNTA1ICAgIFBP SU5URVJfUExVU19FWFBScyBvZiBjYWxscyB0byAuQUNDRVNTX1dJVEhfU0laRS4gV2UgY3JlYXRl IHNwZWNpYWwNCj4+Pj4+Pj4+IDUwNiAgICBidWlsdGlucyB0aGF0IGdldHMgZXhwYW5kZWQgaW4g dGhlIHNhbm9wdCBwYXNzLCBhbmQgbWFrZSBhbiBhcnJheQ0KPj4+Pj4+Pj4gNTA3ICAgIGRpbWVu c2lvbiBvZiBpdC4gIEFSUkFZIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBiYXNlIG9mIHRoZSBhcnJh eSwNCj4+Pj4+Pj4+IDUwOCAgICB3aGljaCBpcyBhIGNhbGwgdG8gLkFDQ0VTU19XSVRIX1NJWkUs ICpPRkZTRVQgaXMgdGhlIG9mZnNldCB0byB0aGUNCj4+Pj4+Pj4+IDUwOSAgICBiZWdpbm5pbmcg b2YgYXJyYXkuDQo+Pj4+Pj4+PiA1MTAgICAgUmV0dXJuIE5VTExfVFJFRSBpZiBubyBpbnN0cnVt ZW50YXRpb24gaXMgZW1pdHRlZC4gICovDQo+Pj4+Pj4+PiA1MTENCj4+Pj4+Pj4+IDUxMiB0cmVl DQo+Pj4+Pj4+PiA1MTMgdWJzYW5faW5zdHJ1bWVudF9ib3VuZHNfaW5kaXJlY3RfcmVmIChsb2Nh dGlvbl90IGxvYywgdHJlZSBhcnJheSwgdHJlZSAqb2Zmc2V0KQ0KPj4+Pj4+Pj4gNTE0IHsNCj4+ Pj4+Pj4+IDUxNSAgIGlmICghaXNfYWNjZXNzX3dpdGhfc2l6ZV9wIChhcnJheSkpDQo+Pj4+Pj4+ PiA1MTYgICAgIHJldHVybiBOVUxMX1RSRUU7DQo+Pj4+Pj4+PiA1MTcgICB0cmVlIGJvdW5kID0g Z2V0X2JvdW5kX2Zyb21fYWNjZXNzX3dpdGhfc2l6ZSAoYXJyYXkpOw0KPj4+Pj4+Pj4gNTE4ICAg LyogVGhlIHR5cGUgb2YgdGhlIGNhbGwgdG8gLkFDQ0VTU19XSVRIX1NJWkUgaXMgYSBwb2ludGVy IHR5cGUgdG8NCj4+Pj4+Pj4+IDUxOSAgICAgIHRoZSBlbGVtZW50IG9mIHRoZSBhcnJheS4gICov DQo+Pj4+Pj4+PiA1MjAgICB0cmVlIGVsZW1lbnRfc2l6ZSA9IFRZUEVfU0laRV9VTklUIChUUkVF X1RZUEUgKFRSRUVfVFlQRSAoYXJyYXkpKSk7DQo+Pj4+Pj4+PiA1MjEgICBnY2NfYXNzZXJ0IChi b3VuZCk7DQo+Pj4+Pj4+PiA1MjINCj4+Pj4+Pj4+IDUyMyAgIC8qIEdpdmVuIHRoZSBvZmZzZXQs IGFuZCB0aGUgc2l6ZSBvZiBlYWNoIGVsZW1lbnQsIHRoZSBpbmRleCBjYW4gYmUNCj4+Pj4+Pj4+ IDUyNCAgICAgIGNvbXB1dGVkIGFzOiBvZmZzZXQvZWxlbWVudF9zaXplLiAgKi8NCj4+Pj4+Pj4+ IDUyNSAgICpvZmZzZXQgPSBzYXZlX2V4cHIgKCpvZmZzZXQpOw0KPj4+Pj4+Pj4gNTI2ICAgdHJl ZSBpbmRleCA9IGZvbGRfYnVpbGQyIChFWEFDVF9ESVZfRVhQUiwNCj4+Pj4+Pj4+IDUyNyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXpldHlwZSwgKm9mZnNldCwNCj4+Pj4+Pj4+IDUyOCAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNoYXJlX2V4cHIgKGVsZW1lbnRfc2l6ZSkpOw0K Pj4+Pj4+Pj4gNTI5ICAgLyogQ3JlYXRlIGEgIihUICopIDAiIHRyZWUgbm9kZSB0byBkZXNjcmli ZSB0aGUgb3JpZ2luYWwgYXJyYXkgdHlwZS4NCj4+Pj4+Pj4+IDUzMCAgICAgIFdlIGdldCB0aGUg b3JpZ2luYWwgYXJyYXkgdHlwZSBmcm9tIHRoZSBmaXJzdCBhcmd1bWVudCBvZiB0aGUgY2FsbCB0 bw0KPj4+Pj4+Pj4gNTMxICAgICAgLkFDQ0VTU19XSVRIX1NJWkUgKFJFRiwgQ09VTlRFRF9CWV9S RUYsIDEsIG51bV9ieXRlcywgLTEpLg0KPj4+Pj4+Pj4gNTMyDQo+Pj4+Pj4+PiA1MzMgICAgICBP cmlnaW5hbGx5LCBSRUYgaXMgYSBDT01QT05FTlRfUkVGIHdpdGggdGhlIG9yaWdpbmFsIGFycmF5 IHR5cGUsDQo+Pj4+Pj4+PiA1MzQgICAgICBpdCB3YXMgY29udmVydGVkIHRvIGEgcG9pbnRlciB0 byBhbiBBRERSX0VYUFIsIGFuZCB0aGUgQUREUl9FWFBSJ3MNCj4+Pj4+Pj4+IDUzNSAgICAgIGZp cnN0IG9wZXJhbmQgaXMgdGhlIG9yaWdpbmFsIENPTVBPTkVOVF9SRUYuICAqLw0KPj4+Pj4+Pj4g NTM2ICAgdHJlZSByZWYgPSBDQUxMX0VYUFJfQVJHIChhcnJheSwgMCk7DQo+Pj4+Pj4+PiA1Mzcg ICB0cmVlIGFycmF5X3R5cGUNCj4+Pj4+Pj4+IDUzOCAgICAgPSB1bnNoYXJlX2V4cHIgKFRSRUVf VFlQRSAoVFJFRV9PUEVSQU5EIChUUkVFX09QRVJBTkQocmVmLCAwKSwgMCkpKTsNCj4+Pj4+Pj4+ IDUzOSAgIHRyZWUgemVyb193aXRoX3R5cGUgPSBidWlsZF9pbnRfY3N0IChidWlsZF9wb2ludGVy X3R5cGUgKGFycmF5X3R5cGUpLCAwKTsNCj4+Pj4+Pj4+IDU0MCAgIHJldHVybiBidWlsZF9jYWxs X2V4cHJfaW50ZXJuYWxfbG9jIChsb2MsIElGTl9VQlNBTl9CT1VORFMsDQo+Pj4+Pj4+PiA1NDEg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZF90eXBlX25vZGUsIDMs IHplcm9fd2l0aF90eXBlLA0KPj4+Pj4+Pj4gNTQyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGluZGV4LCBib3VuZCk7DQo+Pj4+Pj4+PiA1NDMgfQ0KPj4+Pj4+Pj4gDQo+ Pj4+Pj4+PiA9PT09PQ0KPj4+Pj4+Pj4gDQo+Pj4+Pj4+PiBJbnNpZGUgZ2RiLCB0aGUgZ3VpbHR5 IElSIGZhaWxlZCBpbiBMVE8gc3RyZWFtaW5nIGlzIGZyb20gdGhlIGFib3ZlIGxpbmUgNTIwOg0K Pj4+Pj4+Pj4gVFlQRV9TSVpFX1VOSVQgKFRSRUVfVFlQRSAoVFJFRV9UWVBFIChhcnJheSkpKSwN Cj4+Pj4+Pj4+IA0KPj4+Pj4+Pj4gV2hlbiBJIHVzZSB0aGlzIHRyZWUgbm9kZSBhcyBhbiBvcGVy YW5kIG9mIHRoZSBleHByZXNzaW9uIGF0IGxpbmUgNTI2LCBJIGFkZGVkDQo+Pj4+Pj4+PiB1bnNo YXJlX2V4cHIuDQo+Pj4+Pj4+PiANCj4+Pj4+Pj4+IEhvd2V2ZXIsIEkgc3RpbGwgc2VlIHRoZSBn dWlsdHkgSVIgYXMgaW4gZ2RiOg0KPj4+Pj4+Pj4gDQo+Pj4+Pj4+PiAgICAgICAgIHVuaXQtc2l6 ZSA8bXVsdF9leHByIDB4ZmZmZmY1YWFiZjkwIHR5cGUgPGludGVnZXJfdHlwZSAweGZmZmZmNTdj MDAwMCBzaXpldHlwZT4NCj4+Pj4+Pj4+ICAgICAgICAgICAgIHNpZGUtZWZmZWN0cw0KPj4+Pj4+ Pj4gICAgICAgICAgICAgYXJnOjAgPG11bHRfZXhwciAweGZmZmZmNWFhYmY2OCB0eXBlIDxpbnRl Z2VyX3R5cGUgMHhmZmZmZjU3YzAwMDAgc2l6ZXR5cGU+DQo+Pj4+Pj4+PiANCj4+Pj4+Pj4+ICAg ICAgICAgICAgICAgICBhcmc6MCA8c3NhX25hbWUgMHhmZmZmZjU3NjFlMTggdHlwZSA8ZXJyb3Jf bWFyayAweGZmZmZmNTZjMGU1OD4NCj4+Pj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgbm90aHJv dw0KPj4+Pj4+Pj4gICAgICAgICAgICAgICAgICAgICBkZWZfc3RtdA0KPj4+Pj4+Pj4gICAgICAg ICAgICAgICAgICAgICB2ZXJzaW9uOjEyIGluLWZyZWUtbGlzdD4NCj4+Pj4+Pj4+ICAgICAgICAg ICAgICAgICBhcmc6MSA8c3NhX25hbWUgMHhmZmZmZjU3NjFlNjAgdHlwZSA8ZXJyb3JfbWFyayAw eGZmZmZmNTZjMGU1OD4NCj4+Pj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgbm90aHJvdw0KPj4+ Pj4+Pj4gICAgICAgICAgICAgICAgICAgICBkZWZfc3RtdA0KPj4+Pj4+Pj4gICAgICAgICAgICAg ICAgICAgICB2ZXJzaW9uOjEzIGluLWZyZWUtbGlzdD4+DQo+Pj4+Pj4+PiAgICAgICAgICAgICBh cmc6MSA8aW50ZWdlcl9jc3QgMHhmZmZmZjU2YzEwYzggY29uc3RhbnQgND4+DQo+Pj4+Pj4+PiAN Cj4+Pj4+Pj4+IA0KPj4+Pj4+Pj4gSSBoYXZlIGJlZW4gc3R1Y2sgd2l0aCB0aGlzIGJ1ZyBmb3Ig cXVpdGUgc29tZSB0aW1lLg0KPj4+Pj4+Pj4gQW55IGhlbHAgaXMgaGVscGZ1bC4NCj4+Pj4+Pj4g DQo+Pj4+Pj4+IFRoZSBhYm92ZSBoYXNuJ3QgYmVlbiBnaW1wbGlmaWVkIGNvcnJlY3RseSwgeW91 J2QgaW5zdGVhZCBzZWUNCj4+Pj4+Pj4gYSBELjEyMzQgaW4gdGhlcmUsIG5vdCBhbiBleHByZXNz aW9uIHdpdGggU1NBIG5hbWVzLiAgVGhhdCBoYXBwZW5zDQo+Pj4+Pj4+IHdoZW4gdGhlIGZyb250 ZW5kIGZhaWxzIHRvIGVtaXQgYSBERUNMX0VYUFIgZm9yIGEgZGVjbCB3aXRoIHRoaXMNCj4+Pj4+ Pj4gdHlwZS4NCj4+Pj4+PiANCj4+Pj4+PiAuLiB3aGljaCB0aGVuIGFsc28gcmVzdWx0cyBpbiBt aXNzaW5nIHVuc2hhcmluZyBvZiB0aGlzIGV4cHJlc3Npb24NCj4+Pj4+PiAoc28gdGhlIFNTQSBu YW1lcyBsZWFrIGluKQ0KPj4+Pj4gDQo+Pj4+PiBUaGFua3MgYSBsb3QgZm9yIHRoZSBoaW50cy4N Cj4+Pj4+IA0KPj4+Pj4gT25lIGNvcnJlY3Rpb24gZmlyc3QsIHRoZSBMVE8gYnVnIGlzIG5vdCBy ZWxhdGVkIHRvIC1mc2FuaXRpemU9Ym91bmRzLiAgRGVsZXRpbmcgLWZzYW5pdGl6ZT1ib3VuZHMg c3RpbGwgY2FuDQo+Pj4+PiByZXBlYXQgdGhlIGZhaWx1cmUuDQo+Pj4+PiANCj4+Pj4+IEFmdGVy IGZ1cnRoZXIgZGVidWdnaW5nIGludG8gdGhlIGdpbXBsaWZpY2F0aW9uIHBoYXNlIHJlbGF0ZWQg d2l0aCB0aGUgU0FWRV9FWFBSLCBJIGZpbmFsbHkgbG9jYXRlIHRoZSBwbGFjZQ0KPj4+Pj4gd2hl cmUgdGhlIHVuc2hhcmVpbmcgb2YgdGhlIGV4cHJlc3Npb24gaXMgbWlzc2luZy4gICBUaGlzIGlz IGluIHRoZSByb3V0aW5lIOKAnHBvaW50ZXJfaW50X3N1beKAnSBvZiBjLWZhbWlseS9jLWNvbW1v bi5jYzoNCj4+Pj4+IA0KPj4+Pj4gMzMzMCAgICAgew0KPj4+Pj4gMzMzMSAgICAgICBpZiAoIWNv bXBsYWluICYmICFDT01QTEVURV9UWVBFX1AgKFRSRUVfVFlQRSAocmVzdWx0X3R5cGUpKSkNCj4+ Pj4+IDMzMzIgICAgICAgICByZXR1cm4gZXJyb3JfbWFya19ub2RlOw0KPj4+Pj4gMzMzMyAgICAg ICBzaXplX2V4cCA9IHNpemVfaW5fYnl0ZXNfbG9jIChsb2MsIFRSRUVfVFlQRSAocmVzdWx0X3R5 cGUpKTsNCj4+Pj4+IDMzMzQgICAgICAgLyogV3JhcCB0aGUgcG9pbnRlciBleHByZXNzaW9uIGlu IGEgU0FWRV9FWFBSIHRvIG1ha2Ugc3VyZSBpdA0KPj4+Pj4gMzMzNSAgICAgICAgICBpcyBldmFs dWF0ZWQgZmlyc3Qgd2hlbiB0aGUgc2l6ZSBleHByZXNzaW9uIG1heSBkZXBlbmQNCj4+Pj4+IDMz MzYgICAgICAgICAgb24gaXQgZm9yIFZNIHR5cGVzLiAgKi8NCj4+Pj4+IDMzMzcgICAgICAgaWYg KFRSRUVfU0lERV9FRkZFQ1RTIChzaXplX2V4cCkNCj4+Pj4+IDMzMzggICAgICAgICAgICYmIFRS RUVfU0lERV9FRkZFQ1RTIChwdHJvcCkNCj4+Pj4+IDMzMzkgICAgICAgICAgICYmIHZhcmlhYmx5 X21vZGlmaWVkX3R5cGVfcCAoVFJFRV9UWVBFIChwdHJvcCksIE5VTEwpKQ0KPj4+Pj4gMzM0MCAg ICAgICAgIHsNCj4+Pj4+IDMzNDEgICAgICAgICAgIHB0cm9wID0gc2F2ZV9leHByIChwdHJvcCk7 DQo+Pj4+PiAzMzQyICAgICAgICAgICBzaXplX2V4cCA9IGJ1aWxkMiAoQ09NUE9VTkRfRVhQUiwg VFJFRV9UWVBFIChpbnRvcCksIHB0cm9wLCBzaXplX2V4cCk7DQo+Pj4+PiAzMzQzICAgICAgICAg fQ0KPj4+Pj4gMzM0NCAgICAgfQ0KPj4+Pj4gDQo+Pj4+PiBJbiB0aGUgYWJvdmUsIGF0IGxpbmUg MzMzMywgdGhlIHRyZWUgbm9kZSwgVFlQRV9TSVpFX1VOSVQgKFRSRUVfVFlQRShyZXN1bHRfdHlw ZSkpLCBpcyByZXR1cm5lZCBkaXJlY3RseSBhcw0KPj4+Pj4gdGhlIHNpemVfZXhwLA0KPj4+Pj4g DQo+Pj4+PiAoZ2RiKSBjYWxsIGRlYnVnX3RyZWUoc2l6ZV9leHApDQo+Pj4+PiA8bXVsdF9leHBy IDB4ZmZmZmY1YTZmOTEwDQo+Pj4+PiAgdHlwZSA8aW50ZWdlcl90eXBlIDB4ZmZmZmY1N2MwMDAw IHNpemV0eXBlIHB1YmxpYyB1bnNpZ25lZCBESQ0KPj4+Pj4gICAgICBzaXplIDxpbnRlZ2VyX2Nz dCAweGZmZmZmNTZjMGU3MCBjb25zdGFudCA2ND4NCj4+Pj4+ICAgICAgdW5pdC1zaXplIDxpbnRl Z2VyX2NzdCAweGZmZmZmNTZjMGU4OCBjb25zdGFudCA4Pg0KPj4+Pj4gICAgICBhbGlnbjo2NCB3 YXJuX2lmX25vdF9hbGlnbjowIHN5bXRhYjowIGFsaWFzLXNldCAtMSBjYW5vbmljYWwtdHlwZSAw eGZmZmZmNTdjMDAwMCBwcmVjaXNpb246NjQgbWluIDxpbnRlZ2VyX2NzdCAweGZmZmZmNTZjMGVh MCAwPiBtYXggPGludGVnZXJfY3N0IDB4ZmZmZmY1NmQwNWUwIDE4NDQ2NzQ0MDczNzA5NTUxNjE1 Pj4NCj4+Pj4+ICBzaWRlLWVmZmVjdHMNCj4+Pj4+ICBhcmc6MCA8bXVsdF9leHByIDB4ZmZmZmY1 YTZmOGU4IHR5cGUgPGludGVnZXJfdHlwZSAweGZmZmZmNTdjMDAwMCBzaXpldHlwZT4NCj4+Pj4+ ICAgICAgc2lkZS1lZmZlY3RzDQo+Pj4+PiAgICAgIGFyZzowIDxub3BfZXhwciAweGZmZmZmNTZk YzU0MCB0eXBlIDxpbnRlZ2VyX3R5cGUgMHhmZmZmZjU3YzAwMDAgc2l6ZXR5cGU+DQo+Pj4+PiAg ICAgICAgICBzaWRlLWVmZmVjdHMNCj4+Pj4+ICAgICAgICAgIGFyZzowIDxzYXZlX2V4cHIgMHhm ZmZmZjU2ZGM0YzAgdHlwZSA8aW50ZWdlcl90eXBlIDB4ZmZmZmY1N2MwNWU4IGludD4NCj4+Pj4+ ICAgICAgICAgICAgICBzaWRlLWVmZmVjdHMgYXJnOjAgPHBhcm1fZGVjbCAweGZmZmZmNzZiNmY4 MCBuMT4+Pg0KPj4+Pj4gICAgICBhcmc6MSA8bm9wX2V4cHIgMHhmZmZmZjU2ZGM2MDAgdHlwZSA8 aW50ZWdlcl90eXBlIDB4ZmZmZmY1N2MwMDAwIHNpemV0eXBlPg0KPj4+Pj4gICAgICAgICAgc2lk ZS1lZmZlY3RzDQo+Pj4+PiAgICAgICAgICBhcmc6MCA8c2F2ZV9leHByIDB4ZmZmZmY1NmRjNTgw IHR5cGUgPGludGVnZXJfdHlwZSAweGZmZmZmNTdjMDVlOCBpbnQ+DQo+Pj4+PiAgICAgICAgICAg ICAgc2lkZS1lZmZlY3RzIGFyZzowIDxwYXJtX2RlY2wgMHhmZmZmZjc2YjcwMDAgbjI+Pj4+DQo+ Pj4+PiAgYXJnOjEgPGludGVnZXJfY3N0IDB4ZmZmZmY1NmMxMGM4IHR5cGUgPGludGVnZXJfdHlw ZSAweGZmZmZmNTdjMDAwMCBzaXpldHlwZT4gY29uc3RhbnQgND4+DQo+Pj4+PiANCj4+Pj4+IA0K Pj4+Pj4gV2l0aG91dCB1bnNoYXJlX2V4cHIgdG8gdGhpcyBzaXplX2V4cCwgdGhlIGFib3ZlIFRZ UEVfU0laRV9VTklUIG5vZGUgY29udGFpbmluZyBTQVZFX0VYUFJzDQo+Pj4+PiBpcyBnaW1wZmxp ZmllZCB0byBleHByZXNzaW9ucyB3aXRoIFNTQV9OQU1FIGR1cmluZyBnaW1wbGlmaWNhdGlvbi4g IChUaGlzIGlzIHVuYWNjZXB0ZWQgYnkgTFRPKS4NCj4+Pj4+IA0KPj4+Pj4gQWRkaW5nIGFuIHVu c2hhcmVfZXhwciAoc2l6ZV9leHApIHJlc29sdmVkIHRoaXMgcHJvYmxlbS4NCj4+Pj4+IA0KPj4+ Pj4gQWx0aG91Z2ggSSBzdGlsbCB0aGluayB0aGF0IHRoZXJlIG1pZ2h0IGJlIHBvdGVudGlhbCBp c3N1ZSB3aXRoIHRoZSBnaW1wZmxpY2F0aW9uIG9mIFNBVkVfRVhQUnMsIEkgZGFyZSBub3QNCj4+ Pj4+IHRvIG1vZGlmeSB0aGF0IHBhcnQgb2YgdGhlIGNvZGUuDQo+Pj4+PiANCj4+Pj4+IEF0IHRo aXMgbW9tZW50LCBJIHdpbGwgYWRkIHVuc2hhcmVfZXhwciB0byB0aGUgcm91dGluZSDigJxwb2lu dGVyX2ludF9zdW3igJ0gdG8gd29ya2Fyb3VuZCB0aGlzIGlzc3VlLg0KPj4+PiANCj4+Pj4gSXQn cyBvbmx5IGEgd29ya2Fyb3VuZCBtaW5kIHlvdS4gIFRoZSBidWcgaXMgdGhhdCB0aGUgZnJvbnRl bmQgZmFpbHMNCj4+Pj4gdG8gZW1pdCBhIERFQ0xfRVhQUiB3aGljaCB3b3VsZA0KPj4+PiB0cmln Z2VyIGJvdGggdW5zaGFyaW5nIGFuZCBwcm9wZXIgZ2ltcGxpZmljYXRpb24gb2YgdGhlIHR5cGUg c2l6ZS4NCj4+PiANCj4+PiBGb3IgYSBzaW1wbGUgdGVzdGluZyBjYXNlOg0KPj4+IA0KPj4+ICQg Y2F0IHRlc3QuYw0KPj4+IHN0cnVjdCBhbm5vdGF0ZWQgew0KPj4+IHVuc2lnbmVkIGludCBmb287 DQo+Pj4gY2hhciBiOw0KPj4+IGludCBhcnJheVtdIF9fYXR0cmlidXRlX18oKGNvdW50ZWRfYnkg KGZvbykpKTsNCj4+PiB9Ow0KPj4+IGV4dGVybiBzdHJ1Y3QgYW5ub3RhdGVkICogYWxsb2NfYnVm IChpbnQgaW5kZXgpOw0KPj4+IA0KPj4+IHN0YXRpYyB2b2lkIGJhciAoKQ0KPj4+IHsNCj4+PiBz dHJ1Y3QgYW5ub3RhdGVkICpwMiA9IGFsbG9jX2J1ZiAoMTApOw0KPj4+IHAyLT5hcnJheVsxMV0g PSAwOw0KPj4+IHJldHVybjsNCj4+PiB9DQo+Pj4gDQo+Pj4gVGhlIEMgRkUgZ2VuZXJhdGVzIHRo ZSBmb2xsb3dpbmcgSVI6DQo+Pj4gDQo+Pj4gW29wY0BxaW56aGFvLW9sOHUzLXg4NiAxMDg4OTZd JCBjYXQgdGVzdC5jLjAwNXQub3JpZ2luYWwNCj4+PiA7OyBGdW5jdGlvbiBiYXIgKG51bGwpDQo+ Pj4gOzsgZW5hYmxlZCBieSAtdHJlZS1vcmlnaW5hbA0KPj4+IA0KPj4+IA0KPj4+IHsNCj4+PiBz dHJ1Y3QgYW5ub3RhdGVkICogcDIgPSBhbGxvY19idWYgKDEwKTsNCj4+PiANCj4+PiAgIHN0cnVj dCBhbm5vdGF0ZWQgKiBwMiA9IGFsbG9jX2J1ZiAoMTApOw0KPj4+ICooLkFDQ0VTU19XSVRIX1NJ WkUgKChpbnQgKikgJnAyLT5hcnJheSwgJnAyLT5mb28sIDEsIDMyLCAtMSkgKyA0NCkgPSAwOw0K Pj4+IHJldHVybjsNCj4+PiB9DQo+Pj4gDQo+Pj4gRG8geW91IHNlZSBhbnkgb2J2aW91cyBJUiBp c3N1ZSBpbiB0aGUgYWJvdmU/IERvIEkgbWlzcyB0byBnZW5lcmF0ZSBhbnkgREVDTF9FWFBSIGlu IHRoZSBhYm92ZSBJUj8NCj4+IA0KPj4gSXQncyBhbiBpbnRlcmVzdGluZyBxdWVzdGlvbiAtIEkg ZG9uJ3Qgc2VlIHdoZXJlIHRoZSBnaW1wbGlmaWVyIHdvdWxkDQo+PiBuZWVkIHRvIGFjY2VzcyBE RUNML1RZUEVfU0laRQ0KPiANCj4gTXkgYmFkLCB0aGUgYWJvdmUgc2ltcGxlIGV4YW1wbGUgZGlk IG5vdCBleHBvc2UgdGhlIExUTyBlcnJvci4gSnVzdCB1c2VkIHRvIHNob3cgdGhlIElSIGdlbmVy YXRlZCBmb3IgdGhlIGFycmF5IGFjY2Vzcy4NCj4gDQo+IFRoZSBMVE8gZXJyb3Igb25seSBoYXBw ZW5zIHdpdGggbXVsdGktZGltZW5zaW9uIGFycmF5LCB3aG9zZSBpbm5lciBkaW1lbnNpb25zIGFy ZSBWTEEuICBBbmQgdGhlIG91dGVybW9zdCBkaW1lbnNpb24gaXMgZmxleGlibGUgYXJyYXkgbWVt YmVyLiAgTGlrZSBmb2xsb3dpbmc6DQo+IA0KPiANCj4gICB2b2lkIF9fYXR0cmlidXRlX18oKF9f bm9pbmxpbmVfXykpIHNldHVwX2FuZF90ZXN0X3ZsYSAoaW50IG4xLCBpbnQgbjIsIGludCBtKQ0K PiB7DQo+ICAgc3RydWN0IGZvbyB7DQo+ICAgICAgIGludCBuOw0KPiAgICAgICBpbnQgcFtdW24y XVtuMV0gX19hdHRyaWJ1dGVfXygoY291bnRlZF9ieShuKSkpOw0KPiAgIH0gKmY7DQo+IA0KPiAg IGYgPSAoc3RydWN0IGZvbyAqKSBtYWxsb2MgKHNpemVvZihzdHJ1Y3QgZm9vKSArIG0qc2l6ZW9m KGludFtuMl1bbjFdKSk7DQo+ICAgZi0+biA9IG07DQo+ICAgZi0+cFttXVtuMl1bbjFdPTE7DQo+ ICAgcmV0dXJuOw0KPiB9DQo+IA0KPiBBbmQgdGhlIElSIGZvciB0aGUgcm91dGluZSDigJxzZXR1 cF9hbmRfdGVzdF92bGHigJ0gaXM6DQo+IA0KPiB7DQo+ICB0eXBlZGVmIHN0cnVjdCBmb28gc3Ry dWN0IHN0cnVjdCBmb287DQo+ICBzdHJ1Y3QgZm9vICogZjsNCj4gDQo+ICBTQVZFX0VYUFIgPG4x PjssIFNBVkVfRVhQUiA8bjI+OzssIHsNCj4gICAgICAgIHR5cGVkZWYgc3RydWN0IGZvbyBzdHJ1 Y3Qgc3RydWN0IGZvbzsNCj4gIH07DQo+ICAgIHN0cnVjdCBmb28gKiBmOw0KPiAgZiA9IChzdHJ1 Y3QgZm9vICopIG1hbGxvYyAoMCwgU0FWRV9FWFBSIDxuMT47LCBTQVZFX0VYUFIgPG4yPjs7LCAo KGxvbmcgdW5zaWduZWQgaW50KSBtICogKGxvbmcgdW5zaWduZWQgaW50KSAoKHNpemV0eXBlKSBT QVZFX0VYUFIgPG4xPiAqIChzaXpldHlwZSkgU0FWRV9FWFBSIDxuMj4pICsgMSkgKiA0Oyk7DQo+ ICBmLT5uID0gbTsNCj4gICgqKC5BQ0NFU1NfV0lUSF9TSVpFICgoaW50WzA6KHNpemV0eXBlKSAo KGxvbmcgaW50KSBTQVZFX0VYUFIgPG4yPiArIC0xKV1bMDooc2l6ZXR5cGUpICgobG9uZyBpbnQp IFNBVkVfRVhQUiA8bjE+ICsgLTEpXSAqKSAmZi0+cCwgJmYtPm4sIDEsIDMyLCAtMSkgKyAoc2l6 ZXR5cGUpICgoKGxvbmcgdW5zaWduZWQgaW50KSBtICogKGxvbmcgdW5zaWduZWQgaW50KSAoKHNp emV0eXBlKSBTQVZFX0VYUFIgPG4xPiAqIChzaXpldHlwZSkgU0FWRV9FWFBSIDxuMj4pKSAqIDQp KSlbbjJdW24xXSA9IDE7DQo+ICByZXR1cm47DQo+IH0NCj4gDQo+IA0KPiANCj4+IHNvIHRoZSBt aXN0YWtlLCBpZiBhbnksIHNob3VsZCBiZSB0aGF0IHlvdSBuZWVkIHRvIHVuc2hhcmUgdGhlIHNp emUNCj4+IGV4cHJlc3Npb25zIHlvdSBhcmUgdXNpbmcgYXMNCj4+IGFyZ3VtZW50IHRvIC5BQ0NF U1NfV0lUSF9TSVpFPw0KPiANCj4gSG0sIEkgdHJpZWQgdGhhdCBpbiB0aGUgYmVnaW5uaW5nLCBi dXQgZGlkbuKAmXQgd29yay4gSSB3aWxsIGNoZWNrIGFnYWluLiANCj4gDQo+PiBNaW5kLCB5b3Ug YXJlIHJlcGxhY2luZyBhbiBBUlJBWV9SRUYNCj4+IHdpdGggYSBwb2ludGVyIGluZGlyZWN0aW9u DQo+PiBhcyB3ZWxsDQo+IA0KPiBZZXMsIHRoaXMgaXMgZm9yIHJlc29sdmluZyBhIHZlcnkgZWFy bHkgZ2ltcGxpZmljYXRpb24gaXNzdWUgYXMgSSByZXBvcnRlZCBsYXN0IE5vdjoNCj4gaHR0cHM6 Ly9nY2MuZ251Lm9yZy9waXBlcm1haWwvZ2NjLXBhdGNoZXMvMjAyMy1Ob3ZlbWJlci82Mzg3OTMu aHRtbA0KPiANCj4gU2luY2Ugbm8tb25lIHJlc3BvbmRlZCBhdCB0aGF0IHRpbWUsIEkgZml4ZWQg dGhlIGlzc3VlIGJ5IHJlcGxhY2luZyB0aGUgQVJSQVlfUkVGDQo+IFdpdGggYSBwb2ludGVyIGlu ZGlyZWN0aW9uOg0KPiBodHRwczovL2djYy5nbnUub3JnL3BpcGVybWFpbC9nY2MtcGF0Y2hlcy8y MDIzLURlY2VtYmVyLzYzOTYwNS5odG1sDQo+IA0KPiBUaGUgcmVhc29uIGZvciBzdWNoIGNoYW5n ZSBpczogIHJldHVybiBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBUWVBFIGlzIG5vdCBhbGxvd2Vk DQo+IGJ5IEMgbGFuZ3VhZ2UgKG91ciBnaW1wbGlmaWNhdGlvbiBmb2xsb3dzIHRoaXMgcnVsZSks IHNvLCB3ZSBoYXZlIHRvIHJldHVybiBhIHBvaW50ZXIgVFlQRSBpbnN0ZWFkLiANCj4gDQo+IA0K Pj4gLSBJTU8gd2Ugc2hvdWxkbid0IHJlcGxhY2UgYWNjZXNzZXMgdGhpcyB3YXkgYnV0IGluc3Rl YWQgbWFrZQ0KPj4gaXQgcG9zc2libGUgZm9yIGFuYWx5c2lzIHRvDQo+PiBkaXNjb3ZlciB0aGUg YmFzZS9zaXplIHZhbHVlcz8NCj4gDQo+IFllcywgaWYga2VlcGluZyB0aGUgQVJSQVlfUkVGLCB0 aGVuIGJvdW5kIHNhbml0aXplciBpbnN0cnVtZW50YXRpb24gd2lsbCBiZSBtdWNoIHNpbXBsZXIg c2luY2UgdGhlIElOREVYDQo+IEluZm9ybWF0aW9uIGlzIGtlcHQgaW4gdGhlIFRZUEUgTk9ERSBv ZiB0aGUgQVJSQVlfUkVGLiAgDQo+IEhvd2V2ZXIsIGR1ZSB0byB0aGUgYWJvdmUgcmVhc29uLCB3 ZSBoYXZlIHRvIHJlcGxhY2UgdGhlIEFSUkFZX1JFRiB3aXRoIGEgcG9pbnRlciBJTkRJUkVDVF9S RUYuIA0KPiBTdWNoIGNoYW5nZSBtYWRlIHRoZSBib3VuZCBzYW5pdGl6ZXIgbW9yZSBkaWZmaWN1 bHQgZHVlIHRvIHRoZSBJTkRFWCB3YXMgbG9zdCB3aGVuIHRoZSBBUlJBWV9SRUYgd2FzDQo+IENv bnZlcnRlZCB0byB0aGUgSU5ESVJFQ1RfUkVGLg0KPiANCj4gSSByZXNvbHZlZCB0aGlzIGlzc3Vl IGJ5IGFkZGluZyBhIG5ldyBhcmd1bWVudCB0byAuQUNDRVNTX1dJVEhfU0laRSB0byByZWNvcmQg dGhlIElOREVYIHdoZW4gY29udmVydGluZw0KPiBUaGUgQVJSQVlfUkVGIHRvIElORElSRUNUX1JF RiBkdXJpbmcgQyBGRS4NCj4gDQo+IExldCBtZSBrbm93IGlmIHlvdSBoYXZlIGFueSBjb21tZW50 Lg0KPiANCj4gVGhhbmtzLg0KPiANCj4gUWluZw0KPj4gDQo+Pj4gVGhhbmtzLg0KPj4+IA0KPj4+ IFFpbmcNCj4+PiANCj4+PiANCj4+PiBJIGNvbXBhcmVkIGl0IHdpdGggdGhlIGZvbGxvd2luZyB0 ZXN0aW5nIGNhc2Ugd2l0aG91dCB0aGUg4oCcY291bnRlZC1ieeKAnSBhbm5vdGF0aW9uDQo+Pj4g YW5kIHVzZSBhbiB1c2VyLWRlZmluZWQg4oCcYWNjZXNzX3dpdGhfc2l6ZeKAnSBmdW5jdGlvbiwg VGhlIElSIGxvb2tzIGxpa2UgZXhhY3RseSB0aGUgc2FtZToNCj4+PiANCj4+PiAkIGNhdCB0ZXN0 XzEuYw0KPj4+IHN0cnVjdCBhbm5vdGF0ZWQgew0KPj4+IHVuc2lnbmVkIGludCBmb287DQo+Pj4g Y2hhciBiOw0KPj4+IGludCBhcnJheVtdOw0KPj4+IH07DQo+Pj4gZXh0ZXJuIHN0cnVjdCBhbm5v dGF0ZWQgKmFsbG9jX2J1ZiAoaW50KTsNCj4+PiBleHRlcm4gaW50ICphY2Nlc3Nfd2l0aF9zaXpl IChpbnQgKiByZWYsIHVuc2lnbmVkIGludCAqIHNpemUsIGludCBhLCBpbnQgYiwgaW50IGMpOw0K Pj4+IA0KPj4+IHN0YXRpYyB2b2lkIGJhciAoKQ0KPj4+IHsNCj4+PiBzdHJ1Y3QgYW5ub3RhdGVk ICpwMiA9IGFsbG9jX2J1ZiAoMTApOw0KPj4+IGFjY2Vzc193aXRoX3NpemUgKChpbnQgKikgJnAy LT5hcnJheSwgJnAyLT5mb28sIDEsIDMyLCAtMSlbMTFdID0gMDsNCj4+PiByZXR1cm47DQo+Pj4g fQ0KPj4+IFtvcGNAcWluemhhby1vbDh1My14ODYgMTA4ODk2XSQgY2F0IHRlc3RfMS5jLjAwNXQu b3JpZ2luYWwNCj4+PiANCj4+PiA7OyBGdW5jdGlvbiBiYXIgKG51bGwpDQo+Pj4gOzsgZW5hYmxl ZCBieSAtdHJlZS1vcmlnaW5hbA0KPj4+IA0KPj4+IA0KPj4+IHsNCj4+PiBzdHJ1Y3QgYW5ub3Rh dGVkICogcDIgPSBhbGxvY19idWYgKDEwKTsNCj4+PiANCj4+PiAgIHN0cnVjdCBhbm5vdGF0ZWQg KiBwMiA9IGFsbG9jX2J1ZiAoMTApOw0KPj4+ICooYWNjZXNzX3dpdGhfc2l6ZSAoKGludCAqKSAm cDItPmFycmF5LCAmcDItPmZvbywgMSwgMzIsIC0xKSArIDQ0KSA9IDA7DQo+Pj4gcmV0dXJuOw0K Pj4+IH0NCj4+PiANCj4+PiANCj4+PiANCj4+Pj4gDQo+Pj4+PiBMZXQgbWUga25vdyBpZiB5b3Ug aGF2ZSBhbnkgY29tbWVudCBhbmQgc3VnZ2VzdGlvbi4NCj4+Pj4+IA0KPj4+Pj4gVGhhbmtzIGEg bG90Lg0KPj4+Pj4gDQo+Pj4+PiBRaW5nDQo+Pj4+PiANCj4+Pj4+Pj4gDQo+Pj4+Pj4+PiANCj4+ Pj4+Pj4+IFFpbmcNCj4+Pj4+Pj4+IA0KPj4+Pj4+Pj4+IA0KPj4+Pj4+Pj4+PiBUaGFua3MgYSBs b3QgZm9yIHRoZSBoZWxwLg0KPj4+Pj4+Pj4+PiANCj4+Pj4+Pj4+Pj4gUWluZw0KDQoNCg==