From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lukas Wunner Subject: Re: [PATCH 1/2] drm/fb_helper: Add drm_fb_helper_output_poll_changed_with_rpm() Date: Thu, 19 Jul 2018 09:49:26 +0200 Message-ID: <20180719074926.GA14303@wunner.de> References: <20180718205645.25924-1-lyude@redhat.com> <20180718205645.25924-2-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180718205645.25924-2-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Lyude Paul Cc: David Airlie , nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Maarten Lankhorst , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Sean Paul , Ben Skeggs , Gustavo Padovan , Ville =?iso-8859-1?Q?Syrj=E4l=E4?= List-Id: nouveau.vger.kernel.org T24gV2VkLCBKdWwgMTgsIDIwMTggYXQgMDQ6NTY6MzlQTSAtMDQwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiBXaGVuIERQIE1TVCBodWJzIGdldCBjb25mdXNlZCwgdGhleSBjYW4gb2NjYXNpb25hbGx5 IHN0b3AgcmVzcG9uZGluZyBmb3IKPiBhIGdvb2QgYml0IG9mIHRpbWUgdXAgdW50aWwgdGhlIHBv aW50IHdoZXJlIHRoZSBEUk0gZHJpdmVyIG1hbmFnZXMgdG8KPiBkbyB0aGUgcmlnaHQgRFBDRCBh Y2Nlc3NlcyB0byBnZXQgaXQgdG8gc3RhcnQgcmVzcG9uZGluZyBhZ2Fpbi4gSW4gYQo+IHdvcnN0 IGNhc2Ugc2NlbmFyaW8gaG93ZXZlciwgdGhpcyBwcm9jZXNzIGNhbiB0YWtlIHVwd2FyZHMgb2Yg MTArCj4gc2Vjb25kcy4KPiAKPiBDdXJyZW50bHkgd2UgdXNlIHRoZSBkZWZhdWx0IG91dHB1dF9w b2xsX2NoYW5nZWQgaGFuZGxlcgo+IGRybV9mYl9oZWxwZXJfb3V0cHV0X3BvbGxfY2hhbmdlZCgp IHRvIGhhbmRsZSBvdXRwdXQgcG9sbGluZywgd2hpY2gKPiBkb2Vzbid0IGhhcHBlbiB0byBncmFi IGFueSBwb3dlciByZWZlcmVuY2VzIG9uIHRoZSBkZXZpY2Ugd2hlbiBwb2xsaW5nLgo+IElmIHdl J3JlIHVubHVja3kgZW5vdWdoIHRvIGhhdmUgYSBodWIgKHN1Y2ggYXMgTGVub3ZvJ3MgaW5mYW1v dXMgbGFwdG9wCj4gZG9ja3MgZm9yIHRoZSBQNXgvUDd4IHNlcmllcykgdGhhdCdzIGVhc2lseSBz dGFydGxlZCBhbmQgY29uZnVzZWQsIHRoaXMKPiBjYW4gbGVhZCB0byBhIHByZXR0eSBuYXN0eSBk ZWFkbG9jayBzaXR1YXRpb24gdGhhdCBsb29rcyBsaWtlIHRoaXM6Cj4gCj4gLSBIb3RwbHVnIGV2 ZW50IGZyb20gaHViIGhhcHBlbnMsIHdlIGVudGVyCj4gICBkcm1fZmJfaGVscGVyX291dHB1dF9w b2xsX2NoYW5nZWQoKSBhbmQgc3RhcnQgY29tbXVuaWNhdGluZyB3aXRoIHRoZQo+ICAgaHViCj4g LSBXaGlsZSB3ZSdyZSBpbiBkcm1fZmJfaGVscGVyX291dHB1dF9wb2xsX2NoYW5nZWQoKSBhbmQg YXR0ZW1wdGluZyB0bwo+ICAgY29tbXVuaWNhdGUgd2l0aCB0aGUgaHViLCB3ZSBlbmQgdXAgY29u ZnVzaW5nIGl0IGFuZCBjYXVzZSBpdCB0byBzdG9wCj4gICByZXNwb25kaW5nIGZvciBhdCBsZWFz dCAxMCBzZWNvbmRzCj4gLSBBZnRlciA1IHNlY29uZHMgb2YgYmVpbmcgaW4gZHJtX2ZiX2hlbHBl cl9vdXRwdXRfcG9sbF9jaGFuZ2VkKCksIHRoZQo+ICAgcG0gY29yZSBhdHRlbXB0cyB0byBwdXQg dGhlIEdQVSBpbnRvIGF1dG9zdXNwZW5kLCB3aGljaCBlbmRzIHVwCj4gICBjYWxsaW5nIGRybV9r bXNfaGVscGVyX3BvbGxfZGlzYWJsZSgpCj4gLSBXaGlsZSB0aGUgcnVudGltZSBQTSBjb3JlIGlz IHdhaXRpbmcgaW4gZHJtX2ttc19oZWxwZXJfcG9sbF9kaXNhYmxlKCkKPiAgIGZvciB0aGUgb3V0 cHV0IHBvbGwgdG8gZmluaXNoLCB3ZSBlbmQgdXAgZmluYWxseSBkZXRlY3RpbmcgYW4gTVNUCj4g ICBkaXNwbGF5Cj4gLSBXZSBub3RpY2UgdGhlIG5ldyBkaXNwbGF5IGFuZCB0cmllcyB0byBlbmFi bGUgaXQsIHdoaWNoIHRyaWdnZXJzCj4gICBhbiBhdG9taWMgY29tbWl0IHdoaWNoIHRyaWdnZXJz IGEgY2FsbCB0byBwbV9ydW50aW1lX2dldF9zeW5jKCkKPiAtIHRoZSBvdXRwdXQgcG9sbCB0aHJl YWQgZGVhZGxvY2tzIHRoZSBwbSBjb3JlIHdhaXRpbmcgZm9yIHRoZSBwbSBjb3JlCj4gICB0byBm aW5pc2ggdGhlIGF1dG9zdXNwZW5kIHJlcXVlc3Qgd2hpbGUgdGhlIHBtIGNvcmUgd2FpdHMgZm9y IHRoZQo+ICAgb3V0cHV0IHBvbGwgdGhyZWFkIHRvIGZpbmlzaAoKVGhpcyB3aWxsIHN0aWxsIGRl YWRsb2NrIGlmIC0+cnVudGltZV9zdXNwZW5kIGNvbW1lbmNlcyBiZWZvcmUgdGhlCmhvdHBsdWcg ZXZlbnQgYW5kIHRoZSBob3RwbHVnIGV2ZW50IG9jY3VycyBiZWZvcmUgcG9sbGluZyBoYXMgYmVl bgpkaXNhYmxlZCBieSAtPnJ1bnRpbWVfc3VzcGVuZC4KClRoZSBjb3JyZWN0IGZpeCBpcyB0byBj YWxsIHBtX3J1bnRpbWVfZ2V0X3N5bmMoKSAqY29uZGl0aW9uYWxseSogaW4KdGhlIGF0b21pYyBj b21taXQgd2hpY2ggZW5hYmxlcyB0aGUgZGlzcGxheSwgdXNpbmcgdGhlIHNhbWUgY29uZGl0aW9u YWwKYXMgZDYxYTVjMTA2MzUxLCBpLmUuIGlmICghZHJtX2ttc19oZWxwZXJfaXNfcG9sbF93b3Jr ZXIoKSkuCgpOb3cgSSByZWFsaXplIEkgc2VudCB5b3UgZG93biB0aGUgd3JvbmcgcGF0aCB3aGVu IEkgc3VnZ2VzdGVkIHRvCmludHJvZHVjZSBhIERSTSBoZWxwZXIgaGVyZS4gIE15IGFwb2xvZ2ll cywgSSBkaWRuJ3QgZnVsbHkgYXBwcmVjaWF0ZQp3aGF0IGlzIGdvaW5nIGF3cnkgaGVyZSEKCkFu eXRoaW5nIHRoYXQgaGFwcGVucyBpbiBub3V2ZWF1J3MgcG9sbCB3b3JrZXIgbmV2ZXIgbmVlZHMg dG8gYWNxdWlyZQphIHJ1bnRpbWUgUE0gcmVmIGJlY2F1c2UgcG9sbGluZyBpcyBvbmx5IGVuYWJs ZWQgd2hpbGUgcnVudGltZSBhY3RpdmUsCmFuZCAtPnJ1bnRpbWVfc3VzcGVuZCB3YWl0cyBmb3Ig YW4gb25nb2luZyBwb2xsIHRvIGZpbmlzaC4KClRoaW5raW5nIGEgYml0IG1vcmUgYWJvdXQgdGhp cywgb3VyIG1pc3Rha2UgaXMgdG8gYWNxdWlyZSBydW50aW1lIFBNCnJlZnMgdG9vIGZhciBkb3du IGluIHRoZSBjYWxsIHN0YWNrLiAgQXMgYSBmaXggdGhhdCBjYW4gYmUgYmFja3BvcnRlZAp0byBz dGFibGUsIGFkZGluZyBpZiAoIWRybV9rbXNfaGVscGVyX2lzX3BvbGxfd29ya2VyKCkpIGNvbmRp dGlvbmFscwpzZWVtcyBmaW5lIHRvIG1lLCBidXQgdGhlIGxvbmcgdGVybSBmaXggaXMgdG8gcHVz aCBhY3F1aXNpdGlvbiBvZiByZWZzCmZ1cnRoZXIgdXAgaW4gdGhlIGNhbGwgc3RhY2suCgpFLmcu LCBpZiB0aGUgdXNlciBmb3JjZXMgY29ubmVjdG9yIHByb2JpbmcgdmlhIHN5c2ZzLCBhIHJ1bnRp bWUgUE0gcmVmCnNob3VsZCBiZSBhY3F1aXJlZCBpbiBzdGF0dXNfc3RvcmUoKSBpbiBkcm1fc3lz ZnMuYyBiZWZvcmUgaW52b2tpbmcKY29ubmVjdG9yLT5mdW5jcy0+ZmlsbF9tb2RlcygpLiAgVGhh dCB3YXksIGlmIHRoZSB1c2VyIGZvcmNlcyBjb25uZWN0b3IKcHJvYmluZyB3aGlsZSB0aGUgR1BV IGlzIHBvd2VyaW5nIGRvd24sIHJwbV9yZXN1bWUoKSB3aWxsIGNvcnJlY3RseSB3YWl0CmZvciBy cG1fc3VzcGVuZCgpIHRvIGZpbmlzaCBiZWZvcmUgcmVzdW1pbmcgdGhlIGNhcmQuICBTbyBpZiB3 ZSBhcmNoaXRlY3QKaXQgbGlrZSB0aGlzLCB3ZSdyZSBhY3R1YWxseSB1c2luZyB0aGUgZnVuY3Rp b25hbGl0eSBwcm92aWRlZCBieSB0aGUKUE0gY29yZSBpbiB0aGUgd2F5IHRoYXQgaXQncyBzdXBw b3NlZCB0byBiZSB1c2VkLgoKVGhlIHByb2JsZW0gaXMgdGhhdCBhZGRpbmcgcG1fcnVudGltZV9n ZXRfc3luYygpIHRvIHN0YXR1c19zdG9yZSgpCmNvbmZsaWN0cyB3aXRoIHRoZSBkZXNpcmUgdG8g aGF2ZSBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBEUk0gZnVuY3Rpb25zOgpTb21lIEdQVXMgbWF5IGJl IGFibGUgdG8gcHJvYmUgY29ubmVjdG9ycyB3aXRob3V0IHJlc3VtaW5nIHRvIHJ1bnRpbWUKYWN0 aXZlIHN0YXRlLCBvdGhlcnMgZG9uJ3QgdXNlIHJ1bnRpbWUgUE0gYXQgYWxsLiAgT25lIHNvbHV0 aW9uIHRoYXQKY29tZXMgdG8gbWluZCBpcyBhIGRyaXZlcl9mZWF0dXJlcyBmbGFnIHdoaWNoIHRl bGxzIHRoZSBEUk0gY29yZSB3aGV0aGVyCnRvIGFjcXVpcmUgYSBydW50aW1lIFBNIHJlZiBpbiB2 YXJpb3VzIHBsYWNlcy4KCkluIHlvdXIgb3JpZ2luYWwgcGF0Y2hlcyA0IGFuZCA1LCB3aGF0IGV4 YWN0bHkgd2FzIHRoZSBjYWxsIHN0YWNrIHdoaWNoCmxlZCB0byBpMmMgYmVpbmcgYWNjZXNzZWQg d2hpbGUgcnVudGltZSBzdXNwZW5kZWQ/ICBXYXMgaXQgc3lzZnMgYWNjZXNzCnZpYSAvc3lzL2Ns YXNzL2kyYy1hZGFwdGVyLyogPyAgSWYgc28sIGFjcXVpc2l0aW9uIG9mIHRoZSBydW50aW1lIFBN IHJlZgpuZWVkcyB0byBsaWtld2lzZSBoYXBwZW4gaW4gdGhhdCBzeXNmcyBlbnRyeSBwb2ludCwg cmF0aGVyIHRoYW4gZGVlcCBkb3duCmluIHRoZSBjYWxsIHN0YWNrIHVwb24gYWNjZXNzaW5nIHRo ZSBpMmMgYnVzLgoKVGhhbmtzLAoKTHVrYXMKCj4gCj4gU2FtcGxlOgo+IFsgIDI0Ni42Njk2MjVd IElORk86IHRhc2sga3dvcmtlci80OjA6MzcgYmxvY2tlZCBmb3IgbW9yZSB0aGFuIDEyMCBzZWNv bmRzLgo+IFsgIDI0Ni42NzMzOThdICAgICAgIE5vdCB0YWludGVkIDQuMTguMC1yYzVMeXVkZS1U ZXN0KyAjMgo+IFsgIDI0Ni42NzUyNzFdICJlY2hvIDAgPiAvcHJvYy9zeXMva2VybmVsL2h1bmdf dGFza190aW1lb3V0X3NlY3MiIGRpc2FibGVzIHRoaXMgbWVzc2FnZS4KPiBbICAyNDYuNjc2NTI3 XSBrd29ya2VyLzQ6MCAgICAgRCAgICAwICAgIDM3ICAgICAgMiAweDgwMDAwMDAwCj4gWyAgMjQ2 LjY3NzU4MF0gV29ya3F1ZXVlOiBldmVudHMgb3V0cHV0X3BvbGxfZXhlY3V0ZSBbZHJtX2ttc19o ZWxwZXJdCj4gWyAgMjQ2LjY3ODcwNF0gQ2FsbCBUcmFjZToKPiBbICAyNDYuNjc5NzUzXSAgX19z Y2hlZHVsZSsweDMyMi8weGFmMAo+IFsgIDI0Ni42ODA5MTZdICBzY2hlZHVsZSsweDMzLzB4OTAK PiBbICAyNDYuNjgxOTI0XSAgc2NoZWR1bGVfcHJlZW1wdF9kaXNhYmxlZCsweDE1LzB4MjAKPiBb ICAyNDYuNjgzMDIzXSAgX19tdXRleF9sb2NrKzB4NTY5LzB4OWEwCj4gWyAgMjQ2LjY4NDAzNV0g ID8ga29iamVjdF91ZXZlbnRfZW52KzB4MTE3LzB4N2IwCj4gWyAgMjQ2LjY4NTEzMl0gID8gZHJt X2ZiX2hlbHBlcl9ob3RwbHVnX2V2ZW50LnBhcnQuMjgrMHgyMC8weGIwIFtkcm1fa21zX2hlbHBl cl0KPiBbICAyNDYuNjg2MTc5XSAgbXV0ZXhfbG9ja19uZXN0ZWQrMHgxYi8weDIwCj4gWyAgMjQ2 LjY4NzI3OF0gID8gbXV0ZXhfbG9ja19uZXN0ZWQrMHgxYi8weDIwCj4gWyAgMjQ2LjY4ODMwN10g IGRybV9mYl9oZWxwZXJfaG90cGx1Z19ldmVudC5wYXJ0LjI4KzB4MjAvMHhiMCBbZHJtX2ttc19o ZWxwZXJdCj4gWyAgMjQ2LjY4OTQyMF0gIGRybV9mYl9oZWxwZXJfb3V0cHV0X3BvbGxfY2hhbmdl ZCsweDIzLzB4MzAgW2RybV9rbXNfaGVscGVyXQo+IFsgIDI0Ni42OTA0NjJdICBkcm1fa21zX2hl bHBlcl9ob3RwbHVnX2V2ZW50KzB4MmEvMHgzMCBbZHJtX2ttc19oZWxwZXJdCj4gWyAgMjQ2LjY5 MTU3MF0gIG91dHB1dF9wb2xsX2V4ZWN1dGUrMHgxOTgvMHgxYzAgW2RybV9rbXNfaGVscGVyXQo+ IFsgIDI0Ni42OTI2MTFdICBwcm9jZXNzX29uZV93b3JrKzB4MjMxLzB4NjIwCj4gWyAgMjQ2LjY5 MzcyNV0gIHdvcmtlcl90aHJlYWQrMHgyMTQvMHgzYTAKPiBbICAyNDYuNjk0NzU2XSAga3RocmVh ZCsweDEyYi8weDE1MAo+IFsgIDI0Ni42OTU4NTZdICA/IHdxX3Bvb2xfaWRzX3Nob3crMHgxNDAv MHgxNDAKPiBbICAyNDYuNjk2ODg4XSAgPyBrdGhyZWFkX2NyZWF0ZV93b3JrZXJfb25fY3B1KzB4 NzAvMHg3MAo+IFsgIDI0Ni42OTc5OThdICByZXRfZnJvbV9mb3JrKzB4M2EvMHg1MAo+IFsgIDI0 Ni42OTkwMzRdIElORk86IHRhc2sga3dvcmtlci8wOjE6NjAgYmxvY2tlZCBmb3IgbW9yZSB0aGFu IDEyMCBzZWNvbmRzLgo+IFsgIDI0Ni43MDAxNTNdICAgICAgIE5vdCB0YWludGVkIDQuMTguMC1y YzVMeXVkZS1UZXN0KyAjMgo+IFsgIDI0Ni43MDExODJdICJlY2hvIDAgPiAvcHJvYy9zeXMva2Vy bmVsL2h1bmdfdGFza190aW1lb3V0X3NlY3MiIGRpc2FibGVzIHRoaXMgbWVzc2FnZS4KPiBbICAy NDYuNzAyMjc4XSBrd29ya2VyLzA6MSAgICAgRCAgICAwICAgIDYwICAgICAgMiAweDgwMDAwMDAw Cj4gWyAgMjQ2LjcwMzI5M10gV29ya3F1ZXVlOiBwbSBwbV9ydW50aW1lX3dvcmsKPiBbICAyNDYu NzA0MzkzXSBDYWxsIFRyYWNlOgo+IFsgIDI0Ni43MDU0MDNdICBfX3NjaGVkdWxlKzB4MzIyLzB4 YWYwCj4gWyAgMjQ2LjcwNjQzOV0gID8gd2FpdF9mb3JfY29tcGxldGlvbisweDEwNC8weDE5MAo+ IFsgIDI0Ni43MDczOTNdICBzY2hlZHVsZSsweDMzLzB4OTAKPiBbICAyNDYuNzA4Mzc1XSAgc2No ZWR1bGVfdGltZW91dCsweDNhNS8weDU5MAo+IFsgIDI0Ni43MDkyODldICA/IG1hcmtfaGVsZF9s b2NrcysweDU4LzB4ODAKPiBbICAyNDYuNzEwMjA4XSAgPyBfcmF3X3NwaW5fdW5sb2NrX2lycSsw eDJjLzB4NDAKPiBbICAyNDYuNzExMjIyXSAgPyB3YWl0X2Zvcl9jb21wbGV0aW9uKzB4MTA0LzB4 MTkwCj4gWyAgMjQ2LjcxMjEzNF0gID8gdHJhY2VfaGFyZGlycXNfb25fY2FsbGVyKzB4ZjQvMHgx OTAKPiBbICAyNDYuNzEzMDk0XSAgPyB3YWl0X2Zvcl9jb21wbGV0aW9uKzB4MTA0LzB4MTkwCj4g WyAgMjQ2LjcxMzk2NF0gIHdhaXRfZm9yX2NvbXBsZXRpb24rMHgxMmMvMHgxOTAKPiBbICAyNDYu NzE0ODk1XSAgPyB3YWtlX3VwX3ErMHg4MC8weDgwCj4gWyAgMjQ2LjcxNTcyN10gID8gZ2V0X3dv cmtfcG9vbCsweDkwLzB4OTAKPiBbICAyNDYuNzE2NjQ5XSAgZmx1c2hfd29yaysweDFjOS8weDI4 MAo+IFsgIDI0Ni43MTc0ODNdICA/IGZsdXNoX3dvcmtxdWV1ZV9wcmVwX3B3cXMrMHgxYjAvMHgx YjAKPiBbICAyNDYuNzE4NDQyXSAgX19jYW5jZWxfd29ya190aW1lcisweDE0Ni8weDFkMAo+IFsg IDI0Ni43MTkyNDddICBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMrMHgxMy8weDIwCj4gWyAgMjQ2 LjcyMDA0M10gIGRybV9rbXNfaGVscGVyX3BvbGxfZGlzYWJsZSsweDFmLzB4MzAgW2RybV9rbXNf aGVscGVyXQo+IFsgIDI0Ni43MjExMjNdICBub3V2ZWF1X3Btb3BzX3J1bnRpbWVfc3VzcGVuZCsw eDNkLzB4YjAgW25vdXZlYXVdCj4gWyAgMjQ2LjcyMTg5N10gIHBjaV9wbV9ydW50aW1lX3N1c3Bl bmQrMHg2Yi8weDE5MAo+IFsgIDI0Ni43MjI4MjVdICA/IHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBv cnQrMHg3MC8weDcwCj4gWyAgMjQ2LjcyMzczN10gIF9fcnBtX2NhbGxiYWNrKzB4N2EvMHgxZDAK PiBbICAyNDYuNzI0NzIxXSAgPyBwY2lfaGFzX2xlZ2FjeV9wbV9zdXBwb3J0KzB4NzAvMHg3MAo+ IFsgIDI0Ni43MjU2MDddICBycG1fY2FsbGJhY2srMHgyNC8weDgwCj4gWyAgMjQ2LjcyNjU1M10g ID8gcGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydCsweDcwLzB4NzAKPiBbICAyNDYuNzI3Mzc2XSAg cnBtX3N1c3BlbmQrMHgxNDIvMHg2YjAKPiBbICAyNDYuNzI4MTg1XSAgcG1fcnVudGltZV93b3Jr KzB4OTcvMHhjMAo+IFsgIDI0Ni43Mjg5MzhdICBwcm9jZXNzX29uZV93b3JrKzB4MjMxLzB4NjIw Cj4gWyAgMjQ2LjcyOTc5Nl0gIHdvcmtlcl90aHJlYWQrMHg0NC8weDNhMAo+IFsgIDI0Ni43MzA2 MTRdICBrdGhyZWFkKzB4MTJiLzB4MTUwCj4gWyAgMjQ2LjczMTM5NV0gID8gd3FfcG9vbF9pZHNf c2hvdysweDE0MC8weDE0MAo+IFsgIDI0Ni43MzIyMDJdICA/IGt0aHJlYWRfY3JlYXRlX3dvcmtl cl9vbl9jcHUrMHg3MC8weDcwCj4gWyAgMjQ2LjczMjg3OF0gIHJldF9mcm9tX2ZvcmsrMHgzYS8w eDUwCj4gWyAgMjQ2LjczMzc2OF0gSU5GTzogdGFzayBrd29ya2VyLzQ6Mjo0MjIgYmxvY2tlZCBm b3IgbW9yZSB0aGFuIDEyMCBzZWNvbmRzLgo+IFsgIDI0Ni43MzQ1ODddICAgICAgIE5vdCB0YWlu dGVkIDQuMTguMC1yYzVMeXVkZS1UZXN0KyAjMgo+IFsgIDI0Ni43MzUzOTNdICJlY2hvIDAgPiAv cHJvYy9zeXMva2VybmVsL2h1bmdfdGFza190aW1lb3V0X3NlY3MiIGRpc2FibGVzIHRoaXMgbWVz c2FnZS4KPiBbICAyNDYuNzM2MTEzXSBrd29ya2VyLzQ6MiAgICAgRCAgICAwICAgNDIyICAgICAg MiAweDgwMDAwMDgwCj4gWyAgMjQ2LjczNjc4OV0gV29ya3F1ZXVlOiBldmVudHNfbG9uZyBkcm1f ZHBfbXN0X2xpbmtfcHJvYmVfd29yayBbZHJtX2ttc19oZWxwZXJdCj4gWyAgMjQ2LjczNzY2NV0g Q2FsbCBUcmFjZToKPiBbICAyNDYuNzM4NDkwXSAgX19zY2hlZHVsZSsweDMyMi8weGFmMAo+IFsg IDI0Ni43MzkyNTBdICBzY2hlZHVsZSsweDMzLzB4OTAKPiBbICAyNDYuNzM5OTA4XSAgcnBtX3Jl c3VtZSsweDE5Yy8weDg1MAo+IFsgIDI0Ni43NDA3NTBdICA/IGZpbmlzaF93YWl0KzB4OTAvMHg5 MAo+IFsgIDI0Ni43NDE1NDFdICBfX3BtX3J1bnRpbWVfcmVzdW1lKzB4NGUvMHg5MAo+IFsgIDI0 Ni43NDIzNzBdICBudjUwX2Rpc3BfYXRvbWljX2NvbW1pdCsweDMxLzB4MjEwIFtub3V2ZWF1XQo+ IFsgIDI0Ni43NDMxMjRdICBkcm1fYXRvbWljX2NvbW1pdCsweDRhLzB4NTAgW2RybV0KPiBbICAy NDYuNzQzNzc1XSAgcmVzdG9yZV9mYmRldl9tb2RlX2F0b21pYysweDFjOC8weDI0MCBbZHJtX2tt c19oZWxwZXJdCj4gWyAgMjQ2Ljc0NDYwM10gIHJlc3RvcmVfZmJkZXZfbW9kZSsweDMxLzB4MTQw IFtkcm1fa21zX2hlbHBlcl0KPiBbICAyNDYuNzQ1MzczXSAgZHJtX2ZiX2hlbHBlcl9yZXN0b3Jl X2ZiZGV2X21vZGVfdW5sb2NrZWQrMHg1NC8weGIwIFtkcm1fa21zX2hlbHBlcl0KPiBbICAyNDYu NzQ2MjIwXSAgZHJtX2ZiX2hlbHBlcl9zZXRfcGFyKzB4MmQvMHg1MCBbZHJtX2ttc19oZWxwZXJd Cj4gWyAgMjQ2Ljc0Njg4NF0gIGRybV9mYl9oZWxwZXJfaG90cGx1Z19ldmVudC5wYXJ0LjI4KzB4 OTYvMHhiMCBbZHJtX2ttc19oZWxwZXJdCj4gWyAgMjQ2Ljc0NzY3NV0gIGRybV9mYl9oZWxwZXJf b3V0cHV0X3BvbGxfY2hhbmdlZCsweDIzLzB4MzAgW2RybV9rbXNfaGVscGVyXQo+IFsgIDI0Ni43 NDg1NDRdICBkcm1fa21zX2hlbHBlcl9ob3RwbHVnX2V2ZW50KzB4MmEvMHgzMCBbZHJtX2ttc19o ZWxwZXJdCj4gWyAgMjQ2Ljc0OTQzOV0gIG52NTBfbXN0bV9ob3RwbHVnKzB4MTUvMHgyMCBbbm91 dmVhdV0KPiBbICAyNDYuNzUwMTExXSAgZHJtX2RwX3NlbmRfbGlua19hZGRyZXNzKzB4MTc3LzB4 MWMwIFtkcm1fa21zX2hlbHBlcl0KPiBbICAyNDYuNzUwNzY0XSAgZHJtX2RwX2NoZWNrX2FuZF9z ZW5kX2xpbmtfYWRkcmVzcysweGE4LzB4ZDAgW2RybV9rbXNfaGVscGVyXQo+IFsgIDI0Ni43NTE2 MDJdICBkcm1fZHBfbXN0X2xpbmtfcHJvYmVfd29yaysweDUxLzB4OTAgW2RybV9rbXNfaGVscGVy XQo+IFsgIDI0Ni43NTIzMTRdICBwcm9jZXNzX29uZV93b3JrKzB4MjMxLzB4NjIwCj4gWyAgMjQ2 Ljc1Mjk3OV0gIHdvcmtlcl90aHJlYWQrMHg0NC8weDNhMAo+IFsgIDI0Ni43NTM4MzhdICBrdGhy ZWFkKzB4MTJiLzB4MTUwCj4gWyAgMjQ2Ljc1NDYxOV0gID8gd3FfcG9vbF9pZHNfc2hvdysweDE0 MC8weDE0MAo+IFsgIDI0Ni43NTUzODZdICA/IGt0aHJlYWRfY3JlYXRlX3dvcmtlcl9vbl9jcHUr MHg3MC8weDcwCj4gWyAgMjQ2Ljc1NjE2Ml0gIHJldF9mcm9tX2ZvcmsrMHgzYS8weDUwCj4gWyAg MjQ2Ljc1Njg0N10KPiAgICAgICAgICAgICAgICBTaG93aW5nIGFsbCBsb2NrcyBoZWxkIGluIHRo ZSBzeXN0ZW06Cj4gWyAgMjQ2Ljc1ODI2MV0gMyBsb2NrcyBoZWxkIGJ5IGt3b3JrZXIvNDowLzM3 Ogo+IFsgIDI0Ni43NTkwMTZdICAjMDogMDAwMDAwMDBmOGRmNGQyZCAoKHdxX2NvbXBsZXRpb24p ImV2ZW50cyIpeysuKy59LCBhdDogcHJvY2Vzc19vbmVfd29yaysweDFiMy8weDYyMAo+IFsgIDI0 Ni43NTk4NTZdICAjMTogMDAwMDAwMDBlNjA2NTQ2MSAoKHdvcmtfY29tcGxldGlvbikoJigmZGV2 LT5tb2RlX2NvbmZpZy5vdXRwdXRfcG9sbF93b3JrKS0+d29yaykpeysuKy59LCBhdDogcHJvY2Vz c19vbmVfd29yaysweDFiMy8weDYyMAo+IFsgIDI0Ni43NjA2NzBdICAjMjogMDAwMDAwMDBjYjY2 NzM1ZiAoJmhlbHBlci0+bG9jayl7Ky4rLn0sIGF0OiBkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZl bnQucGFydC4yOCsweDIwLzB4YjAgW2RybV9rbXNfaGVscGVyXQo+IFsgIDI0Ni43NjE1MTZdIDIg bG9ja3MgaGVsZCBieSBrd29ya2VyLzA6MS82MDoKPiBbICAyNDYuNzYyMjc0XSAgIzA6IDAwMDAw MDAwZmZmNmJlMGYgKCh3cV9jb21wbGV0aW9uKSJwbSIpeysuKy59LCBhdDogcHJvY2Vzc19vbmVf d29yaysweDFiMy8weDYyMAo+IFsgIDI0Ni43NjI5ODJdICAjMTogMDAwMDAwMDA1YWI0NGZiNCAo KHdvcmtfY29tcGxldGlvbikoJmRldi0+cG93ZXIud29yaykpeysuKy59LCBhdDogcHJvY2Vzc19v bmVfd29yaysweDFiMy8weDYyMAo+IFsgIDI0Ni43NjM4OTBdIDEgbG9jayBoZWxkIGJ5IGtodW5n dGFza2QvNjQ6Cj4gWyAgMjQ2Ljc2NDY2NF0gICMwOiAwMDAwMDAwMDhjYjhiNWMzIChyY3VfcmVh ZF9sb2NrKXsuLi4ufSwgYXQ6IGRlYnVnX3Nob3dfYWxsX2xvY2tzKzB4MjMvMHgxODUKPiBbICAy NDYuNzY1NTg4XSA1IGxvY2tzIGhlbGQgYnkga3dvcmtlci80OjIvNDIyOgo+IFsgIDI0Ni43NjY0 NDBdICAjMDogMDAwMDAwMDAyMzJmMDk1OSAoKHdxX2NvbXBsZXRpb24pImV2ZW50c19sb25nIil7 Ky4rLn0sIGF0OiBwcm9jZXNzX29uZV93b3JrKzB4MWIzLzB4NjIwCj4gWyAgMjQ2Ljc2NzM5MF0g ICMxOiAwMDAwMDAwMGJiNTliMTM0ICgod29ya19jb21wbGV0aW9uKSgmbWdyLT53b3JrKSl7Ky4r Ln0sIGF0OiBwcm9jZXNzX29uZV93b3JrKzB4MWIzLzB4NjIwCj4gWyAgMjQ2Ljc2ODE1NF0gICMy OiAwMDAwMDAwMGNiNjY3MzVmICgmaGVscGVyLT5sb2NrKXsrLisufSwgYXQ6IGRybV9mYl9oZWxw ZXJfcmVzdG9yZV9mYmRldl9tb2RlX3VubG9ja2VkKzB4NGMvMHhiMCBbZHJtX2ttc19oZWxwZXJd Cj4gWyAgMjQ2Ljc2ODk2Nl0gICMzOiAwMDAwMDAwMDRjOGYwYjZiIChjcnRjX3d3X2NsYXNzX2Fj cXVpcmUpeysuKy59LCBhdDogcmVzdG9yZV9mYmRldl9tb2RlX2F0b21pYysweDRiLzB4MjQwIFtk cm1fa21zX2hlbHBlcl0KPiBbICAyNDYuNzY5OTIxXSAgIzQ6IDAwMDAwMDAwNGMzNGEyOTYgKGNy dGNfd3dfY2xhc3NfbXV0ZXgpeysuKy59LCBhdDogZHJtX21vZGVzZXRfYmFja29mZisweDhhLzB4 MWIwIFtkcm1dCj4gWyAgMjQ2Ljc3MDgzOV0gMSBsb2NrIGhlbGQgYnkgZG1lc2cvMTAzODoKPiBb ICAyNDYuNzcxNzM5XSAyIGxvY2tzIGhlbGQgYnkgenNoLzExNzI6Cj4gWyAgMjQ2Ljc3MjY1MF0g ICMwOiAwMDAwMDAwMDgzNmQwNDM4ICgmdHR5LT5sZGlzY19zZW0peysrKyt9LCBhdDogbGRzZW1f ZG93bl9yZWFkKzB4MzcvMHg0MAo+IFsgIDI0Ni43NzM2ODBdICAjMTogMDAwMDAwMDAxZjRmNGQ0 OCAoJmxkYXRhLT5hdG9taWNfcmVhZF9sb2NrKXsrLisufSwgYXQ6IG5fdHR5X3JlYWQrMHhjMS8w eDg3MAo+IAo+IFsgIDI0Ni43NzU1MjJdID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQo+IAo+IFNvLCB0byBmaXggdGhpcyAoYW5kIGFueSBvdGhlciBwb3NzaWJs ZSBkZWFkbG9jayBpc3N1ZXMgbGlrZSB0aGlzIHRoYXQKPiBjb3VsZCBvY2N1ciBpbiB0aGUgb3V0 cHV0X3BvbGxfY2hhbmdlZCBwYXRjaCkgd2UgbWFrZSBzdXJlIHRoYXQKPiBub3V2ZWF1J3Mgb3V0 cHV0X3BvbGxfY2hhbmdlZCBmdW5jdGlvbnMgZ3JhYiBhIHJ1bnRpbWUgcG93ZXIgcmVmIGJlZm9y ZQo+IHNlbmRpbmcgYW55IGhvdHBsdWcgZXZlbnRzLCBhbmQgaG9sZCBpdCB1bnRpbCB3ZSdyZSBm aW5pc2hlZC4gV2UKPiBpbnRyb2R1Y2UgdGhpcyB0aHJvdWdoIGFkZGluZyBhIGdlbmVyaWMgRFJN IGhlbHBlciB3aGljaCBvdGhlciBkcml2ZXJzCj4gbWF5IHJldXNlLgo+IAo+IFRoaXMgZml4ZXMg ZGVhZGxvY2sgaXNzdWVzIHdoZW4gaW4gZmJjb24gd2l0aCBub3V2ZWF1IG9uIG15IFA1MCwgYW5k Cj4gc2hvdWxkIGZpeCBpdCBmb3IgZXZlcnlvbmUgZWxzZSdzIGFzIHdlbGwhCj4gCj4gU2lnbmVk LW9mZi1ieTogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KPiBSZXZpZXdlZC1ieTogS2Fy b2wgSGVyYnN0IDxrYXJvbGhlcmJzdEBnbWFpbC5jb20+Cj4gQ2M6IEx1a2FzIFd1bm5lciA8bHVr YXNAd3VubmVyLmRlPgo+IENjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnCj4gLS0tCj4gQ2hhbmdl cyBzaW5jZSB2MToKPiAgLSBBZGQgYSBnZW5lcmljIGhlbHBlciBmb3IgRFJNIHRvIGhhbmRsZSB0 aGlzCj4gCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgICAgICAgICB8IDIzICsr KysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2Rpc3BudjUw L2Rpc3AuYyB8ICAyICstCj4gIGluY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaCAgICAgICAgICAg ICB8ICA1ICsrKysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5j IGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwo+IGluZGV4IDJlZTFlYWE2NjE4OC4u MWFiMmYzNjQ2NTI2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVy LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCj4gQEAgLTM0LDYgKzM0 LDcgQEAKPiAgI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+Cj4gICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1 bnRpbWUuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2Ny dGMuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gQEAgLTI5MjgsNiArMjky OSwyOCBAQCB2b2lkIGRybV9mYl9oZWxwZXJfb3V0cHV0X3BvbGxfY2hhbmdlZChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9vdXRwdXRf cG9sbF9jaGFuZ2VkKTsKPiAgCj4gKy8qKgo+ICsgKiBkcm1fZmJfaGVscGVyX291dHB1dF9wb2xs X2NoYW5nZWRfd2l0aF9ycG0gLSBEUk0gbW9kZQo+ICsgKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgXC5vdXRwdXRfcG9sbF9jaGFuZ2VkCj4gKyAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlciBmb3Ig ZmJkZXYgZW11bGF0aW9uCj4gKyAqIEBkZXY6IERSTSBkZXZpY2UKPiArICoKPiArICogU2FtZSBh cyBkcm1fZmJfaGVscGVyX291dHB1dF9wb2xsX2NoYW5nZWQsIGV4Y2VwdCB0aGF0IGl0IG1ha2Vz IHN1cmUgdGhhdAo+ICsgKiB0aGUgZGV2aWNlIGlzIGFjdGl2ZSBieSBzeW5jaHJvbm91c2x5IGdy YWJiaW5nIGEgcnVudGltZSBwb3dlciByZWZlcmVuY2UKPiArICogd2hpbGUgcHJvYmluZy4KPiAr ICovCj4gK3ZvaWQgZHJtX2ZiX2hlbHBlcl9vdXRwdXRfcG9sbF9jaGFuZ2VkX3dpdGhfcnBtKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gcG1f cnVudGltZV9nZXRfc3luYyhkZXYtPmRldik7Cj4gKwlpZiAoV0FSTl9PTihyZXQgPCAwICYmIHJl dCAhPSAtRUFDQ0VTKSkKPiArCQlyZXR1cm47Cj4gKwlkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZl bnQoZGV2LT5mYl9oZWxwZXIpOwo+ICsJcG1fcnVudGltZV9wdXQoZGV2LT5kZXYpOwo+ICt9Cj4g K0VYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9vdXRwdXRfcG9sbF9jaGFuZ2VkX3dpdGhfcnBt KTsKPiArCj4gIC8qIFRoZSBLY29uZmlnIERSTV9LTVNfSEVMUEVSIHNlbGVjdHMgRlJBTUVCVUZG RVJfQ09OU09MRSAoaWYgIUVYUEVSVCkKPiAgICogYnV0IHRoZSBtb2R1bGUgZG9lc24ndCBkZXBl bmQgb24gYW55IGZiIGNvbnNvbGUgc3ltYm9scy4gIEF0IGxlYXN0Cj4gICAqIGF0dGVtcHQgdG8g bG9hZCBmYmNvbiB0byBhdm9pZCBsZWF2aW5nIHRoZSBzeXN0ZW0gd2l0aG91dCBhIHVzYWJsZSBj b25zb2xlLgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9k aXNwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMKPiBpbmRleCBl YjNlNDFhNzg4MDYuLmZhM2FiNjE4YTBmOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v bm91dmVhdS9kaXNwbnY1MC9kaXNwLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9k aXNwbnY1MC9kaXNwLmMKPiBAQCAtMjAxNSw3ICsyMDE1LDcgQEAgbnY1MF9kaXNwX2F0b21pY19z dGF0ZV9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICBzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9tb2RlX2NvbmZpZ19mdW5jcwo+ICBudjUwX2Rpc3BfZnVuYyA9IHsKPiAgCS5mYl9jcmVh dGUgPSBub3V2ZWF1X3VzZXJfZnJhbWVidWZmZXJfY3JlYXRlLAo+IC0JLm91dHB1dF9wb2xsX2No YW5nZWQgPSBkcm1fZmJfaGVscGVyX291dHB1dF9wb2xsX2NoYW5nZWQsCj4gKwkub3V0cHV0X3Bv bGxfY2hhbmdlZCA9IGRybV9mYl9oZWxwZXJfb3V0cHV0X3BvbGxfY2hhbmdlZF93aXRoX3JwbSwK PiAgCS5hdG9taWNfY2hlY2sgPSBudjUwX2Rpc3BfYXRvbWljX2NoZWNrLAo+ICAJLmF0b21pY19j b21taXQgPSBudjUwX2Rpc3BfYXRvbWljX2NvbW1pdCwKPiAgCS5hdG9taWNfc3RhdGVfYWxsb2Mg PSBudjUwX2Rpc3BfYXRvbWljX3N0YXRlX2FsbG9jLAo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2Ry bS9kcm1fZmJfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKPiBpbmRleCBi MDY5NDMzZTdmYzEuLmNhODA5YmZiYWViYiAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1f ZmJfaGVscGVyLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKPiBAQCAtMzMw LDYgKzMzMCw3IEBAIHZvaWQgZHJtX2ZiX2hlbHBlcl9mYmRldl90ZWFyZG93bihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKPiAgCj4gIHZvaWQgZHJtX2ZiX2hlbHBlcl9sYXN0Y2xvc2Uoc3RydWN0 IGRybV9kZXZpY2UgKmRldik7Cj4gIHZvaWQgZHJtX2ZiX2hlbHBlcl9vdXRwdXRfcG9sbF9jaGFu Z2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICt2b2lkIGRybV9mYl9oZWxwZXJfb3V0cHV0 X3BvbGxfY2hhbmdlZF93aXRoX3JwbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAgI2Vsc2UK PiAgc3RhdGljIGlubGluZSB2b2lkIGRybV9mYl9oZWxwZXJfcHJlcGFyZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAo+ICAJCQkJCXN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsCj4gQEAgLTU2 NCw2ICs1NjUsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGRybV9mYl9oZWxwZXJfb3V0cHV0X3Bv bGxfY2hhbmdlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICB7Cj4gIH0KPiAgCj4gK3N0YXRp YyBpbmxpbmUgdm9pZCBkcm1fZmJfaGVscGVyX291dHB1dF9wb2xsX2NoYW5nZWRfd2l0aF9ycG0o c3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICt9Cj4gKwo+ICAjZW5kaWYKPiAgCj4gIHN0 YXRpYyBpbmxpbmUgaW50Cj4gLS0gCj4gMi4xNy4xCj4gCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCk5vdXZlYXUgbWFpbGluZyBsaXN0Ck5vdXZlYXVAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vbm91dmVhdQo=