From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 20414A0564; Tue, 24 Mar 2020 10:40:42 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8644B1C0C3; Tue, 24 Mar 2020 10:40:41 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by dpdk.org (Postfix) with ESMTP id 10F231C0C2 for ; Tue, 24 Mar 2020 10:40:39 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02O9dw0a013445; Tue, 24 Mar 2020 02:40:36 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pfpt0818; bh=HMgajmRqQvW+wQky/tUnsMnSk3n2P9t669zNBcHamGo=; b=wECG4byBkpKhbLNUyeobXD2MOh8RmSco/6a3PYbeQPOYGmemNMaEEv2Z3mUNNsYUnlWx sm1ehfkf0LtKe7PK5EBSuTG5vs1+nhyeCAFWjgoC5mBUuSWUXiRf5rSnWZkJ2Ug52zmU klfcgGvSlWq8MAvkMYT7tgG5hyYnnjaijphl8N7H3zfAAKDc+evTZ06hNhdhmlCI0His Jfvp7IHrKxoul9cjL5CeH1eByBMny5FtwFzCFKDiYNB92Y/yqe8qhPLXGrviBsIm6UsP Hgwy65V+9ZtatSk1hX39/p3V+Pro3q/799IT+wXmuoPHeY9bXmSwwl7dpE3hVyf6JK4a Zw== Received: from sc-exch03.marvell.com ([199.233.58.183]) by mx0a-0016f401.pphosted.com with ESMTP id 2ywg9njfxa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Tue, 24 Mar 2020 02:40:36 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 24 Mar 2020 02:40:35 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.102) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Tue, 24 Mar 2020 02:40:34 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TC4PDUiXOnashK0Wl7pYzdDe30TjgluVza/1SzbYvnONOyCKUJM8kDtH2ac1GqcKMIS/mfPsoBcnO3WPn+Fsm8N7+wjiChg7Dk0dtd8/mm3QZwlDeV/aVw/Rt2CWR0GU9lh8pm6Tbv21vCpnireWRFxnxKsXntcGp8msqZeTFsjrqrgJ/b/8+IP66RY5ugJ/fjNz2nTB2/zkppTHhB0m8V2J/u1jABT3+5j6OkzLm2tF+/fDeiqvVuj5tVbgOZ+bKny+4myjmA33KFBf6gfwS2reNZ8akDS9j5Yso8PB3R3vapuLTg52KIRdkTWVYlvJEeY0lCWtHIVk+JKPHHXXeg== 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-SenderADCheck; bh=HMgajmRqQvW+wQky/tUnsMnSk3n2P9t669zNBcHamGo=; b=kbpMWMc0SnUAeJcgZKsa+sETMnAc05eNrGn4+OWrWRiFdcazt9X6Kq0ps1dr4G6fq4v31JcppZOMKDI7WYbql7cChPLI+weVovcLlHWYlaleQjbkOASSfjL+H4MU2CL1Lm61Sq5b8oxOpNIkZvLHNguw9iK4Xj2hhL1HjfhplydPFcekkd4gdL19uoJSJSv/juIzWwEW1JxtbO8m/nCYwZi2SapXiVsmUrQ1FFiRN3PapazKj7vk2Zu2w5nO96cdQA38iR+9onTAGgBQSLnyv/1S4ItRtb0C+Y8/maftBVJtKc27MyUkq6eRRSZT1bMEenfNKlaVO/512D507rZa9Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HMgajmRqQvW+wQky/tUnsMnSk3n2P9t669zNBcHamGo=; b=ROgxSZPRWKc+3E9oul11QQefZFSoDTVjz800YN7jMd99OjOxvoVe9SlcUMjEH1Lv0iaWKeTRaBIlCnJ6CCLp+aMO3KJ252HxiId3TwuLPLJx6wzG1+as10hZtDqtJdb6crt9YCvSyYIWkVEWbkjsBtOwxqjvVCZwzFiP4JkTSb8= Received: from CY4PR1801MB1863.namprd18.prod.outlook.com (2603:10b6:910:7b::32) by CY4PR1801MB1830.namprd18.prod.outlook.com (2603:10b6:910:7e::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.22; Tue, 24 Mar 2020 09:40:33 +0000 Received: from CY4PR1801MB1863.namprd18.prod.outlook.com ([fe80::3ce0:be16:b19f:6383]) by CY4PR1801MB1863.namprd18.prod.outlook.com ([fe80::3ce0:be16:b19f:6383%7]) with mapi id 15.20.2835.021; Tue, 24 Mar 2020 09:40:33 +0000 From: Pavan Nikhilesh Bhagavatula To: Ray Kinsella , Jerin Jacob Kollanukkaran , Nithin Kumar Dabilpuram CC: "dev@dpdk.org" , "thomas@monjalon.net" , "david.marchand@redhat.com" , "mattias.ronnblom@ericsson.com" , Kiran Kumar Kokkilagadda Thread-Topic: [EXT] Re: [dpdk-dev] [PATCH v1 20/26] node: ipv4 lookup for x86 Thread-Index: AQHV/W1QZK9hb7vUJEq1M59lDqobbqhP2A4AgAAbR1CAAB4TAIAABcvwgAEd0YCABjsZsA== Date: Tue, 24 Mar 2020 09:40:32 +0000 Message-ID: References: <20200318213551.3489504-1-jerinj@marvell.com> <20200318213551.3489504-21-jerinj@marvell.com> <02c4c25a-83ba-dac5-20e6-7b140cbcb4f1@ashroe.eu> <5a99e696-3853-5782-0a4c-0debcc74faa8@ashroe.eu> <20a3cb35-d57b-4799-f084-919f3f55da6f@ashroe.eu> In-Reply-To: <20a3cb35-d57b-4799-f084-919f3f55da6f@ashroe.eu> Accept-Language: en-IN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [122.172.110.222] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 892a3923-fe96-47e7-56cf-08d7cfd765e6 x-ms-traffictypediagnostic: CY4PR1801MB1830: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5797; x-forefront-prvs: 03524FBD26 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(346002)(376002)(396003)(136003)(366004)(110136005)(54906003)(81166006)(4326008)(66946007)(8676002)(81156014)(66446008)(71200400001)(33656002)(7696005)(316002)(86362001)(55016002)(66476007)(53546011)(6506007)(64756008)(76116006)(9686003)(8936002)(5660300002)(66556008)(2906002)(186003)(30864003)(107886003)(52536014)(478600001)(6636002)(26005); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR1801MB1830; H:CY4PR1801MB1863.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; received-spf: None (protection.outlook.com: marvell.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: bCYiE0EincHXtE8XeQl2nvz5PbERmkebW5xkV1ucn5hPARlA9wqt9fXKFWPA5APezPrrZ4DuS81gwFsDlEy7hea16AM3xnDA7aDx5suMc7V7n1X/oHt+7T04BMknDDQ7sFdtJWaXx+3WAd+RPK7bwbjZKGfRlMpZ/Afoxg3WSh5JozbvZiuuG53yeGMUJ5aaicz0ra6+PfwG5+j+A0wuhLGTYXW40IDZmfF7NXcwqXrRe/0SoEaHS8EPArBZdSzjmIJI/7IlaNbYrCdReK/QxB4e7c70/6kG9ZIr+eHyHpf6bACTqkySJrvlxx0be0PtdKWV5+Pkb+DI/bj1wkJg7hYtrbEI2rl3n+47HOY9CJ7+BE2Eo6ppF/gj+XiVlZ8Gr1EbPCoL9LcyolnB/0ldcz1VS3G4k3gTvpZbOmQlRiJYqTPB7wG9jqDmANvW1j/e x-ms-exchange-antispam-messagedata: f2Rjk/EIr3jQimzwJBramLBvSVRGy0X9QkJIrdtjPTlZe3FJdXxvKYDdIeECJpNE/sJj9ZddpKPJmqhB9I839PoUBYqGTTpIvKcOKcIAfX/S7pyxpb7G6x2hTgjVm6iI2QOj56BbGPzM1dkVylhp6Q== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 892a3923-fe96-47e7-56cf-08d7cfd765e6 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Mar 2020 09:40:32.8678 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 9iczTvQQOI+POiKwSZ5WWw7klK78KI0vgI669RcJbBW1IWfSAMkLVSkL1UJNmhNOlUdJXKT+My5izT7L4kfR7r1fZGUdqsbI3vT0fnzzBAs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1801MB1830 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.645 definitions=2020-03-24_02:2020-03-23, 2020-03-24 signatures=0 Subject: Re: [dpdk-dev] [EXT] Re: [PATCH v1 20/26] node: ipv4 lookup for x86 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgUmF5LCANCg0KSSBoYXZlIHRyaWVkIHRvIGF2b2lkIGhhbmQgdW5yb2xsaW5nIGxvb3BzIGFu ZCBmb3VuZCB0aGUgZm9sbG93aW5nIG9ic2VydmF0aW9ucy4NCg0KMS4gQWx0aG91Z2ggaXQgZGVj cmVhc2VzIExPQyBpdCBhbHNvIHRha2VzIGF3YXkgcmVhZGFiaWxpdHkgdG9vLg0KCUV4YW1wbGU6 IA0KCUF2b2lkaW5nIHVucm9sbGVkIGNvZGUgYmVsb3cNCg0KICAgICAgICAgICAgICAgIHByaXZb MF0udTY0WzBdID0gcnRlX25vZGVfbWJ1Zl9wcml2MShtYnVmWzBdKS0+dTsNCiAgICAgICAgICAg ICAgICBwcml2WzBdLnU2NFsxXSA9IHJ0ZV9ub2RlX21idWZfcHJpdjEobWJ1ZlsxXSktPnU7DQog ICAgICAgICAgICAgICAgcHJpdlsxXS51NjRbMF0gPSBydGVfbm9kZV9tYnVmX3ByaXYxKG1idWZb Ml0pLT51Ow0KICAgICAgICAgICAgICAgIHByaXZbMV0udTY0WzFdID0gcnRlX25vZGVfbWJ1Zl9w cml2MShtYnVmWzNdKS0+dTsNCg0KICAgICAgICAgICAgICAgIC8qIEluY3JlbWVudCBjaGVja3N1 bSBieSBvbmUuICovDQogICAgICAgICAgICAgICAgcHJpdlswXS51MzJbMV0gKz0gcnRlX2NwdV90 b19iZV8xNigweDAxMDApOw0KICAgICAgICAgICAgICAgIHByaXZbMF0udTMyWzNdICs9IHJ0ZV9j cHVfdG9fYmVfMTYoMHgwMTAwKTsNCiAgICAgICAgICAgICAgICBwcml2WzFdLnUzMlsxXSArPSBy dGVfY3B1X3RvX2JlXzE2KDB4MDEwMCk7DQogICAgICAgICAgICAgICAgcHJpdlsxXS51MzJbM10g Kz0gcnRlX2NwdV90b19iZV8xNigweDAxMDApOw0KDQogICAgICAgICAgICAgICAgZCA9IHJ0ZV9w a3RtYnVmX210b2QobWJ1ZlswXSwgdm9pZCAqKTsNCiAgICAgICAgICAgICAgICBydGVfbWVtY3B5 KGQsIG5oW3ByaXZbMF0udTE2WzBdXS5yZXdyaXRlX2RhdGEsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5oW3ByaXZbMF0udTE2WzBdXS5yZXdyaXRlX2xlbik7DQogICAgICAgICAg ICAgICAgbmV4dFswXSA9IG5oW3ByaXZbMF0udTE2WzBdXS50eF9ub2RlOw0KICAgICAgICAgICAg ICAgIGlwID0gKHN0cnVjdCBydGVfaXB2NF9oZHIgKikoKHVpbnQ4X3QgKilkICsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBydGVfZXRoZXJfaGRyKSk7DQog ICAgICAgICAgICAgICAgaXAtPnRpbWVfdG9fbGl2ZSA9IHByaXZbMF0udTE2WzFdIC0gMTsNCiAg ICAgICAgICAgICAgICBpcC0+aGRyX2NoZWNrc3VtID0gcHJpdlswXS51MTZbMl0gKyBwcml2WzBd LnUxNlszXTsNCg0KICAgICAgICAgICAgICAgIGQgPSBydGVfcGt0bWJ1Zl9tdG9kKG1idWZbMV0s IHZvaWQgKik7DQogICAgICAgICAgICAgICAgcnRlX21lbWNweShkLCBuaFtwcml2WzBdLnUxNls0 XV0ucmV3cml0ZV9kYXRhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgbmhbcHJpdlswXS51 MTZbNF1dLnJld3JpdGVfbGVuKTsNCiAgICAgICAgICAgICAgICBuZXh0WzFdID0gbmhbcHJpdlsw XS51MTZbNF1dLnR4X25vZGU7DQogICAgICAgICAgICAgICAgaXAgPSAoc3RydWN0IHJ0ZV9pcHY0 X2hkciAqKSgodWludDhfdCAqKWQgKw0KICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1 Y3QgcnRlX2V0aGVyX2hkcikpOw0KICAgICAgICAgICAgICAgIGlwLT50aW1lX3RvX2xpdmUgPSBw cml2WzBdLnUxNls1XSAtIDE7DQogICAgICAgICAgICAgICAgaXAtPmhkcl9jaGVja3N1bSA9IHBy aXZbMF0udTE2WzZdICsgcHJpdlswXS51MTZbN107DQoNCiAgICAgICAgICAgICAgICBkID0gcnRl X3BrdG1idWZfbXRvZChtYnVmWzJdLCB2b2lkICopOw0KICAgICAgICAgICAgICAgIHJ0ZV9tZW1j cHkoZCwgbmhbcHJpdlsxXS51MTZbMF1dLnJld3JpdGVfZGF0YSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5oW3ByaXZbMV0udTE2WzBdXS5yZXdyaXRlX2xlbik7DQogICAgICAgICAgICAg ICAgbmV4dFsyXSA9IG5oW3ByaXZbMV0udTE2WzBdXS50eF9ub2RlOw0KICAgICAgICAgICAgICAg IGlwID0gKHN0cnVjdCBydGVfaXB2NF9oZHIgKikoKHVpbnQ4X3QgKilkICsNCiAgICAgICAgICAg ICAgICAgICAgICBzaXplb2Yoc3RydWN0IHJ0ZV9ldGhlcl9oZHIpKTsNCiAgICAgICAgICAgICAg ICBpcC0+dGltZV90b19saXZlID0gcHJpdlsxXS51MTZbMV0gLSAxOw0KICAgICAgICAgICAgICAg IGlwLT5oZHJfY2hlY2tzdW0gPSBwcml2WzFdLnUxNlsyXSArIHByaXZbMV0udTE2WzNdOw0KDQog ICAgICAgICAgICAgICAgZCA9IHJ0ZV9wa3RtYnVmX210b2QobWJ1ZlszXSwgdm9pZCAqKTsNCiAg ICAgICAgICAgICAgICBydGVfbWVtY3B5KGQsIG5oW3ByaXZbMV0udTE2WzRdXS5yZXdyaXRlX2Rh dGEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBuaFtwcml2WzFdLnUxNls0XV0ucmV3cml0 ZV9sZW4pOw0KICAgICAgICAgICAgICAgIG5leHRbM10gPSBuaFtwcml2WzFdLnUxNls0XV0udHhf bm9kZTsNCiAgICAgICAgICAgICAgICBpcCA9IChzdHJ1Y3QgcnRlX2lwdjRfaGRyICopKCh1aW50 OF90ICopZCArDQogICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBydGVfZXRoZXJf aGRyKSk7DQogICAgICAgICAgICAgICAgaXAtPnRpbWVfdG9fbGl2ZSA9IHByaXZbMV0udTE2WzVd IC0gMTsNCiAgICAgICAgICAgICAgICBpcC0+aGRyX2NoZWNrc3VtID0gcHJpdlsxXS51MTZbNl0g KyBwcml2WzFdLnUxNls3XTsNCg0KCUxlYWRzIHRvIHNvbWV0aGluZyBsaWtlOg0KCQ0KICAgICAg ICAgICAgICAgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgQlVGX1BFUl9MT09QOyBpICs9IDIsIGor Kykgew0KICAgICAgICAgICAgICAgICAgICAgICAgcHJpdltqXS51NjRbMF0gPSBydGVfbm9kZV9t YnVmX3ByaXYxKG1idWZbaV0pLT51Ow0KICAgICAgICAgICAgICAgICAgICAgICAgcHJpdltqXS51 MzJbMV0gKz0gcnRlX2NwdV90b19iZV8xNigweDAxMDApOw0KICAgICAgICAgICAgICAgICAgICAg ICAgZCA9IHJ0ZV9wa3RtYnVmX210b2QobWJ1ZltpXSwgdm9pZCAqKTsNCiAgICAgICAgICAgICAg ICAgICAgICAgIGlwID0gKHN0cnVjdCBydGVfaXB2NF9oZHIgKikoKHVpbnQ4X3QgKilkICsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBy dGVfZXRoZXJfaGRyKSk7DQogICAgICAgICAgICAgICAgICAgICAgICBpcC0+dGltZV90b19saXZl ID0gcHJpdltqXS51MTZbMV0gLSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgaXAtPmhkcl9j aGVja3N1bSA9IHByaXZbal0udTE2WzJdICsgcHJpdltqXS51MTZbM107DQogICAgICAgICAgICAg ICAgICAgICAgICBydGVfbWVtY3B5KGQsIG5oW3ByaXZbal0udTE2WzBdXS5yZXdyaXRlX2RhdGEs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5oW3ByaXZbal0udTE2WzBdXS5y ZXdyaXRlX2xlbik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRbaV0gPSBuaFtwcml2 W2pdLnUxNlswXV0udHhfbm9kZTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgcHJpdltqXS51 NjRbMV0gPSBydGVfbm9kZV9tYnVmX3ByaXYxKG1idWZbaSArIDFdKS0+dTsNCiAgICAgICAgICAg ICAgICAgICAgICAgIHByaXZbal0udTMyWzNdICs9IHJ0ZV9jcHVfdG9fYmVfMTYoMHgwMTAwKTsN CiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBydGVfcGt0bWJ1Zl9tdG9kKG1idWZbaSArIDFd LCB2b2lkICopOw0KICAgICAgICAgICAgICAgICAgICAgICAgaXAgPSAoc3RydWN0IHJ0ZV9pcHY0 X2hkciAqKSgodWludDhfdCAqKWQgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZihzdHJ1Y3QgcnRlX2V0aGVyX2hkcikpOw0KICAgICAgICAgICAgICAgICAg ICAgICAgaXAtPnRpbWVfdG9fbGl2ZSA9IHByaXZbal0udTE2WzVdIC0gMTsNCiAgICAgICAgICAg ICAgICAgICAgICAgIGlwLT5oZHJfY2hlY2tzdW0gPSBwcml2W2pdLnUxNls2XSArIHByaXZbal0u dTE2WzddOw0KICAgICAgICAgICAgICAgICAgICAgICAgcnRlX21lbWNweShkLCBuaFtwcml2W2pd LnUxNls0XV0ucmV3cml0ZV9kYXRhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuaFtwcml2W2pdLnUxNls0XV0ucmV3cml0ZV9sZW4pOw0KDQogICAgICAgICAgICAgICAgICAg ICAgICBuZXh0W2kgKyAxXSA9IG5oW3ByaXZbal0udTE2WzRdXS50eF9ub2RlOw0KICAgICAgICAg ICAgICAgIH0NCglXaGljaCBpcyBraW5kIG9mIHVucmVhZGFibGUuDQoNCjIuIE5vdCBhbGwgY29t cGlsZXJzIGFyZSBtYWRlIGVxdWFsLiBJIGZvdW5kIHRoYXQgbW9zdCBvZiB0aGUgY29tcGlsZXJz IGRvbuKAmXQgDQogICAgIFVucm9sbCB0aGUgbG9vcCBhYm92ZSBldmVuIHdoZW4gY29tcGlsZWQg d2l0aCBgLWZ1bnJvbGwtYWxsLWxvb3BzYC4NCiAgICAgSSBoYXZlIGNoZWNrZWQgd2l0aCBmb2xs b3dpbmcgY29tcGlsZXJzOg0KCUdDQyA5LjIuMA0KCUNsYW5nIDkuMC4xDQoJQWFyY2g2NCBHQ0Mg Ny4zLjANCglBYXJjaDY0IEdDQyA5LjIuMA0KCQkJDQoNCjMuIFBlcmZvcm1hbmNlIHdpc2UgSSBz ZWUgYSBsb3Qgb2YgZGVncmFkYXRpb24gb24gb3VyIHBsYXRmb3JtIGF0IGxlYXN0IDEzJS4NCiAg ICBPbiBJQSB3aXRoIGEgQnJvYWR3ZWxsKFhlb24gRTUtMjY5MCkgYW5kIGk0MGUgdGhlIHBlcmZv cm1hbmNlIHJlbWFpbiBzYW1lIHcuci50IFJ4L1R4IHNpbmNlIHRoZSANCiAgICBob3RzcG90IGlz IGluIHRoZSBUeCBwYXRoIG9mIHRoZSBkcml2ZXIgd2hpY2ggbGltaXRzIHRoZSBwZXIgY29yZSBj YXBhYmlsaXR5Lg0KICAgIEJ1dCB0aGUgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZSBpbiBudW1iZXIg b2YgY3ljbGVzIHBlciBub2RlIGNhbiBiZSBzZWVuIGJlbG93Og0KDQoJSGFuZCB1bnJvbGxpbmc6 DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKw0KfE5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8Y2FsbHMgICAg ICAgICAgfG9ianMgICAgICAgICAgIHxyZWFsbG9jX2NvdW50ICB8b2Jqcy9jYWxsICAgICAgfG9i anMvc2VjKDEwRTYpIHxjeWNsZXMvY2FsbHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rDQp8aXA0X2xvb2t1cCAgICAg ICAgICAgICAgICAgICAgIHw3NzY1OTE4ICAgICAgICB8MjQ4NTA5MzQ0ICAgICAgfDEgICAgICAg ICAgICAgIHwzMi4wMDAgICAgICAgICB8MjcuNzI1NDA4ICAgICAgfDc3OS4wMDAwICAgfA0KfGlw NF9yZXdyaXRlICAgICAgICAgICAgICAgICAgICB8Nzc2NTkyNSAgICAgICAgfDI0ODUwOTU2OCAg ICAgIHwxICAgICAgICAgICAgICB8MzIuMDAwICAgICAgICAgfDI3LjcyNTQwOCAgICAgIHw0MjUu MDAwMCAgIHwNCnxldGhkZXZfdHgtMSAgICAgICAgICAgICAgICAgICAgfDc3NjU5MjcgICAgICAg IHwyMDQwNTYyMjMgICAgICB8MSAgICAgICAgICAgICAgfDI2LjAwMCAgICAgICAgIHwyMi43NjI3 MjAgICAgICB8NTk3LjAwMDAgICB8DQp8cGt0X2Ryb3AgICAgICAgICAgICAgICAgICAgICAgIHwx Mzg5MTcwICAgICAgICB8NDQ0NTM0MDkgICAgICAgfDEgICAgICAgICAgICAgIHwzMi4wMDAgICAg ICAgICB8NC45NjI2ODggICAgICAgfDI5OC4wMDAwICAgfA0KfGV0aGRldl9yeC0wLTAgICAgICAg ICAgICAgICAgICB8NjM2MDQxMTEgICAgICAgfDI0ODUwOTc5MiAgICAgIHwyICAgICAgICAgICAg ICB8MzIuMDAwICAgICAgICAgfDI3LjcyNTQwOCAgICAgIHw5ODIuMDAwMCAgIHwNCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0rDQoJDQoJVy9vIHVucm9sbGluZzoNCg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSsNCnxOb2RlICAgICAgICAgICAg ICAgICAgICAgICAgICAgfGNhbGxzICAgICAgICAgIHxvYmpzICAgICAgICAgICB8cmVhbGxvY19j b3VudCAgfG9ianMvY2FsbCAgICAgIHxvYmpzL3NlYygxMEU2KSB8Y3ljbGVzL2NhbGx8DQorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tKw0KfGlwNF9sb29rdXAgICAgICAgICAgICAgICAgICAgICB8MTg4NjQ2NDAgICAgICAg fDYwMzY2ODQ0OCAgICAgIHwxICAgICAgICAgICAgICB8MzIuMDAwICAgICAgICAgfDI2LjA1MTMy OCAgICAgIHw4MjguMDAwMCAgIHwNCnxpcDRfcmV3cml0ZSAgICAgICAgICAgICAgICAgICAgfDE4 ODY0NjQ2ICAgICAgIHw2MDM2Njg2NDAgICAgICB8MSAgICAgICAgICAgICAgfDMyLjAwMCAgICAg ICAgIHwyNi4wNTEzMjggICAgICB8NTM0LjAwMDAgICB8DQp8ZXRoZGV2X3R4LTEgICAgICAgICAg ICAgICAgICAgIHwxODg2NDY0OCAgICAgICB8NTI3ODc0MTc1ICAgICAgfDEgICAgICAgICAgICAg IHwyNy4wMDAgICAgICAgICB8MjIuNzgwMjU2ICAgICAgfDYzMy4wMDAwICAgfA0KfHBrdF9kcm9w ICAgICAgICAgICAgICAgICAgICAgICB8MjM2ODU4MCAgICAgICAgfDc1Nzk0NTI5ICAgICAgIHwx ICAgICAgICAgICAgICB8MzIuMDAwICAgICAgICAgfDMuMjcxMDcyICAgICAgIHwyODYuMDAwMCAg IHwNCnxldGhkZXZfcngtMC0wICAgICAgICAgICAgICAgICAgfDI4MjA1ODIyNiAgICAgIHw2MDM2 Njg4NjQgICAgICB8MiAgICAgICAgICAgICAgfDMyLjAwMCAgICAgICAgIHwyNi4wNTEzMjggICAg ICB8OTk0LjAwMDAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKw0KDQpDb25zaWRlcmluZyB0aGUgYWJvdmUgZmlu ZGluZ3Mgd2Ugd291bGQgbGlrZSB0byBjb250aW51ZSB1bnJvbGxpbmcgdGhlIGxvb3BzIGJ5IGhh bmQuDQoNClJlZ2FyZHMsDQpQYXZhbi4NCg0KPi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ RnJvbTogUmF5IEtpbnNlbGxhIDxtZHJAYXNocm9lLmV1Pg0KPlNlbnQ6IEZyaWRheSwgTWFyY2gg MjAsIDIwMjAgMjo0NCBQTQ0KPlRvOiBQYXZhbiBOaWtoaWxlc2ggQmhhZ2F2YXR1bGEgPHBiaGFn YXZhdHVsYUBtYXJ2ZWxsLmNvbT47IEplcmluDQo+SmFjb2IgS29sbGFudWtrYXJhbiA8amVyaW5q QG1hcnZlbGwuY29tPjsgTml0aGluIEt1bWFyIERhYmlscHVyYW0NCj48bmRhYmlscHVyYW1AbWFy dmVsbC5jb20+DQo+Q2M6IGRldkBkcGRrLm9yZzsgdGhvbWFzQG1vbmphbG9uLm5ldDsNCj5kYXZp ZC5tYXJjaGFuZEByZWRoYXQuY29tOyBtYXR0aWFzLnJvbm5ibG9tQGVyaWNzc29uLmNvbTsgS2ly YW4NCj5LdW1hciBLb2traWxhZ2FkZGEgPGtpcmFua3VtYXJrQG1hcnZlbGwuY29tPg0KPlN1Ympl Y3Q6IFJlOiBbRVhUXSBSZTogW2RwZGstZGV2XSBbUEFUQ0ggdjEgMjAvMjZdIG5vZGU6IGlwdjQg bG9va3VwDQo+Zm9yIHg4Ng0KPg0KPg0KPg0KPk9uIDE5LzAzLzIwMjAgMTY6MTMsIFBhdmFuIE5p a2hpbGVzaCBCaGFnYXZhdHVsYSB3cm90ZToNCj4+DQo+Pg0KPj4+IC0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tDQo+Pj4gRnJvbTogUmF5IEtpbnNlbGxhIDxtZHJAYXNocm9lLmV1Pg0KPj4+IFNl bnQ6IFRodXJzZGF5LCBNYXJjaCAxOSwgMjAyMCA5OjIxIFBNDQo+Pj4gVG86IFBhdmFuIE5pa2hp bGVzaCBCaGFnYXZhdHVsYSA8cGJoYWdhdmF0dWxhQG1hcnZlbGwuY29tPjsNCj5KZXJpbg0KPj4+ IEphY29iIEtvbGxhbnVra2FyYW4gPGplcmluakBtYXJ2ZWxsLmNvbT47IE5pdGhpbiBLdW1hcg0K PkRhYmlscHVyYW0NCj4+PiA8bmRhYmlscHVyYW1AbWFydmVsbC5jb20+DQo+Pj4gQ2M6IGRldkBk cGRrLm9yZzsgdGhvbWFzQG1vbmphbG9uLm5ldDsNCj4+PiBkYXZpZC5tYXJjaGFuZEByZWRoYXQu Y29tOyBtYXR0aWFzLnJvbm5ibG9tQGVyaWNzc29uLmNvbTsNCj5LaXJhbg0KPj4+IEt1bWFyIEtv a2tpbGFnYWRkYSA8a2lyYW5rdW1hcmtAbWFydmVsbC5jb20+DQo+Pj4gU3ViamVjdDogUmU6IFtF WFRdIFJlOiBbZHBkay1kZXZdIFtQQVRDSCB2MSAyMC8yNl0gbm9kZTogaXB2NA0KPmxvb2t1cA0K Pj4+IGZvciB4ODYNCj4+Pg0KPj4+DQo+Pj4NCj4+PiBPbiAxOS8wMy8yMDIwIDE0OjIyLCBQYXZh biBOaWtoaWxlc2ggQmhhZ2F2YXR1bGEgd3JvdGU6DQo+Pj4+PiBPbiAxOC8wMy8yMDIwIDIxOjM1 LCBqZXJpbmpAbWFydmVsbC5jb20gd3JvdGU6DQo+Pj4+Pj4gRnJvbTogUGF2YW4gTmlraGlsZXNo IDxwYmhhZ2F2YXR1bGFAbWFydmVsbC5jb20+DQo+Pj4+Pj4NCj4+Pj4+PiBBZGQgSVB2NCBsb29r dXAgcHJvY2VzcyBmdW5jdGlvbiBmb3IgaXA0X2xvb2t1cA0KPj4+Pj4+IHJ0ZV9ub2RlLiBUaGlz IG5vZGUgcGVyZm9ybXMgTFBNIGxvb2t1cCB1c2luZyB4ODZfNjQNCj4+Pj4+PiB2ZWN0b3Igc3Vw cG9ydGVkIFJURV9MUE0gQVBJIG9uIGV2ZXJ5IHBhY2tldCByZWNlaXZlZA0KPj4+Pj4+IGFuZCBm b3J3YXJkcyBpdCB0byBhIG5leHQgbm9kZSB0aGF0IGlzIGlkZW50aWZpZWQgYnkNCj4+Pj4+PiBs b29rdXAgcmVzdWx0Lg0KPj4+Pj4+DQo+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogUGF2YW4gTmlraGls ZXNoIDxwYmhhZ2F2YXR1bGFAbWFydmVsbC5jb20+DQo+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogTml0 aGluIERhYmlscHVyYW0gPG5kYWJpbHB1cmFtQG1hcnZlbGwuY29tPg0KPj4+Pj4+IFNpZ25lZC1v ZmYtYnk6IEtpcmFuIEt1bWFyIEsgPGtpcmFua3VtYXJrQG1hcnZlbGwuY29tPg0KPj4+Pj4+IC0t LQ0KPj4+Pj4+ICBsaWIvbGlicnRlX25vZGUvaXA0X2xvb2t1cC5jIHwgMjQ1DQo+Pj4+PiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPj4+Pj4+ICAxIGZpbGUgY2hhbmdlZCwg MjQ1IGluc2VydGlvbnMoKykNCj4+Pj4+Pg0KPj4+Pj4+IGRpZmYgLS1naXQgYS9saWIvbGlicnRl X25vZGUvaXA0X2xvb2t1cC5jDQo+Pj4+PiBiL2xpYi9saWJydGVfbm9kZS9pcDRfbG9va3VwLmMN Cj4+Pj4+PiBpbmRleCBkN2ZjZDExNTguLmMwMDNlOWM5MSAxMDA2NDQNCj4+Pj4+PiAtLS0gYS9s aWIvbGlicnRlX25vZGUvaXA0X2xvb2t1cC5jDQo+Pj4+Pj4gKysrIGIvbGliL2xpYnJ0ZV9ub2Rl L2lwNF9sb29rdXAuYw0KPj4+Pj4+IEBAIC0yNjQsNiArMjY0LDI1MSBAQCBpcDRfbG9va3VwX25v ZGVfcHJvY2VzcyhzdHJ1Y3QNCj4+PiBydGVfZ3JhcGgNCj4+Pj4+ICpncmFwaCwgc3RydWN0IHJ0 ZV9ub2RlICpub2RlLA0KPj4+Pj4+ICAJcmV0dXJuIG5iX29ianM7DQo+Pj4+Pj4gIH0NCj4+Pj4+ Pg0KPj4+Pj4+ICsjZWxpZiBkZWZpbmVkKFJURV9BUkNIX1g4NikNCj4+Pj4+PiArDQo+Pj4+Pj4g Ky8qIFg4NiBTU0UgKi8NCj4+Pj4+PiArc3RhdGljIHVpbnQxNl90DQo+Pj4+Pj4gK2lwNF9sb29r dXBfbm9kZV9wcm9jZXNzKHN0cnVjdCBydGVfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QNCj4+PiBydGVf bm9kZQ0KPj4+Pj4gKm5vZGUsDQo+Pj4+Pj4gKwkJCXZvaWQgKipvYmpzLCB1aW50MTZfdCBuYl9v YmpzKQ0KPj4+Pj4+ICt7DQo+Pj4+Pj4gKwlzdHJ1Y3QgcnRlX21idWYgKm1idWYwLCAqbWJ1ZjEs ICptYnVmMiwgKm1idWYzLA0KPioqcGt0czsNCj4+Pj4+PiArCXJ0ZV9lZGdlX3QgbmV4dDAsIG5l eHQxLCBuZXh0MiwgbmV4dDMsIG5leHRfaW5kZXg7DQo+Pj4+Pj4gKwlzdHJ1Y3QgcnRlX2lwdjRf aGRyICppcHY0X2hkcjsNCj4+Pj4+PiArCXN0cnVjdCBydGVfZXRoZXJfaGRyICpldGhfaGRyOw0K Pj4+Pj4+ICsJdWludDMyX3QgaXAwLCBpcDEsIGlwMiwgaXAzOw0KPj4+Pj4+ICsJdm9pZCAqKnRv X25leHQsICoqZnJvbTsNCj4+Pj4+PiArCXVpbnQxNl90IGxhc3Rfc3BlYyA9IDA7DQo+Pj4+Pj4g Kwl1aW50MTZfdCBuX2xlZnRfZnJvbTsNCj4+Pj4+PiArCXN0cnVjdCBydGVfbHBtICpscG07DQo+ Pj4+Pj4gKwl1aW50MTZfdCBoZWxkID0gMDsNCj4+Pj4+PiArCXVpbnQzMl90IGRyb3Bfbmg7DQo+ Pj4+Pj4gKwlydGVfeG1tX3QgZHN0Ow0KPj4+Pj4+ICsJX19tMTI4aSBkaXA7IC8qIFNTRSByZWdp c3RlciAqLw0KPj4+Pj4+ICsJaW50IHJjLCBpOw0KPj4+Pj4+ICsNCj4+Pj4+PiArCS8qIFNwZWN1 bGF0aXZlIG5leHQgKi8NCj4+Pj4+PiArCW5leHRfaW5kZXggPQ0KPlJURV9OT0RFX0lQNF9MT09L VVBfTkVYVF9SRVdSSVRFOw0KPj4+Pj4+ICsJLyogRHJvcCBub2RlICovDQo+Pj4+Pj4gKwlkcm9w X25oID0NCj4+Pj4+ICgodWludDMyX3QpUlRFX05PREVfSVA0X0xPT0tVUF9ORVhUX1BLVF9EUk9Q KSA8PCAxNjsNCj4+Pj4+PiArDQo+Pj4+Pj4gKwkvKiBHZXQgc29ja2V0IHNwZWNpZmljIExQTSBm cm9tIGN0eCAqLw0KPj4+Pj4+ICsJbHBtID0gKigoc3RydWN0IHJ0ZV9scG0gKiopbm9kZS0+Y3R4 KTsNCj4+Pj4+PiArDQo+Pj4+Pj4gKwlwa3RzID0gKHN0cnVjdCBydGVfbWJ1ZiAqKilvYmpzOw0K Pj4+Pj4+ICsJZnJvbSA9IG9ianM7DQo+Pj4+Pj4gKwluX2xlZnRfZnJvbSA9IG5iX29ianM7DQo+ Pj4+Pg0KPj4+Pj4gSSBkb3VidCB0aGlzIGluaXRpYWwgcHJlZmV0Y2ggb2YgdGhlIGZpcnN0IDQg cGFja2V0cyBoYXMgYW55IGJlbmVmaXQuDQo+Pj4+DQo+Pj4+IEFjayB3aWxsIHJlbW92ZSBpbiB2 MiBmb3IgeDg2Lg0KPj4+Pg0KPj4+Pj4NCj4+Pj4+PiArCWlmIChuX2xlZnRfZnJvbSA+PSA0KSB7 DQo+Pj4+Pj4gKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgew0KPj4+Pj4+ICsNCj4JcnRlX3By ZWZldGNoMChydGVfcGt0bWJ1Zl9tdG9kKHBrdHNbaV0sDQo+Pj4+Pj4gKwkJCQkJCSAgICAgICBz dHJ1Y3QNCj5ydGVfZXRoZXJfaGRyDQo+Pj4+PiAqKSArDQo+Pj4+Pj4gKwkJCQkgICAgICAxKTsN Cj4+Pj4+PiArCQl9DQo+Pj4+Pj4gKwl9DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJLyogR2V0IHN0cmVh bSBmb3IgdGhlIHNwZWN1bGF0ZWQgbmV4dCBub2RlICovDQo+Pj4+Pj4gKwl0b19uZXh0ID0gcnRl X25vZGVfbmV4dF9zdHJlYW1fZ2V0KGdyYXBoLCBub2RlLA0KPj4+Pj4gbmV4dF9pbmRleCwgbmJf b2Jqcyk7DQo+Pj4+Pg0KPj4+Pj4gU3VnZ2VzdCB5b3UgZG9uJ3QgcmV1c2UgdGhlIGhhbmQtdW5y b2xsaW5nIG9wdGltaXphdGlvbiBmcm9tDQo+RkQuaW8NCj4+Pj4+IFZQUC4NCj4+Pj4+IEkgaGF2 ZSBuZXZlciBmb3VuZCBhbnkgcGVyZm9ybWFuY2UgYmVuZWZpdCBmcm9tIHRoZW0sIGFuZCB0aGV5 DQo+Pj4+PiBtYWtlIHRoZSBjb2RlIHVubmVjZXNzYXJpbHkgdmVyYm9zZS4NCj4+Pj4+DQo+Pj4+ DQo+Pj4+IEhvdyB3b3VsZCBiZSB0YWtlIHRoZSBiZW5lZml0IG9mIHJ0ZV9scG1fbG9va3VweDQg d2l0aG91dA0KPj4+IHVucm9sbGluZyB0aGUgbG9vcD8uDQo+Pj4+IEFsc28sIGluIGZ1dHVyZSBp ZiB3ZSBhcmUgdXNpbmcgcnRlX3JpYiBhbmQgZmliIHdpdGggYSBDUFUgc3VwcG9ydGluZw0KPj4+ IHdpZGVyIFNJTUQgd2UgbWlnaHQNCj4+Pj4gbmVlZCB0byB1bnJvbGwgdGhlbSBmdXJ0aGVyIChB VlgyNTYgQU5EIDUxMiBjdXJyZW50bHkNCj4+PiBydGVfbHBtX2xvb2t1cCB1c2VzIG9ubHkgMTI4 Yml0DQo+Pj4+IHNpbmNlIGl0IGlzIG9ubHkgdXNlcyBTU0UgZXh0ZW5zaW9uKS4NCj4+Pg0KPj4+ IExldCB0aGUgY29tcGlsZXIgZG8gaXQgZm9yIHlvdSwgYnV0IHVzaW5nIGEgY29uc3RhbnQgdmVj dG9yIGxlbmd0aC4NCj4+PiBmb3IgKGludCBpPTA7IGkgPCA0OyArK2kpIHsgLi4uIH0NCj4+Pg0K Pj4NCj4+IE9rLCBJIHRoaW5rIEkgbWlzdW5kZXJzdG9vZCB0aGUgcHJldmlvdXMgY29tbWVudC4N Cj4+IEl0IHdhcyBvbmx5IGZvciB0aGUgcHJlZmV0Y2hlcyBpbiB0aGUgbG9vcCByaWdodD8NCj4N Cj4NCj5ubywgaXQgd2FzIGZvciBhbGwgdGhlIG5lZWRsZXNzIHJlcGV0aXRpb24uDQo+aGFuZC11 bnJvbGxpbmcgbG9vcHMgc2VydmUgbm8gcHVycG9zZSBidXQgdG8gYWRkIHZlcmJvc2l0eS4NCj4N Cj4+DQo+Pj4+DQo+Pj4+Pg0KPj4+Pj4+ICsJd2hpbGUgKG5fbGVmdF9mcm9tID49IDQpIHsNCj4+ Pj4+PiArCQkvKiBQcmVmZXRjaCBuZXh0LW5leHQgbWJ1ZnMgKi8NCj4+Pj4+PiArCQlpZiAobGlr ZWx5KG5fbGVmdF9mcm9tID49IDExKSkgew0KPj4+Pj4+ICsJCQlydGVfcHJlZmV0Y2gwKHBrdHNb OF0pOw0KPj4+Pj4+ICsJCQlydGVfcHJlZmV0Y2gwKHBrdHNbOV0pOw0KPj4+Pj4+ICsJCQlydGVf cHJlZmV0Y2gwKHBrdHNbMTBdKTsNCj4+Pj4+PiArCQkJcnRlX3ByZWZldGNoMChwa3RzWzExXSk7 DQo+Pj4+Pj4gKwkJfQ0KPj4+Pj4+ICsNCj4+Pj4+PiArCQkvKiBQcmVmZXRjaCBuZXh0IG1idWYg ZGF0YSAqLw0KPj4+Pj4+ICsJCWlmIChsaWtlbHkobl9sZWZ0X2Zyb20gPj0gNykpIHsNCj4+Pj4+ PiArDQo+CXJ0ZV9wcmVmZXRjaDAocnRlX3BrdG1idWZfbXRvZChwa3RzWzRdLA0KPj4+Pj4+ICsJ CQkJCQkgICAgICAgc3RydWN0DQo+cnRlX2V0aGVyX2hkcg0KPj4+Pj4gKikgKw0KPj4+Pj4+ICsJ CQkJICAgICAgMSk7DQo+Pj4+Pj4gKw0KPglydGVfcHJlZmV0Y2gwKHJ0ZV9wa3RtYnVmX210b2Qo cGt0c1s1XSwNCj4+Pj4+PiArCQkJCQkJICAgICAgIHN0cnVjdA0KPnJ0ZV9ldGhlcl9oZHINCj4+ Pj4+ICopICsNCj4+Pj4+PiArCQkJCSAgICAgIDEpOw0KPj4+Pj4+ICsNCj4JcnRlX3ByZWZldGNo MChydGVfcGt0bWJ1Zl9tdG9kKHBrdHNbNl0sDQo+Pj4+Pj4gKwkJCQkJCSAgICAgICBzdHJ1Y3QN Cj5ydGVfZXRoZXJfaGRyDQo+Pj4+PiAqKSArDQo+Pj4+Pj4gKwkJCQkgICAgICAxKTsNCj4+Pj4+ PiArDQo+CXJ0ZV9wcmVmZXRjaDAocnRlX3BrdG1idWZfbXRvZChwa3RzWzddLA0KPj4+Pj4+ICsJ CQkJCQkgICAgICAgc3RydWN0DQo+cnRlX2V0aGVyX2hkcg0KPj4+Pj4gKikgKw0KPj4+Pj4+ICsJ CQkJICAgICAgMSk7DQo+Pj4+Pj4gKwkJfQ0KPj4+Pj4+ICsNCj4+Pj4+PiArCQltYnVmMCA9IHBr dHNbMF07DQo+Pj4+Pj4gKwkJbWJ1ZjEgPSBwa3RzWzFdOw0KPj4+Pj4+ICsJCW1idWYyID0gcGt0 c1syXTsNCj4+Pj4+PiArCQltYnVmMyA9IHBrdHNbM107DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCXBr dHMgKz0gNDsNCj4+Pj4+PiArCQluX2xlZnRfZnJvbSAtPSA0Ow0KPj4+Pj4+ICsNCj4+Pj4+PiAr CQkvKiBFeHRyYWN0IERJUCBvZiBtYnVmMCAqLw0KPj4+Pj4+ICsJCWV0aF9oZHIgPSBydGVfcGt0 bWJ1Zl9tdG9kKG1idWYwLCBzdHJ1Y3QNCj4+Pj4+IHJ0ZV9ldGhlcl9oZHIgKik7DQo+Pj4+Pj4g KwkJaXB2NF9oZHIgPSAoc3RydWN0IHJ0ZV9pcHY0X2hkciAqKShldGhfaGRyICsgMSk7DQo+Pj4+ Pj4gKwkJaXAwID0gaXB2NF9oZHItPmRzdF9hZGRyOw0KPj4+Pj4+ICsJCS8qIEV4dHJhY3QgY2tz dW0sIHR0bCBhcyBpcHY0IGhkciBpcyBpbiBjYWNoZSAqLw0KPj4+Pj4+ICsJCXJ0ZV9ub2RlX21i dWZfcHJpdjEobWJ1ZjApLT5ja3N1bSA9DQo+aXB2NF9oZHItDQo+Pj4+Pj4gaGRyX2NoZWNrc3Vt Ow0KPj4+Pj4+ICsJCXJ0ZV9ub2RlX21idWZfcHJpdjEobWJ1ZjApLT50dGwgPSBpcHY0X2hkci0N Cj4+Pj4+PiB0aW1lX3RvX2xpdmU7DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCS8qIEV4dHJhY3QgRElQ IG9mIG1idWYxICovDQo+Pj4+Pj4gKwkJZXRoX2hkciA9IHJ0ZV9wa3RtYnVmX210b2QobWJ1ZjEs IHN0cnVjdA0KPj4+Pj4gcnRlX2V0aGVyX2hkciAqKTsNCj4+Pj4+PiArCQlpcHY0X2hkciA9IChz dHJ1Y3QgcnRlX2lwdjRfaGRyICopKGV0aF9oZHIgKyAxKTsNCj4+Pj4+PiArCQlpcDEgPSBpcHY0 X2hkci0+ZHN0X2FkZHI7DQo+Pj4+Pj4gKwkJLyogRXh0cmFjdCBja3N1bSwgdHRsIGFzIGlwdjQg aGRyIGlzIGluIGNhY2hlICovDQo+Pj4+Pj4gKwkJcnRlX25vZGVfbWJ1Zl9wcml2MShtYnVmMSkt PmNrc3VtID0NCj5pcHY0X2hkci0NCj4+Pj4+PiBoZHJfY2hlY2tzdW07DQo+Pj4+Pj4gKwkJcnRl X25vZGVfbWJ1Zl9wcml2MShtYnVmMSktPnR0bCA9IGlwdjRfaGRyLQ0KPj4+Pj4+IHRpbWVfdG9f bGl2ZTsNCj4+Pj4+PiArDQo+Pj4+Pj4gKwkJLyogRXh0cmFjdCBESVAgb2YgbWJ1ZjIgKi8NCj4+ Pj4+PiArCQlldGhfaGRyID0gcnRlX3BrdG1idWZfbXRvZChtYnVmMiwgc3RydWN0DQo+Pj4+PiBy dGVfZXRoZXJfaGRyICopOw0KPj4+Pj4+ICsJCWlwdjRfaGRyID0gKHN0cnVjdCBydGVfaXB2NF9o ZHIgKikoZXRoX2hkciArIDEpOw0KPj4+Pj4+ICsJCWlwMiA9IGlwdjRfaGRyLT5kc3RfYWRkcjsN Cj4+Pj4+PiArCQkvKiBFeHRyYWN0IGNrc3VtLCB0dGwgYXMgaXB2NCBoZHIgaXMgaW4gY2FjaGUg Ki8NCj4+Pj4+PiArCQlydGVfbm9kZV9tYnVmX3ByaXYxKG1idWYyKS0+Y2tzdW0gPQ0KPmlwdjRf aGRyLQ0KPj4+Pj4+IGhkcl9jaGVja3N1bTsNCj4+Pj4+PiArCQlydGVfbm9kZV9tYnVmX3ByaXYx KG1idWYyKS0+dHRsID0gaXB2NF9oZHItDQo+Pj4+Pj4gdGltZV90b19saXZlOw0KPj4+Pj4+ICsN Cj4+Pj4+PiArCQkvKiBFeHRyYWN0IERJUCBvZiBtYnVmMyAqLw0KPj4+Pj4+ICsJCWV0aF9oZHIg PSBydGVfcGt0bWJ1Zl9tdG9kKG1idWYzLCBzdHJ1Y3QNCj4+Pj4+IHJ0ZV9ldGhlcl9oZHIgKik7 DQo+Pj4+Pj4gKwkJaXB2NF9oZHIgPSAoc3RydWN0IHJ0ZV9pcHY0X2hkciAqKShldGhfaGRyICsg MSk7DQo+Pj4+Pj4gKwkJaXAzID0gaXB2NF9oZHItPmRzdF9hZGRyOw0KPj4+Pj4+ICsNCj4+Pj4+ PiArCQkvKiBQcmVwYXJlIGZvciBsb29rdXAgeDQgKi8NCj4+Pj4+PiArCQlkaXAgPSBfbW1fc2V0 X2VwaTMyKGlwMywgaXAyLCBpcDEsIGlwMCk7DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCS8qIEJ5dGUg c3dhcCA0IElQVjQgYWRkcmVzc2VzLiAqLw0KPj4+Pj4+ICsJCWNvbnN0IF9fbTEyOGkgYnN3YXBf bWFzayA9IF9tbV9zZXRfZXBpOCgNCj4+Pj4+PiArCQkJMTIsIDEzLCAxNCwgMTUsIDgsIDksIDEw LCAxMSwgNCwgNSwgNiwgNywgMCwgMSwNCj4yLCAzKTsNCj4+Pj4+PiArCQlkaXAgPSBfbW1fc2h1 ZmZsZV9lcGk4KGRpcCwgYnN3YXBfbWFzayk7DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCS8qIEV4dHJh Y3QgY2tzdW0sIHR0bCBhcyBpcHY0IGhkciBpcyBpbiBjYWNoZSAqLw0KPj4+Pj4+ICsJCXJ0ZV9u b2RlX21idWZfcHJpdjEobWJ1ZjMpLT5ja3N1bSA9DQo+aXB2NF9oZHItDQo+Pj4+Pj4gaGRyX2No ZWNrc3VtOw0KPj4+Pj4+ICsJCXJ0ZV9ub2RlX21idWZfcHJpdjEobWJ1ZjMpLT50dGwgPSBpcHY0 X2hkci0NCj4+Pj4+PiB0aW1lX3RvX2xpdmU7DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCS8qIFBlcmZv cm0gTFBNIGxvb2t1cCB0byBnZXQgTkggYW5kIG5leHQNCj5ub2RlICovDQo+Pj4+Pj4gKwkJcnRl X2xwbV9sb29rdXB4NChscG0sIGRpcCwgZHN0LnUzMiwgZHJvcF9uaCk7DQo+Pj4+Pj4gKw0KPj4+ Pj4+ICsJCS8qIEV4dHJhY3QgbmV4dCBub2RlIGlkIGFuZCBOSCAqLw0KPj4+Pj4+ICsJCXJ0ZV9u b2RlX21idWZfcHJpdjEobWJ1ZjApLT5uaCA9IGRzdC51MzJbMF0NCj4mDQo+Pj4+PiAweEZGRkY7 DQo+Pj4+Pj4gKwkJbmV4dDAgPSAoZHN0LnUzMlswXSA+PiAxNik7DQo+Pj4+Pj4gKw0KPj4+Pj4+ ICsJCXJ0ZV9ub2RlX21idWZfcHJpdjEobWJ1ZjEpLT5uaCA9IGRzdC51MzJbMV0NCj4mDQo+Pj4+ PiAweEZGRkY7DQo+Pj4+Pj4gKwkJbmV4dDEgPSAoZHN0LnUzMlsxXSA+PiAxNik7DQo+Pj4+Pj4g Kw0KPj4+Pj4+ICsJCXJ0ZV9ub2RlX21idWZfcHJpdjEobWJ1ZjIpLT5uaCA9IGRzdC51MzJbMl0N Cj4mDQo+Pj4+PiAweEZGRkY7DQo+Pj4+Pj4gKwkJbmV4dDIgPSAoZHN0LnUzMlsyXSA+PiAxNik7 DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCXJ0ZV9ub2RlX21idWZfcHJpdjEobWJ1ZjMpLT5uaCA9IGRz dC51MzJbM10NCj4mDQo+Pj4+PiAweEZGRkY7DQo+Pj4+Pj4gKwkJbmV4dDMgPSAoZHN0LnUzMlsz XSA+PiAxNik7DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCS8qIEVucXVldWUgZm91ciB0byBuZXh0IG5v ZGUgKi8NCj4+Pj4+PiArCQlydGVfZWRnZV90IGZpeF9zcGVjID0NCj4+Pj4+PiArCQkJKG5leHRf aW5kZXggXiBuZXh0MCkgfCAobmV4dF9pbmRleCBeDQo+bmV4dDEpIHwNCj4+Pj4+PiArCQkJKG5l eHRfaW5kZXggXiBuZXh0MikgfCAobmV4dF9pbmRleCBeDQo+bmV4dDMpOw0KPj4+Pj4+ICsNCj4+ Pj4+PiArCQlpZiAodW5saWtlbHkoZml4X3NwZWMpKSB7DQo+Pj4+Pj4gKwkJCS8qIENvcHkgdGhp bmdzIHN1Y2Nlc3NmdWxseSBzcGVjdWxhdGVkDQo+dGlsbCBub3cNCj4+Pj4+ICovDQo+Pj4+Pj4g KwkJCXJ0ZV9tZW1jcHkodG9fbmV4dCwgZnJvbSwgbGFzdF9zcGVjICoNCj4+Pj4+IHNpemVvZihm cm9tWzBdKSk7DQo+Pj4+Pj4gKwkJCWZyb20gKz0gbGFzdF9zcGVjOw0KPj4+Pj4+ICsJCQl0b19u ZXh0ICs9IGxhc3Rfc3BlYzsNCj4+Pj4+PiArCQkJaGVsZCArPSBsYXN0X3NwZWM7DQo+Pj4+Pj4g KwkJCWxhc3Rfc3BlYyA9IDA7DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCQkvKiBOZXh0MCAqLw0KPj4+ Pj4+ICsJCQlpZiAobmV4dF9pbmRleCA9PSBuZXh0MCkgew0KPj4+Pj4+ICsJCQkJdG9fbmV4dFsw XSA9IGZyb21bMF07DQo+Pj4+Pj4gKwkJCQl0b19uZXh0Kys7DQo+Pj4+Pj4gKwkJCQloZWxkKys7 DQo+Pj4+Pj4gKwkJCX0gZWxzZSB7DQo+Pj4+Pj4gKwkJCQlydGVfbm9kZV9lbnF1ZXVlX3gxKGdy YXBoLA0KPm5vZGUsDQo+Pj4+PiBuZXh0MCwNCj4+Pj4+PiArCQkJCQkJICAgIGZyb21bMF0pOw0K Pj4+Pj4+ICsJCQl9DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCQkvKiBOZXh0MSAqLw0KPj4+Pj4+ICsJ CQlpZiAobmV4dF9pbmRleCA9PSBuZXh0MSkgew0KPj4+Pj4+ICsJCQkJdG9fbmV4dFswXSA9IGZy b21bMV07DQo+Pj4+Pj4gKwkJCQl0b19uZXh0Kys7DQo+Pj4+Pj4gKwkJCQloZWxkKys7DQo+Pj4+ Pj4gKwkJCX0gZWxzZSB7DQo+Pj4+Pj4gKwkJCQlydGVfbm9kZV9lbnF1ZXVlX3gxKGdyYXBoLA0K Pm5vZGUsDQo+Pj4+PiBuZXh0MSwNCj4+Pj4+PiArCQkJCQkJICAgIGZyb21bMV0pOw0KPj4+Pj4+ ICsJCQl9DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCQkvKiBOZXh0MiAqLw0KPj4+Pj4+ICsJCQlpZiAo bmV4dF9pbmRleCA9PSBuZXh0Mikgew0KPj4+Pj4+ICsJCQkJdG9fbmV4dFswXSA9IGZyb21bMl07 DQo+Pj4+Pj4gKwkJCQl0b19uZXh0Kys7DQo+Pj4+Pj4gKwkJCQloZWxkKys7DQo+Pj4+Pj4gKwkJ CX0gZWxzZSB7DQo+Pj4+Pj4gKwkJCQlydGVfbm9kZV9lbnF1ZXVlX3gxKGdyYXBoLA0KPm5vZGUs DQo+Pj4+PiBuZXh0MiwNCj4+Pj4+PiArCQkJCQkJICAgIGZyb21bMl0pOw0KPj4+Pj4+ICsJCQl9 DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCQkvKiBOZXh0MyAqLw0KPj4+Pj4+ICsJCQlpZiAobmV4dF9p bmRleCA9PSBuZXh0Mykgew0KPj4+Pj4+ICsJCQkJdG9fbmV4dFswXSA9IGZyb21bM107DQo+Pj4+ Pj4gKwkJCQl0b19uZXh0Kys7DQo+Pj4+Pj4gKwkJCQloZWxkKys7DQo+Pj4+Pj4gKwkJCX0gZWxz ZSB7DQo+Pj4+Pj4gKwkJCQlydGVfbm9kZV9lbnF1ZXVlX3gxKGdyYXBoLA0KPm5vZGUsDQo+Pj4+ PiBuZXh0MywNCj4+Pj4+PiArCQkJCQkJICAgIGZyb21bM10pOw0KPj4+Pj4+ICsJCQl9DQo+Pj4+ Pj4gKw0KPj4+Pj4+ICsJCQlmcm9tICs9IDQ7DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCX0gZWxzZSB7 DQo+Pj4+Pj4gKwkJCWxhc3Rfc3BlYyArPSA0Ow0KPj4+Pj4+ICsJCX0NCj4+Pj4+PiArCX0NCj4+ Pj4+PiArDQo+Pj4+Pj4gKwl3aGlsZSAobl9sZWZ0X2Zyb20gPiAwKSB7DQo+Pj4+Pj4gKwkJdWlu dDMyX3QgbmV4dF9ob3A7DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCW1idWYwID0gcGt0c1swXTsNCj4+ Pj4+PiArDQo+Pj4+Pj4gKwkJcGt0cyArPSAxOw0KPj4+Pj4+ICsJCW5fbGVmdF9mcm9tIC09IDE7 DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCS8qIEV4dHJhY3QgRElQIG9mIG1idWYwICovDQo+Pj4+Pj4g KwkJZXRoX2hkciA9IHJ0ZV9wa3RtYnVmX210b2QobWJ1ZjAsIHN0cnVjdA0KPj4+Pj4gcnRlX2V0 aGVyX2hkciAqKTsNCj4+Pj4+PiArCQlpcHY0X2hkciA9IChzdHJ1Y3QgcnRlX2lwdjRfaGRyICop KGV0aF9oZHIgKyAxKTsNCj4+Pj4+PiArCQkvKiBFeHRyYWN0IGNrc3VtLCB0dGwgYXMgaXB2NCBo ZHIgaXMgaW4gY2FjaGUgKi8NCj4+Pj4+PiArCQlydGVfbm9kZV9tYnVmX3ByaXYxKG1idWYwKS0+ Y2tzdW0gPQ0KPmlwdjRfaGRyLQ0KPj4+Pj4+IGhkcl9jaGVja3N1bTsNCj4+Pj4+PiArCQlydGVf bm9kZV9tYnVmX3ByaXYxKG1idWYwKS0+dHRsID0gaXB2NF9oZHItDQo+Pj4+Pj4gdGltZV90b19s aXZlOw0KPj4+Pj4+ICsNCj4+Pj4+PiArCQlyYyA9IHJ0ZV9scG1fbG9va3VwKGxwbSwNCj5ydGVf YmVfdG9fY3B1XzMyKGlwdjRfaGRyLQ0KPj4+Pj4+IGRzdF9hZGRyKSwNCj4+Pj4+PiArCQkJCSAg ICAmbmV4dF9ob3ApOw0KPj4+Pj4+ICsJCW5leHRfaG9wID0gKHJjID09IDApID8gbmV4dF9ob3Ag OiBkcm9wX25oOw0KPj4+Pj4+ICsNCj4+Pj4+PiArCQlydGVfbm9kZV9tYnVmX3ByaXYxKG1idWYw KS0+bmggPSBuZXh0X2hvcA0KPiYNCj4+Pj4+IDB4RkZGRjsNCj4+Pj4+PiArCQluZXh0MCA9IChu ZXh0X2hvcCA+PiAxNik7DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCWlmICh1bmxpa2VseShuZXh0X2lu ZGV4IF4gbmV4dDApKSB7DQo+Pj4+Pj4gKwkJCS8qIENvcHkgdGhpbmdzIHN1Y2Nlc3NmdWxseSBz cGVjdWxhdGVkDQo+dGlsbCBub3cNCj4+Pj4+ICovDQo+Pj4+Pj4gKwkJCXJ0ZV9tZW1jcHkodG9f bmV4dCwgZnJvbSwgbGFzdF9zcGVjICoNCj4+Pj4+IHNpemVvZihmcm9tWzBdKSk7DQo+Pj4+Pj4g KwkJCWZyb20gKz0gbGFzdF9zcGVjOw0KPj4+Pj4+ICsJCQl0b19uZXh0ICs9IGxhc3Rfc3BlYzsN Cj4+Pj4+PiArCQkJaGVsZCArPSBsYXN0X3NwZWM7DQo+Pj4+Pj4gKwkJCWxhc3Rfc3BlYyA9IDA7 DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJCQlydGVfbm9kZV9lbnF1ZXVlX3gxKGdyYXBoLCBub2RlLA0K Pm5leHQwLA0KPj4+Pj4gZnJvbVswXSk7DQo+Pj4+Pj4gKwkJCWZyb20gKz0gMTsNCj4+Pj4+PiAr CQl9IGVsc2Ugew0KPj4+Pj4+ICsJCQlsYXN0X3NwZWMgKz0gMTsNCj4+Pj4+PiArCQl9DQo+Pj4+ Pj4gKwl9DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJLyogISEhIEhvbWUgcnVuICEhISAqLw0KPj4+Pj4+ ICsJaWYgKGxpa2VseShsYXN0X3NwZWMgPT0gbmJfb2JqcykpIHsNCj4+Pj4+PiArCQlydGVfbm9k ZV9uZXh0X3N0cmVhbV9tb3ZlKGdyYXBoLCBub2RlLA0KPj4+Pj4gbmV4dF9pbmRleCk7DQo+Pj4+ Pj4gKwkJcmV0dXJuIG5iX29ianM7DQo+Pj4+Pj4gKwl9DQo+Pj4+Pj4gKw0KPj4+Pj4+ICsJaGVs ZCArPSBsYXN0X3NwZWM7DQo+Pj4+Pj4gKwkvKiBDb3B5IHRoaW5ncyBzdWNjZXNzZnVsbHkgc3Bl Y3VsYXRlZCB0aWxsIG5vdyAqLw0KPj4+Pj4+ICsJcnRlX21lbWNweSh0b19uZXh0LCBmcm9tLCBs YXN0X3NwZWMgKg0KPnNpemVvZihmcm9tWzBdKSk7DQo+Pj4+Pj4gKwlydGVfbm9kZV9uZXh0X3N0 cmVhbV9wdXQoZ3JhcGgsIG5vZGUsIG5leHRfaW5kZXgsDQo+aGVsZCk7DQo+Pj4+Pj4gKw0KPj4+ Pj4+ICsJcmV0dXJuIG5iX29ianM7DQo+Pj4+Pj4gK30NCj4+Pj4+PiArDQo+Pj4+Pj4gICNlbHNl DQo+Pj4+Pj4NCj4+Pj4+PiAgc3RhdGljIHVpbnQxNl90DQo+Pj4+Pj4NCg==