Received: by 2002:a05:6358:701b:b0:131:369:b2a3 with SMTP id 27csp2189777rwo; Sun, 23 Jul 2023 09:22:26 -0700 (PDT) X-Google-Smtp-Source: APBJJlHiV4hpGiECXeVU708DLsxbs6HGGqdjuiqZa0a2EvlN1ShKn4BpGy305xK04koQfRin7Mj4 X-Received: by 2002:a17:90a:9b12:b0:263:72c5:9ac6 with SMTP id f18-20020a17090a9b1200b0026372c59ac6mr6638054pjp.11.1690129345330; Sun, 23 Jul 2023 09:22:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690129345; cv=none; d=google.com; s=arc-20160816; b=O/ZW3DIV4Lv9SB9xiWanVky1ZEJoJ3HgbGkdjtmwrLURRF6FdccKskmbwMdn7CGTrH UgVIWEbBmxpkcDmLyj7A63AngJuoXwYM5M0SHcr2gVpsNn3RlIOQXESccAZzicIUZC5g lmGWLOwU2ZpediKSAHpmd+satV88DMuPDrjzavXqkXp1+Pgxk34qI6tlSH/uL9vDQxvu Gl5TTp3buHpAcy7/aWA5qSQ0cRbGrBgB3c3QTW6hBp24QrkNyga9I662vRdvI3IqS0XH 6Kn7XGzOMDXGDt3Y3WHclMkwRgPi7joN/FYv6OqkQKFnoCOWBoea1bTF35LrpNm1RQvG DSzA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent :content-transfer-encoding:references:in-reply-to:date:cc:to:from :subject:message-id:dkim-signature; bh=VenO6QbOIAYtB1VQFyP/Eofxk0jalRaWz4IfPXNC4+Y=; fh=7HIuiXHZKw8c79Jbmds0x9iGYX81tMwy+XeGKzvNsTk=; b=GIS0wCjB52R6vIIoq7phpVFCwKk2cvk/xIGHf6ht+sCD3hJeaxeChxQsz48cDyIzys Ka+YJrdsFXh4x8BYmr04+4/cheIvVClNNfSq3rwIYARHwDcfuD0ozgHsr4PYXYofoP8n CjHe/y074BxAdHXvcjX1QKNNlysBFfJVDOATkJCFhdm3IPHITJK7odWprr5oH/nkNFUS Ngs+2+5jXK6O1gjphDZTRiHLQPALtX8P5BkVI/Fub5jQLvr4PjLHo0/l73PSWaMOJHTS ArIaLb0K9mnU+5jZqHWRLs80XYcGYsIDa9aq1/9uArJml/5WdzOtM3nOnh7qiP+fIGlN pkpQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@maquefel.me header.s=mail header.b=RrtsoJKM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o8-20020a17090a55c800b00263a923c189si7331176pjm.100.2023.07.23.09.22.10; Sun, 23 Jul 2023 09:22:25 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@maquefel.me header.s=mail header.b=RrtsoJKM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229626AbjGWPhd (ORCPT + 99 others); Sun, 23 Jul 2023 11:37:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58406 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229446AbjGWPhc (ORCPT ); Sun, 23 Jul 2023 11:37:32 -0400 Received: from forward502c.mail.yandex.net (forward502c.mail.yandex.net [178.154.239.210]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 952FE186; Sun, 23 Jul 2023 08:37:28 -0700 (PDT) Received: from mail-nwsmtp-smtp-production-main-57.myt.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-57.myt.yp-c.yandex.net [IPv6:2a02:6b8:c12:6284:0:640:826e:0]) by forward502c.mail.yandex.net (Yandex) with ESMTP id 87BD45EA47; Sun, 23 Jul 2023 18:37:26 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-57.myt.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id ObK2nTKBc4Y0-W5mKk93S; Sun, 23 Jul 2023 18:37:25 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=maquefel.me; s=mail; t=1690126645; bh=VenO6QbOIAYtB1VQFyP/Eofxk0jalRaWz4IfPXNC4+Y=; h=References:Date:In-Reply-To:Cc:To:From:Subject:Message-ID; b=RrtsoJKM3QC62ciN8mtDcCp/7zGO3vMGdBbX72k112H+FJfKEMXbrgdt5tn+N0zYT Dxg4SL6QtR/vbCUJT6dNAjIrP4yy6YV/IbAb5Weec0WRucvlVL1P2/6BDzJfdtXCM1 GpZb5Ymj/JH4xpfXpsQPTdHD1p8nzPWOwmAqo+D0= Authentication-Results: mail-nwsmtp-smtp-production-main-57.myt.yp-c.yandex.net; dkim=pass header.i=@maquefel.me Message-ID: Subject: Re: [PATCH v3 03/42] clk: ep93xx: add DT support for Cirrus EP93xx From: Nikita Shubin To: Michael Turquette , Stephen Boyd , Alexander Sverdlin , Arnd Bergmann Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org Date: Sun, 23 Jul 2023 21:37:24 +0300 In-Reply-To: <3fcb760c101c5f7081235290362f5c02.sboyd@kernel.org> References: <20230605-ep93xx-v3-0-3d63a5f1103e@maquefel.me> <20230605-ep93xx-v3-3-3d63a5f1103e@maquefel.me> <3fcb760c101c5f7081235290362f5c02.sboyd@kernel.org> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.3 MIME-Version: 1.0 X-Spam-Status: No, score=-3.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS,T_FILL_THIS_FORM_SHORT, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGVsbG8gU3RlcGhlbi4KCk9uIFRodSwgMjAyMy0wNy0yMCBhdCAxNjoyNyAtMDcwMCwgU3RlcGhl biBCb3lkIHdyb3RlOgo+IFF1b3RpbmcgTmlraXRhIFNodWJpbiB2aWEgQjQgUmVsYXkgKDIwMjMt MDctMjAgMDQ6Mjk6MDMpCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLWVwOTN4eC5j IGIvZHJpdmVycy9jbGsvY2xrLWVwOTN4eC5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4g aW5kZXggMDAwMDAwMDAwMDAwLi43YjliM2EwODk0YWIKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsr KyBiL2RyaXZlcnMvY2xrL2Nsay1lcDkzeHguYwo+ID4gQEAgLTAsMCArMSw3NjQgQEAKPiA+ICsv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgo+ID4gKy8qCj4gPiAr ICogQ2xvY2sgY29udHJvbCBmb3IgQ2lycnVzIEVQOTN4eCBjaGlwcy4KPiA+ICsgKiBDb3B5cmln aHQgKEMpIDIwMjEgTmlraXRhIFNodWJpbiA8bmlraXRhLnNodWJpbkBtYXF1ZWZlbC5tZT4KPiA+ ICsgKgo+ID4gKyAqIEJhc2VkIG9uIGEgcmV3cml0ZSBvZiBhcmNoL2FybS9tYWNoLWVwOTN4eC9j bG9jay5jOgo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAwNiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5 dGVuaEB3YW50c3RvZmx5Lm9yZz4KPiA+ICsgKi8KPiA+ICsjZGVmaW5lIHByX2ZtdChmbXQpICJl cDkzeHggIiBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51 eC9iaXRzLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9jbGsuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+Cj4gCj4gRHJv cCB0aGUgdW51c2VkIGluY2x1ZGVzLgo+IAo+ID4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KPiA+ ICsjaW5jbHVkZSA8bGludXgvaW8uaD4KPiA+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4g PiArI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29m X2FkZHJlc3MuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gPiAr I2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5o Pgo+ID4gKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvc3lz X3NvYy5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9zb2MvY2lycnVzL2VwOTN4eC5oPgo+ ID4gKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9jaXJydXMsZXA5M3h4LWNsb2NrLmg+Cj4g PiArCj4gPiArI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgo+ID4gKwo+ID4gKyNkZWZpbmUgRVA5M1hY X0VYVF9SVENfUkFURcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMzI3NjgKPiA+ICsKPiA+ICsjZGVm aW5lIEVQOTNYWF9TWVNDT05fUE9XRVJfU1RBVEXCoMKgwqDCoMKgIDB4MDAKPiA+ICsjZGVmaW5l IEVQOTNYWF9TWVNDT05fUFdSQ05UwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgwNAo+ID4gKyNkZWZp bmUgRVA5M1hYX1NZU0NPTl9QV1JDTlRfVUFSVEJBVUTCoCBCSVQoMjkpCj4gPiArI2RlZmluZSBF UDkzWFhfU1lTQ09OX1BXUkNOVF9VU0hfRU7CoMKgwqAgMjgKPiA+ICsjZGVmaW5lIEVQOTNYWF9T WVNDT05fUFdSQ05UX0RNQV9NMk0xwqAgMjcKPiA+ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05fUFdS Q05UX0RNQV9NMk0wwqAgMjYKPiA+ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9N MlA4wqAgMjUKPiA+ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA5wqAgMjQK PiA+ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA2wqAgMjMKPiA+ICsjZGVm aW5lIEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA3wqAgMjIKPiA+ICsjZGVmaW5lIEVQOTNY WF9TWVNDT05fUFdSQ05UX0RNQV9NMlA0wqAgMjEKPiA+ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05f UFdSQ05UX0RNQV9NMlA1wqAgMjAKPiA+ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05fUFdSQ05UX0RN QV9NMlAywqAgMTkKPiA+ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlAzwqAg MTgKPiA+ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlAwwqAgMTcKPiA+ICsj ZGVmaW5lIEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlAxwqAgMTYKPiA+ICsjZGVmaW5lIEVQ OTNYWF9TWVNDT05fREVWQ0ZHwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHg4MAo+ID4gKyNkZWZpbmUg RVA5M1hYX1NZU0NPTl9ERVZDRkdfVTNFTsKgwqDCoMKgwqAgMjQKPiA+ICsjZGVmaW5lIEVQOTNY WF9TWVNDT05fREVWQ0ZHX1UyRU7CoMKgwqDCoMKgIDIwCj4gPiArI2RlZmluZSBFUDkzWFhfU1lT Q09OX0RFVkNGR19VMUVOwqDCoMKgwqDCoCAxOAo+ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9W SURDTEtESVbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHg4NAo+ID4gKyNkZWZpbmUg RVA5M1hYX1NZU0NPTl9DTEtESVZfRU5BQkxFwqDCoMKgIDE1Cj4gPiArI2RlZmluZSBFUDkzWFhf U1lTQ09OX0NMS0RJVl9FU0VMwqDCoMKgwqDCoCBCSVQoMTQpCj4gPiArI2RlZmluZSBFUDkzWFhf U1lTQ09OX0NMS0RJVl9QU0VMwqDCoMKgwqDCoCBCSVQoMTMpCj4gPiArI2RlZmluZSBFUDkzWFhf U1lTQ09OX0NMS0RJVl9NQVNLwqDCoMKgwqDCoCBHRU5NQVNLKDE0LCAxMykKPiA+ICsjZGVmaW5l IEVQOTNYWF9TWVNDT05fQ0xLRElWX1BESVZfU0hJRlTCoMKgwqDCoMKgwqDCoCA4Cj4gPiArI2Rl ZmluZSBFUDkzWFhfU1lTQ09OX0kyU0NMS0RJVsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAweDhjCj4gPiArI2RlZmluZSBFUDkzWFhfU1lTQ09OX0kyU0NMS0RJVl9TRU5BwqDCoCAzMQo+ ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9JMlNDTEtESVZfT1JJREXCoCBCSVQoMjkpCj4gPiAr I2RlZmluZSBFUDkzWFhfU1lTQ09OX0kyU0NMS0RJVl9TUE9MwqDCoCBCSVQoMTkpCj4gPiArI2Rl ZmluZSBFUDkzWFhfSTJTQ0xLRElWX1NESVbCoMKgwqDCoMKgwqDCoMKgwqAgKDEgPDwgMTYpCj4g PiArI2RlZmluZSBFUDkzWFhfSTJTQ0xLRElWX0xSRElWMzLCoMKgwqDCoMKgwqAgKDAgPDwgMTcp Cj4gPiArI2RlZmluZSBFUDkzWFhfSTJTQ0xLRElWX0xSRElWNjTCoMKgwqDCoMKgwqAgKDEgPDwg MTcpCj4gPiArI2RlZmluZSBFUDkzWFhfSTJTQ0xLRElWX0xSRElWMTI4wqDCoMKgwqDCoCAoMiA8 PCAxNykKPiA+ICsjZGVmaW5lIEVQOTNYWF9JMlNDTEtESVZfTFJESVZfTUFTS8KgwqDCoCAoMyA8 PCAxNykKPiA+ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWwqDCoMKgwqAgMHg5 MAo+ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfVFNFTsKgwqDCoMKgwqDC oMKgIDMxCj4gPiArI2RlZmluZSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9BRElWwqDCoMKg wqDCoMKgwqAgMTYKPiA+ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX0tFTiAx NQo+ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfS0RJVsKgwqDCoMKgwqDC oMKgIDAKPiA+ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0hJUElEwqDCoMKgwqDCoMKgwqDCoMKg wqAgMHg5NAo+ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DSElQSURfSUTCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgMHg5MjEzCj4gPiArCj4gPiArLyogS2VlcHMgdHJhY2sgb2YgYWxs IGNsb2NrcyAqLwo+ID4gK3N0YXRpYyBjb25zdCBjaGFyIGFkY19kaXZpc29yc1tdID0geyAxNiwg NCB9Owo+ID4gK3N0YXRpYyBjb25zdCBjaGFyIHNjbGtfZGl2aXNvcnNbXSA9IHsgMiwgNCB9Owo+ ID4gK3N0YXRpYyBjb25zdCBjaGFyIGxyY2xrX2Rpdmlzb3JzW10gPSB7IDMyLCA2NCwgMTI4IH07 Cj4gPiArCj4gPiArI2RlZmluZSBFUF9QQVJFTlQoTkFNRSkgeyAubmFtZSA9IE5BTUUsIC5md19u YW1lID0gTkFNRSB9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfcGFyZW50X2Rh dGEgZXA5M3h4X2Nsa19wYXJlbnRzW10gPSB7Cj4gPiArwqDCoMKgwqDCoMKgIEVQX1BBUkVOVCgi eHRhbGkiKSwKPiA+ICvCoMKgwqDCoMKgwqAgRVBfUEFSRU5UKCJwbGwxIiksCj4gPiArwqDCoMKg wqDCoMKgIEVQX1BBUkVOVCgicGxsMiIpLAo+IAo+IHBsbDIgYW5kIHBsbDEgYXJlbid0IGluIHRo ZSBEVCBiaW5kaW5nLCBzbyB0aGV5IHNob3VsZG4ndCBiZSBzZXQgZm9yCj4gLmZ3X25hbWUgaGVy ZS4KPiAKPiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBlcDkzeHhfY2xrIHsKPiA+ICvCoMKgwqDC oMKgwqAgc3RydWN0IGNsa19odyBodzsKPiA+ICvCoMKgwqDCoMKgwqAgdTE2IGlkeDsKPiA+ICvC oMKgwqDCoMKgwqAgdTE2IHJlZzsKPiA+ICvCoMKgwqDCoMKgwqAgdTMyIG1hc2s7Cj4gPiArwqDC oMKgwqDCoMKgIHU4IGJpdF9pZHg7Cj4gPiArwqDCoMKgwqDCoMKgIHU4IHNoaWZ0Owo+ID4gK8Kg wqDCoMKgwqDCoCB1OCB3aWR0aDsKPiA+ICvCoMKgwqDCoMKgwqAgdTggbnVtX2RpdjsKPiA+ICvC oMKgwqDCoMKgwqAgY29uc3QgY2hhciAqZGl2Owo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IGVw OTN4eF9jbGtfcHJpdiB7Cj4gPiArwqDCoMKgwqDCoMKgIHNwaW5sb2NrX3QgbG9jazsKPiA+ICvC oMKgwqDCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2Owo+ID4gK8KgwqDCoMKgwqDCoCB2b2lkIF9f aW9tZW0gKmJhc2U7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCByZWdtYXAgKm1hcDsKPiA+ICvC oMKgwqDCoMKgwqAgc3RydWN0IGNsa19odyAqZml4ZWRbMTZdOwo+ID4gK8KgwqDCoMKgwqDCoCBz dHJ1Y3QgZXA5M3h4X2NsayByZWdbXTsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3Qg ZXA5M3h4X2NsayAqZXA5M3h4X2Nsa19mcm9tKHN0cnVjdCBjbGtfaHcgKmh3KQo+ID4gK3sKPiA+ ICvCoMKgwqDCoMKgwqAgcmV0dXJuIGNvbnRhaW5lcl9vZihodywgc3RydWN0IGVwOTN4eF9jbGss IGh3KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBlcDkzeHhfY2xrX3ByaXYgKmVw OTN4eF9wcml2X2Zyb20oc3RydWN0IGVwOTN4eF9jbGsKPiA+ICpjbGspCj4gPiArewo+ID4gK8Kg wqDCoMKgwqDCoCByZXR1cm4gY29udGFpbmVyX29mKGNsaywgc3RydWN0IGVwOTN4eF9jbGtfcHJp diwgcmVnW2Nsay0KPiA+ID5pZHhdKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBlcDkz eHhfY2xrX2lzX2VuYWJsZWQoc3RydWN0IGNsa19odyAqaHcpCj4gPiArewo+ID4gK8KgwqDCoMKg wqDCoCBzdHJ1Y3QgZXA5M3h4X2NsayAqY2xrID0gZXA5M3h4X2Nsa19mcm9tKGh3KTsKPiA+ICvC oMKgwqDCoMKgwqAgc3RydWN0IGVwOTN4eF9jbGtfcHJpdiAqcHJpdiA9IGVwOTN4eF9wcml2X2Zy b20oY2xrKTsKPiA+ICvCoMKgwqDCoMKgwqAgdTMyIHZhbDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqAgcmVnbWFwX3JlYWQocHJpdi0+bWFwLCBjbGstPnJlZywgJnZhbCk7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgIHJldHVybiAhISh2YWwgJiBCSVQoY2xrLT5iaXRfaWR4KSk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgZXA5M3h4X2Nsa19lbmFibGUoc3RydWN0IGNsa19odyAqaHcpCj4g PiArewo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgZXA5M3h4X2NsayAqY2xrID0gZXA5M3h4X2Ns a19mcm9tKGh3KTsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGVwOTN4eF9jbGtfcHJpdiAqcHJp diA9IGVwOTN4eF9wcml2X2Zyb20oY2xrKTsKPiA+ICvCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9u ZyBmbGFnczsKPiA+ICvCoMKgwqDCoMKgwqAgdTMyIHZhbDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqAgc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqAgcmVnbWFwX3JlYWQocHJpdi0+bWFwLCBjbGstPnJlZywgJnZhbCk7Cj4gPiArwqDC oMKgwqDCoMKgIHZhbCB8PSBCSVQoY2xrLT5iaXRfaWR4KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqAgZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZShwcml2LT5tYXAsIGNsay0+cmVnLCB2YWwp Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5s b2NrLCBmbGFncyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgdm9pZCBlcDkzeHhfY2xrX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcp Cj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgZXA5M3h4X2NsayAqY2xrID0gZXA5M3h4 X2Nsa19mcm9tKGh3KTsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGVwOTN4eF9jbGtfcHJpdiAq cHJpdiA9IGVwOTN4eF9wcml2X2Zyb20oY2xrKTsKPiA+ICvCoMKgwqDCoMKgwqAgdW5zaWduZWQg bG9uZyBmbGFnczsKPiA+ICvCoMKgwqDCoMKgwqAgdTMyIHZhbDsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqAgc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqAgcmVnbWFwX3JlYWQocHJpdi0+bWFwLCBjbGstPnJlZywgJnZhbCk7Cj4gPiAr wqDCoMKgwqDCoMKgIHZhbCAmPSB+QklUKGNsay0+Yml0X2lkeCk7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgIGVwOTN4eF9zeXNjb25fc3dsb2NrZWRfd3JpdGUocHJpdi0+bWFwLCBjbGstPnJlZywg dmFsKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJp di0+bG9jaywgZmxhZ3MpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNs a19vcHMgY2xrX2VwOTN4eF9nYXRlX29wcyA9IHsKPiA+ICvCoMKgwqDCoMKgwqAgLmVuYWJsZSA9 IGVwOTN4eF9jbGtfZW5hYmxlLAo+ID4gK8KgwqDCoMKgwqDCoCAuZGlzYWJsZSA9IGVwOTN4eF9j bGtfZGlzYWJsZSwKPiA+ICvCoMKgwqDCoMKgwqAgLmlzX2VuYWJsZWQgPSBlcDkzeHhfY2xrX2lz X2VuYWJsZWQsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IGVwOTN4eF9jbGtfcmVnaXN0 ZXJfZ2F0ZShzdHJ1Y3QgZXA5M3h4X2NsayAqY2xrLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y29uc3QgY2hhciAqbmFtZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGNoYXIgKnBh cmVudF9uYW1lLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBmbGFncywK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCByZWcsCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB1OCBiaXRfaWR4KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGVw OTN4eF9jbGtfcHJpdiAqcHJpdiA9IGVwOTN4eF9wcml2X2Zyb20oY2xrKTsKPiA+ICvCoMKgwqDC oMKgwqAgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBwYXJlbnRfZGF0YSA9IHsgfTsKPiA+ICvCoMKg wqDCoMKgwqAgc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdCA9IHsgfTsKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqAgaW5pdC5uYW1lID0gbmFtZTsKPiA+ICvCoMKgwqDCoMKgwqAgaW5pdC5vcHMgPSAm Y2xrX2VwOTN4eF9nYXRlX29wczsKPiA+ICvCoMKgwqDCoMKgwqAgaW5pdC5mbGFncyA9IGZsYWdz Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBwYXJlbnRfZGF0YS5md19uYW1lID0gcGFyZW50X25h bWU7Cj4gPiArwqDCoMKgwqDCoMKgIHBhcmVudF9kYXRhLm5hbWUgPSBwYXJlbnRfbmFtZTsKPiA+ ICvCoMKgwqDCoMKgwqAgaW5pdC5wYXJlbnRfZGF0YSA9ICZwYXJlbnRfZGF0YTsKPiA+ICvCoMKg wqDCoMKgwqAgaW5pdC5udW1fcGFyZW50cyA9IDE7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGNs ay0+cmVnID0gcmVnOwo+ID4gK8KgwqDCoMKgwqDCoCBjbGstPmJpdF9pZHggPSBiaXRfaWR4Owo+ ID4gK8KgwqDCoMKgwqDCoCBjbGstPmh3LmluaXQgPSAmaW5pdDsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqAgcmV0dXJuIGRldm1fY2xrX2h3X3JlZ2lzdGVyKHByaXYtPmRldiwgJmNsay0+aHcpOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdTggZXA5M3h4X211eF9nZXRfcGFyZW50KHN0cnVjdCBj bGtfaHcgKmh3KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGVwOTN4eF9jbGsgKmNs ayA9IGVwOTN4eF9jbGtfZnJvbShodyk7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBlcDkzeHhf Y2xrX3ByaXYgKnByaXYgPSBlcDkzeHhfcHJpdl9mcm9tKGNsayk7Cj4gPiArwqDCoMKgwqDCoMKg IHUzMiB2YWw7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIHJlZ21hcF9yZWFkKHByaXYtPm1hcCwg Y2xrLT5yZWcsICZ2YWwpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCB2YWwgJj0gRVA5M1hYX1NZ U0NPTl9DTEtESVZfTUFTSzsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgc3dpdGNoICh2YWwpIHsK PiA+ICvCoMKgwqDCoMKgwqAgY2FzZSBFUDkzWFhfU1lTQ09OX0NMS0RJVl9FU0VMOgo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDE7IC8vIFBMTDEKPiA+ICvCoMKgwqDC oMKgwqAgY2FzZSBFUDkzWFhfU1lTQ09OX0NMS0RJVl9NQVNLOgo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIDI7IC8vIFBMTDIKPiA+ICvCoMKgwqDCoMKgwqAgZGVmYXVs dDoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ID4gK8KgwqDCoMKg wqDCoCB9Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCByZXR1cm4gMDsgLy8gWFRBTEkKPiAKPiBQ bGVhc2UgdXNlIC8qIGNvbW1lbnRzIGxpa2UgdGhpcyAqLwo+IAo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgaW50IGVwOTN4eF9tdXhfc2V0X3BhcmVudF9sb2NrKHN0cnVjdCBjbGtfaHcgKmh3LCB1 OCBpbmRleCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBlcDkzeHhfY2xrICpjbGsg PSBlcDkzeHhfY2xrX2Zyb20oaHcpOwo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgZXA5M3h4X2Ns a19wcml2ICpwcml2ID0gZXA5M3h4X3ByaXZfZnJvbShjbGspOwo+ID4gK8KgwqDCoMKgwqDCoCB1 bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gK8KgwqDCoMKgwqDCoCB1MzIgdmFsOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoCBpZiAoaW5kZXggPj0gQVJSQVlfU0laRShlcDkzeHhfY2xrX3BhcmVudHMp KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgIHNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIHJlZ21hcF9yZWFkKHByaXYtPm1hcCwgY2xrLT5yZWcs ICZ2YWwpOwo+ID4gK8KgwqDCoMKgwqDCoCB2YWwgJj0gfihFUDkzWFhfU1lTQ09OX0NMS0RJVl9N QVNLKTsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKGluZGV4KSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB2YWwgfD0gRVA5M1hYX1NZU0NPTl9DTEtESVZfRVNFTDsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZhbCB8PSAoaW5kZXggLSAxKSA/IEVQOTNYWF9TWVND T05fQ0xLRElWX1BTRUwgOiAwOwo+ID4gK8KgwqDCoMKgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgIGVwOTN4eF9zeXNjb25fc3dsb2NrZWRfd3JpdGUocHJpdi0+bWFwLCBjbGstPnJlZywg dmFsKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJp di0+bG9jaywgZmxhZ3MpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgaXNfYmVzdCh1bnNpZ25lZCBsb25nIHJhdGUsIHVuc2ln bmVkIGxvbmcgbm93LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHVuc2lnbmVkIGxvbmcgYmVzdCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgIHJldHVybiBhYnMo cmF0ZSAtIG5vdykgPCBhYnMocmF0ZSAtIGJlc3QpOwo+IAo+IEFub3RoZXIgY2FzZSB3aGVyZSB3 ZSBuZWVkIGFic19kaWZmKCkgc28gdGhhdCBpdCBkb2Vzbid0IGdldCBjb25mdXNlZAo+IHdoZW4g dHJ5aW5nIHRvIGRvIHNpZ25lZCBjb21wYXJpc29uLgo+IAo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IGVwOTN4eF9tdXhfZGV0ZXJtaW5lX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBjbGtfcmF0ZV9yZXF1ZXN0ICpyZXEpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDC oCB1bnNpZ25lZCBsb25nIGJlc3RfcmF0ZSA9IDAsIGFjdHVhbF9yYXRlLCBtY2xrX3JhdGU7Cj4g PiArwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgcmF0ZSA9IHJlcS0+cmF0ZTsKPiA+ICvCoMKg wqDCoMKgwqAgc3RydWN0IGNsa19odyAqcGFyZW50X2Jlc3QgPSBOVUxMOwo+ID4gK8KgwqDCoMKg wqDCoCB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlX2Jlc3Q7Cj4gPiArwqDCoMKgwqDCoMKgIHVu c2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7Cj4gPiArwqDCoMKgwqDCoMKgIGludCBkaXYsIHBkaXY7 Cj4gPiArwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oCAvKgo+ID4gK8KgwqDCoMKgwqDCoMKgICogVHJ5IHRoZSB0d28gcGxsJ3MgYW5kIHRoZSBleHRl cm5hbCBjbG9jawo+ID4gK8KgwqDCoMKgwqDCoMKgICogQmVjYXVzZSB0aGUgdmFsaWQgcHJlZGl2 aWRlcnMgYXJlIDIsIDIuNSBhbmQgMywgd2UKPiA+IG11bHRpcGx5Cj4gPiArwqDCoMKgwqDCoMKg wqAgKiBhbGwgdGhlIGNsb2NrcyBieSAyIHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IG1hdGguCj4g PiArwqDCoMKgwqDCoMKgwqAgKgo+ID4gK8KgwqDCoMKgwqDCoMKgICogVGhpcyBpcyBiYXNlZCBv biB0aGUgYWxnb3JpdGhtIGluIHRoZSBlcDkzeHggcmFzdGVyCj4gPiBndWlkZToKPiA+ICvCoMKg wqDCoMKgwqDCoCAqIGh0dHA6Ly9iZS1hLW1hdmVyaWNrLmNvbS9lbi9wdWJzL2FwcE5vdGUvQU4y NjlSRVYxLnBkZgo+ID4gK8KgwqDCoMKgwqDCoMKgICoKPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ ID4gK8KgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgY2xrX2h3X2dldF9udW1fcGFyZW50cyho dyk7IGkrKykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGNsa19o dyAqcGFyZW50ID0KPiA+IGNsa19od19nZXRfcGFyZW50X2J5X2luZGV4KGh3LCBpKTsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhcmVudF9yYXRlID0gY2xrX2h3X2dl dF9yYXRlKHBhcmVudCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtY2xrX3Jh dGUgPSBwYXJlbnRfcmF0ZSAqIDI7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAvKiBUcnkgZWFjaCBwcmVkaXZpZGVyIHZhbHVlICovCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBmb3IgKHBkaXYgPSA0OyBwZGl2IDw9IDY7IHBkaXYrKykgewo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRpdiA9IERJVl9ST1VO RF9DTE9TRVNUKG1jbGtfcmF0ZSwgcmF0ZSAqCj4gPiBwZGl2KTsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZGl2IDwgMSB8fCBkaXYgPiAxMjcp Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNvbnRpbnVlOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGFjdHVhbF9yYXRlID0gRElWX1JPVU5EX0NMT1NFU1QobWNsa19y YXRlLAo+ID4gcGRpdiAqIGRpdik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaWYgKGlzX2Jlc3QocmF0ZSwgYWN0dWFsX3JhdGUsIGJlc3RfcmF0ZSkp Cj4gPiB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGJlc3RfcmF0ZSA9IGFjdHVhbF9yYXRlOwo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYXJlbnRf cmF0ZV9iZXN0ID0gcGFyZW50X3JhdGU7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhcmVudF9iZXN0ID0gcGFyZW50Owo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiA+ICvCoMKgwqDCoMKgwqAgfQo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoCBpZiAoIXBhcmVudF9iZXN0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIHJlcS0+ YmVzdF9wYXJlbnRfcmF0ZSA9IHBhcmVudF9yYXRlX2Jlc3Q7Cj4gPiArwqDCoMKgwqDCoMKgIHJl cS0+YmVzdF9wYXJlbnRfaHcgPSBwYXJlbnRfYmVzdDsKPiA+ICvCoMKgwqDCoMKgwqAgcmVxLT5y YXRlID0gYmVzdF9yYXRlOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgZXA5M3h4X2RkaXZfcmVjYWxjX3JhdGUo c3RydWN0IGNsa19odyAqaHcsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdW5zaWduZWQgbG9uZwo+ID4gcGFyZW50X3JhdGUpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDC oCBzdHJ1Y3QgZXA5M3h4X2NsayAqY2xrID0gZXA5M3h4X2Nsa19mcm9tKGh3KTsKPiA+ICvCoMKg wqDCoMKgwqAgc3RydWN0IGVwOTN4eF9jbGtfcHJpdiAqcHJpdiA9IGVwOTN4eF9wcml2X2Zyb20o Y2xrKTsKPiA+ICvCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IHBkaXYsIGRpdjsKPiA+ICvCoMKg wqDCoMKgwqAgdTMyIHZhbDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcmVnbWFwX3JlYWQocHJp di0+bWFwLCBjbGstPnJlZywgJnZhbCk7Cj4gPiArwqDCoMKgwqDCoMKgIHBkaXYgPSAoKHZhbCA+ PiBFUDkzWFhfU1lTQ09OX0NMS0RJVl9QRElWX1NISUZUKSAmIDB4MDMpOwo+ID4gK8KgwqDCoMKg wqDCoCBkaXYgPSB2YWwgJiBHRU5NQVNLKDYsIDApOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAoIWRp dikKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoCByZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QocGFyZW50X3JhdGUgKiAyLCAo cGRpdiArIDMpICoKPiA+IGRpdik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZXA5M3h4 X2RkaXZfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcKPiA+IHJhdGUs Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCj4gPiArewo+ID4gK8KgwqDCoMKg wqDCoCBzdHJ1Y3QgZXA5M3h4X2NsayAqY2xrID0gZXA5M3h4X2Nsa19mcm9tKGh3KTsKPiA+ICvC oMKgwqDCoMKgwqAgc3RydWN0IGVwOTN4eF9jbGtfcHJpdiAqcHJpdiA9IGVwOTN4eF9wcml2X2Zy b20oY2xrKTsKPiA+ICvCoMKgwqDCoMKgwqAgaW50IHBkaXYsIGRpdiwgbnBkaXYsIG5kaXY7Cj4g PiArwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgYWN0dWFsX3JhdGUsIG1jbGtfcmF0ZSwgcmF0 ZV9lcnIgPSBVTE9OR19NQVg7Cj4gPiArwqDCoMKgwqDCoMKgIHUzMiB2YWw7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgIHJlZ21hcF9yZWFkKHByaXYtPm1hcCwgY2xrLT5yZWcsICZ2YWwpOwo+ID4g K8KgwqDCoMKgwqDCoCBtY2xrX3JhdGUgPSBwYXJlbnRfcmF0ZSAqIDI7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgIGZvciAocGRpdiA9IDQ7IHBkaXYgPD0gNjsgcGRpdisrKSB7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkaXYgPSBESVZfUk9VTkRfQ0xPU0VTVChtY2xrX3JhdGUs IHJhdGUgKiBwZGl2KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChkaXYg PCAxIHx8IGRpdiA+IDEyNykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjb250aW51ZTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGFjdHVhbF9yYXRlID0gRElWX1JPVU5EX0NMT1NFU1QobWNsa19yYXRlLCBwZGl2ICoKPiA+ IGRpdik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYWJzKGFjdHVhbF9y YXRlIC0gcmF0ZSkgPCByYXRlX2Vycikgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIG5wZGl2ID0gcGRpdiAtIDM7Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmRpdiA9IGRpdjsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByYXRlX2VyciA9IGFicyhhY3R1YWxf cmF0ZSAtIHJhdGUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ID4gK8Kg wqDCoMKgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGlmIChyYXRlX2VyciA9PSBVTE9O R19NQVgpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgLyogQ2xlYXIgb2xkIGRpdmlkZXJzICovCj4gPiArwqDC oMKgwqDCoMKgIHZhbCAmPSB+KEdFTk1BU0soOSwgMCkgJiB+QklUKDcpKTsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqAgLyogU2V0IHRoZSBuZXcgcGRpdiBhbmQgZGl2IGJpdHMgZm9yIHRoZSBuZXcg Y2xvY2sgcmF0ZSAqLwo+ID4gK8KgwqDCoMKgwqDCoCB2YWwgfD0gKG5wZGl2IDw8IEVQOTNYWF9T WVNDT05fQ0xLRElWX1BESVZfU0hJRlQpIHwgbmRpdjsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAg ZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZShwcml2LT5tYXAsIGNsay0+cmVnLCB2YWwpOwo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBjbGtfb3BzIGNsa19kZGl2X29wcyA9IHsKPiA+ICvCoMKgwqDCoMKgwqAg LmVuYWJsZSA9IGVwOTN4eF9jbGtfZW5hYmxlLAo+ID4gK8KgwqDCoMKgwqDCoCAuZGlzYWJsZSA9 IGVwOTN4eF9jbGtfZGlzYWJsZSwKPiA+ICvCoMKgwqDCoMKgwqAgLmlzX2VuYWJsZWQgPSBlcDkz eHhfY2xrX2lzX2VuYWJsZWQsCj4gPiArwqDCoMKgwqDCoMKgIC5nZXRfcGFyZW50ID0gZXA5M3h4 X211eF9nZXRfcGFyZW50LAo+ID4gK8KgwqDCoMKgwqDCoCAuc2V0X3BhcmVudCA9IGVwOTN4eF9t dXhfc2V0X3BhcmVudF9sb2NrLAo+ID4gK8KgwqDCoMKgwqDCoCAuZGV0ZXJtaW5lX3JhdGUgPSBl cDkzeHhfbXV4X2RldGVybWluZV9yYXRlLAo+ID4gK8KgwqDCoMKgwqDCoCAucmVjYWxjX3JhdGUg PSBlcDkzeHhfZGRpdl9yZWNhbGNfcmF0ZSwKPiA+ICvCoMKgwqDCoMKgwqAgLnNldF9yYXRlID0g ZXA5M3h4X2RkaXZfc2V0X3JhdGUsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IGNsa19o d19yZWdpc3Rlcl9kZGl2KHN0cnVjdCBlcDkzeHhfY2xrICpjbGssCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgY2hhciAqbmFtZSwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgcmVnLAo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU4IGJpdF9pZHgpCj4gPiArewo+ID4gK8KgwqDC oMKgwqDCoCBzdHJ1Y3QgZXA5M3h4X2Nsa19wcml2ICpwcml2ID0gZXA5M3h4X3ByaXZfZnJvbShj bGspOwo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0ID0geyB9Owo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBpbml0Lm5hbWUgPSBuYW1lOwo+ID4gK8KgwqDCoMKgwqDC oCBpbml0Lm9wcyA9ICZjbGtfZGRpdl9vcHM7Cj4gPiArwqDCoMKgwqDCoMKgIGluaXQuZmxhZ3Mg PSAwOwo+ID4gK8KgwqDCoMKgwqDCoCBpbml0LnBhcmVudF9kYXRhID0gZXA5M3h4X2Nsa19wYXJl bnRzOwo+ID4gK8KgwqDCoMKgwqDCoCBpbml0Lm51bV9wYXJlbnRzID0gQVJSQVlfU0laRShlcDkz eHhfY2xrX3BhcmVudHMpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBjbGstPnJlZyA9IHJlZzsK PiA+ICvCoMKgwqDCoMKgwqAgY2xrLT5iaXRfaWR4ID0gYml0X2lkeDsKPiA+ICvCoMKgwqDCoMKg wqAgY2xrLT5ody5pbml0ID0gJmluaXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIHJldHVybiBk ZXZtX2Nsa19od19yZWdpc3Rlcihwcml2LT5kZXYsICZjbGstPmh3KTsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHVuc2lnbmVkIGxvbmcgZXA5M3h4X2Rpdl9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xr X2h3ICpodywKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZwo+ ID4gcGFyZW50X3JhdGUpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgZXA5M3h4X2Ns ayAqY2xrID0gZXA5M3h4X2Nsa19mcm9tKGh3KTsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGVw OTN4eF9jbGtfcHJpdiAqcHJpdiA9IGVwOTN4eF9wcml2X2Zyb20oY2xrKTsKPiA+ICvCoMKgwqDC oMKgwqAgdTMyIHZhbDsKPiA+ICvCoMKgwqDCoMKgwqAgdTggaW5kZXg7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgIHJlZ21hcF9yZWFkKHByaXYtPm1hcCwgY2xrLT5yZWcsICZ2YWwpOwo+ID4gK8Kg wqDCoMKgwqDCoCBpbmRleCA9ICh2YWwgJiBjbGstPm1hc2spID4+IGNsay0+c2hpZnQ7Cj4gPiAr wqDCoMKgwqDCoMKgIGlmIChpbmRleCA+IGNsay0+bnVtX2RpdikKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCByZXR1cm4g RElWX1JPVU5EX0NMT1NFU1QocGFyZW50X3JhdGUsIGNsay0+ZGl2W2luZGV4XSk7Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyBsb25nIGVwOTN4eF9kaXZfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3 ICpodywgdW5zaWduZWQgbG9uZwo+ID4gcmF0ZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9u ZyAqcGFyZW50X3JhdGUpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgZXA5M3h4X2Ns ayAqY2xrID0gZXA5M3h4X2Nsa19mcm9tKGh3KTsKPiA+ICvCoMKgwqDCoMKgwqAgdW5zaWduZWQg bG9uZyBiZXN0ID0gMCwgbm93Owo+ID4gK8KgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgaTsKPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IGNsay0+bnVtX2RpdjsgaSsrKSB7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoKHJhdGUgKiBjbGstPmRpdltp XSkgPT0gKnBhcmVudF9yYXRlKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiByYXRlOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgbm93ID0gRElWX1JPVU5EX0NMT1NFU1QoKnBhcmVudF9yYXRlLCBjbGstPmRpdltp XSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWJlc3QgfHwgaXNfYmVz dChyYXRlLCBub3csIGJlc3QpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJlc3QgPSBub3c7Cj4gPiArwqDCoMKgwqDCoMKgIH0KPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqAgcmV0dXJuIGJlc3Q7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZXA5 M3h4X2Rpdl9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZwo+ID4gcmF0 ZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCj4gPiArewo+ID4gK8KgwqDCoMKg wqDCoCBzdHJ1Y3QgZXA5M3h4X2NsayAqY2xrID0gZXA5M3h4X2Nsa19mcm9tKGh3KTsKPiA+ICvC oMKgwqDCoMKgwqAgc3RydWN0IGVwOTN4eF9jbGtfcHJpdiAqcHJpdiA9IGVwOTN4eF9wcml2X2Zy b20oY2xrKTsKPiA+ICvCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IGk7Cj4gPiArwqDCoMKgwqDC oMKgIHUzMiB2YWw7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIHJlZ21hcF9yZWFkKHByaXYtPm1h cCwgY2xrLT5yZWcsICZ2YWwpOwo+ID4gK8KgwqDCoMKgwqDCoCB2YWwgJj0gfmNsay0+bWFzazsK PiA+ICvCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IGNsay0+bnVtX2RpdjsgaSsrKQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJhdGUgPT0gRElWX1JPVU5EX0NMT1NF U1QocGFyZW50X3JhdGUsIGNsay0KPiA+ID5kaXZbaV0pKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFsIHw9IGkgPDwgY2xrLT5zaGlmdDsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAg aWYgKGkgPT0gY2xrLT5udW1fZGl2KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGVwOTN4eF9zeXNjb25fc3ds b2NrZWRfd3JpdGUocHJpdi0+bWFwLCBjbGstPnJlZywgdmFsKTsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xr X29wcyBlcDkzeHhfZGl2X29wcyA9IHsKPiA+ICvCoMKgwqDCoMKgwqAgLmVuYWJsZSA9IGVwOTN4 eF9jbGtfZW5hYmxlLAo+ID4gK8KgwqDCoMKgwqDCoCAuZGlzYWJsZSA9IGVwOTN4eF9jbGtfZGlz YWJsZSwKPiA+ICvCoMKgwqDCoMKgwqAgLmlzX2VuYWJsZWQgPSBlcDkzeHhfY2xrX2lzX2VuYWJs ZWQsCj4gPiArwqDCoMKgwqDCoMKgIC5yZWNhbGNfcmF0ZSA9IGVwOTN4eF9kaXZfcmVjYWxjX3Jh dGUsCj4gPiArwqDCoMKgwqDCoMKgIC5yb3VuZF9yYXRlID0gZXA5M3h4X2Rpdl9yb3VuZF9yYXRl LAo+ID4gK8KgwqDCoMKgwqDCoCAuc2V0X3JhdGUgPSBlcDkzeHhfZGl2X3NldF9yYXRlLAo+ID4g K307Cj4gPiArCj4gPiArc3RhdGljIGludCBjbGtfaHdfcmVnaXN0ZXJfZGl2KHN0cnVjdCBlcDkz eHhfY2xrICpjbGssCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgY2hhciAqbmFt ZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwK PiAKPiBQbGVhc2UgdHJ5IHRvIHBhc3MgYSBkaXJlY3QgcG9pbnRlciB0byB0aGUgcGFyZW50IGNs a19odyBpbnN0ZWFkIG9yCj4gaWYKPiB0aGUgY2xrIGV4aXN0cyBvdXRzaWRlIHRoZSBjb250cm9s bGVyIHBhc3MgYSBEVCBpbmRleC4KPiAKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNp Z25lZCBpbnQgcmVnLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU4IGVuYWJsZV9iaXQs Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTggc2hpZnQsCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgdTggd2lkdGgsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qg Y2hhciAqY2xrX2Rpdmlzb3JzLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU4IG51bV9k aXYpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgZXA5M3h4X2Nsa19wcml2ICpwcml2 ID0gZXA5M3h4X3ByaXZfZnJvbShjbGspOwo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgY2xrX3Bh cmVudF9kYXRhIHBhcmVudF9kYXRhID0geyB9Owo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgY2xr X2luaXRfZGF0YSBpbml0ID0geyB9Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBpbml0Lm5hbWUg PSBuYW1lOwo+ID4gK8KgwqDCoMKgwqDCoCBpbml0Lm9wcyA9ICZlcDkzeHhfZGl2X29wczsKPiA+ ICvCoMKgwqDCoMKgwqAgaW5pdC5mbGFncyA9IDA7Cj4gPiArwqDCoMKgwqDCoMKgIHBhcmVudF9k YXRhLmZ3X25hbWUgPSBwYXJlbnRfbmFtZTsKPiA+ICvCoMKgwqDCoMKgwqAgcGFyZW50X2RhdGEu bmFtZSA9IHBhcmVudF9uYW1lOwo+ID4gK8KgwqDCoMKgwqDCoCBpbml0LnBhcmVudF9kYXRhID0g JnBhcmVudF9kYXRhOwo+ID4gK8KgwqDCoMKgwqDCoCBpbml0Lm51bV9wYXJlbnRzID0gMTsKPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqAgY2xrLT5yZWcgPSByZWc7Cj4gPiArwqDCoMKgwqDCoMKgIGNs ay0+Yml0X2lkeCA9IGVuYWJsZV9iaXQ7Cj4gPiArwqDCoMKgwqDCoMKgIGNsay0+bWFzayA9IEdF Tk1BU0soc2hpZnQgKyB3aWR0aCAtIDEsIHNoaWZ0KTsKPiA+ICvCoMKgwqDCoMKgwqAgY2xrLT5z aGlmdCA9IHNoaWZ0Owo+ID4gK8KgwqDCoMKgwqDCoCBjbGstPmRpdiA9IGNsa19kaXZpc29yczsK PiBbLi4uXQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZXA5M3h4X2Nsa19wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGRldmlj ZSAqZGV2ID0gJnBkZXYtPmRldjsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGRldmljZV9ub2Rl ICpucCA9IGRldi0+b2Zfbm9kZTsKPiA+ICvCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IHNvY19k ZXZpY2VfYXR0cmlidXRlICptYXRjaDsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGVwOTN4eF9j bGtfcHJpdiAqcHJpdjsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGVwOTN4eF9jbGsgKmNsazsK PiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7Cj4gPiArwqDCoMKg wqDCoMKgIHVuc2lnbmVkIGxvbmcgY2xrX3NwaV9kaXY7Cj4gPiArwqDCoMKgwqDCoMKgIGludCBy ZXQ7Cj4gPiArwqDCoMKgwqDCoMKgIHUzMiB2YWx1ZTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAg cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHN0cnVjdF9zaXplKHByaXYsIHJlZywKPiA+IEVQOTNY WF9DTEtfVUFSVCksIEdGUF9LRVJORUwpOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAoIXByaXYpCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqAgc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwo+ID4gK8KgwqDCoMKg wqDCoCBwcml2LT5kZXYgPSBkZXY7Cj4gPiArwqDCoMKgwqDCoMKgIHBhcmVudCA9IG9mX2dldF9w YXJlbnQobnApOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAoIXBhcmVudCkKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgIm5v IHN5c2Nvbgo+ID4gcGFyZW50IGZvciBjbGsgbm9kZVxuIik7Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgIHByaXYtPm1hcCA9IHN5c2Nvbl9ub2RlX3RvX3JlZ21hcChwYXJlbnQpOwo+ID4gK8KgwqDC oMKgwqDCoCBpZiAoSVNfRVJSKHByaXYtPm1hcCkpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIG9mX25vZGVfcHV0KHBhcmVudCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsICJubyBzeXNjb24KPiA+ IHJlZ21hcFxuIik7Cj4gPiArwqDCoMKgwqDCoMKgIH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAg cHJpdi0+YmFzZSA9IGRldm1fb2ZfaW9tYXAoZGV2LCBwYXJlbnQsIDAsIE5VTEwpOwo+ID4gK8Kg wqDCoMKgwqDCoCBvZl9ub2RlX3B1dChwYXJlbnQpOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAoSVNf RVJSKHByaXYtPmJhc2UpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IFBUUl9FUlIocHJpdi0+YmFzZSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIHJldCA9IGVwOTN4 eF91YXJ0X2Nsb2NrX2luaXQocHJpdik7Cj4gPiArwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoCByZXQgPSBlcDkzeHhfZG1hX2Nsb2NrX2luaXQocHJpdik7Cj4gPiArwqDCoMKgwqDC oMKgIGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0 Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCAvKgo+ID4gK8KgwqDCoMKgwqDCoMKgICogRVA5M3h4 IFNTUCBjbG9jayByYXRlIHdhcyBkb3VibGVkIGluIHZlcnNpb24gRTIuIEZvcgo+ID4gbW9yZSBp bmZvcm1hdGlvbgo+ID4gK8KgwqDCoMKgwqDCoMKgICogc2VlOgo+ID4gK8KgwqDCoMKgwqDCoMKg ICrCoMKgwqDCoCBodHRwOi8vd3d3LmNpcnJ1cy5jb20vZW4vcHVicy9hcHBOb3RlL0FOMjczUkVW NC5wZGYKPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4gK8KgwqDCoMKgwqDCoCBjbGtfc3BpX2Rp diA9IDI7Cj4gPiArwqDCoMKgwqDCoMKgIG1hdGNoID0gc29jX2RldmljZV9tYXRjaChlcDkzeHhf c29jX3RhYmxlKTsKPiAKPiBXaHkgaXNuJ3QgdGhpcyBwYXJ0IG9mIHRoZSBjb21wYXRpYmxlIHN0 cmluZyBmb3IgdGhlIGRldmljZT8gV2UncmUKPiBhYmxlCj4gdG8gaW50cm9kdWNlIG5ldyBiaW5k aW5ncywgY29ycmVjdD8KCkl0J3Mgbm90IGEgU29DIHZlcnNpb24gcmVsYXRlZCwgc28gd2UgZG9u J3Qga25vdyBzdWNoIHRoaW5ncyBpbgphZHZhbmNlLgoKSXQncyBjdXJyZW50bHkgZGV0ZXJtaW5l ZCBieSBxdWVyeWluZyAiZXA5M3h4X2NoaXBfcmV2aXNpb24iIHdoaWNoCmRldGVybWluZXMgY2hp cCByZXZpc2lvbjoKCmh0dHBzOi8vZWxpeGlyLmJvb3RsaW4uY29tL2xpbnV4L3Y2LjUtcmMyL3Nv dXJjZS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jI0w2MzEKCkkgZGVjaWRlZCBpdCdzIGEg Z29vZCBpZGVhIHRvIGRyb3AgYW5vdGhlciBoZWFkZXIgZXhwb3NlZCBmdW5jdGlvbi4KCiJzb2Nf ZGV2aWNlX21hdGNoIiBvbmx5IHVzZXMgcmV2aXNpb246CgpgYGAKc3RhdGljIGNvbnN0IHN0cnVj dCBzb2NfZGV2aWNlX2F0dHJpYnV0ZSBlcDkzeHhfc29jX3RhYmxlW10gPSB7Cgl7IC5yZXZpc2lv biA9ICJFMiIsIC5kYXRhID0gKHZvaWQgKikxIH0sCgl7IC8qIHNlbnRpbmVsICovIH0KfTsKYGBg CgpCdXQgYXMgdGhlcmUgYXJlIG5vIHJldmlzaW9ucyBncmVhdGVyIHRoYW4gRTIgLSBpdCBpcyBz aW5nbGUgbWF0Y2gKb25seS4KCj4gCj4gPiArwqDCoMKgwqDCoMKgIGlmIChtYXRjaCkKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNsa19zcGlfZGl2ID0gKHVuc2lnbmVkIGxvbmcp bWF0Y2gtPmRhdGE7Cgo=