Received: by 2002:a25:ca44:0:0:0:0:0 with SMTP id a65csp761996ybg; Tue, 28 Jul 2020 19:12:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwWKzXu3qkDqj259kOS/gQ/Caa8/eTdOKLQtKSKq97KdslojXHVzbZbriquRvGQtA+0FapU X-Received: by 2002:a17:906:140e:: with SMTP id p14mr24658214ejc.430.1595988721395; Tue, 28 Jul 2020 19:12:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1595988721; cv=none; d=google.com; s=arc-20160816; b=UddPb60Mqr0Nk+qagaZJ61bm8gAa4YhO+asu5NH/RA0nb3ptOnEdoBoABsSmnc/15k 5rn1QrckwAKds9Y3Pk5Ldh1asqiYHNMq4oln00IQ8BmVVuqkFGa7SZe63e6ws5hjmE2d 1aptRYD9sJzFTAp8yIfZHy5FwbU2ugx0/YFUIzqSXRyi4an0RdLi0x71h+SnRookGTvP YgXHoZQFkt1AkWDutRch3+qsJhSRtUOpSgNjpni+fxGeSmsW1Z7mlHLQ9aX8w/lJvkiR T/MKg1O3oUxYX42L71Ng7QtKG/zmzgd9THLpFaw+jGkejbc6J1SJjWsgynPmTlBW6PaZ JqLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:date:cc:to:from:subject:message-id :dkim-signature; bh=QgCv17VOsXWmYtflyC/NeH13zIi3hsJBBdDqKU+e3jU=; b=GSz/GvY49jGKXfF0124vECbktNpNM89nJrOeUspmpxAprwhu/DG1v1H1NPOsg4dpmE R2Ed9cw1mW8XuLDNafg/govBmhYlBsW9SCvDrf4P2+T+I856tpRSEEtfK7yP14nagyza 1mfzxXCIc5xVCc+zSUFnF+gHElS+C5lX/fN7k0OhL3R9dLwEEr2ngqyLWKYamiFcgft6 cdndG33xFDyuz05f8xVux6MYPWgtTWAOavgtx7PBmLl4nUq7cUSpXnIGb8vtOfPx21L2 cbO5klJOzz1gt4SdpR1bp+GmVp/ZrjZO+QbkYWjUbHf/A/5G31KmFSsHXz59kFDP4gK+ mIMw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=OVVg6B8e; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s5si417510edc.388.2020.07.28.19.11.38; Tue, 28 Jul 2020 19:12:01 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=OVVg6B8e; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730901AbgG2CLG (ORCPT + 99 others); Tue, 28 Jul 2020 22:11:06 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:11515 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1728401AbgG2CLG (ORCPT ); Tue, 28 Jul 2020 22:11:06 -0400 X-UUID: e417cfc4773949b99a4b2c62414f6cda-20200729 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=QgCv17VOsXWmYtflyC/NeH13zIi3hsJBBdDqKU+e3jU=; b=OVVg6B8eCniJYaQ2Qeunp+FgUV0LTSjLwT/lgLtzmY+In5FhDp0s3CarPC40hxpUOqmDIEhoRX/TDmg2aosOHvfENTdmcHlXKNSfKWFLH5vFWHRv5bfezmMFQ8fEP/s8MA2oSJWjqQgjQ2wAwI0DIsqYAJAwF/GQJIbmfoDu4K4=; X-UUID: e417cfc4773949b99a4b2c62414f6cda-20200729 Received: from mtkexhb02.mediatek.inc [(172.21.101.103)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 2010206415; Wed, 29 Jul 2020 10:10:54 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs02n1.mediatek.inc (172.21.101.77) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 29 Jul 2020 10:10:52 +0800 Received: from [172.21.77.33] (172.21.77.33) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 29 Jul 2020 10:10:53 +0800 Message-ID: <1595988652.9265.8.camel@mtkswgap22> Subject: Re: [PATCH v3 2/2] soc: mediatek: add mtk-devapc driver From: Neal Liu To: Chun-Kuang Hu CC: Neal Liu , Rob Herring , Matthias Brugger , "devicetree@vger.kernel.org" , wsd_upstream , lkml , "moderated list:ARM/Mediatek SoC support" , Linux ARM Date: Wed, 29 Jul 2020 10:10:52 +0800 In-Reply-To: References: <1595303971-8793-1-git-send-email-neal.liu@mediatek.com> <1595303971-8793-3-git-send-email-neal.liu@mediatek.com> <1595389756.20193.12.camel@mtkswgap22> <1595484707.26237.12.camel@mtkswgap22> <1595573719.24412.9.camel@mtkswgap22> <1595819152.7630.13.camel@mtkswgap22> <1595908325.1388.8.camel@mtkswgap22> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgQ2h1bi1LdWFuZywNCg0KT24gVHVlLCAyMDIwLTA3LTI4IGF0IDIzOjM1ICswODAwLCBDaHVu LUt1YW5nIEh1IHdyb3RlOg0KPiBIaSwgTmVhbDoNCj4gDQo+IE5lYWwgTGl1IDxuZWFsLmxpdUBt ZWRpYXRlay5jb20+IOaWvCAyMDIw5bm0N+aciDI45pelIOmAseS6jCDkuIrljYgxMTo1MuWvq+mB k++8mg0KPiA+DQo+ID4gSGkgQ2h1bi1LdWFuZywNCj4gPg0KPiA+IE9uIE1vbiwgMjAyMC0wNy0y NyBhdCAyMjo0NyArMDgwMCwgQ2h1bi1LdWFuZyBIdSB3cm90ZToNCj4gPiA+IEhpLCBOZWFsOg0K PiA+ID4NCj4gPiA+IE5lYWwgTGl1IDxuZWFsLmxpdUBtZWRpYXRlay5jb20+IOaWvCAyMDIw5bm0 N+aciDI35pelIOmAseS4gCDkuIrljYgxMTowNuWvq+mBk++8mg0KPiA+ID4gPg0KPiA+ID4gPiBI aSBDaHVuLUt1YW5nLA0KPiA+ID4gPg0KPiA+ID4gPiBPbiBGcmksIDIwMjAtMDctMjQgYXQgMjM6 NTUgKzA4MDAsIENodW4tS3VhbmcgSHUgd3JvdGU6DQo+ID4gPiA+ID4gSGksIE5lYWw6DQo+ID4g PiA+ID4NCj4gPiA+ID4gPiBOZWFsIExpdSA8bmVhbC5saXVAbWVkaWF0ZWsuY29tPiDmlrwgMjAy MOW5tDfmnIgyNOaXpSDpgLHkupQg5LiL5Y2IMjo1NeWvq+mBk++8mg0KPiA+ID4gPiA+ID4NCj4g PiA+ID4gPiA+IEhpIENodW4tS3VhbmcsDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gT24gRnJp LCAyMDIwLTA3LTI0IGF0IDAwOjMyICswODAwLCBDaHVuLUt1YW5nIEh1IHdyb3RlOg0KPiA+ID4g PiA+ID4gPiBIaSwgTmVhbDoNCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gTmVhbCBMaXUg PG5lYWwubGl1QG1lZGlhdGVrLmNvbT4g5pa8IDIwMjDlubQ35pyIMjPml6Ug6YCx5ZubIOS4i+WN iDI6MTHlr6vpgZPvvJoNCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+IEhpIENodW4t S3VhbmcsDQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBPbiBXZWQsIDIwMjAtMDct MjIgYXQgMjI6MjUgKzA4MDAsIENodW4tS3VhbmcgSHUgd3JvdGU6DQo+ID4gPiA+ID4gPiA+ID4g PiBIaSwgTmVhbDoNCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiBOZWFsIExp dSA8bmVhbC5saXVAbWVkaWF0ZWsuY29tPiDmlrwgMjAyMOW5tDfmnIgyMuaXpSDpgLHkuIkg5LiK 5Y2IMTE6NDnlr6vpgZPvvJoNCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ ID4gSGkgQ2h1bi1LdWFuZywNCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ ID4gT24gV2VkLCAyMDIwLTA3LTIyIGF0IDA3OjIxICswODAwLCBDaHVuLUt1YW5nIEh1IHdyb3Rl Og0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEhpLCBOZWFsOg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gTmVhbCBMaXUgPG5lYWwubGl1QG1lZGlhdGVrLmNvbT4g 5pa8IDIwMjDlubQ35pyIMjHml6Ug6YCx5LqMIOS4i+WNiDEyOjAw5a+r6YGT77yaDQo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4g PiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArLyoNCj4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ICsgKiBtdGtfZGV2YXBjX2R1bXBfdmlvX2RiZyAtIGdldCB0aGUgdmlvbGF0aW9uIGlu ZGV4IGFuZCBkdW1wIHRoZSBmdWxsIHZpb2xhdGlvbg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcgaW5mb3JtYXRpb24uDQo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGljIGJv b2wgbXRrX2RldmFwY19kdW1wX3Zpb19kYmcoc3RydWN0IG10a19kZXZhcGNfY29udGV4dCAqY3R4 LCB1MzIgdmlvX2lkeCkNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gPiArICAgICAgIHUzMiBzaGlmdF9iaXQ7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g PiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArICAgICAgIGlmIChjaGVja192aW9fbWFzayhj dHgsIHZpb19pZHgpKQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIHJl dHVybiBmYWxzZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ICsgICAgICAgaWYgKCFjaGVja192aW9fc3RhdHVzKGN0eCwgdmlvX2lkeCkpDQo+ID4g PiA+ID4gPiA+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiA+ID4g PiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKyAgICAgICBzaGlm dF9iaXQgPSBnZXRfc2hpZnRfZ3JvdXAoY3R4LCB2aW9faWR4KTsNCj4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsgICAgICAgaWYgKHN5bmNfdmlvX2Ri ZyhjdHgsIHNoaWZ0X2JpdCkpDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArICAgICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4g PiA+ID4gPiA+ID4gKyAgICAgICBkZXZhcGNfZXh0cmFjdF92aW9fZGJnKGN0eCk7DQo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBJIHRoaW5rIGdldF9zaGlmdF9n cm91cCgpLCBzeW5jX3Zpb19kYmcoKSwgYW5kDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gZGV2YXBj X2V4dHJhY3RfdmlvX2RiZygpIHNob3VsZCBiZSBtb3ZlZCBvdXQgb2YgdmlvX2lkeCBmb3ItbG9v cCAodGhlDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gbG9vcCBpbiBkZXZhcGNfdmlvbGF0aW9uX2ly cSgpKSBiZWNhdXNlIHRoZXNlIHRocmVlIGZ1bmN0aW9uIGlzIG5vdA0KPiA+ID4gPiA+ID4gPiA+ ID4gPiA+IHJlbGF0ZWQgdG8gdmlvX2lkeC4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBBbm90aGVy IHF1ZXN0aW9uOiB3aGVuIG11bHRpcGxlIHZpb19pZHggdmlvbGF0aW9uIG9jY3VyLCB2aW9fYWRk ciBpcw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHJlbGF0ZWQgdG8gd2hpY2ggb25lIHZpb19pZHg/ IFRoZSBsYXRlc3QgaGFwcGVuZWQgb25lPw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+IEFjdHVhbGx5LCBpdCdzIHJlbGF0ZWQg dG8gdmlvX2lkeC4gQnV0IHdlIGRvbid0IHVzZSBpdCBkaXJlY3RseSBvbiB0aGVzZQ0KPiA+ID4g PiA+ID4gPiA+ID4gPiBmdW5jdGlvbi4gSSB0aGluayBiZWxvdyBzbmlwIGNvZGUgbWlnaHQgYmUg YmV0dGVyIHdheSB0byB1bmRlcnN0YW5kIGl0Lg0KPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gPiA+ID4gPiBmb3IgKC4uLikNCj4gPiA+ID4gPiA+ID4gPiA+ID4gew0KPiA+ID4gPiA+ ID4gPiA+ID4gPiAgICAgICAgIGNoZWNrX3Zpb19tYXNrKCkNCj4gPiA+ID4gPiA+ID4gPiA+ID4g ICAgICAgICBjaGVja192aW9fc3RhdHVzKCkNCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4g PiA+ID4gPiA+ID4gICAgICAgICAvLyBpZiBnZXQgdmlvX2lkeCwgbWFzayBpdCB0ZW1wb3Jhcmls eQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiAgICAgICAgIG1hc2tfbW9kdWxlX2lycSh0cnVlKQ0KPiA+ ID4gPiA+ID4gPiA+ID4gPiAgICAgICAgIGNsZWFyX3Zpb19zdGF0dXMoKQ0KPiA+ID4gPiA+ID4g PiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiAgICAgICAgIC8vIGR1bXAgdmlvbGF0aW9uIGlu Zm8NCj4gPiA+ID4gPiA+ID4gPiA+ID4gICAgICAgICBnZXRfc2hpZnRfZ3JvdXAoKQ0KPiA+ID4g PiA+ID4gPiA+ID4gPiAgICAgICAgIHN5bmNfdmlvX2RiZygpDQo+ID4gPiA+ID4gPiA+ID4gPiA+ ICAgICAgICAgZGV2YXBjX2V4dHJhY3RfdmlvX2RiZygpDQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ ID4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgLy8gdW5tYXNrDQo+ID4gPiA+ID4gPiA+ID4gPiA+ ICAgICAgICAgbWFza19tb2R1bGVfaXJxKGZhbHNlKQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiB9DQo+ ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gVGhpcyBzbmlwIGNvZGUgZG9lcyBu b3QgZXhwbGFpbiBhbnkgdGhpbmcuIEkgY291bGQgcmV3cml0ZSB0aGlzIGNvZGUgYXM6DQo+ID4g PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gZm9yICguLi4pDQo+ID4gPiA+ID4gPiA+ ID4gPiB7DQo+ID4gPiA+ID4gPiA+ID4gPiAgICAgY2hlY2tfdmlvX21hc2soKQ0KPiA+ID4gPiA+ ID4gPiA+ID4gICAgIGNoZWNrX3Zpb19zdGF0dXMoKQ0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ ID4gPiA+ID4gPiA+ICAgICAvLyBpZiBnZXQgdmlvX2lkeCwgbWFzayBpdCB0ZW1wb3JhcmlseQ0K PiA+ID4gPiA+ID4gPiA+ID4gICAgIG1hc2tfbW9kdWxlX2lycSh0cnVlKQ0KPiA+ID4gPiA+ID4g PiA+ID4gICAgIGNsZWFyX3Zpb19zdGF0dXMoKQ0KPiA+ID4gPiA+ID4gPiA+ID4gICAgIC8vIHVu bWFzaw0KPiA+ID4gPiA+ID4gPiA+ID4gICAgIG1hc2tfbW9kdWxlX2lycShmYWxzZSkNCj4gPiA+ ID4gPiA+ID4gPiA+IH0NCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiAvLyBk dW1wIHZpb2xhdGlvbiBpbmZvDQo+ID4gPiA+ID4gPiA+ID4gPiBnZXRfc2hpZnRfZ3JvdXAoKQ0K PiA+ID4gPiA+ID4gPiA+ID4gc3luY192aW9fZGJnKCkNCj4gPiA+ID4gPiA+ID4gPiA+IGRldmFw Y19leHRyYWN0X3Zpb19kYmcoKQ0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ IEFuZCBteSB2ZXJzaW9uIGlzIGlkZW50aWNhbCB3aXRoIHlvdXIgdmVyc2lvbiwgaXNuJ3QgaXQ/ DQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBTb3JyeSwgSSBkaWQgbm90IGV4cGxh aW4gaXQgY2xlYXJseS4gTGV0J3MgbWUgdHJ5IGFnYWluLg0KPiA+ID4gPiA+ID4gPiA+IFRoZSBy ZWFzb24gd2h5IEkgcHV0ICJkdW1wIHZpb2xhdGlvbiBpbmZvIiBiZXR3ZWVuIG1hc2sgJiB1bm1h c2sgY29udGV4dA0KPiA+ID4gPiA+ID4gPiA+IGlzIGJlY2F1c2UgaXQgaGFzIHRvIHN0b3AgaW50 ZXJydXB0IGZpcnN0IGJlZm9yZSBkdW1wIHZpb2xhdGlvbiBpbmZvLA0KPiA+ID4gPiA+ID4gPiA+ IGFuZCB0aGVuIHVubWFzayBpdCB0byBwcmVwYXJlIG5leHQgdmlvbGF0aW9uLg0KPiA+ID4gPiA+ ID4gPiA+IFRoZXNlIHNlcXVlbmNlIGd1YXJhbnRlZSB0aGF0IGlmIG11bHRpcGxlIHZpb2xhdGlv biBpcyB0cmlnZ2VyZWQsIHdlDQo+ID4gPiA+ID4gPiA+ID4gc3RpbGwgaGF2ZSBpbmZvcm1hdGlv biB0byBkZWJ1Zy4NCj4gPiA+ID4gPiA+ID4gPiBJZiB0aGUgY29kZSBzZXF1ZW5jZSBpbiB5b3Vy IHZlcnNpb24gYW5kIG11bHRpcGxlIHZpb2xhdGlvbiBpcw0KPiA+ID4gPiA+ID4gPiA+IHRyaWdn ZXJlZCwgdGhlcmUgbWlnaHQgYmUgbm8gYW55IGluZm9ybWF0aW9uIGJ1dCBrZWVwcyBlbnRlcmlu ZyBJU1IuDQo+ID4gPiA+ID4gPiA+ID4gRmluYWxseSwgc3lzdGVtIG1pZ2h0IGJlIGFibm9ybWFs IGFuZCB3YXRjaGRvZyB0aW1lb3V0Lg0KPiA+ID4gPiA+ID4gPiA+IEluIHRoaXMgY2FzZSwgd2Ug c3RpbGwgZG9uJ3QgaGF2ZSBhbnkgaW5mb3JtYXRpb24gdG8gZGVidWcuDQo+ID4gPiA+ID4gPiA+ DQo+ID4gPiA+ID4gPiA+IEkgc3RpbGwgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgbm8gaW5mb3JtYXRp b24gdG8gZGVidWcuIEZvciBleGFtcGxlIHdoZW4NCj4gPiA+ID4gPiA+ID4gdmlvX2lkeCA1LCAx MCwgMTUgaGFzIHZpb2xhdGlvbiwNCj4gPiA+ID4gPiA+ID4gWW91IHdvdWxkIG1hc2sgdmlvX2lk eCA1IHRvIGdldCBpbmZvcm1hdGlvbiwgYnV0IHZpb19pZHggMTAsIDE1IGRvZXMNCj4gPiA+ID4g PiA+ID4gbm90IG1hc2sgeWV0Lg0KPiA+ID4gPiA+ID4gPiBJbiB5b3VyIHdvcmRzLCB3aGVuIHZp b19pZHggMTAsIDE1IG5vdCBtYXNrLCB5b3Ugd291bGQgbm90IGdldCBhbnkNCj4gPiA+ID4gPiA+ ID4gZGVidWcgaW5mb3JtYXRpb24gd2hlbiB5b3UgcHJvY2VzcyB2aW9faWR4IDUuDQo+ID4gPiA+ ID4gPiA+DQo+ID4gPiA+ID4gPiA+IEluIG15IHZlcnNpb24sIEkgd291bGQgY2xlYXIgYWxsIHN0 YXR1cywgd2h5IGtlZXBzIGVudGVyaW5nIElTUj8NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBU aGluayBhYm91dCB0aGlzIGNhc2UsIGlmIHNvbWVvbmUgdHJpZXMgdG8gZHVtcCAiQUFBIiBtb2R1 bGUncyByZWdpc3Rlci4NCj4gPiA+ID4gPiA+IEl0IHdvdWxkIGtlZXAgcmVhZCByZWcgYmFzZSwg YmFzZSsweDQsIGJhc2UrMHg4LCAuLi4NCj4gPiA+ID4gPiA+IEFsbCB0aGVzZSByZWdpc3RlcnMg YXJlIGluIHRoZSBzYW1lIHNsYXZlLCB3aGljaCB3b3VsZCBiZSBzYW1lIHZpb19pZHguDQo+ID4g PiA+ID4gPiAoVGFrZSB2aW9faWR4IDUgYXMgZXhhbXBsZSkNCj4gPiA+ID4gPiA+IEluIHRoaXMg Y2FzZSwgdmlvX2lkeCA1IHdpbGwga2VlcCB0cmlnZ2VyaW5nIGludGVycnVwdC4gSWYgeW91IGRp ZCBub3QNCj4gPiA+ID4gPiA+IGRvICJkdW1wIHZpb2xhdGlvbiBpbmZvIiBiZXR3ZWVuIG1hc2sg JiB1bm1hc2ssIHlvdSBjYW5ub3QgZ2V0IGFueQ0KPiA+ID4gPiA+ID4gdmlvbGF0aW9uIGluZm8g dW50aWwgdGhlIGxhc3QgaW50ZXJydXB0IGJlaW5nIGhhbmRsZWQuDQo+ID4gPiA+ID4gPiBOb3Jt YWxseSwgc3lzdGVtIHdpbGwgY3Jhc2ggYmVmb3JlIGxhc3QgaW50ZXJydXB0IGNvbWluZy4NCj4g PiA+ID4gPg0KPiA+ID4gPiA+IFlvdSBoYXZlIHNhaWQgdGhhdCBmaXJzdCB2aW9fYWRkciB3b3Vs ZCBiZSBrZXB0IHVudGlsIGl0J3MgJ2hhbmRsZWQnLg0KPiA+ID4gPiA+IFNvIHRoZSBmaXJzdCB2 aW9fYWRkciByZWdfYmFzZSB3b3VsZCBiZSBrZXB0IGV2ZW4gdGhvdWdoIG90aGVyDQo+ID4gPiA+ ID4gdmlvbGF0aW9uIGhhcHBlbi4gQW5kIEkgY291bGQgaGFuZGxlIChjbGVhciBzdGF0dXMgYW5k IGR1bXAgaW5mbykgaXQNCj4gPiA+ID4gPiB0aGVuIHZpb19hZGRyIHdvdWxkIG5leHQgdmlvbGF0 aW9uJ3MgYWRkcmVzcy4gSSdtIGNvbmZ1c2VkIHdpdGggeW91cg0KPiA+ID4gPiA+IHN0YXRlbWVu dC4gSWYgQUFBIGlzIGR1bXBpbmcgcmVnaXN0ZXIgb2YgdmlvX2lkeCA1LCBCQkIgaXMgZHVtcGlu Zw0KPiA+ID4gPiA+IHJlZ2lzdGVyIG9mIHZpb19pZHggMTAsIENDQyBpcyBkdW1waW5nIHJlZ2lz dGVyIG9mIHZpb19pZHggMTUsIEkgdGhpbmsNCj4gPiA+ID4gPiB5b3Ugc2hvdWxkIG1hc2sgYWxs IHZpb19pZHggbm90IG9ubHkgb25lLiBTbyB0aGUgY29kZSB3b3VsZCBiZQ0KPiA+ID4gPiA+DQo+ ID4gPiA+ID4gZm9yIGFsbCB2aW9faWR4IHsNCj4gPiA+ID4gPiAgICAgbWFza19tb2R1bGVfaXJx KHRydWUpDQo+ID4gPiA+ID4gfQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gZGV2YXBjX2V4dHJhY3Rf dmlvX2RiZygpDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBmb3IgYWxsIHZpb19pZHggew0KPiA+ID4g PiA+ICAgICBjbGVhcl92aW9fc3RhdHVzKCkNCj4gPiA+ID4gPiAgICAgbWFza19tb2R1bGVfaXJx KGZhbHNlKQ0KPiA+ID4gPiA+IH0NCj4gPiA+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiBJJ20gYWxz byBjb25zaWRlciB0aGlzIHNvbHV0aW9uIGFuZCBJIHRoaW5rIGl0J3MgbXVjaCBiZXR0ZXIgdG8N Cj4gPiA+ID4gdW5kZXJzdGFuZCBoYXJkd2FyZSBiZWhhdmlvci4NCj4gPiA+ID4NCj4gPiA+ID4g ZGV2YXBjX2R1bXBfdmlvX2RiZygpDQo+ID4gPiA+IHsNCj4gPiA+ID4gICAgICAgICB3aGlsZSgx KSB7DQo+ID4gPiA+ICAgICAgICAgICAgICAgICAvLyBtaWdodCBoYXZlIG11bHRpcGxlIHNoaWZ0 X2JpdCByYWlzZWQNCj4gPiA+ID4gICAgICAgICAgICAgICAgIHNoaWZ0X2JpdCA9IGdldF9zaGlm dF9ncm91cCgpDQo+ID4gPiA+ICAgICAgICAgICAgICAgICBpZiAoc2hpZnRfYml0ID49IDAgJiYg c2hpZnQgYml0IDw9IDMxKQ0KPiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jX3Zp b19kYmcoc2hpZnRfYml0KQ0KPiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0 X3Zpb19kYmcoKQ0KPiA+ID4NCj4gPiA+IEFjY29yZGluZyB0byB5b3VyIHN0YXRlbWVudCwgd2hl biBtdWx0aXBsZSB2aW9sYXRpb24gb2NjdXIsIG9ubHkgdGhlDQo+ID4gPiBmaXJzdCBvbmUgaXMg a2VwdCwgb3RoZXJzIGFyZSBkcm9wcGVkLiBJIHRoaW5rIHdlIGp1c3QgbmVlZCB0byBkdW1wDQo+ ID4gPiBkZWJ1ZyBpbmZvIG9uY2UuDQo+ID4gPg0KPiA+ID4gQmVjYXVzZSBvbmx5IG9uZSB2aW9s YXRpb24gaW5mb3JtYXRpb24gd291bGQgYmUga2VwdCwgd2h5IG5vdCBvbmx5IG9uZQ0KPiA+ID4g Z3JvdXAgKGVxdWFsIHRvIG5vIGdyb3VwKT8NCj4gPiA+DQo+ID4gPiBSZWdhcmRzLA0KPiA+ID4g Q2h1bi1LdWFuZy4NCj4gPg0KPiA+IExldCdzIG1lIGdpdmUgeW91IGFuIGV4YW1wbGUgb2YgZGV2 YXBjIGRlc2lnbi4NCj4gPiB2aW9faWR4OiAwLCAxLCAyIC0+IGdyb3VwIDAgKHNoaWZ0X2JpdDog MCkNCj4gPiB2aW9faWR4OiAzLCA0LCA1IC0+IGdyb3VwIDEgKHNoaWZ0X2JpdDogMSkNCj4gPiAu Li4NCj4gPg0KPiA+IEVhY2ggZ3JvdXAgdmlvbGF0aW9uIHdpbGwga2VlcCBvbmUgdmlvbGF0aW9u ICh0aGUgZmlyc3Qgb25lKS4gSWYgdmlvX2lkeA0KPiA+IDAgaXMgdHJpZ2dlcmVkIGZpcnN0LCB2 aW9faWR4IDEgaXMgdHJpZ2dlcmVkIG5leHQsIHRoZW4gZ3JvdXAgMCB3aWxsDQo+ID4ganVzdCBr ZWVwIHZpb19pZHggMCB2aW9sYXRpb24gaW5mby4NCj4gPiBJZiB2aW9faWR4IDIgaXMgdHJpZ2dl cmVkIGZpcnN0LCB2aW9faWR4IDMgaXMgdHJpZ2dlcmVkIG5leHQsIHRoZW4gZ3JvdXANCj4gPiAw IHdpbGwga2VlcCB2aW9faWR4IDIgdmlvbGF0aW9uIGluZm8sIGdyb3VwIDEgd2lsbCBrZWVwIHZp b19pZHggMydzLg0KPiA+DQo+ID4gV2UgaGF2ZSB0byBzY2FuIGFsbCBncm91cHMgYW5kIGR1bXAg ZXZlcnl0aGluZyB3ZSBoYXZlLg0KPiA+IFRoYW5rcyAhDQo+ID4NCj4gDQo+IENvdWxkIHdlIGxl dCBhbGwgdmlvX2lkeCBiZSBncm91cCAwIHNvIHRoYXQgd2UgY291bGQganVzdCBzeW5jIG9uZQ0K PiBncm91cD8gSXQncyBiYWQgdG8gc3BlbmQgdG9vIG11Y2ggdGltZSBpbiBpcnEgaGFuZGxlci4N Cj4gV2hlbiB3ZSBzZXQgcGRfdmlvX3NoaWZ0X3NlbF9yZWcsIGl0IHNlZW1zIHdlIGNvdWxkIHNl dCBtdWx0aXBsZSBncm91cA0KPiB0b2dldGhlciwgY291bGRuJ3QgaXQ/DQo+IA0KPiBSZWdhcmRz LA0KPiBDaHVuLUt1YW5nLg0KPiANCg0KTm8sIFdoaWNoIGdyb3VwIHZpb19pZHggYmVsb25ncyB0 byBpcyBkZXRlcm1pbmVkIGJ5IGhhcmR3YXJlLiBTb2Z0d2FyZQ0KY2Fubm90IGNoYW5nZSBpdHMg Z3JvdXAuDQpUaGVyZSBpcyB2ZXJ5IGxvdyBwb3NzaWJpbGl0eSB0aGF0IG11bHRpcGxlIGdyb3Vw cyBoYXMgdmlvbGF0aW9uIGF0IHRoZQ0Kc2FtZSB0aW1lLCBzbyBpdCB3b3VsZCBub3Qgc3BlbmQg bXVjaCB0aW1lIHRvIGhhbmRsZSBpdC4NCkl0IGFsc28gY2Fubm90IHNoaWZ0IG11bHRpcGxlIGdy b3VwcyBhdCB0aGUgc2FtZSB0aW1lIHNpbmNlIHRoZXJlIGlzDQpvbmx5IG9uZSB2aW9faW5mbyhy dywgdmlvX2FkZHIsIG1hc3Rlcl9pZCwgLi4uKSBleGlzdCBhdCBhIHRpbWUuDQpkZXZhcGNfZXh0 cmFjdF92aW9fZGJnKCkgZnVuY3Rpb24gaXMgZG9pbmcgdGhpcyBzdGVwLg0KDQpUaGFua3MgIQ0K DQo+ID4gPg0KPiA+ID4gPiAgICAgICAgICAgICAgICAgZWxzZQ0KPiA+ID4gPiAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhaw0KPiA+ID4gPiAgICAgICAgIH0NCj4gPiA+ID4gfQ0KPiA+ID4g Pg0KPiA+ID4gPiBkZXZhcGNfdmlvbGF0aW9uX2lycSgpDQo+ID4gPiA+IHsNCj4gPiA+ID4gICAg ICAgICBmb3IgYWxsIHZpb19pZHggew0KPiA+ID4gPiAgICAgICAgICAgICAgICAgbWFza19tb2R1 bGVfaXJxKHRydWUpDQo+ID4gPiA+ICAgICAgICAgfQ0KPiA+ID4gPg0KPiA+ID4gPiAgICAgICAg IGRldmFwY19kdW1wX3Zpb19kYmcoKQ0KPiA+ID4gPg0KPiA+ID4gPiAgICAgICAgIGZvciBhbGwg dmlvX2lkeCB7DQo+ID4gPiA+ICAgICAgICAgICAgICAgICBjbGVhcl92aW9fc3RhdHVzKCkNCj4g PiA+ID4gICAgICAgICAgICAgICAgIG1hc2tfbW9kdWxlX2lycShmYWxzZSkNCj4gPiA+ID4gICAg ICAgICB9DQo+ID4gPiA+IH0NCj4gPiA+ID4NCj4gPiA+ID4gSXMgaXQgbW9yZSBjbGVhciBmb3Ig dGhpcyBjb250cm9sIGZsb3c/DQo+ID4gPiA+IFRoYW5rcyAhDQo+ID4gPiA+DQo+ID4gPiA+ID4g Pg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBBYm91dCB5b3VyIHF1ZXN0aW9u LCB2aW9fYWRkciB3b3VsZCBiZSB0aGUgZmlyc3Qgb25lLg0KPiA+ID4gPiA+ID4gPiA+ID4NCj4g PiA+ID4gPiA+ID4gPiA+IFNvIG90aGVyIHZpb19hZGRyIHdvdWxkIGJlIGRyb3BwZWQ/IE9yIGhh cmR3YXJlIHdvdWxkIGtlZXAgYWxsDQo+ID4gPiA+ID4gPiA+ID4gPiB2aW9fYWRkciBhbmQgeW91 IGhhdmUgc29tZSB3YXkgdG8gZ2V0IGFsbCB2aW9fYWRkcj8NCj4gPiA+ID4gPiA+ID4gPiA+DQo+ ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBJbiB0aGlzIGNhc2UsIGhhcmR3YXJlIHdp bGwgZHJvcCBvdGhlciB2aW9sYXRpb24gaW5mbyBhbmQga2VlcCB0aGUgZmlyc3QNCj4gPiA+ID4g PiA+ID4gPiBvbmUgdW50aWwgaXQgYmVlbiBoYW5kbGVkLg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gPiBEb2VzICdoYW5kbGVkJyBtZWFuIHN0YXR1cyBpcyBjbGVhcmVkPw0KPiA+ID4gPiA+ ID4NCj4gPiA+ID4gPiA+ICJoYW5kbGVkIiBtZWFucyBjbGVhciBzdGF0dXMgYW5kIGR1bXAgdmlv bGF0aW9uIGluZm8uDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBS ZWdhcmRzLA0KPiA+ID4gPiA+ID4gPiBDaHVuLUt1YW5nLg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArICAgICAgIHJldHVybiB0cnVlOw0KPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ICsvKg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKyAqIGRldmFwY192aW9s YXRpb25faXJxIC0gdGhlIGRldmFwYyBJbnRlcnJ1cHQgU2VydmljZSBSb3V0aW5lIChJU1IpIHdp bGwgZHVtcA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKyAqICAgICAgICAgICAgICAgICAgICAg ICAgdmlvbGF0aW9uIGluZm9ybWF0aW9uIGluY2x1ZGluZyB3aGljaCBtYXN0ZXIgdmlvbGF0ZXMN Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vz cyBzbGF2ZS4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgZGV2YXBjX3Zpb2xhdGlvbl9pcnEoaW50IGlycV9u dW1iZXIsDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IG10a19kZXZhcGNfY29udGV4dCAqY3R4KQ0KPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsgICAgICAgdTMyIHZp b19pZHg7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g PiArICAgICAgIGZvciAodmlvX2lkeCA9IDA7IHZpb19pZHggPCBjdHgtPnZpb19pZHhfbnVtOyB2 aW9faWR4KyspIHsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBpZiAo IW10a19kZXZhcGNfZHVtcF92aW9fZGJnKGN0eCwgdmlvX2lkeCkpDQo+ID4gPiA+ID4gPiA+ID4g PiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiA+ID4gPiA+ID4g PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAvKiBF bnN1cmUgdGhhdCB2aW9sYXRpb24gaW5mbyBhcmUgd3JpdHRlbiBiZWZvcmUNCj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgKiBmdXJ0aGVyIG9wZXJhdGlvbnMNCj4gPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgKi8NCj4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ICsgICAgICAgICAgICAgICBzbXBfbWIoKTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAvKg0KPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAqIE1hc2sgc2xhdmUncyBpcnEgYmVmb3Jl IGNsZWFyaW5nIHZpbyBzdGF0dXMuDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArICAgICAgICAg ICAgICAgICogTXVzdCBkbyBpdCB0byBhdm9pZCBuZXN0ZWQgaW50ZXJydXB0IGFuZCBwcmV2ZW50 DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICogdW5leHBlY3RlZCBi ZWhhdmlvci4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgKi8NCj4g PiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBtYXNrX21vZHVsZV9pcnEoY3R4 LCB2aW9faWR4LCB0cnVlKTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBjbGVhcl92aW9fc3RhdHVzKGN0eCwgdmlvX2lk eCk7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAr ICAgICAgICAgICAgICAgbWFza19tb2R1bGVfaXJxKGN0eCwgdmlvX2lkeCwgZmFsc2UpOw0KPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gKyAgICAgICB9DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArICAgICAgIHJldHVybiBJUlFfSEFORExFRDsNCj4g PiA+ID4gPiA+ID4gPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4g PiA+ID4gPiA+ID4gPiA+ID4gPiArLyoNCj4gPiA+ID4gPiA+DQo+ID4gPiA+DQo+ID4NCg0K