From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (EUR04-HE1-obe.outbound.protection.outlook.com [40.107.7.73]) by mx.groups.io with SMTP id smtpd.web12.8254.1611920744432669340 for ; Fri, 29 Jan 2021 03:45:46 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=UBxaFknU; spf=pass (domain: arm.com, ip: 40.107.7.73, mailfrom: sami.mujawar@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=nxeZE1NhNZI3CBJ8MgmA+weFsLZEs/B0IF4tTwgVGps=; b=UBxaFknUVvzoQMcU9gNPW12eWHjcW2jMNEW2/xQmtuxFN2tSc3Z7ryN3akGnknNf5w7HfTHQfY0/3YIOT1kRaLLfrr94SCdkFnco3cFZEb6iRn74/8Tj8fX494nq0NXxrbRLA7HiOF90Qb+f4tAPx4ArihRIPd6upi/R8L3MG3c= Received: from AM6P195CA0104.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:86::45) by AM0PR08MB3267.eurprd08.prod.outlook.com (2603:10a6:208:5e::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.12; Fri, 29 Jan 2021 11:45:40 +0000 Received: from AM5EUR03FT032.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:86:cafe::f5) by AM6P195CA0104.outlook.office365.com (2603:10a6:209:86::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3805.17 via Frontend Transport; Fri, 29 Jan 2021 11:45:40 +0000 X-MS-Exchange-Authentication-Results: spf=temperror (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; edk2.groups.io; dkim=timeout (key query timeout) header.d=armh.onmicrosoft.com;edk2.groups.io; dmarc=temperror action=none header.from=arm.com; Received-SPF: TempError (protection.outlook.com: error in processing during lookup of arm.com: DNS Timeout) Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM5EUR03FT032.mail.protection.outlook.com (10.152.16.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.11 via Frontend Transport; Fri, 29 Jan 2021 11:45:38 +0000 Received: ("Tessian outbound 28c96a6c9d2e:v71"); Fri, 29 Jan 2021 11:45:38 +0000 X-CR-MTA-TID: 64aa7808 Received: from 1ceb2aae777e.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 556E8B3F-D7CD-4FFB-A9C3-608597091A0D.1; Fri, 29 Jan 2021 11:45:33 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 1ceb2aae777e.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 29 Jan 2021 11:45:33 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lskASZQxvJo0kOhDGb8Uqvtp1tTvoKhuMIsuBgfUlao7XIUW5E/OrXtohztn0nAeinj4BZ7fE+moQxYmqm9dYwaEpgt5WBkhPxD5RUEHcAe4xfIuqOpMqq/J+BurktPIQ8bG6uv5IB2y/VBK7cotLw+jHAXyzbeVgv+s+JCNGlBeIh/NSdnBhMgfYK7m6KENSx91Qo942vjwviDeE5bh8ud2c5gkX/DrW1HUfmwgisgzqYl2uFIOdqHyWZBrhkUdS8TqAIr358xRXA+1JCR4q31PCGzy5s6KXCzj5658bt8SLCeM+9wPJk//T57/y6UEAQBOeBXoDy4SPSaFbxEMTw== 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=nxeZE1NhNZI3CBJ8MgmA+weFsLZEs/B0IF4tTwgVGps=; b=nDMeYIcfTcXnqKjMQl8bv4HAGqDaNyX4WD/th8u7HyI2k/fzUv+VUXCrz7XNvGxvdwA8pZ7ufuFoJfHMRkKrt3YJqIpkUESUv8bLzbEMFuD3t9F2tS8k6k53vfE8PfPeLO3Z1KtKqEKFPKVXHjq8Yh+6s+xVwWatoYqNkRLWA1UBMQOYlStm3LERf9rO35nUHwgzXXLSvnFhtogQcouVquCmOpyF46YpUpsNgpsUV5LD+dkLDh9/7/7jCRuDuN2Iwm1zquUW9DGN72osIUoRVZJSecF6kn94tV7IeUb+MliTEtVksGefdb1xferCSZmb6kYpG+Kq8SGNvpJ8o4V7yA== 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=nxeZE1NhNZI3CBJ8MgmA+weFsLZEs/B0IF4tTwgVGps=; b=UBxaFknUVvzoQMcU9gNPW12eWHjcW2jMNEW2/xQmtuxFN2tSc3Z7ryN3akGnknNf5w7HfTHQfY0/3YIOT1kRaLLfrr94SCdkFnco3cFZEb6iRn74/8Tj8fX494nq0NXxrbRLA7HiOF90Qb+f4tAPx4ArihRIPd6upi/R8L3MG3c= Received: from DB7PR08MB3097.eurprd08.prod.outlook.com (2603:10a6:5:1d::27) by DB8PR08MB5068.eurprd08.prod.outlook.com (2603:10a6:10:e9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3805.17; Fri, 29 Jan 2021 11:45:31 +0000 Received: from DB7PR08MB3097.eurprd08.prod.outlook.com ([fe80::8c43:eec3:76be:9001]) by DB7PR08MB3097.eurprd08.prod.outlook.com ([fe80::8c43:eec3:76be:9001%4]) with mapi id 15.20.3784.021; Fri, 29 Jan 2021 11:45:31 +0000 From: "Sami Mujawar" To: Ilias Apalodimas CC: Sughosh Ganu , "devel@edk2.groups.io" , "ardb+tianocore@kernel.org" , Leif Lindholm , Sahil Malhotra , nd Subject: Re: [PATCH edk2-platforms v3 1/2] Drivers/OpTeeRpmb: Add an OP-TEE backed RPMB driver Thread-Topic: [PATCH edk2-platforms v3 1/2] Drivers/OpTeeRpmb: Add an OP-TEE backed RPMB driver Thread-Index: AQHW05wANg6qV1bhf02zxj7gesITj6o70FMggAKyfwCAADWuMA== Date: Fri, 29 Jan 2021 11:45:31 +0000 Message-ID: References: <20201216110903.17995-1-sughosh.ganu@linaro.org> <20201216110903.17995-2-sughosh.ganu@linaro.org> In-Reply-To: Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 613A87C9835DDB47BBB4E617C6EF2A58.0 x-checkrecipientchecked: true Authentication-Results-Original: linaro.org; dkim=none (message not signed) header.d=none;linaro.org; dmarc=none action=none header.from=arm.com; x-originating-ip: [2a00:23c6:548a:4800:a85a:8907:8ce0:9f6e] x-ms-publictraffictype: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: d4525770-6a60-421b-2480-08d8c44b664a x-ms-traffictypediagnostic: DB8PR08MB5068:|AM0PR08MB3267: X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: 5PF8jNjigQSxmgN3gzy0DA9FCW7dYzM6R67yQB7ZFLqq4oXPIki0cnTYjQDq7F537x85NrGUb1q3GvkTPXqwjS3C9FQ5/9YRc+tRglTKZzhaZ1ZFbu3yVQvTU6lRi470vTN9NAuipjsWvWsxwvXVjSmWGRWjQfWZpft7ghXShZZT5MHMokZfKWjA7ZPL2ilT3o6D6nAmkHqbi8TzBlhrGzLQ4SDV9iGb65+6EpSIPLEoJe/rzSaHthUkgp8iam3ZCPDM5UWwOU6fqvwvVxxJ5pHjMJAi+Y3Cy5RwbLYoBEZ4wEy0PJbCxP6Hz220zTkMx5fYT0bI741ebQmmMRMRZjCmLuZVmrm0H0C3lVWHBXdYMOOpg/6embdga5mToU+9gdk6SCbaeGJfOlfcdy+0rIVUe+/yXusKFyNGu4g3ob1jViwCjdb65iqAOPiCKLHua0SEgjw0Oi/+viHRzRDlQMQLZrcUx5Ax2ITNqXqm2DkKDfLkPCUZ7nltSGbYFD+K+67H583B90J2nJXLwmyUCGvWU0Idw1k1FvGV8eNYkBav3WqQ1e1cmHPItAI7qp8rVjt8R3zIqcKLIP9VZSmYfO1TknNfrhwZADIc/EDs0SA= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR08MB3097.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(6029001)(4636009)(376002)(366004)(396003)(136003)(346002)(39860400002)(9686003)(33656002)(83380400001)(4326008)(8676002)(19627235002)(55016002)(6916009)(8936002)(2906002)(6506007)(966005)(66946007)(66476007)(86362001)(66446008)(30864003)(7696005)(66556008)(64756008)(186003)(316002)(76116006)(478600001)(54906003)(5660300002)(71200400001)(53546011)(52536014)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: =?utf-8?B?MzBUVHJaaXh1Y3YzUG9WTU16eUVOTXg5b2RZaUIrVDRRTWFYTUFJMndXV2NX?= =?utf-8?B?MjIxeklVQVJSSWcveVloZEw3TkxUT0h2Vko1eGdRV1RxR2lPcW5WVnZKdDZl?= =?utf-8?B?SG1BTHYxRmNzallEcHh6NGRvd25remR3TnZHelJ5R2pIdmR0RDRDZUJPWmFB?= =?utf-8?B?QzNkRW56V3kwMDByREJyRFFzYUtReXRnb1UzdHJ6MjAxU0RsR0dBRllBV1pt?= =?utf-8?B?UjlnYlNCMmhzQmd1Q0NFdFhocTl3SjlZU0dvN3loMi9QeE1NMzBWUTloZHNI?= =?utf-8?B?c01sOE16UW1pbXFYWktFZ0RlelZEQnpkeGhxZncwQURqWWtOU2VxdEc1Y3Er?= =?utf-8?B?Y0c1V1hBMjRKaDFYaEF0c0dpRERoSkNKMGhQYk1tcS9sTSszb3d1M3RKU0NK?= =?utf-8?B?Uk9lOFJLK1A4eWZ4M1JaQ1NDVDZDMEZnZTVlZW9SVlVWUkJlcDZBV0Q0TWJq?= =?utf-8?B?OE92ZWNRNFQ2QW1abUpGV3J5ZndFOE1mV3Nvd0RQMm53NGJmcUM2OXZkQVd2?= =?utf-8?B?dnB1V0dLNTZlQVh6K01JTkdXMWtMYlJpYkp6U2tBMytxZ1d3ZnNTWUhBZkJU?= =?utf-8?B?VnVPQjk5WGdWWWoweFh2Q1V0eDZFWERrT0RmMWxsZlVqMFpENHhwbUl2MHoy?= =?utf-8?B?R1VkclNBVE9GWm5kM1AwNHpmT2p2V3lZWjltSVAzZEV5OTJZQWRWd2d3SmhV?= =?utf-8?B?TWQ1Zm1YajJKQjFkRjNSMkFUQk1xa3Y2TWZyMm14OVVEU3Q5MGxsQStxbGhP?= =?utf-8?B?UGtJUHQ2cGQ1dFRaWjhxZG9yNGMxajl4UUF1cWdZcDlqYlB0T21tL3RrbUdz?= =?utf-8?B?TEE4UndVS3ZzQnBtWlMvNU9odmxzL21EQWFkTzJOTUZqdm5qYk1DTE1CQ2J4?= =?utf-8?B?WEZCWnRiMXdFV3ZWMllkS1U5ZTZXSGdrNFlzZ2lKS09JNUFNd3dISFhSZU4x?= =?utf-8?B?RHVnNTJMVW5INFQrazhHdnZQRStSVjRqRCtSS0tyUWF3cytRMTFTcThjR0FR?= =?utf-8?B?WFBWcHZiTWl3cUhqaGRYM2hNQU0rUkxUZzAzOUVmalhwamZ0NDduQ1pEN05w?= =?utf-8?B?blJVUUlHeVZRWnJEblc1MHZja0U5bnkrdk5zdHhidnhRWmx6Yyt1NThnMEFv?= =?utf-8?B?RUVLQ2NLeS9Gc1VzeXc5SHpySFNUOWNVZjJYdXUyd3YxRFg2TWFSd2Z5VldS?= =?utf-8?B?amo2OXVlWlVFNHpJelBIVFA4MnhVYnVTWGhiWnBpUTAxc2Q5d0VqU0xuYlRV?= =?utf-8?B?c0o4ckhKRGhnb3lHRUNNSVd5Vzk4eDJaNFA4aHNmT2NxMm1FVHNUUWQ3V0Zy?= =?utf-8?B?dG9kNzdDdDdLSXpVYW4xTkJCUzBmQ2NGTFBWQkJKcE50WUJFU3NKNEZvQnJH?= =?utf-8?B?eXYvQUhRTWpYVzNMV1gyWnZUSXpkNDBBSi96bGFESlJ1L05EY0Y0U2pCaU9J?= =?utf-8?B?MW1ybFM1OElEaWVwZjVDWTFOQ2RreUlnam8vTzdHZU8xNjltSDFrSkw0MUVJ?= =?utf-8?Q?DmjPnwL4wfxXL1/W2wP2RvqehEu?= x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB5068 Original-Authentication-Results: linaro.org; dkim=none (message not signed) header.d=none;linaro.org; dmarc=none action=none header.from=arm.com; Return-Path: Sami.Mujawar@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT032.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 8b4e2ee7-eb0d-4daa-df73-08d8c44b61e9 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EptDxUId9wALlOr5qPsib/Ddj46AODaOpxRfaFPYxPfkbUM6NsdBn69pArbxlNzO0PxpWeJWxKS1ipf4gKMvO4wpRRS/3s9nrwwBHVeJ13tuh1vOjg6bm42vOUbqdWzh7sEpDCOzPQ9G6KvodXXKRwgkvOMgvMb28kJqH0JM2PCTwG20I+yTBiU4LHHvWo97laFPIzcuR2OxU4VxHUCDdU/yeaktDM+mDj+Ag0CVwRLp8SLzrSERI8GL12VAmherTc+k5k1eCpBHH4v7Jm2AHJAfXWPUiUA7c8BrxVy8pmOlefstZRP7MgVf61RLT4VfW6r3ZKvPozmsug9a1UdcTf34Xxj9ciSQ5I8nb5wfJ23SUFkVcW542nqXY3Q6w39HO2tleCFltiRDR6TW8X7Qkd4nAUn+miqsZalSgTBcUN5NSv8kOrMg4/QUe5gOj7PVW1OQ6DOIk8gK8sol5bc8nke/kGNq78fmWnORi/+2t+0ZjvDw1DAs/ypDgLuRVqQAnsBwXmQ5b7oUEvH0ELJ/y7S8LhL0rYqBwxBNsCRHqfY7HmxB0diNqpRuYgQWsBXlpqGsfrJuHTXIOw2Dt+nrK8ppspWiysa7ZoXDXK/SmBTm2LV2t71x0vBIL4nJn+Iad0W5HHvmnJ06tNm7IgW0EWjq/Cho3O1p0jAGq5aMJRU= 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:(6029001)(4636009)(346002)(39860400002)(396003)(376002)(136003)(46966006)(966005)(30864003)(52536014)(8676002)(7696005)(186003)(82310400003)(81166007)(336012)(63370400001)(478600001)(8936002)(54906003)(2906002)(63350400001)(70206006)(83380400001)(26005)(5660300002)(356005)(9686003)(53546011)(33656002)(6506007)(86362001)(316002)(55016002)(6862004)(70586007)(19627235002)(47076005)(4326008)(82740400003);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jan 2021 11:45:38.9771 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d4525770-6a60-421b-2480-08d8c44b664a 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: AM5EUR03FT032.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB3267 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgSWxpYXMsDQoNClBsZWFzZSBmaW5kIG15IHJlc3BvbnNlIGlubGluZSBtYXJrZWQgW1NBTUld Lg0KDQpSZWdhcmRzLA0KDQpTYW1pIE11amF3YXINCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0NCkZyb206IElsaWFzIEFwYWxvZGltYXMgPGlsaWFzLmFwYWxvZGltYXNAbGluYXJvLm9yZz4g DQpTZW50OiAyOSBKYW51YXJ5IDIwMjEgMDg6MDIgQU0NClRvOiBTYW1pIE11amF3YXIgPFNhbWku TXVqYXdhckBhcm0uY29tPg0KQ2M6IFN1Z2hvc2ggR2FudSA8c3VnaG9zaC5nYW51QGxpbmFyby5v cmc+OyBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsgQXJkIEJpZXNoZXV2ZWwgPEFyZC5CaWVzaGV1dmVs QGFybS5jb20+OyBMZWlmIExpbmRob2xtIDxsZWlmQG51dmlhaW5jLmNvbT47IFNhaGlsIE1hbGhv dHJhIDxzYWhpbC5tYWxob3RyYUBsaW5hcm8ub3JnPg0KU3ViamVjdDogUmU6IFtQQVRDSCBlZGsy LXBsYXRmb3JtcyB2MyAxLzJdIERyaXZlcnMvT3BUZWVScG1iOiBBZGQgYW4gT1AtVEVFIGJhY2tl ZCBSUE1CIGRyaXZlcg0KDQpIaSBTYW1pLA0KDQpUaGFua3MgZm9yIHRha2luZyB0aGUgdGltZQ0K DQpPbiBXZWQsIDI3IEphbiAyMDIxIGF0IDE5OjEwLCBTYW1pIE11amF3YXIgPFNhbWkuTXVqYXdh ckBhcm0uY29tPiB3cm90ZToNCj4NCj4gSGkgU3VnaG9zaCwNCj4NCj4gVGhlcmUgYXJlIHNvbWUg ZWRrMiBjb2Rpbmcgc3RhbmRhcmQgaW5jb21wYXRpYmlsaXRpZXMgKGxpa2Ugc3BhY2UgYmV0d2Vl biBmdW5jdGlvbiBuYW1lIGFuZCBvcGVuaW5nIGJyYWNrZXQsIGZ1bmN0aW9uIHBhcmFtZXRlciBh bGlnbm1lbnQgZXRjLikgYW5kIGRvY3VtZW50YXRpb24gZm9yIHNvbWUgZnVuY3Rpb25zIGlzIG1p c3NpbmcgaW4gdGhlIHBhdGNoLiBDYW4geW91IGZpeCB0aGVzZSwgcGxlYXNlPw0KPiBQbGVhc2Ug YWxzbyBydW4gdGhlIEVDQyB0b29sIGluIERyaXZlcnMvT3BUZWVScG1iIGZvbGRlciBhbmQgZml4 IGFueSByZXBvcnRlZCBpc3N1ZXMuIFRoZSBFQ0MgZXJyb3JzIDEwMDAyLCAxMDAwNiBhbmQgMTAw MjIgY2FuIGJlIGlnbm9yZWQgZm9yIG5vdy4NCj4NCj4gT3RoZXIgdGhhbiB0aGF0LCBwbGVhc2Ug ZmluZCBteSByZXNwb25zZSBpbmxpbmUgbWFya2VkIFtTQU1JXS4NCj4NCj4gUmVnYXJkcywNCj4N Cj4gU2FtaSBNdWphd2FyDQo+DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206 IFN1Z2hvc2ggR2FudSA8c3VnaG9zaC5nYW51QGxpbmFyby5vcmc+DQo+IFNlbnQ6IDE2IERlY2Vt YmVyIDIwMjAgMTE6MDkgQU0NCj4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+IENjOiBTYW1p IE11amF3YXIgPFNhbWkuTXVqYXdhckBhcm0uY29tPjsgQXJkIEJpZXNoZXV2ZWwgPEFyZC5CaWVz aGV1dmVsQGFybS5jb20+OyBMZWlmIExpbmRob2xtIDxsZWlmQG51dmlhaW5jLmNvbT47IFNhaGls IE1hbGhvdHJhIDxzYWhpbC5tYWxob3RyYUBsaW5hcm8ub3JnPjsgSWxpYXMgQXBhbG9kaW1hcyA8 aWxpYXMuYXBhbG9kaW1hc0BsaW5hcm8ub3JnPg0KPiBTdWJqZWN0OiBbUEFUQ0ggZWRrMi1wbGF0 Zm9ybXMgdjMgMS8yXSBEcml2ZXJzL09wVGVlUnBtYjogQWRkIGFuIE9QLVRFRSBiYWNrZWQgUlBN QiBkcml2ZXINCj4NCj4gRnJvbTogSWxpYXMgQXBhbG9kaW1hcyA8aWxpYXMuYXBhbG9kaW1hc0Bs aW5hcm8ub3JnPg0KPg0KPiBBIGZvbGxvd2luZyBwYXRjaCBpcyBhZGRpbmcgc3VwcG9ydCBmb3Ig YnVpbGRpbmcgU3RNTSBpbiBvcmRlciB0byBydW4gaXQNCj4gZnJvbSBPUC1URUUuDQo+IE9QLVRF RSBpbiBjb21iaW5hdGlvbiB3aXRoIGEgTlMtd29ybGQgc3VwcGxpY2FudCBjYW4gdXNlIHRoZSBS UE1CDQo+IHBhcnRpdGlvbiBvZiBhbiBlTU1DIHRvIHN0b3JlIEVGSSB2YXJpYWJsZXMuIFRoZSBz dXBwbGljYW50DQo+IGZ1bmN0aW9uYWxpdHkgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBpbiBVLUJv b3Qgb25seSBidXQgY2FuIGJlIHBvcnRlZA0KPiBpbnRvIEVESzIuIEFzc3VtaW5nIHNpbWlsYXIg ZnVuY3Rpb25hbGl0eSBpcyBhZGRlZCBpbiBFREsyLCB0aGlzIHdpbGwNCj4gYWxsb3cgYW55IGhh cmR3YXJlIHdpdGggYW4gUlBNQiBwYXJ0aXRpb24gdG8gc3RvcmUgRUZJIHZhcmlhYmxlcw0KPiBz ZWN1cmVseS4NCj4NCj4gU28gbGV0J3MgYWRkIGEgZHJpdmVyIHRoYXQgZW5hYmxlcyBhY2Nlc3Mg b2YgdGhlIFJQTUIgcGFydGl0aW9uIHRocm91Z2gNCj4gT1AtVEVFLiBTaW5jZSB0aGUgdXBwZXIg bGF5ZXJzIGV4cGVjdCBhIGJ5dGUgYWRkcmVzc2FibGUgaW50ZXJmYWNlLA0KPiB0aGUgZHJpdmVy IGFsbG9jYXRlcyBtZW1vcnkgYW5kIHBhdGNoZXMgdGhlIFBDRHMsIHdoaWxlIHN5bmNpbmcgdGhl DQo+IG1lbW9yeS9oYXJkd2FyZSBvbiByZWFkL3dyaXRlIGNhbGxiYWNrcy4NCj4NCj4gU2lnbmVk LW9mZi1ieTogSWxpYXMgQXBhbG9kaW1hcyA8aWxpYXMuYXBhbG9kaW1hc0BsaW5hcm8ub3JnPg0K DQpbLi4uXQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL0RyaXZlcnMvT3BUZWVScG1iL09wVGVl UnBtYkZ2Yi5oDQo+IEBAIC0wLDAgKzEsMzUgQEANCj4gKy8qKiBAZmlsZQ0KPiArDQo+ICsgIENv cHlyaWdodCAoYykgMjAyMCwgTGluYXJvIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsNCj4g KyoqLw0KPiArDQo+ICsjaWZuZGVmIF9fT1BURUVfUlBNQl9GVl8NCj4gKyNkZWZpbmUgX19PUFRF RV9SUE1CX0ZWXw0KPiBbU0FNSV0gVGhpcyBkb2VzIG5vdCBmb2xsb3cgdGhlIGVkazIgY29kaW5n IHN0YW5kYXJkLiAgU2VlIGh0dHBzOi8vZWRrMi1kb2NzLmdpdGJvb2suaW8vZWRrLWlpLWMtY29k aW5nLXN0YW5kYXJkcy1zcGVjaWZpY2F0aW9uLzVfc291cmNlX2ZpbGVzLzUzX2luY2x1ZGVfZmls ZXMjNS0zLTUtYWxsLWluY2x1ZGUtZmlsZS1jb250ZW50cy1tdXN0LWJlLXByb3RlY3RlZC1ieS1h LWluY2x1ZGUtZ3VhcmQNCj4gWy9TQU1JXQ0KDQpPaw0KDQo+ICsNCj4gKy8qIFNWQyBBcmdzICov DQo+ICsjZGVmaW5lIFNQX1NWQ19SUE1CX1JFQUQgICAgICAgICAgICAgICAgMHhDNDAwMDA2Ng0K PiArI2RlZmluZSBTUF9TVkNfUlBNQl9XUklURSAgICAgICAgICAgICAgIDB4QzQwMDAwNjcNCj4g W1NBTUldIElzIHRoZXJlIGEgc3BlY2lmaWNhdGlvbiByZWZlcmVuY2UgZm9yIHRoaXM/IElmIHNv LCBwbGVhc2UgYWRkIHRvIHRoZSBmaWxlIGhlYWRlci4NCj4gU2VlIGh0dHBzOi8vZWRrMi1kb2Nz LmdpdGJvb2suaW8vZWRrLWlpLWMtY29kaW5nLXN0YW5kYXJkcy1zcGVjaWZpY2F0aW9uLzVfc291 cmNlX2ZpbGVzLzUyX3NwYWNpbmcjNS0yLTMtMS1ldmVyeS1uZXctZmlsZS1zaGFsbC1iZWdpbi13 aXRoLWEtZmlsZS1oZWFkZXItY29tbWVudC1ibG9jay4NCj4gWy9TQU1JXQ0KDQpObyB0aGVyZSBp c24ndC4gU2luY2UgdGhvc2UgYXJlIEZGQSBjYWxscyBpdCdzIHNvbWV0aGluZyB3ZSBkZWZpbmUN CmludGVybmFsbHkgaW4gT1AtVEVFLg0KV2UgaGFkIGEgZGlzY3Vzc2lvbiB3aXRoIEFybSBhYm91 dCBzdGFuZGFyZGl6aW5nIHRoaXMgaW4gdGhlIGZ1dHVyZSwNCmJ1dCBpdCBjYW4gd2FpdCB1bnRp bCB3ZSBnZXQgZnVsbCBGRkEgYW5kIFNQIHN1cHBvcnQgaW4gT1AtVEVFLg0KVGhlIHJwbWIgJ2Ry aXZlcicgaXMgZXNzZW50aWFsbHkgYSBidW5jaCBvZiBPUC1URUUgU1ZDIGNhbGxzIHRoYXQgZW5k DQp1cCB1c2luZyB0aGUgT1AtVEVFIEFQSXMgZm9yIGFjY2Vzc2luZyBhbiBSUE1CIHBhcnRpdGlv bi4NCkkgY291bGQgYWRkIGEgcmVmZXJlbmNlIHRvIHRoZSBPUC1URUUgY29kZSBpZiB0aGF0IG1h a2VzIHNlbnNlPw0KW1NBTUldIEkgdGhpbmsgdGhhdCBtYXkgYmUgYSBnb29kIHJlZmVyZW5jZSBw b2ludCBmb3Igbm93Lg0KWy9TQU1JXQ0KDQoNCj4gKw0KPiArI2RlZmluZSBGSUxFTkFNRSAiRUZJ X1ZBUlMiDQo+ICsNCj4gKyNkZWZpbmUgRkxBU0hfU0lHTkFUVVJFICAgICAgICAgICAgU0lHTkFU VVJFXzMyKCdyJywgJ3AnLCAnbScsICdiJykNCj4gKyNkZWZpbmUgSU5TVEFOQ0VfRlJPTV9GVkJf VEhJUyhhKSAgQ1IoYSwgTUVNX0lOU1RBTkNFLCBGdmJQcm90b2NvbCwgXA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9TSUdOQVRVUkUpDQo+ICsNCj4gK3R5 cGVkZWYgc3RydWN0IF9NRU1fSU5TVEFOQ0UgICAgICAgICBNRU1fSU5TVEFOQ0U7DQo+ICt0eXBl ZGVmIEVGSV9TVEFUVVMgKCpNRU1fSU5JVElBTElaRSkgKE1FTV9JTlNUQU5DRSogSW5zdGFuY2Up Ow0KPiArc3RydWN0IF9NRU1fSU5TVEFOQ0UNCj4gK3sNCj4gKyAgICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU7DQo+ICsgICAgTUVNX0lOSVRJQUxJWkUgICAg ICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6ZTsNCj4gKyAgICBCT09MRUFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJbml0aWFsaXplZDsNCj4gKyAgICBFRklfRklSTVdBUkVfVk9MVU1F X0JMT0NLX1BST1RPQ09MICBGdmJQcm90b2NvbDsNCj4gKyAgICBFRklfSEFORExFICAgICAgICAg ICAgICAgICAgICAgICAgICBIYW5kbGU7DQo+ICsgICAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAg ICAgICAgICAgICAgTWVtQmFzZUFkZHJlc3M7DQo+ICsgICAgVUlOVDE2ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQmxvY2tTaXplOw0KPiArICAgIFVJTlQxNiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5CbG9ja3M7DQo+ICt9Ow0KPiBbU0FNSV0gUGxlYXNlIGFkZCBkb2N1bWVu dGF0aW9uIGZvciBzdHJ1Y3R1cmUuIFNlZSBodHRwczovL2VkazItZG9jcy5naXRib29rLmlvL2Vk ay1paS1jLWNvZGluZy1zdGFuZGFyZHMtc3BlY2lmaWNhdGlvbi81X3NvdXJjZV9maWxlcy81Nl9k ZWNsYXJhdGlvbnNfYW5kX3R5cGVzIzUtNi0zLTItc3RydWN0dXJlLWRlY2xhcmF0aW9uLXdpdGgt Zm9yd2FyZC1yZWZlcmVuY2Utb3Itc2VsZi1yZWZlcmVuY2UNCj4gWy9TQU1JXQ0KDQpPaw0KDQo+ ICsNCj4gKyNlbmRpZg0KPiBkaWZmIC0tZ2l0IGEvRHJpdmVycy9PcFRlZVJwbWIvRml4dXBQY2Qu YyBiL0RyaXZlcnMvT3BUZWVScG1iL0ZpeHVwUGNkLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cg0KWy4uLl0NCg0KPiArDQo+ICsgIEluc3RhbmNlID0gSU5TVEFOQ0VfRlJPTV9GVkJfVEhJUyhG dmJQcm90b2NvbCk7DQo+ICsgIC8vIFBhdGNoIFBDRHMgd2l0aCB0aGUgdGhlIGNvcnJlY3QgdmFs dWVzDQo+ICsgIFBhdGNoUGNkU2V0MzIgKFBjZEZsYXNoTnZTdG9yYWdlVmFyaWFibGVCYXNlLCBJ bnN0YW5jZS0+TWVtQmFzZUFkZHJlc3MpOw0KPiArICBQYXRjaFBjZFNldDMyIChQY2RGbGFzaE52 U3RvcmFnZUZ0d1dvcmtpbmdCYXNlLCBJbnN0YW5jZS0+TWVtQmFzZUFkZHJlc3MgKw0KPiArICAg IFBjZEdldDMyIChQY2RGbGFzaE52U3RvcmFnZVZhcmlhYmxlU2l6ZSkpOw0KPiArICBQYXRjaFBj ZFNldDMyIChQY2RGbGFzaE52U3RvcmFnZUZ0d1NwYXJlQmFzZSwgSW5zdGFuY2UtPk1lbUJhc2VB ZGRyZXNzICsNCj4gKyAgICBQY2RHZXQzMiAoUGNkRmxhc2hOdlN0b3JhZ2VWYXJpYWJsZVNpemUp ICsNCj4gKyAgICBQY2RHZXQzMiAoUGNkRmxhc2hOdlN0b3JhZ2VGdHdXb3JraW5nU2l6ZSkpO05v ckZsYXNoRHhlDQo+IFtTQU1JXSBTaG91bGQgdGhlIDY0LWJpdCB2ZXJzaW9ucyBvZiB0aGUgUENE cyBiZSB1c2VkIGhlcmUuDQo+IEEgcmVjZW50IGNoYW5nZSBhZGRlZCBzaW1pbGFyIHN1cHBvcnQg dG8gdGhlIEFybVBsYXRmb3JtUGtnXERyaXZlcnNcTm9yRmxhc2hEeGUuDQo+IFsvU0FNSV0NCg0K TG9va2luZyBhdCB0aGUgTm9yRmxhc2hEeGUgY29tbWl0LCB0aGlzIGlzIG5lZWRlZCBmb3IgTk9S IGZsYXNoDQpkZXZpY2VzIGNvbm5lY3RlZCBpbiBhIDY0LWJpdCBhZGRyZXNzIHNwYWNlLg0KSW4g b3VyIGNhc2UgT1AtVEVFIG1hcHMgdGhlIG1lbW9yeSBTdE1NIGNhbiB1c2UsIHNvIHRoYXQgZGVw ZW5kcyBvbg0KdGhlIHBsYXRmb3JtIGFuZCBob3cgT1AtVEVFIGlzIGxheWVkIG91dCBpbiBtZW1v cnkuDQpJJ2xsIGhhdmUgYSBsb29rIG9uIHRoZSBjdXJyZW50IE9QLVRFRSBzdXBwb3J0ZWQgcGxh dGZvcm1zIGFuZCBpZg0KdGhhdCdzIGEgY2FzZSBJJ2xsIGNoYW5nZSBpdC4NCg0KDQo+ICsNCj4g KyAgREVCVUcgKChERUJVR19JTkZPLCAiJWE6IEZpeHVwIFBjZEZsYXNoTnZTdG9yYWdlVmFyaWFi bGVCYXNlOiAweCVseFxuIiwNCg0KWy4uLl0NCg0KPiArDQo+ICsjaW5jbHVkZSAiT3BUZWVScG1i RnZiLmgiDQo+ICsNCj4gK3N0YXRpYyBjb25zdCBVSU5UMTYgbWVtX21ncl9pZCA9IDNVOw0KPiAr c3RhdGljIGNvbnN0IFVJTlQxNiBzdG9yYWdlX2lkID0gNFU7DQo+IFtTQU1JXSBQbGVhc2UgY2hh bmdlIHRvIFNUQVRJQyBDT05TVCBhbmQgYWxzbyB1cGRhdGUgdGhlIHZhcmlhYmxlIG5hbWVzIGFj Y29yZGluZyB0byB0aGUgZWRrMiBjb2Rpbmcgc3RhbmRhcmQuIFNlZSBodHRwczovL2VkazItZG9j cy5naXRib29rLmlvL2Vkay1paS1jLWNvZGluZy1zdGFuZGFyZHMtc3BlY2lmaWNhdGlvbi80X25h bWluZ19jb252ZW50aW9ucy80M19pZGVudGlmaWVycyM0LTMtMy0yLWFueS12YXJpYWJsZS13aXRo LWZpbGUtc2NvcGUtb3ItYmV0dGVyLXNoYWxsLWJlLXByZWZpeGVkLWJ5LWFuLW0tb3ItZw0KPiBb L1NBTUldDQoNCk9rDQoNCj4gKw0KPiArU1RBVElDIE1FTV9JTlNUQU5DRSBtSW5zdGFuY2U7DQo+ ICsNCj4gKy8qKg0KPiArICBTZW5kcyBhbiBTVkMgY2FsbCB0byBPUC1URUUgZm9yIHJlYWRpbmcv d3JpdGluZyBhbiBSUE1CIHBhcnRpdGlvbg0KPiArDQo+ICsgIEBwYXJhbSBTdmNBY3QgICAgIFNW QyBJRCBmb3IgcmVhZC93cml0ZQ0KPiArICBAcGFyYW0gQWRkciAgICAgICBCYXNlIGFkZHJlc3Mg b2YgdGhlIGJ1ZmZlci4gV2hlbiByZWFkaW5nIGNvbnRlbnRzIHdpbGwgYmUNCj4gKyAgICAgICAg ICAgICAgICAgICAgY29waWVkIHRvIHRoYXQgYnVmZmVyIGFmdGVyIHJlYWRpbmcgdGhlbSBmcm9t IHRoZSBkZXZpY2UuDQo+ICsgICAgICAgICAgICAgICAgICAgIFdoZW4gd3JpdGluZywgdGhlIGJ1 ZmZlciBob2xkcyB0aGUgY29udGVudHMgd2Ugd2FudCB0bw0KPiArICAgICAgICAgICAgICAgICAg ICB3cml0ZSBjd3RvaW4gdGhlIGRldmljZQ0KPiArICBAcGFyYW0gTnVtQnl0ZXMgICBOdW1iZXIg b2YgYnl0ZXMgdG8gcmVhZC93cml0ZQ0KPiArICBAcGFyYW0gT2Zmc2V0ICAgICBPZmZzZXQgaW50 byB0aGUgUlBNQiBmaWxlDQo+ICsNCj4gKyAgQHJldHZhbCAgICAgICAgICAgT1AtVEVFIHJldHVy biBjb2RlDQo+ICsqKi8NCj4gKw0KPiBbU0FNSV0gUmVtb3ZlIGJsYW5rIGxpbmUuIFNhbWUgYXQg b3RoZXIgcGxhY2VzIGFzIHdlbGwuDQo+IFsvU0FNSV0NCg0KT2sNCg0KPiArU1RBVElDDQo+ICtF RklfU1RBVFVTDQo+ICtSZWFkV3JpdGVScG1iICgNCj4gKyAgVUlOVE4gIFN2Y0FjdCwNCj4gKyAg VUlOVE4gIEFkZHIsDQo+ICsgIFVJTlROICBOdW1CeXRlcywNCj4gKyAgVUlOVE4gIE9mZnNldA0K PiArICApDQo+ICt7DQo+ICsgIEFSTV9TVkNfQVJHUyAgU3ZjQXJnczsNCj4gKyAgRUZJX1NUQVRV UyAgICBTdGF0dXM7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlN2Y0FyZ3MsIHNpemVvZiAoU3ZjQXJn cykpOw0KPiArDQo+ICsgIFN2Y0FyZ3MuQXJnMCA9IEFSTV9TVkNfSURfRkZBX01TR19TRU5EX0RJ UkVDVF9SRVFfQUFSQ0g2NDsNCj4gKyAgU3ZjQXJncy5BcmcxID0gc3RvcmFnZV9pZDsNCj4gKyAg U3ZjQXJncy5BcmcyID0gMDsNCj4gKyAgU3ZjQXJncy5BcmczID0gU3ZjQWN0Ow0KPiArICBTdmNB cmdzLkFyZzQgPSBBZGRyOw0KPiArICBTdmNBcmdzLkFyZzUgPSBOdW1CeXRlczsNCj4gKyAgU3Zj QXJncy5Bcmc2ID0gT2Zmc2V0Ow0KPiArDQo+ICsgIEFybUNhbGxTdmMgKCZTdmNBcmdzKTsNCj4g KyAgaWYgKFN2Y0FyZ3MuQXJnMykgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTog U3ZjIENhbGwgMHglMDh4IEFkZHI6IDB4JTA4eCBsZW46IDB4JXggT2Zmc2V0OiAweCV4IGZhaWxl ZCB3aXRoIDB4JXhcbiIsDQo+ICsgICAgIF9fZnVuY19fLCBTdmNBY3QsIEFkZHIsIE51bUJ5dGVz LCBPZmZzZXQsIFN2Y0FyZ3MuQXJnMykpOw0KPiArICB9DQo+ICsNCj4gKyAgc3dpdGNoIChTdmNB cmdzLkFyZzMpIHsNCj4gKyAgY2FzZSBBUk1fU1ZDX1NQTV9SRVRfU1VDQ0VTUzoNCj4gKyAgICBT dGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gKyAgICBicmVhazsNCj4gKw0KPiArICBjYXNlIEFSTV9T VkNfU1BNX1JFVF9OT1RfU1VQUE9SVEVEOg0KPiArICAgIFN0YXR1cyA9IEVGSV9VTlNVUFBPUlRF RDsNCj4gKyAgICBicmVhazsNCj4gKw0KPiArICBjYXNlIEFSTV9TVkNfU1BNX1JFVF9JTlZBTElE X1BBUkFNUzoNCj4gKyAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAg YnJlYWs7DQo+ICsNCj4gKyAgY2FzZSBBUk1fU1ZDX1NQTV9SRVRfREVOSUVEOg0KPiArICAgIFN0 YXR1cyA9IEVGSV9BQ0NFU1NfREVOSUVEOw0KPiArICAgIGJyZWFrOw0KPiArDQo+ICsgIGNhc2Ug QVJNX1NWQ19TUE1fUkVUX05PX01FTU9SWToNCj4gKyAgICBTdGF0dXMgPSBFRklfQkFEX0JVRkZF Ul9TSVpFOw0KPiArICAgIGJyZWFrOw0KPiArDQo+ICsgIGRlZmF1bHQ6DQo+ICsgICAgU3RhdHVz ID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+ICsgIH0NCj4gW1NBTUldIFNob3VsZCB0aGUgZXJyb3Ig aGFuZGxpbmcgaGVyZSBiZSB1cGRhdGVkIHNpbWlsYXIgdG8gdGhlIEZGLUEgU3RhbmRhbG9uZU1t UGtnIHBhdGNoZXM/DQo+IFsvU0FNSV0NCg0KSSBhY3R1YWxseSBwaWNrZWQgdXAgdGhlIGVycm9y IGhhbmRsaW5nIGZyb20gdGhlIHByZXZpb3VzIG5vbi1GRkEgY29kZS4NCkknbGwgY2hlY2sgd2hh dCdzIG9uIFN1Z2hvc2ggbGF0ZXN0IHBhdGNoZXMgYW5kIGZpeCBpdCBpZiB0aGVyZSBhcmUNCmFu eSBkaWZmZXJlbmNlcy4NCkxvb2tpbmcgYXQgaXQgYWdhaW4gRUZJX0JBRF9CVUZGRVJfU0laRSBj YW4gY2hhbmdlIHRvIGluZGljYXRlIG91dCBvZg0KbWVtb3J5IHByb3Blcmx5IGFueXdheS4NCg0K PiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQoNClsuLi5dDQoNCj4gK1NUQVRJQw0KPiAr RUZJX1NUQVRVUw0KPiArT3BUZWVScG1iRnZiUmVhZCAoDQo+ICsgIElOIENPTlNUICBFRklfRklS TVdBUkVfVk9MVU1FX0JMT0NLX1BST1RPQ09MICpUaGlzLA0KPiArICBJTiAgICAgICAgRUZJX0xC QSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGJhLA0KPiArICBJTiAgICAgICAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0LA0KPiArICBJTiBPVVQgICAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKk51bUJ5dGVzLA0KPiArICBJTiBPVVQg ICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlcg0KPiArICApDQo+ ICt7DQo+ICsgIEVGSV9TVEFUVVMgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gKyAgTUVNX0lO U1RBTkNFICpJbnN0YW5jZTsNCj4gKyAgVk9JRCAgICAgICAgICpCYXNlOw0KPiArDQo+ICsgIElu c3RhbmNlID0gSU5TVEFOQ0VfRlJPTV9GVkJfVEhJUyhUaGlzKTsNCj4gKyAgaWYgKEluc3RhbmNl LT5Jbml0aWFsaXplZCA9PSBGQUxTRSkgew0KPiBbU0FNSV0gaWYgKCFJbnN0YW5jZS0+SW5pdGlh bGl6ZWQpICA/DQo+IFNlZSBodHRwczovL2VkazItZG9jcy5naXRib29rLmlvL2Vkay1paS1jLWNv ZGluZy1zdGFuZGFyZHMtc3BlY2lmaWNhdGlvbi81X3NvdXJjZV9maWxlcy81N19jX3Byb2dyYW1t aW5nIzUtNy0yLTEtYm9vbGVhbi12YWx1ZXMtdmFyaWFibGUtdHlwZS1ib29sZWFuLWRvLW5vdC1y ZXF1aXJlLWV4cGxpY2l0LWNvbXBhcmlzb25zLXRvLXRydWUtb3ItZmFsc2UNCj4gWy9TQU1JXQ0K DQpPaw0KDQo+ICsgICAgSW5zdGFuY2UtPkluaXRpYWxpemUgKEluc3RhbmNlKTsNCj4gKyAgfQ0K PiArDQo+ICsgIEJhc2UgPSAoVk9JRCAqKUluc3RhbmNlLT5NZW1CYXNlQWRkcmVzcyArIExiYSAq IEluc3RhbmNlLT5CbG9ja1NpemUgKyBPZmZzZXQ7DQoNClsuLi5dDQoNCj4gKyAgTUVNX0lOU1RB TkNFICpJbnN0YW5jZTsNCj4gKyAgRUZJX1NUQVRVUyAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0K PiArICBWT0lEICAgICAgICAgKkJhc2U7DQo+ICsNCj4gKyAgSW5zdGFuY2UgPSBJTlNUQU5DRV9G Uk9NX0ZWQl9USElTKFRoaXMpOw0KPiArICBpZiAoSW5zdGFuY2UtPkluaXRpYWxpemVkID09IEZB TFNFKSB7DQo+IFtTQU1JXSBpZiAoIUluc3RhbmNlLT5Jbml0aWFsaXplZCkgID8NCj4gU2VlIGh0 dHBzOi8vZWRrMi1kb2NzLmdpdGJvb2suaW8vZWRrLWlpLWMtY29kaW5nLXN0YW5kYXJkcy1zcGVj aWZpY2F0aW9uLzVfc291cmNlX2ZpbGVzLzU3X2NfcHJvZ3JhbW1pbmcjNS03LTItMS1ib29sZWFu LXZhbHVlcy12YXJpYWJsZS10eXBlLWJvb2xlYW4tZG8tbm90LXJlcXVpcmUtZXhwbGljaXQtY29t cGFyaXNvbnMtdG8tdHJ1ZS1vci1mYWxzZQ0KPiBbL1NBTUldDQoNCnN1cmUNCg0KPiArICAgIElu c3RhbmNlLT5Jbml0aWFsaXplIChJbnN0YW5jZSk7DQo+ICsgIH0NCj4gKyAgQmFzZSA9IChWT0lE ICopSW5zdGFuY2UtPk1lbUJhc2VBZGRyZXNzICsgTGJhICogSW5zdGFuY2UtPkJsb2NrU2l6ZSAr IE9mZnNldDsNCj4gKyAgU3RhdHVzID0gUmVhZFdyaXRlUnBtYiAoU1BfU1ZDX1JQTUJfV1JJVEUs IChVSU5UTikgQnVmZmVyLCAqTnVtQnl0ZXMsDQo+ICsgICAgTGJhICogSW5zdGFuY2UtPkJsb2Nr U2l6ZSArIE9mZnNldCk7DQo+ICsgIGlmIChTdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsNCj4gW1NB TUldIGlmIChFRklfRVJST1IgKFN0YXR1cykpICA/DQo+IFsvU0FNSV0NCg0KT2sNCg0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCg0KWy4uLl0NCg0KPiArICAgIGlmICghQnVmKSB7DQo+ ICsgICAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gKyAgICB9DQo+ICsgICAgU2V0TWVt NjQgKEJ1ZiwgTnVtTGJhICogSW5zdGFuY2UtPkJsb2NrU2l6ZSwgfjBVTCk7DQo+ICsgICAgLy8g V3JpdGUgdGhlIGRldmljZQ0KPiArICAgIFN0YXR1cyA9IFJlYWRXcml0ZVJwbWIgKFNQX1NWQ19S UE1CX1dSSVRFLCAoVUlOVE4pIEJ1ZiwgTnVtQnl0ZXMsDQo+ICsgICAgIFN0YXJ0ICogSW5zdGFu Y2UtPkJsb2NrU2l6ZSk7DQo+ICsgICAgaWYgKFN0YXR1cyAhPSBFRklfU1VDQ0VTUykgew0KPiBb U0FNSV0gaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgID8NCj4gWy9TQU1JXQ0KPiArICAgICAgcmV0 dXJuIFN0YXR1czsNCg0KT2sNCg0KPiArICAgIH0NCj4gKyAgICAvLyBVcGRhdGUgdGhlIGluIG1l bW9yeSBjb3B5DQo+ICsgICAgU2V0TWVtNjQgKEJhc2UsIE51bUxiYSAqIEluc3RhbmNlLT5CbG9j a1NpemUsIH4wVUwpOw0KPiArICAgIEZyZWVQb29sIChCdWYpOw0KPiArICB9DQo+ICsNCj4gKyAg VkFfRU5EIChBcmdzKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBTaW5jZSB3ZSB1c2UgYSBtZW1vcnkgYmFja2VkIHN0b3JhZ2Ugd2UgbmVl ZCB0byByZXN0b3JlIHRoZSBSUE1CIGNvbnRlbnRzDQo+ICsgIGludG8gbWVtb3J5IGJlZm9yZSB3 ZSByZWdpc3RlciB0aGUgRnZiIHByb3RvY29sLg0KPiArDQo+ICsgIEBwYXJhbSBJbnN0YWNlIEFk ZHJlc3MgdG8gY29weSBmbGFzaCBjb250ZW50cyB0bw0KPiArDQo+ICsgIEByZXR2YWwgICAgIDAg b24gc3VjY2VzcywgT1AtVEVFIGVycm9yIG9uIGZhaWx1cmUNCj4gKyoqLw0KPiArU1RBVElDDQo+ ICtWT0lEDQo+ICtSZWFkRW50aXJlRmxhc2ggKA0KPiArICBNRU1fSU5TVEFOQ0UgKkluc3RhbmNl DQo+ICsgKQ0KPiArew0KPiArICBVSU5UTiBSZWFkQWRkcjsNCj4gKw0KPiArICBVSU5UTiBTdG9y YWdlRnR3V29ya2luZ1NpemUgPSBQY2RHZXQzMihQY2RGbGFzaE52U3RvcmFnZUZ0d1dvcmtpbmdT aXplKTsNCj4gKyAgVUlOVE4gU3RvcmFnZVZhcmlhYmxlU2l6ZSAgID0gUGNkR2V0MzIoUGNkRmxh c2hOdlN0b3JhZ2VWYXJpYWJsZVNpemUpOw0KPiArICBVSU5UTiBTdG9yYWdlRnR3U3BhcmVTaXpl ICAgPSBQY2RHZXQzMihQY2RGbGFzaE52U3RvcmFnZUZ0d1NwYXJlU2l6ZSk7DQo+ICsNCj4gKyAg UmVhZEFkZHIgPSBJbnN0YW5jZS0+TWVtQmFzZUFkZHJlc3M7DQo+ICsgIC8vIFRoZXJlJ3Mgbm8g bmVlZCB0byBjaGVjayBpZiB0aGUgcmVhZCBmYWlsZWQgaGVyZS4gVGhlIHVwcGVyIEVESzIgbGF5 ZXJzDQo+ICsgIC8vIHdpbGwgaW5pdGlhbGl6ZSB0aGUgZmxhc2ggY29ycmVjdGx5IGlmIHRoZSBp bi1tZW1vcnkgY29weSBpcyB3cm9uZw0KPiArICBSZWFkV3JpdGVScG1iKFNQX1NWQ19SUE1CX1JF QUQsIFJlYWRBZGRyLCBTdG9yYWdlVmFyaWFibGVTaXplICsNCj4gKyAgICBTdG9yYWdlRnR3V29y a2luZ1NpemUgKyBTdG9yYWdlRnR3U3BhcmVTaXplICwgMCk7DQo+ICt9DQo+ICsNCj4gKw0KPiAr U1RBVElDDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1ZhbGlkYXRlRnZIZWFkZXIgKA0K PiArICBJTiBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAgICAgICAgICAgICpGd1ZvbEhlYWRl cg0KPiArICApDQo+ICt7DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICBDaGVja3N1 bTsNCj4gKyAgVkFSSUFCTEVfU1RPUkVfSEVBREVSICAgICAgICpWYXJpYWJsZVN0b3JlSGVhZGVy Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVTdG9yZUxlbmd0aDsN Cj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIEZ2TGVuZ3RoOw0KPiArDQo+ICsgIEZ2 TGVuZ3RoID0gUGNkR2V0MzIoUGNkRmxhc2hOdlN0b3JhZ2VWYXJpYWJsZVNpemUpICsNCj4gKyAg ICAgICAgICAgICBQY2RHZXQzMihQY2RGbGFzaE52U3RvcmFnZUZ0d1dvcmtpbmdTaXplKSArDQo+ ICsgICAgICAgICAgICAgUGNkR2V0MzIoUGNkRmxhc2hOdlN0b3JhZ2VGdHdTcGFyZVNpemUpOw0K PiArDQo+ICsgIC8vIFZlcmlmeSB0aGUgaGVhZGVyIHJldmlzaW9uLCBoZWFkZXIgc2lnbmF0dXJl LCBsZW5ndGgNCj4gKyAgLy8gTGVuZ3RoIG9mIEZ2QmxvY2sgY2Fubm90IGJlIDIqKjY0LTENCj4g KyAgLy8gSGVhZGVyTGVuZ3RoIGNhbm5vdCBiZSBhbiBvZGQgbnVtYmVyDQo+ICsgIC8vDQo+ICsg IGlmICggICAoRndWb2xIZWFkZXItPlJldmlzaW9uICAhPSBFRklfRlZIX1JFVklTSU9OKQ0KPiAr ICAgICAgfHwgKEZ3Vm9sSGVhZGVyLT5TaWduYXR1cmUgIT0gRUZJX0ZWSF9TSUdOQVRVUkUpDQo+ ICsgICAgICB8fCAoRndWb2xIZWFkZXItPkZ2TGVuZ3RoICAhPSBGdkxlbmd0aCkNCj4gKyAgICAg ICkNCj4gKyAgew0KPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIiVhOiBObyBGaXJtd2FyZSBW b2x1bWUgaGVhZGVyIHByZXNlbnRcbiIsDQo+ICsgICAgICBfX0ZVTkNUSU9OX18pKTsNCj4gKyAg ICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIENoZWNrIHRoZSBG aXJtd2FyZSBWb2x1bWUgR3VpZA0KPiArICBpZiAoIUNvbXBhcmVHdWlkICgmRndWb2xIZWFkZXIt PkZpbGVTeXN0ZW1HdWlkLCAmZ0VmaVN5c3RlbU52RGF0YUZ2R3VpZCkpIHsNCj4gW1NBTUldIE5v dCBhIGNvbW1lbnQgZm9yIHRoaXMgcGF0Y2ggYnV0IEkgbm90aWNlZCB0aGF0IEJhc2VUb29scyBo YXMgYW4gaW1wbGVtZW50YXRpb24gb2YgQ29tcGFyZUd1aWQoKSB0aGF0IHJldHVybnMgSU5UTi4N Cj4gSSB3b25kZXIgaWYgdGhhdCBpcyBpbnRlbnRpb25hbC4gTW9yZW92ZXIsIGl0IGFsc28gYXBw ZWFycyB0aGF0IHRoZSBDb21wYXJlR3VpZCgpIHVzYWdlIGluIEJhc2VUb29scyBkb2VzIG5vdCBj b25zaXN0ZW50bHkgZm9sbG93IHRoZSBleHBsaWNpdCBjb21wYXJpc29uIHJ1bGUgKGh0dHBzOi8v ZWRrMi1kb2NzLmdpdGJvb2suaW8vZWRrLWlpLWMtY29kaW5nLXN0YW5kYXJkcy1zcGVjaWZpY2F0 aW9uLzVfc291cmNlX2ZpbGVzLzU3X2NfcHJvZ3JhbW1pbmcjNS03LTItMS1ib29sZWFuLXZhbHVl cy12YXJpYWJsZS10eXBlLWJvb2xlYW4tZG8tbm90LXJlcXVpcmUtZXhwbGljaXQtY29tcGFyaXNv bnMtdG8tdHJ1ZS1vci1mYWxzZSkuDQo+IFsvU0FNSV0NCj4gKyAgICBERUJVRyAoKERFQlVHX0lO Rk8sICIlYTogRmlybXdhcmUgVm9sdW1lIEd1aWQgbm9uLWNvbXBhdGlibGVcbiIsDQo+ICsgICAg ICBfX0ZVTkNUSU9OX18pKTsNCj4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gKyAgfQ0K PiArDQo+ICsgIC8vIFZlcmlmeSB0aGUgaGVhZGVyIGNoZWNrc3VtDQo+ICsgIENoZWNrc3VtID0g Q2FsY3VsYXRlU3VtMTYoKFVJTlQxNiopRndWb2xIZWFkZXIsIEZ3Vm9sSGVhZGVyLT5IZWFkZXJM ZW5ndGgpOw0KPiArICBpZiAoQ2hlY2tzdW0gIT0gMCkgew0KPiArICAgIERFQlVHICgoREVCVUdf SU5GTywgIiVhOiBGViBjaGVja3N1bSBpcyBpbnZhbGlkIChDaGVja3N1bToweCVYKVxuIiwNCj4g KyAgICAgIF9fRlVOQ1RJT05fXywgQ2hlY2tzdW0pKTsNCj4gKyAgICByZXR1cm4gRUZJX05PVF9G T1VORDsNCj4gW1NBTUldIE1pbm9yOiBCeSB0aGlzIHBvaW50IHdlIHNob3VsZCBiZSBmYWlybHkg Y2VydGFpbiB0aGF0IHRoaXMgaXMgYSBGaXJtd2FyZSBWb2x1bWUgaGVhZGVyLg0KPiBTbywgc2hv dWxkIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGhlcmUgYmUgRUZJX1ZPTFVNRV9DT1JSVVBURUQ/ IFdvdWxkIHRoZSBzYW1lIGFwcGx5IHRvIHRoZSByZW1haW5pbmcgY2hlY2tzIGJlbG93Pw0KPiBb L1NBTUldDQoNCkkgdGhpbmsgdGhhdCBtYWtlcyBzZW5zZSwgYnV0IEknbGwgaGF2ZSB0byBjaGVj ayBpZiB0aGVyZSdzIGENCmRpZmZlcmVuY2UgaW4gYmVoYXZpb3Igb2YgdGhlIHVwcGVyIGxheWVy cyBkZXBlbmRpbmcgb24gdGhlIHJldHVybg0KdmFsdWUuDQpUaGUgcmVsZXZhbnQgVm9sdW1lIEhl YWRlciBjaGVja3MgaXMgYSBjL3AgZnJvbQ0KQXJtUGxhdGZvcm1Qa2cvRHJpdmVycy9Ob3JGbGFz aER4ZS9Ob3JGbGFzaEZ2Yi5jIGFuZCBJIGtlcHQgaXQgZm9yDQpjb25zaXN0ZW5jeS4NClNob3Vs ZCB3ZSBjaGFuZ2UgdGhlIG90aGVyIGRyaXZlciBhcyB3ZWxsIGF0IHNvbWUgcG9pbnQ/DQpbU0FN SV0gTG9va2luZyBhdCB0aGUgTm9yRmxhc2hEeGUgY29kZSwgdGhlcmUgbWF5IGJlIG1vcmUgbmVl ZGVkLiBCdXQgSSB0aGluayBpdCB3aWxsIGJlIGEgZ29vZCBpbXByb3ZlbWVudC4NClsvU0FNSV0N Cg0KPiArICB9DQo+ICsNCj4gKyAgVmFyaWFibGVTdG9yZUhlYWRlciA9IChWT0lEICopKChVSU5U TilGd1ZvbEhlYWRlciArDQo+IFtTQU1JXSBTaG91bGQgdGhlIHR5cGVjYXN0IGJlIChWQVJJQUJM RV9TVE9SRV9IRUFERVIqKSBpbnN0ZWFkIG9mIChWT0lEICopPw0KPiBbL1NBTUldDQoNClllcw0K DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGd1ZvbEhlYWRlci0+SGVhZGVy TGVuZ3RoKTsNCj4gKw0KPiArICAvLyBDaGVjayB0aGUgVmFyaWFibGUgU3RvcmUgR3VpZA0KDQpb Li4uXQ0KDQo+ICsgIEZpcm13YXJlVm9sdW1lSGVhZGVyLT5SZXZpc2lvbiA9IEVGSV9GVkhfUkVW SVNJT047DQo+ICsgIEZpcm13YXJlVm9sdW1lSGVhZGVyLT5CbG9ja01hcFswXS5OdW1CbG9ja3Mg PSBJbnN0YW5jZS0+TkJsb2NrczsNCj4gKyAgRmlybXdhcmVWb2x1bWVIZWFkZXItPkJsb2NrTWFw WzBdLkxlbmd0aCAgICA9IEluc3RhbmNlLT5CbG9ja1NpemU7DQo+ICsgIEZpcm13YXJlVm9sdW1l SGVhZGVyLT5CbG9ja01hcFsxXS5OdW1CbG9ja3MgPSAwOw0KPiArICBGaXJtd2FyZVZvbHVtZUhl YWRlci0+QmxvY2tNYXBbMV0uTGVuZ3RoICAgID0gMDsNCj4gKyAgRmlybXdhcmVWb2x1bWVIZWFk ZXItPkNoZWNrc3VtID0gQ2FsY3VsYXRlQ2hlY2tTdW0xNiAoDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKFVJTlQxNiopRmlybXdhcmVWb2x1bWVIZWFkZXIsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlybXdhcmVWb2x1bWVIZWFkZXIt PkhlYWRlckxlbmd0aCk7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gVkFSSUFCTEVfU1RPUkVfSEVB REVSDQo+ICsgIC8vDQo+ICsgIFZhcmlhYmxlU3RvcmVIZWFkZXIgPSAoVk9JRCAqKSgoVUlOVE4p SGVhZGVycyArDQo+IFtTQU1JXSBTaG91bGQgdGhlIHR5cGVjYXNlIGJlIChWQVJJQUJMRV9TVE9S RV9IRUFERVIqKSBpbnN0ZWFkIG9mIChWT0lEICopPw0KPiBbL1NBTUldDQoNClllcw0KDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXJtd2FyZVZvbHVtZUhlYWRlci0+SGVh ZGVyTGVuZ3RoKTsNCj4gKyAgQ29weUd1aWQgKCZWYXJpYWJsZVN0b3JlSGVhZGVyLT5TaWduYXR1 cmUsICZnRWZpQXV0aGVudGljYXRlZFZhcmlhYmxlR3VpZCk7DQo+ICsgIFZhcmlhYmxlU3RvcmVI ZWFkZXItPlNpemUgPSBQY2RHZXQzMihQY2RGbGFzaE52U3RvcmFnZVZhcmlhYmxlU2l6ZSkgLQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlybXdhcmVWb2x1bWVIZWFkZXItPkhl YWRlckxlbmd0aDsNCj4gKyAgVmFyaWFibGVTdG9yZUhlYWRlci0+Rm9ybWF0ID0gVkFSSUFCTEVf U1RPUkVfRk9STUFUVEVEOw0KPiArICBWYXJpYWJsZVN0b3JlSGVhZGVyLT5TdGF0ZSA9IFZBUklB QkxFX1NUT1JFX0hFQUxUSFk7DQo+ICsNCj4gKyAgU3RhdHVzID0gUmVhZFdyaXRlUnBtYihTUF9T VkNfUlBNQl9XUklURSwgKFVJTlROKSBIZWFkZXJzLCBIZWFkZXJzTGVuZ3RoLCAwKTsNCj4gKyAg aWYgKFN0YXR1cyAhPSBFRklfU1VDQ0VTUykgew0KPiBbU0FNSV0gaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgID8NCj4gWy9TQU1JXQ0KDQpPaw0KDQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9DQo+ ICsgIC8vIEluc3RhbGwgdGhlIGNvbWJpbmVkIGhlYWRlciBpbiBtZW1vcnkNCj4gKyAgQ29weU1l bSAoKFZPSUQqKSBJbnN0YW5jZS0+TWVtQmFzZUFkZHJlc3MsIEhlYWRlcnMsIEhlYWRlcnNMZW5n dGgpOw0KPiArDQo+ICtFeGl0Og0KPiArICBGcmVlUG9vbCAoSGVhZGVycyk7DQo+ICsgIHJldHVy biBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gK1NUQVRJQw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJ DQo+ICtGdmJJbml0aWFsaXplICgNCj4gKyAgTUVNX0lOU1RBTkNFICpJbnN0YW5jZQ0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9GSVJNV0FSRV9WT0xVTUVfSEVBREVSICpGd1ZvbEhlYWRlcjsNCj4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoSW5z dGFuY2UtPkluaXRpYWxpemVkID09IFRSVUUpIHsNCj4gW1NBTUldIGlmIChJbnN0YW5jZS0+SW5p dGlhbGl6ZWQpICA/DQo+IFNlZSBodHRwczovL2VkazItZG9jcy5naXRib29rLmlvL2Vkay1paS1j LWNvZGluZy1zdGFuZGFyZHMtc3BlY2lmaWNhdGlvbi81X3NvdXJjZV9maWxlcy81N19jX3Byb2dy YW1taW5nIzUtNy0yLTEtYm9vbGVhbi12YWx1ZXMtdmFyaWFibGUtdHlwZS1ib29sZWFuLWRvLW5v dC1yZXF1aXJlLWV4cGxpY2l0LWNvbXBhcmlzb25zLXRvLXRydWUtb3ItZmFsc2UNCj4gWy9TQU1J XQ0KDQpTdXJlDQoNCj4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiAr ICAvLyBGaXJtd2FyZVZvbHVtZUhlYWRlci0+RnZMZW5ndGggaXMgZGVjbGFyZWQgdG8gaGF2ZSB0 aGUgVmFyaWFibGUgYXJlYQ0KPiArICAvLyBBTkQgdGhlIEZUVyB3b3JraW5nIGFyZWEgQU5EIHRo ZSBGVFcgU3BhcmUgY29udGlndW91cy4NCj4gKyAgQVNTRVJUIChQY2RHZXQzMiAoUGNkRmxhc2hO dlN0b3JhZ2VWYXJpYWJsZUJhc2UpICsNCj4gKyAgICAgICAgICBQY2RHZXQzMiAoUGNkRmxhc2hO dlN0b3JhZ2VWYXJpYWJsZVNpemUpID09DQo+ICsgICAgICAgICAgUGNkR2V0MzIgKFBjZEZsYXNo TnZTdG9yYWdlRnR3V29ya2luZ0Jhc2UpKTsNCj4gKyAgQVNTRVJUIChQY2RHZXQzMiAoUGNkRmxh c2hOdlN0b3JhZ2VGdHdXb3JraW5nQmFzZSkgKw0KPiArICAgICAgICAgIFBjZEdldDMyIChQY2RG bGFzaE52U3RvcmFnZUZ0d1dvcmtpbmdTaXplKSA9PQ0KPiArICAgICAgICAgIFBjZEdldDMyIChQ Y2RGbGFzaE52U3RvcmFnZUZ0d1NwYXJlQmFzZSkpOw0KPiArDQo+ICsgIC8vIENoZWNrIGlmIHRo ZSBzaXplIG9mIHRoZSBhcmVhIGlzIGF0IGxlYXN0IG9uZSBibG9jayBzaXplDQo+ICsgIEFTU0VS VCAoKFBjZEdldDMyIChQY2RGbGFzaE52U3RvcmFnZVZhcmlhYmxlU2l6ZSkgPiAwKSAmJg0KPiAr ICAgICAgICAgIChQY2RHZXQzMiAoUGNkRmxhc2hOdlN0b3JhZ2VWYXJpYWJsZVNpemUpIC8gSW5z dGFuY2UtPkJsb2NrU2l6ZSA+IDApKTsNCj4gKyAgQVNTRVJUICgoUGNkR2V0MzIgKFBjZEZsYXNo TnZTdG9yYWdlRnR3V29ya2luZ1NpemUpID4gMCkgJiYNCj4gKyAgICAgICAgICAoUGNkR2V0MzIg KFBjZEZsYXNoTnZTdG9yYWdlRnR3V29ya2luZ1NpemUpIC8gSW5zdGFuY2UtPkJsb2NrU2l6ZSA+ IDApKTsNCj4gKyAgQVNTRVJUICgoUGNkR2V0MzIgKFBjZEZsYXNoTnZTdG9yYWdlRnR3U3BhcmVT aXplKSA+IDApICYmDQo+ICsgICAgICAgICAgKFBjZEdldDMyIChQY2RGbGFzaE52U3RvcmFnZUZ0 d1NwYXJlU2l6ZSkgLyBJbnN0YW5jZS0+QmxvY2tTaXplID4gMCkpOw0KPiArDQo+ICsgIC8vIEVu c3VyZSB0aGUgVmFyaWFibGUgYXJlYXMgYXJlIGFsaWduZWQgb24gYmxvY2sgc2l6ZSBib3VuZGFy aWVzDQo+ICsgIEFTU0VSVCAoKFBjZEdldDMyIChQY2RGbGFzaE52U3RvcmFnZVZhcmlhYmxlQmFz ZSkgJSBJbnN0YW5jZS0+QmxvY2tTaXplKSA9PSAwKTsNCj4gKyAgQVNTRVJUICgoUGNkR2V0MzIg KFBjZEZsYXNoTnZTdG9yYWdlRnR3V29ya2luZ0Jhc2UpICUgSW5zdGFuY2UtPkJsb2NrU2l6ZSkg PT0gMCk7DQo+ICsgIEFTU0VSVCAoKFBjZEdldDMyIChQY2RGbGFzaE52U3RvcmFnZUZ0d1NwYXJl QmFzZSkgJSBJbnN0YW5jZS0+QmxvY2tTaXplKSA9PSAwKTsNCj4gW1NBTUldIFRoZXNlIGFzc2Vy dHMgbWF5IG5lZWQgdG8gYmUgYWRqdXN0ZWQgaWYgNjQtYml0IHZlcnNpb25zIG9mIHRoZSBQQ0Rz IGFyZSB1c2VkLg0KPiBbL1NBTUldDQoNCk5vdGVkDQoNCj4gKw0KPiArICAvLyBSZWFkIHRoZSBm aWxlIGZyb20gZGlzayBhbmQgY29weSBpdCB0byBtZW1vcnkNCj4gKyAgUmVhZEVudGlyZUZsYXNo IChJbnN0YW5jZSk7DQo+ICsNCj4gKyAgRndWb2xIZWFkZXIgPSAoRUZJX0ZJUk1XQVJFX1ZPTFVN RV9IRUFERVIgKikgSW5zdGFuY2UtPk1lbUJhc2VBZGRyZXNzOw0KPiArICBTdGF0dXMgPSBWYWxp ZGF0ZUZ2SGVhZGVyKEZ3Vm9sSGVhZGVyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgIC8vIFRoZXJlIGlzIG5vIHZhbGlkIGhlYWRlciwgc28gdGltZSB0byBpbnN0YWxs IG9uZS4NCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICIlYTogVGhlIEZWQiBIZWFkZXIgaXMg bm90IHZhbGlkLlxuIiwgX19GVU5DVElPTl9fKSk7DQo+ICsNCj4gKyAgICAvLyBSZXNldCBtZW1v cnkNCj4gKyAgICBTZXRNZW02NCAoKFZPSUQgKilJbnN0YW5jZS0+TWVtQmFzZUFkZHJlc3MsIElu c3RhbmNlLT5OQmxvY2tzICogSW5zdGFuY2UtPkJsb2NrU2l6ZSwgfjBVTCk7DQo+ICsgICAgREVC VUcgKChERUJVR19JTkZPLCAiJWE6IEVyYXNpbmcgRmxhc2guXG4iLCBfX0ZVTkNUSU9OX18pKTsN Cj4gKyAgICBTdGF0dXMgPSBSZWFkV3JpdGVScG1iKFNQX1NWQ19SUE1CX1dSSVRFLCBJbnN0YW5j ZS0+TWVtQmFzZUFkZHJlc3MsDQo+ICsgICAgICBQY2RHZXQzMihQY2RGbGFzaE52U3RvcmFnZVZh cmlhYmxlU2l6ZSkgKw0KPiArICAgICAgUGNkR2V0MzIoUGNkRmxhc2hOdlN0b3JhZ2VGdHdXb3Jr aW5nU2l6ZSkgKw0KPiArICAgICAgUGNkR2V0MzIoUGNkRmxhc2hOdlN0b3JhZ2VGdHdTcGFyZVNp emUpLCAwKTsNCj4gKyAgICBpZiAoU3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7DQo+IFtTQU1JXSBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSAgPw0KPiBbL1NBTUldDQoNClN1cmUNCg0KPiArICAgICAg cmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsgICAgLy8gSW5zdGFsbCBhbGwgYXBwcm9wcmlh dGUgaGVhZGVycw0KPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIiVhOiBJbnN0YWxsaW5nIGEg Y29ycmVjdCBvbmUgZm9yIHRoaXMgdm9sdW1lLlxuIiwNCj4gKyAgICAgIF9fRlVOQ1RJT05fXykp Ow0KPiArICAgIFN0YXR1cyA9IEluaXRpYWxpemVGdkFuZFZhcmlhYmxlU3RvcmVIZWFkZXJzIChJ bnN0YW5jZSk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgREVCVUcgKChERUJV R19JTkZPLCAiJWE6IEZvdW5kIHZhbGlkIEZWQiBIZWFkZXIuXG4iLCBfX0ZVTkNUSU9OX18pKTsN Cj4gKyAgfQ0KPiArICBJbnN0YW5jZS0+SW5pdGlhbGl6ZWQgPSBUUlVFOw0KPiArDQo+ICsgIHJl dHVybiBFRklfU1VDQ0VTUzsNCj4gW1NBTUldIHJldHVybiBTdGF0dXM7ID8NCj4gWy9TQU1JXQ0K PiArfQ0KDQpTdXJlDQoNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtPcFRlZVJw bWJGdmJJbml0ICgNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ ICsgIElOIEVGSV9NTV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPiArICApDQo+ICt7DQo+ ICsgIEVGSV9TVEFUVVMgICBTdGF0dXM7DQo+ICsgIFZPSUQgICAgICAgICAqQWRkcjsNCj4gKyAg VUlOVE4gICAgICAgIEZ2TGVuZ3RoOw0KPiArICBVSU5UTiAgICAgICAgTkJsb2NrczsNCj4gKw0K PiArICBGdkxlbmd0aCA9IFBjZEdldDMyKFBjZEZsYXNoTnZTdG9yYWdlVmFyaWFibGVTaXplKSAr DQo+ICsgICAgICAgICAgICAgUGNkR2V0MzIoUGNkRmxhc2hOdlN0b3JhZ2VGdHdXb3JraW5nU2l6 ZSkgKw0KPiArICAgICAgICAgICAgIFBjZEdldDMyKFBjZEZsYXNoTnZTdG9yYWdlRnR3U3BhcmVT aXplKTsNCj4gKw0KPiArICBOQmxvY2tzID0gRUZJX1NJWkVfVE9fUEFHRVMoQUxJR05fVkFSSUFC TEUoRnZMZW5ndGgpKTsNCj4gKyAgQWRkciA9IEFsbG9jYXRlUGFnZXMoTkJsb2Nrcyk7DQo+ICsg IEFTU0VSVCAoQWRkciAhPSBOVUxMKTsNCj4gW1NBTUldIEFzc2VydHMgd2lsbCB2YW5pc2ggaW4g cmVsZWFzZSBidWlsZHMgYW5kIGEgZmFpbHVyZSB0byBhbGxvY2F0ZSBtZW1vcnkgd291bGQgcmVz dWx0IGluIGluY29ycmVjdCByZXN1bHRzLg0KPiBQbGVhc2UgaGFuZGxlIHRoaXMgZXJyb3IgYW5k IHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUy4NCj4gWy9TQU1JXQ0KDQpGYWlyIGVub3VnaA0K DQo+ICsNCj4gKyAgU2V0TWVtICgmbUluc3RhbmNlLCBzaXplb2YgKG1JbnN0YW5jZSksIDApOw0K PiArDQo+ICsgIG1JbnN0YW5jZS5GdmJQcm90b2NvbC5HZXRQaHlzaWNhbEFkZHJlc3MgPSBPcFRl ZVJwbWJGdmJHZXRQaHlzaWNhbEFkZHJlc3M7DQo+ICsgIG1JbnN0YW5jZS5GdmJQcm90b2NvbC5H ZXRBdHRyaWJ1dGVzICAgICAgPSBPcFRlZVJwbWJGdmJHZXRBdHRyaWJ1dGVzOw0KPiArICBtSW5z dGFuY2UuRnZiUHJvdG9jb2wuU2V0QXR0cmlidXRlcyAgICAgID0gT3BUZWVScG1iRnZiU2V0QXR0 cmlidXRlczsNCj4gKyAgbUluc3RhbmNlLkZ2YlByb3RvY29sLkdldEJsb2NrU2l6ZSAgICAgICA9 IE9wVGVlUnBtYkZ2YkdldEJsb2NrU2l6ZTsNCj4gKyAgbUluc3RhbmNlLkZ2YlByb3RvY29sLkVy YXNlQmxvY2tzICAgICAgICA9IE9wVGVlUnBtYkZ2YkVyYXNlOw0KPiArICBtSW5zdGFuY2UuRnZi UHJvdG9jb2wuV3JpdGUgICAgICAgICAgICAgID0gT3BUZWVScG1iRnZiV3JpdGU7DQo+ICsgIG1J bnN0YW5jZS5GdmJQcm90b2NvbC5SZWFkICAgICAgICAgICAgICAgPSBPcFRlZVJwbWJGdmJSZWFk Ow0KPiArDQo+ICsgIG1JbnN0YW5jZS5NZW1CYXNlQWRkcmVzcyA9IChFRklfUEhZU0lDQUxfQURE UkVTUykgQWRkcjsNCj4gKyAgbUluc3RhbmNlLlNpZ25hdHVyZSAgICAgID0gRkxBU0hfU0lHTkFU VVJFOw0KPiArICBtSW5zdGFuY2UuSW5pdGlhbGl6ZSAgICAgPSBGdmJJbml0aWFsaXplOw0KPiAr ICBtSW5zdGFuY2UuQmxvY2tTaXplICAgICAgPSBFRklfUEFHRV9TSVpFOw0KPiArICBtSW5zdGFu Y2UuTkJsb2NrcyAgICAgICAgPSBOQmxvY2tzOw0KPiArDQo+ICsgIC8vIFVwZGF0ZSB0aGUgZGVm aW5lZCBQQ0RzIHJlbGF0ZWQgdG8gVmFyaWFibGUgU3RvcmFnZQ0KPiArICBQYXRjaFBjZFNldDMy IChQY2RGbGFzaE52U3RvcmFnZVZhcmlhYmxlQmFzZSwgbUluc3RhbmNlLk1lbUJhc2VBZGRyZXNz KTsNCj4gW1NBTUldIFNob3VsZCB0aGUgNjQtYml0IHZlcnNpb25zIG9mIHRoZSBQQ0RzIGJlIHVz ZWQgaGVyZS4NCj4gQSByZWNlbnQgY2hhbmdlIGFkZGVkIHNpbWlsYXIgc3VwcG9ydCB0byB0aGUg QXJtUGxhdGZvcm1Qa2dcRHJpdmVyc1xOb3JGbGFzaER4ZS4NCj4gWy9TQU1JXQ0KDQpOb3RlZA0K DQo+ICsgIFBhdGNoUGNkU2V0MzIgKFBjZEZsYXNoTnZTdG9yYWdlRnR3V29ya2luZ0Jhc2UsIG1J bnN0YW5jZS5NZW1CYXNlQWRkcmVzcyArDQo+ICsgICAgUGNkR2V0MzIgKFBjZEZsYXNoTnZTdG9y YWdlVmFyaWFibGVTaXplKSk7DQo+ICsgIFBhdGNoUGNkU2V0MzIgKFBjZEZsYXNoTnZTdG9yYWdl RnR3U3BhcmVCYXNlLCBtSW5zdGFuY2UuTWVtQmFzZUFkZHJlc3MgKw0KPiArICAgIFBjZEdldDMy IChQY2RGbGFzaE52U3RvcmFnZVZhcmlhYmxlU2l6ZSkgKw0KPiArICAgIFBjZEdldDMyIChQY2RG bGFzaE52U3RvcmFnZUZ0d1dvcmtpbmdTaXplKSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ01tc3Qt Pk1tSW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCj4gKyAgICAgICAgICAgICAgICAgICAgJm1J bnN0YW5jZS5IYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpU21tRmlybXdhcmVW b2x1bWVCbG9ja1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgRUZJX05BVElW RV9JTlRFUkZBQ0UsDQo+ICsgICAgICAgICAgICAgICAgICAgICZtSW5zdGFuY2UuRnZiUHJvdG9j b2wNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3Rh dHVzKTsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICIlYTogUmVnaXN0ZXIgT1AtVEVF IFJQTUIgRnZiXG4iLCBfX0ZVTkNUSU9OX18pKTsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAi JWE6IFVzaW5nIE5WIHN0b3JlIEZWIGluLW1lbW9yeSBjb3B5IGF0IDB4JWx4XG4iLA0KPiArICAg IF9fRlVOQ1RJT05fXywgUGF0Y2hQY2RHZXQzMiAoUGNkRmxhc2hOdlN0b3JhZ2VWYXJpYWJsZUJh c2UpKSk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gLS0NCj4gMi4xNy4xDQo+ DQo+IElNUE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkg YXR0YWNobWVudHMgYXJlIGNvbmZpZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmlsZWdlZC4g SWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUg c2VuZGVyIGltbWVkaWF0ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRlbnRzIHRvIGFu eSBvdGhlciBwZXJzb24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNvcHkg dGhlIGluZm9ybWF0aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCg==