From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chen Gong Subject: Re: [PATCH v2] tools: create power/x86/x86_energy_perf_policy Date: Thu, 25 Nov 2010 16:59:04 +0800 Message-ID: <4CEE2558.1050903__7525.14491691745$1291048130$gmane$org@linux.intel.com> References: <4CEDF9BB.9030002@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <4CEDF9BB.9030002@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-pm-bounces@lists.linux-foundation.org Errors-To: linux-pm-bounces@lists.linux-foundation.org To: Chen Gong Cc: x86@kernel.org, Greg Kroah-Hartman , linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-pm@lists.linux-foundation.org List-Id: linux-pm@vger.kernel.org 5LqOIDExLzI1LzIwMTAgMTo1MiBQTSwgQ2hlbiBHb25nIOWGmemBkzoKPiDkuo4gMTEvMjQvMjAx MCAxOjMxIFBNLCBMZW4gQnJvd24g5YaZ6YGTOgo+PiBGcm9tOiBMZW4gQnJvd248bGVuLmJyb3du QGludGVsLmNvbT4KPj4KPj4gTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBUyBmaXJzdCBiZWNhbWUg YXZhaWxhYmxlIG9uIFdlc3RtZXJlIFhlb24uCj4+IEl0IGlzIGltcGxlbWVudGVkIGluIGFsbCBT YW5keSBCcmlkZ2UgcHJvY2Vzc29ycyAtLSBtb2JpbGUsIGRlc2t0b3AKPj4gYW5kIHNlcnZlci4K Pj4gSXQgaXMgZXhwZWN0ZWQgdG8gYmVjb21lIGluY3JlYXNpbmdseSBpbXBvcnRhbnQgaW4gc3Vi c2VxdWVudAo+PiBnZW5lcmF0aW9ucy4KPj4KPj4geDg2X2VuZXJneV9wZXJmX3BvbGljeSBpcyBh IHVzZXItc3BhY2UgdXRpbGl0eSB0byBzZXQgdGhpcwo+PiBoYXJkd2FyZSBlbmVyZ3kgdnMgcGVy Zm9ybWFuY2UgcG9saWN5IGhpbnQgaW4gdGhlIHByb2Nlc3Nvci4KPj4gTW9zdCBzeXN0ZW1zIHdv dWxkIGJlbmVmaXQgZnJvbSAieDg2X2VuZXJneV9wZXJmX3BvbGljeSBub3JtYWwiCj4+IGF0IHN5 c3RlbSBzdGFydHVwLCBhcyB0aGUgaGFyZHdhcmUgZGVmYXVsdCBpcyBtYXhpbXVtIHBlcmZvcm1h bmNlCj4+IGF0IHRoZSBleHBlbnNlIG9mIGVuZXJneSBlZmZpY2llbmN5Lgo+Pgo+PiBMaW51eC0y LjYuMzYgYWRkZWQgImVwYiIgdG8gL3Byb2MvY3B1aW5mbyB0byBpbmRpY2F0ZQo+PiBpZiBhbiB4 ODYgcHJvY2Vzc29yIHN1cHBvcnRzIE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMsCj4+IHRob3Vn aCB0aGUga2VybmVsIGRvZXMgbm90IGFjdHVhbGx5IHByb2dyYW0gdGhlIE1TUi4KPj4KPj4gSW4g TWFyY2gsIFZlbmthdGVzaCBQYWxsaXBhZGkgcHJvcG9zZWQgYSBzbWFsbCBkcml2ZXIKPj4gdGhh dCBwcm9ncmFtbWVkIE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMsIGJhc2VkIG9uCj4+IHRoZSBj cHVmcmVxIGdvdmVybm9yIGluIHVzZS4gSXQgYWxzbyBvZmZlcmVkCj4+IGEgYm9vdC10aW1lIGNt ZGxpbmUgb3B0aW9uIHRvIG92ZXJyaWRlLgo+PiBodHRwOi8vbGttbC5vcmcvbGttbC8yMDEwLzMv NC80NTcKPj4gQnV0IGhpZGluZyB0aGUgaGFyZHdhcmUgcG9saWN5IGJlaGluZCB0aGUKPj4gZ292 ZXJub3IgY2hvaWNlIHdhcyBkZWVtZWQgImtpbmRhIGlja3kiLgo+Pgo+PiBTbyBpbiBKdW5lLCBJ IHByb3Bvc2VkIGEgZ2VuZXJpYyB1c2VyL2tlcm5lbCBBUEkgdG8KPj4gY29uc29saWRhdGUgdGhl IHBvd2VyL3BlcmZvcm1hbmNlIHBvbGljeSB0cmFkZS1vZmYuCj4+ICJSRkM6IC9zeXMvcG93ZXIv cG9saWN5X3ByZWZlcmVuY2UiCj4+IGh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMTAvNi8xNi8zOTkK Pj4gVGhhdCBpcyBteSBwcmVmZXJlbmNlIGZvciBpbXBsZW1lbnRpbmcgdGhpcyBjYXBhYmlsaXR5 LAo+PiBidXQgSSByZWNlaXZlZCBubyBzdXBwb3J0IG9uIHRoZSBsaXN0Lgo+Pgo+PiBTbyBpbiBT ZXB0ZW1iZXIsIEkgc2VudCB4ODZfZW5lcmd5X3BlcmZfcG9saWN5LmMgdG8gTEtNTCwKPj4gYSB1 c2VyLXNwYWNlIHV0aWxpdHkgdGhhdCBzY3JpYmJsZXMgZGlyZWN0bHkgdG8gdGhlIE1TUi4KPj4g aHR0cDovL2xrbWwub3JnL2xrbWwvMjAxMC85LzI4LzI0Ngo+Pgo+PiBIZXJlIGlzIHRoZSBzYW1l IHV0aWxpdHkgcmUtc2VudCwgdGhpcyB0aW1lIHByb3Bvc2VkCj4+IHRvIHJlc2lkZSBpbiB0aGUg a2VybmVsIHRvb2xzIGRpcmVjdG9yeS4KPj4KPj4gU2lnbmVkLW9mZi1ieTogTGVuIEJyb3duPGxl bi5icm93bkBpbnRlbC5jb20+Cj4+IC0tLQo+PiB2Mgo+PiBjcmVhdGUgbWFuIHBhZ2UKPj4gbWlu b3IgdHdlYWtzIGluIHJlc3BvbnNlIHRvIHJldmlldyBjb21tZW50cwo+Pgo+PiB0b29scy9wb3dl ci94ODYveDg2X2VuZXJneV9wZXJmX3BvbGljeS9NYWtlZmlsZSB8IDggKwo+PiAuLi4veDg2X2Vu ZXJneV9wZXJmX3BvbGljeS44IHwgMTA0ICsrKysrKysKPj4gLi4uL3g4Nl9lbmVyZ3lfcGVyZl9w b2xpY3kuYyB8IDMyNSArKysrKysrKysrKysrKysrKysrKwo+Pgo+PiBkaWZmIC0tZ2l0IGEvdG9v bHMvcG93ZXIveDg2L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kvTWFrZWZpbGUKPj4gYi90b29scy9w b3dlci94ODYveDg2X2VuZXJneV9wZXJmX3BvbGljeS9NYWtlZmlsZQo+PiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi5mNDU4MjM3Cj4+IC0tLSAvZGV2L251bGwKPj4gKysr IGIvdG9vbHMvcG93ZXIveDg2L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kvTWFrZWZpbGUKPj4gQEAg LTAsMCArMSw4IEBACj4+ICt4ODZfZW5lcmd5X3BlcmZfcG9saWN5IDogeDg2X2VuZXJneV9wZXJm X3BvbGljeS5jCj4+ICsKPj4gK2NsZWFuIDoKPj4gKyBybSAtZiB4ODZfZW5lcmd5X3BlcmZfcG9s aWN5Cj4+ICsKPj4gK2luc3RhbGwgOgo+PiArIGluc3RhbGwgeDg2X2VuZXJneV9wZXJmX3BvbGlj eSAvdXNyL2Jpbi8KPj4gKyBpbnN0YWxsIHg4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kuOCAvdXNyL3No YXJlL21hbi9tYW44Lwo+PiBkaWZmIC0tZ2l0Cj4+IGEvdG9vbHMvcG93ZXIveDg2L3g4Nl9lbmVy Z3lfcGVyZl9wb2xpY3kveDg2X2VuZXJneV9wZXJmX3BvbGljeS44Cj4+IGIvdG9vbHMvcG93ZXIv eDg2L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kveDg2X2VuZXJneV9wZXJmX3BvbGljeS44Cj4+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjhlYWFhZDYKPj4gLS0tIC9kZXYv bnVsbAo+PiArKysgYi90b29scy9wb3dlci94ODYveDg2X2VuZXJneV9wZXJmX3BvbGljeS94ODZf ZW5lcmd5X3BlcmZfcG9saWN5LjgKPj4gQEAgLTAsMCArMSwxMDQgQEAKPj4gKy5cIiBUaGlzIHBh Z2UgQ29weXJpZ2h0IChDKSAyMDEwIExlbiBCcm93bjxsZW4uYnJvd25AaW50ZWwuY29tPgo+PiAr LlwiIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHUEwsIENvcHlsZWZ0IDE5OTQuCj4+ICsuVEggWDg2 X0VORVJHWV9QRVJGX1BPTElDWSA4Cj4+ICsuU0ggTkFNRQo+PiAreDg2X2VuZXJneV9wZXJmX3Bv bGljeSBcLSByZWFkIG9yIHdyaXRlIE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMKPj4gKy5TSCBT WU5PUFNJUwo+PiArLmZ0IEIKPj4gKy5CIHg4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kKPj4gKy5SQiBb ICJcLWMgY3B1IiBdCj4+ICsuUkIgWyAiXC12IiBdCj4+ICsuUkIgIlwtciIKPj4gKy5icgo+PiAr LkIgeDg2X2VuZXJneV9wZXJmX3BvbGljeQo+PiArLlJCIFsgIlwtYyBjcHUiIF0KPj4gKy5SQiBb ICJcLXYiIF0KPj4gKy5SQiAncGVyZm9ybWFuY2UnCj4+ICsuYnIKPj4gKy5CIHg4Nl9lbmVyZ3lf cGVyZl9wb2xpY3kKPj4gKy5SQiBbICJcLWMgY3B1IiBdCj4+ICsuUkIgWyAiXC12IiBdCj4+ICsu UkIgJ25vcm1hbCcKPj4gKy5icgo+PiArLkIgeDg2X2VuZXJneV9wZXJmX3BvbGljeQo+PiArLlJC IFsgIlwtYyBjcHUiIF0KPj4gKy5SQiBbICJcLXYiIF0KPj4gKy5SQiAncG93ZXJzYXZlJwo+PiAr LmJyCj4+ICsuQiB4ODZfZW5lcmd5X3BlcmZfcG9saWN5Cj4+ICsuUkIgWyAiXC1jIGNwdSIgXQo+ PiArLlJCIFsgIlwtdiIgXQo+PiArLlJCIG4KPj4gKy5icgo+PiArLlNIIERFU0NSSVBUSU9OCj4+ ICtcZkJ4ODZfZW5lcmd5X3BlcmZfcG9saWN5XGZQCj4+ICthbGxvd3Mgc29mdHdhcmUgdG8gY29u dmV5Cj4+ICtpdHMgcG9saWN5IGZvciB0aGUgcmVsYXRpdmUgaW1wb3J0YW5jZSBvZiBwZXJmb3Jt YW5jZQo+PiArdmVyc3VzIGVuZXJneSBzYXZpbmdzIHRvIHRoZSBwcm9jZXNzb3IuCj4+ICsKPj4g K1RoZSBwcm9jZXNzb3IgdXNlcyB0aGlzIGluZm9ybWF0aW9uIGluIG1vZGVsLXNwZWNpZmljIHdh eXMKPj4gK3doZW4gaXQgbXVzdCBzZWxlY3QgdHJhZGUtb2ZmcyBiZXR3ZWVuIHBlcmZvcm1hbmNl IGFuZAo+PiArZW5lcmd5IGVmZmljaWVuY3kuCj4+ICsKPj4gK1RoaXMgcG9saWN5IGhpbnQgZG9l cyBub3Qgc3VwZXJzZWRlIFByb2Nlc3NvciBQZXJmb3JtYW5jZSBzdGF0ZXMKPj4gKyhQLXN0YXRl cykgb3IgQ1BVIElkbGUgcG93ZXIgc3RhdGVzIChDLXN0YXRlcyksIGJ1dCBhbGxvd3MKPj4gK3Nv ZnR3YXJlIHRvIGhhdmUgaW5mbHVlbmNlIHdoZXJlIGl0IHdvdWxkIG90aGVyd2lzZSBiZSB1bmFi bGUKPj4gK3RvIGV4cHJlc3MgYSBwcmVmZXJlbmNlLgo+PiArCj4+ICtGb3IgZXhhbXBsZSwgdGhp cyBzZXR0aW5nIG1heSB0ZWxsIHRoZSBoYXJkd2FyZSBob3cKPj4gK2FnZ3Jlc3NpdmVseSBvciBj b25zZXJ2YXRpdmVseSB0byBjb250cm9sIGZyZXF1ZW5jeQo+PiAraW4gdGhlICJ0dXJibyByYW5n ZSIgYWJvdmUgdGhlIGV4cGxpY2l0bHkgT1MtY29udHJvbGxlZAo+PiArUC1zdGF0ZSBmcmVxdWVu Y3kgcmFuZ2UuIEl0IG1heSBhbHNvIHRlbGwgdGhlIGhhcmR3YXJlCj4+ICtob3cgYWdncmVzc2l2 ZWx5IGlzIHNob3VsZCBlbnRlciB0aGUgT1MgcmVxdWVzdGVkIEMtc3RhdGVzLgo+PiArCj4+ICtT dXBwb3J0IGZvciB0aGlzIGZlYXR1cmUgaXMgaW5kaWNhdGVkIGJ5IENQVUlELjA2SC5FQ1guYml0 Mwo+PiArcGVyIHRoZSBJbnRlbCBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVsb3BlcidzIE1h bnVhbC4KPj4gKwo+PiArLlNTIE9wdGlvbnMKPj4gK1xmQi1jXGZQIGxpbWl0cyBvcGVyYXRpb24g dG8gYSBzaW5nbGUgQ1BVLgo+PiArVGhlIGRlZmF1bHQgaXMgdG8gb3BlcmF0ZSBvbiBhbGwgQ1BV cy4KPj4gK05vdGUgdGhhdCBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTIGlzIGRlZmluZWQgcGVy Cj4+ICtsb2dpY2FsIHByb2Nlc3NvciwgYnV0IHRoYXQgdGhlIGluaXRpYWwgaW1wbGVtZW50YXRp b25zCj4+ICtvZiB0aGUgTVNSIHdlcmUgc2hhcmVkIGFtb25nIGFsbCBwcm9jZXNzb3JzIGluIGVh Y2ggcGFja2FnZS4KPj4gKy5QUAo+PiArXGZCLXZcZlAgaW5jcmVhc2VzIHZlcmJvc2l0eS4gQnkg ZGVmYXVsdAo+PiAreDg2X2VuZXJneV9wZXJmX3BvbGljeSBpcyBzaWxlbnQuCj4+ICsuUFAKPj4g K1xmQi1yXGZQIGlzIGZvciAicmVhZC1vbmx5IiBtb2RlIC0gdGhlIHVuY2hhbmdlZCBzdGF0ZQo+ PiAraXMgcmVhZCBhbmQgZGlzcGxheWVkLgo+PiArLlBQCj4+ICsuSSBwZXJmb3JtYW5jZQo+PiAr U2V0IGEgcG9saWN5IHdoZXJlIHBlcmZvcm1hbmNlIGlzIHBhcmFtb3VudC4KPj4gK1RoZSBwcm9j ZXNzb3Igd2lsbCBiZSB1bndpbGxpbmcgdG8gc2FjcmlmaWNlIGFueSBwZXJmb3JtYW5jZQo+PiAr Zm9yIHRoZSBzYWtlIG9mIGVuZXJneSBzYXZpbmcuIFRoaXMgaXMgdGhlIGhhcmR3YXJlIGRlZmF1 bHQuCj4+ICsuUFAKPj4gKy5JIG5vcm1hbAo+PiArU2V0IGEgcG9saWN5IHdpdGggYSBub3JtYWwg YmFsYW5jZSBiZXR3ZWVuIHBlcmZvcm1hbmNlIGFuZCBlbmVyZ3kKPj4gZWZmaWNpZW5jeS4KPj4g K1RoZSBwcm9jZXNzb3Igd2lsbCB0b2xlcmF0ZSBtaW5vciBwZXJmb3JtYW5jZSBjb21wcm9taXNl Cj4+ICtmb3IgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgZW5lcmd5IHNhdmluZ3MuCj4+ICtUaGlz IHJlYXNvbmFibGUgZGVmYXVsdCBmb3IgbW9zdCBkZXNrdG9wcyBhbmQgc2VydmVycy4KPj4gKy5Q UAo+PiArLkkgcG93ZXJzYXZlCj4+ICtTZXQgYSBwb2xpY3kgd2hlcmUgdGhlIHByb2Nlc3NvciBj YW4gYWNjZXB0Cj4+ICthIG1lYXN1cmFibGUgcGVyZm9ybWFuY2UgaGl0IHRvIG1heGltaXplIGVu ZXJneSBlZmZpY2llbmN5Lgo+PiArLlBQCj4+ICsuSSBuCj4+ICtTZXQgTVNSX0lBMzJfRU5FUkdZ X1BFUkZfQklBUyB0byB0aGUgc3BlY2lmaWVkIG51bWJlci4KPj4gK1RoZSByYW5nZSBvZiB2YWxp ZCBudW1iZXJzIGlzIDAtMTUsIHdoZXJlIDAgaXMgbWF4aW11bQo+PiArcGVyZm9ybWFuY2UgYW5k IDE1IGlzIG1heGltdW0gZW5lcmd5IGVmZmljaWVuY3kuCj4+ICsKPj4gKy5TSCBOT1RFUwo+PiAr LkIgIng4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kgIgo+PiArcnVucyBvbmx5IGFzIHJvb3QuCj4+ICsu U0ggRklMRVMKPj4gKy50YQo+PiArLm5mCj4+ICsvZGV2L2NwdS8qL21zcgo+PiArLmZpCj4+ICsK Pj4gKy5TSCAiU0VFIEFMU08iCj4+ICttc3IoNCkKPj4gKy5QUAo+PiArLlNIIEFVVEhPUlMKPj4g Ky5uZgo+PiArV3JpdHRlbiBieSBMZW4gQnJvd248bGVuLmJyb3duQGludGVsLmNvbT4KPj4gZGlm ZiAtLWdpdAo+PiBhL3Rvb2xzL3Bvd2VyL3g4Ni94ODZfZW5lcmd5X3BlcmZfcG9saWN5L3g4Nl9l bmVyZ3lfcGVyZl9wb2xpY3kuYwo+PiBiL3Rvb2xzL3Bvd2VyL3g4Ni94ODZfZW5lcmd5X3BlcmZf cG9saWN5L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ PiBpbmRleCAwMDAwMDAwLi5iNTM5OTIzCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvdG9vbHMv cG93ZXIveDg2L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kveDg2X2VuZXJneV9wZXJmX3BvbGljeS5j Cj4+IEBAIC0wLDAgKzEsMzI1IEBACj4+ICsvKgo+PiArICogeDg2X2VuZXJneV9wZXJmX3BvbGlj eSAtLSBzZXQgdGhlIGVuZXJneSB2ZXJzdXMgcGVyZm9ybWFuY2UKPj4gKyAqIHBvbGljeSBwcmVm ZXJlbmNlIGJpYXMgb24gcmVjZW50IFg4NiBwcm9jZXNzb3JzLgo+PiArICovCj4+ICsvKgo+PiAr ICogQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbi4KPj4gKyAqIExlbiBCcm93 bjxsZW4uYnJvd25AaW50ZWwuY29tPgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPj4gbW9kaWZ5IGl0Cj4+ ICsgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlLAo+PiArICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAo+PiBXSVRIT1VUCj4+ICsg KiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJD SEFOVEFCSUxJVFkgb3IKPj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBT ZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+PiBMaWNlbnNlIGZvcgo+PiArICogbW9yZSBkZXRh aWxzLgo+PiArICoKPj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4+IGFsb25nIHdpdGgKPj4gKyAqIHRoaXMgcHJv Z3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu LAo+PiArICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxIFVTQS4KPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZTxzdGRpby5oPgo+PiArI2luY2x1ZGU8 dW5pc3RkLmg+Cj4+ICsjaW5jbHVkZTxzeXMvdHlwZXMuaD4KPj4gKyNpbmNsdWRlPHN5cy9zdGF0 Lmg+Cj4+ICsjaW5jbHVkZTxzeXMvcmVzb3VyY2UuaD4KPj4gKyNpbmNsdWRlPGZjbnRsLmg+Cj4+ ICsjaW5jbHVkZTxzaWduYWwuaD4KPj4gKyNpbmNsdWRlPHN5cy90aW1lLmg+Cj4+ICsjaW5jbHVk ZTxzdGRsaWIuaD4KPj4gKyNpbmNsdWRlPHN0cmluZy5oPgo+PiArCj4+ICt1bnNpZ25lZCBpbnQg dmVyYm9zZTsgLyogc2V0IHdpdGggLXYgKi8KPj4gK3Vuc2lnbmVkIGludCByZWFkX29ubHk7IC8q IHNldCB3aXRoIC1yICovCj4+ICtjaGFyICpwcm9nbmFtZTsKPj4gK3Vuc2lnbmVkIGxvbmcgbG9u ZyBuZXdfYmlhczsKPj4gK2ludCBjcHUgPSAtMTsKPj4gKwo+PiArLyoKPj4gKyAqIFVzYWdlOgo+ PiArICoKPj4gKyAqIC1jIGNwdTogbGltaXQgYWN0aW9uIHRvIGEgc2luZ2xlIENQVSAoZGVmYXVs dCBpcyBhbGwgQ1BVcykKPj4gKyAqIC12OiB2ZXJib3NlIG91dHB1dCAoY2FuIGludm9rZSBtb3Jl IHRoYW4gb25jZSkKPj4gKyAqIC1yOiByZWFkLW9ubHksIGRvbid0IGNoYW5nZSBhbnkgc2V0dGlu Z3MKPj4gKyAqCj4+ICsgKiBwZXJmb3JtYW5jZQo+PiArICogUGVyZm9ybWFuY2UgaXMgcGFyYW1v dW50Lgo+PiArICogVW53aWxsaW5nIHRvIHNhY3JhZmljZSBhbnkgcGVyZm9ybWFuY2UKPj4gKyAq IGZvciB0aGUgc2FrZSBvZiBlbmVyZ3kgc2F2aW5nLiAoaGFyZHdhcmUgZGVmYXVsdCkKPj4gKyAq Cj4+ICsgKiBub3JtYWwKPj4gKyAqIENhbiB0b2xlcmF0ZSBtaW5vciBwZXJmb3JtYW5jZSBjb21w cm9taXNlCj4+ICsgKiBmb3IgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgZW5lcmd5IHNhdmluZ3Mu Cj4+ICsgKiAocmVhc29uYWJsZSBkZWZhdWx0IGZvciBtb3N0IGRlc2t0b3BzIGFuZCBzZXJ2ZXJz KQo+PiArICoKPj4gKyAqIHBvd2Vyc2F2ZQo+PiArICogQ2FuIHRvbGVyYXRlIHNpZ25pZmljYW50 IHBlcmZvcm1hbmNlIGhpdAo+PiArICogdG8gbWF4aW1pemUgZW5lcmd5IHNhdmluZ3MuCj4+ICsg Kgo+PiArICogbgo+PiArICogYSBudW1lcmljYWwgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIHVuZGVy bHlpbmcgTVNSLgo+PiArICovCj4+ICt2b2lkIHVzYWdlKHZvaWQpCj4+ICt7Cj4+ICsgcHJpbnRm KCIlczogWy1jIGNwdV0gWy12XSAiCj4+ICsgIigtciB8ICdwZXJmb3JtYW5jZScgfCAnbm9ybWFs JyB8ICdwb3dlcnNhdmUnIHwgbilcbiIsCj4+ICsgcHJvZ25hbWUpOwo+PiArIGV4aXQoMSk7Cj4+ ICt9Cj4+ICsKPj4gKyNkZWZpbmUgTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBUyAweDAwMDAwMWIw Cj4+ICsKPj4gKyNkZWZpbmUgQklBU19QRVJGT1JNQU5DRSAwCj4+ICsjZGVmaW5lIEJJQVNfQkFM QU5DRSA2Cj4+ICsjZGVmaW5lIEJJQVNfUE9XRVJTQVZFIDE1Cj4+ICsKPj4gK3ZvaWQgY21kbGlu ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCj4+ICt7Cj4+ICsgaW50IG9wdDsKPj4gKwo+PiArIHBy b2duYW1lID0gYXJndlswXTsKPj4gKwo+PiArIHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFy Z3YsICIrcnZjOiIpKSAhPSAtMSkgewo+PiArIHN3aXRjaCAob3B0KSB7Cj4+ICsgY2FzZSAnYyc6 Cj4+ICsgY3B1ID0gYXRvaShvcHRhcmcpOwo+PiArIGJyZWFrOwo+PiArIGNhc2UgJ3InOgo+PiAr IHJlYWRfb25seSA9IDE7Cj4+ICsgYnJlYWs7Cj4+ICsgY2FzZSAndic6Cj4+ICsgdmVyYm9zZSsr Owo+PiArIGJyZWFrOwo+PiArIGRlZmF1bHQ6Cj4+ICsgdXNhZ2UoKTsKPj4gKyB9Cj4+ICsgfQo+ PiArIC8qIGlmIC1yLCB0aGVuIHNob3VsZCBiZSBubyBhZGRpdGlvbmFsIG9wdGluZCAqLwo+PiAr IGlmIChyZWFkX29ubHkmJiAoYXJnYz4gb3B0aW5kKSkKPj4gKyB1c2FnZSgpOwo+PiArCj4+ICsg LyoKPj4gKyAqIGlmIG5vIC1yICwgdGhlbiBtdXN0IGJlIG9uZSBhZGRpdGlvbmFsIG9wdGluZAo+ PiArICovCj4+ICsgaWYgKCFyZWFkX29ubHkpIHsKPj4gKwo+PiArIGlmIChhcmdjICE9IG9wdGlu ZCArIDEpIHsKPj4gKyBwcmludGYoIm11c3Qgc3VwcGx5IC1yIG9yIHBvbGljeSBwYXJhbVxuIik7 Cj4+ICsgdXNhZ2UoKTsKPj4gKyB9Cj4+ICsKPj4gKyBpZiAoIXN0cmNtcCgicGVyZm9ybWFuY2Ui LCBhcmd2W29wdGluZF0pKSB7Cj4+ICsgbmV3X2JpYXMgPSBCSUFTX1BFUkZPUk1BTkNFOwo+PiAr IH0gZWxzZSBpZiAoIXN0cmNtcCgibm9ybWFsIiwgYXJndltvcHRpbmRdKSkgewo+PiArIG5ld19i aWFzID0gQklBU19CQUxBTkNFOwo+PiArIH0gZWxzZSBpZiAoIXN0cmNtcCgicG93ZXJzYXZlIiwg YXJndltvcHRpbmRdKSkgewo+PiArIG5ld19iaWFzID0gQklBU19QT1dFUlNBVkU7Cj4+ICsgfSBl bHNlIHsKPj4gKyBjaGFyICplbmRwdHI7Cj4+ICsKPj4gKyBuZXdfYmlhcyA9IHN0cnRvdWxsKGFy Z3Zbb3B0aW5kXSwmZW5kcHRyLCAwKTsKPj4gKyBpZiAoZW5kcHRyID09IGFyZ3Zbb3B0aW5kXSB8 fAo+PiArIG5ld19iaWFzPiBCSUFTX1BPV0VSU0FWRSkgewo+PiArIGZwcmludGYoc3RkZXJyLCAi aW52YWxpZCB2YWx1ZTogJXNcbiIsCj4+ICsgYXJndltvcHRpbmRdKTsKPj4gKyB1c2FnZSgpOwo+ PiArIH0KPj4gKyB9Cj4+ICsgfQo+PiArfQo+PiArCj4+ICsvKgo+PiArICogdmFsaWRhdGVfY3B1 aWQoKQo+PiArICogcmV0dXJucyBvbiBzdWNjZXNzLCBxdWlldGx5IGV4aXRzIG9uIGZhaWx1cmUg KG1ha2UgdmVyYm9zZSB3aXRoIC12KQo+PiArICovCj4+ICt2b2lkIHZhbGlkYXRlX2NwdWlkKHZv aWQpCj4+ICt7Cj4+ICsgdW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeCwgbWF4X2xldmVs Owo+PiArIGNoYXIgYnJhbmRbMTZdOwo+PiArIHVuc2lnbmVkIGludCBmbXMsIGZhbWlseSwgbW9k ZWwsIHN0ZXBwaW5nOwo+PiArCj4+ICsgZWF4ID0gZWJ4ID0gZWN4ID0gZWR4ID0gMDsKPj4gKwo+ PiArIGFzbSgiY3B1aWQiIDogIj1hIiAobWF4X2xldmVsKSwgIj1iIiAoZWJ4KSwgIj1jIiAoZWN4 KSwKPj4gKyAiPWQiIChlZHgpIDogImEiICgwKSk7Cj4+ICsKPj4gKyBpZiAoZWJ4ICE9IDB4NzU2 ZTY1NDcgfHwgZWR4ICE9IDB4NDk2NTZlNjkgfHwgZWN4ICE9IDB4NmM2NTc0NmUpIHsKPj4gKyBp ZiAodmVyYm9zZSkKPj4gKyBmcHJpbnRmKHN0ZGVyciwgIiUuNHMlLjRzJS40cyAhPSBHZW51aW5l SW50ZWwiLAo+PiArIChjaGFyICopJmVieCwgKGNoYXIgKikmZWR4LCAoY2hhciAqKSZlY3gpOwo+ PiArIGV4aXQoMSk7Cj4+ICsgfQo+PiArCj4+ICsgYXNtKCJjcHVpZCIgOiAiPWEiIChmbXMpLCAi PWMiIChlY3gpLCAiPWQiIChlZHgpIDogImEiICgxKSA6ICJlYngiKTsKPj4gKyBmYW1pbHkgPSAo Zm1zPj4gOCkmIDB4ZjsKPj4gKyBtb2RlbCA9IChmbXM+PiA0KSYgMHhmOwo+PiArIHN0ZXBwaW5n ID0gZm1zJiAweGY7Cj4+ICsgaWYgKGZhbWlseSA9PSA2IHx8IGZhbWlseSA9PSAweGYpCj4+ICsg bW9kZWwgKz0gKChmbXM+PiAxNikmIDB4Zik8PCA0Owo+PiArCj4+ICsgaWYgKHZlcmJvc2U+IDEp Cj4+ICsgcHJpbnRmKCJDUFVJRCAlcyAlZCBsZXZlbHMgZmFtaWx5Om1vZGVsOnN0ZXBwaW5nICIK Pj4gKyAiMHgleDoleDoleCAoJWQ6JWQ6JWQpXG4iLCBicmFuZCwgbWF4X2xldmVsLAo+PiArIGZh bWlseSwgbW9kZWwsIHN0ZXBwaW5nLCBmYW1pbHksIG1vZGVsLCBzdGVwcGluZyk7Cj4+ICsKPj4g KyBpZiAoIShlZHgmICgxPDwgNSkpKSB7Cj4+ICsgaWYgKHZlcmJvc2UpCj4+ICsgcHJpbnRmKCJD UFVJRDogbm8gTVNSXG4iKTsKPj4gKyBleGl0KDEpOwo+PiArIH0KPj4gKwo+PiArIC8qCj4+ICsg KiBTdXBwb3J0IGZvciBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTCj4+ICsgKiBpcyBpbmRpY2F0 ZWQgYnkgQ1BVSUQuMDZILkVDWC5iaXQzCj4+ICsgKi8KPj4gKyBhc20oImNwdWlkIiA6ICI9YSIg KGVheCksICI9YiIgKGVieCksICI9YyIgKGVjeCksICI9ZCIgKGVkeCkgOiAiYSIKPj4gKDYpKTsK Pj4gKyBpZiAodmVyYm9zZSkKPj4gKyBwcmludGYoIkNQVUlELjA2SC5FQ1g6IDB4JXhcbiIsIGVj eCk7Cj4+ICsgaWYgKCEoZWN4JiAoMTw8IDMpKSkgewo+PiArIGlmICh2ZXJib3NlKQo+PiArIHBy aW50ZigiQ1BVSUQ6IE5vIE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVNcbiIpOwo+PiArIGV4aXQo MSk7Cj4+ICsgfQo+PiArIHJldHVybjsgLyogc3VjY2VzcyAqLwo+PiArfQo+PiArCj4+ICt1bnNp Z25lZCBsb25nIGxvbmcgZ2V0X21zcihpbnQgY3B1LCBpbnQgb2Zmc2V0KQo+PiArewo+PiArIHVu c2lnbmVkIGxvbmcgbG9uZyBtc3I7Cj4+ICsgY2hhciBtc3JfcGF0aFszMl07Cj4+ICsgaW50IHJl dHZhbDsKPj4gKyBpbnQgZmQ7Cj4+ICsKPj4gKyBzcHJpbnRmKG1zcl9wYXRoLCAiL2Rldi9jcHUv JWQvbXNyIiwgY3B1KTsKPj4gKyBmZCA9IG9wZW4obXNyX3BhdGgsIE9fUkRPTkxZKTsKPj4gKyBp ZiAoZmQ8IDApIHsKPj4gKyBwcmludGYoIlRyeSBcIiMgbW9kcHJvYmUgbXNyXCJcbiIpOwo+PiAr IHBlcnJvcihtc3JfcGF0aCk7Cj4+ICsgZXhpdCgxKTsKPj4gKyB9Cj4+ICsKPj4gKyByZXR2YWwg PSBwcmVhZChmZCwmbXNyLCBzaXplb2YgbXNyLCBvZmZzZXQpOwo+PiArCj4+ICsgaWYgKHJldHZh bCAhPSBzaXplb2YgbXNyKSB7Cj4+ICsgcHJpbnRmKCJwcmVhZCBjcHUlZCAweCV4ID0gJWRcbiIs IGNwdSwgb2Zmc2V0LCByZXR2YWwpOwo+PiArIGV4aXQoLTIpOwo+PiArIH0KPj4gKyBjbG9zZShm ZCk7Cj4+ICsgcmV0dXJuIG1zcjsKPj4gK30KPj4gKwo+PiArdW5zaWduZWQgbG9uZyBsb25nIHB1 dF9tc3IoaW50IGNwdSwgdW5zaWduZWQgbG9uZyBsb25nIG5ld19tc3IsIGludAo+PiBvZmZzZXQp Cj4+ICt7Cj4+ICsgdW5zaWduZWQgbG9uZyBsb25nIG9sZF9tc3I7Cj4+ICsgY2hhciBtc3JfcGF0 aFszMl07Cj4+ICsgaW50IHJldHZhbDsKPj4gKyBpbnQgZmQ7Cj4+ICsKPj4gKyBzcHJpbnRmKG1z cl9wYXRoLCAiL2Rldi9jcHUvJWQvbXNyIiwgY3B1KTsKPj4gKyBmZCA9IG9wZW4obXNyX3BhdGgs IE9fUkRXUik7Cj4+ICsgaWYgKGZkPCAwKSB7Cj4+ICsgcGVycm9yKG1zcl9wYXRoKTsKPj4gKyBl eGl0KDEpOwo+PiArIH0KPj4gKwo+PiArIHJldHZhbCA9IHByZWFkKGZkLCZvbGRfbXNyLCBzaXpl b2Ygb2xkX21zciwgb2Zmc2V0KTsKPj4gKyBpZiAocmV0dmFsICE9IHNpemVvZiBvbGRfbXNyKSB7 Cj4+ICsgcGVycm9yKCJwd3JpdGUiKTsKPj4gKyBwcmludGYoInByZWFkIGNwdSVkIDB4JXggPSAl ZFxuIiwgY3B1LCBvZmZzZXQsIHJldHZhbCk7Cj4+ICsgZXhpdCgtMik7Cj4+ICsgfQo+PiArCj4+ ICsgcmV0dmFsID0gcHdyaXRlKGZkLCZuZXdfbXNyLCBzaXplb2YgbmV3X21zciwgb2Zmc2V0KTsK Pj4gKyBpZiAocmV0dmFsICE9IHNpemVvZiBuZXdfbXNyKSB7Cj4+ICsgcGVycm9yKCJwd3JpdGUi KTsKPj4gKyBwcmludGYoInB3cml0ZSBjcHUlZCAweCV4ID0gJWRcbiIsIGNwdSwgb2Zmc2V0LCBy ZXR2YWwpOwo+PiArIGV4aXQoLTIpOwo+PiArIH0KPj4gKwo+PiArIGNsb3NlKGZkKTsKPj4gKwo+ PiArIHJldHVybiBvbGRfbXNyOwo+PiArfQo+PiArCj4+ICt2b2lkIHByaW50X21zcihpbnQgY3B1 KQo+PiArewo+PiArIHByaW50ZigiY3B1JWQ6IDB4JTAxNmxseFxuIiwKPj4gKyBjcHUsIGdldF9t c3IoY3B1LCBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTKSk7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQg dXBkYXRlX21zcihpbnQgY3B1KQo+PiArewo+PiArIHVuc2lnbmVkIGxvbmcgbG9uZyBwcmV2aW91 c19tc3I7Cj4+ICsKPj4gKyBwcmV2aW91c19tc3IgPSBwdXRfbXNyKGNwdSwgbmV3X2JpYXMsIE1T Ul9JQTMyX0VORVJHWV9QRVJGX0JJQVMpOwo+PiArCj4+ICsgaWYgKHZlcmJvc2UpCj4+ICsgcHJp bnRmKCJjcHUlZCBtc3IweCV4IDB4JTAxNmxseCAtPiAweCUwMTZsbHhcbiIsCj4+ICsgY3B1LCBN U1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTLCBwcmV2aW91c19tc3IsIG5ld19iaWFzKTsKPj4gKwo+ PiArIHJldHVybjsKPj4gK30KPj4gKwo+PiArY2hhciAqcHJvY19zdGF0ID0gIi9wcm9jL3N0YXQi Owo+PiArLyoKPj4gKyAqIHJ1biBmdW5jKCkgb24gZXZlcnkgY3B1IGluIC9kZXYvY3B1Cj4+ICsg Ki8KPj4gK3ZvaWQgZm9yX2V2ZXJ5X2NwdSh2b2lkIChmdW5jKShpbnQpKQo+PiArewo+PiArIEZJ TEUgKmZwOwo+PiArIGludCByZXR2YWw7Cj4+ICsKPj4gKyBmcCA9IGZvcGVuKHByb2Nfc3RhdCwg InIiKTsKPj4gKyBpZiAoZnAgPT0gTlVMTCkgewo+PiArIHBlcnJvcihwcm9jX3N0YXQpOwo+PiAr IGV4aXQoMSk7Cj4+ICsgfQo+PiArCj4+ICsgcmV0dmFsID0gZnNjYW5mKGZwLCAiY3B1ICUqZCAl KmQgJSpkICUqZCAlKmQgJSpkICUqZCAlKmQgJSpkICUqZFxuIik7Cj4+ICsgaWYgKHJldHZhbCAh PSAwKSB7Cj4+ICsgcGVycm9yKCIvcHJvYy9zdGF0IGZvcm1hdCIpOwo+PiArIGV4aXQoMSk7Cj4+ ICsgfQo+PiArCj4+ICsgd2hpbGUgKDEpIHsKPj4gKyBpbnQgY3B1Owo+PiArCj4+ICsgcmV0dmFs ID0gZnNjYW5mKGZwLAo+PiArICJjcHUldSAlKmQgJSpkICUqZCAlKmQgJSpkICUqZCAlKmQgJSpk ICUqZCAlKmRcbiIsCj4+ICsgJmNwdSk7Cj4+ICsgaWYgKHJldHZhbCAhPSAxKQo+PiArIHJldHVy bjsKPj4gKwo+PiArIGZ1bmMoY3B1KTsKPj4gKyB9Cj4+ICsgZmNsb3NlKGZwKTsKPj4gK30KPj4g Kwo+PiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+PiArewo+PiArIGNtZGxpbmUo YXJnYywgYXJndik7Cj4+ICsKPj4gKyBpZiAodmVyYm9zZT4gMSkKPj4gKyBwcmludGYoIng4Nl9l bmVyZ3lfcGVyZl9wb2xpY3kgTm92IDI0LCAyMDEwIgo+PiArICIgLSBMZW4gQnJvd248bGVuYkBr ZXJuZWwub3JnPlxuIik7Cj4+ICsgaWYgKHZlcmJvc2U+IDEmJiAhcmVhZF9vbmx5KQo+PiArIHBy aW50ZigibmV3X2JpYXMgJWxsZFxuIiwgbmV3X2JpYXMpOwo+PiArCj4+ICsgdmFsaWRhdGVfY3B1 aWQoKTsKPj4gKwo+PiArIGlmIChjcHUgIT0gLTEpIHsKPj4gKyBpZiAocmVhZF9vbmx5KQo+PiAr IHByaW50X21zcihjcHUpOwo+PiArIGVsc2UKPj4gKyB1cGRhdGVfbXNyKGNwdSk7Cj4+ICsgfSBl bHNlIHsKPj4gKyBpZiAocmVhZF9vbmx5KQo+PiArIGZvcl9ldmVyeV9jcHUocHJpbnRfbXNyKTsK Pj4gKyBlbHNlCj4+ICsgZm9yX2V2ZXJ5X2NwdSh1cGRhdGVfbXNyKTsKPj4gKyB9Cj4+ICsKPj4g KyByZXR1cm4gMDsKPj4gK30KPj4KPiBJIGhhdmUgMiBxdWVzdGlvbnMuCj4KPiAxLiB0aGUgdXNh Z2UgbG9va3MgdG9vIHNpbXBsZS4gSWYgSSBoYXZlbid0IHJlYWQgdGhlIGNvbW1lbnRzCj4gaW4g dGhlIHNvdXJjZSBjb2RlcywgSSBldmVuIGNhbid0IGtub3cgdGhlIGV4YWN0IG1lYW5pbmcgb2Yg dGhlc2UKPiBwYXJhbWV0ZXJzLiBTdWNoIGFzIC12LCAtdnYgZXRjLiBIb3cgYWJvdXQgYWRkaW5n IHRoZSBjb21tZW50cwo+IGFzIHRoZSBwYXJ0IG9mIHRoZSB1c2FnZSA/Cj4KPiAyLiB0aGUgcGFy YW10ZXIgIm5vcmFtbCB8IHBlcmZvcm1hbmNlIHwgcG93ZXJzYXZlIHwgbiIgbG9va3Mgd2VpcmQu Cj4gd2h5IGl0IGNhbid0IGxvb2sgbGlrZSBvdGhlciBwYXJhbXRlciAoLXIsIC12IGV0Yy4pLiBG b3IgZXhhbXBsZSwKPiBJIGNhbid0IHVzZSBpdCBzdWNoIGFzCj4gIi4veDg2X2VuZXJneV9wZXJm X3BvbGljeSAtYyAwIG5vcm1hbCAtdiIKPiAtLQoKT25lIG1vcmUgcXVlc3Rpb24uIEZyb20gdGhl IHNwZWMsIGl0IHNob3VsZCB3cml0ZSAxIHRvIHRoZSBNU1IgMHgxRkNbMThdCnRvIGVuYWJsZSB0 aGlzIGZ1bmN0aW9uIGFmdGVyIHNldHRpbmcgdGhlIEVuZXJneSBQb2xpY3kgb24gYWxsIHRocmVh ZHMgCmluIG9uZSBwYWNrYWdlLgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1wbSBtYWlsaW5nIGxpc3QKbGludXgtcG1AbGlzdHMubGludXgtZm91 bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2xpbnV4LXBt