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 13:52:59 +0800 Message-ID: <4CEDF9BB.9030002__3488.47421487353$1291048138$gmane$org@linux.intel.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: 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: Len Brown Cc: linux-acpi@vger.kernel.org, linux-pm@lists.linux-foundation.org, Greg Kroah-Hartman , linux-kernel@vger.kernel.org, x86@kernel.org List-Id: linux-pm@vger.kernel.org 5LqOIDExLzI0LzIwMTAgMTozMSBQTSwgTGVuIEJyb3duIOWGmemBkzoKPiBGcm9tOiBMZW4gQnJv d248bGVuLmJyb3duQGludGVsLmNvbT4KPgo+IE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMgZmly c3QgYmVjYW1lIGF2YWlsYWJsZSBvbiBXZXN0bWVyZSBYZW9uLgo+IEl0IGlzIGltcGxlbWVudGVk IGluIGFsbCBTYW5keSBCcmlkZ2UgcHJvY2Vzc29ycyAtLSBtb2JpbGUsIGRlc2t0b3AgYW5kIHNl cnZlci4KPiBJdCBpcyBleHBlY3RlZCB0byBiZWNvbWUgaW5jcmVhc2luZ2x5IGltcG9ydGFudCBp biBzdWJzZXF1ZW50IGdlbmVyYXRpb25zLgo+Cj4geDg2X2VuZXJneV9wZXJmX3BvbGljeSBpcyBh IHVzZXItc3BhY2UgdXRpbGl0eSB0byBzZXQgdGhpcwo+IGhhcmR3YXJlIGVuZXJneSB2cyBwZXJm b3JtYW5jZSBwb2xpY3kgaGludCBpbiB0aGUgcHJvY2Vzc29yLgo+IE1vc3Qgc3lzdGVtcyB3b3Vs ZCBiZW5lZml0IGZyb20gIng4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kgbm9ybWFsIgo+IGF0IHN5c3Rl bSBzdGFydHVwLCBhcyB0aGUgaGFyZHdhcmUgZGVmYXVsdCBpcyBtYXhpbXVtIHBlcmZvcm1hbmNl Cj4gYXQgdGhlIGV4cGVuc2Ugb2YgZW5lcmd5IGVmZmljaWVuY3kuCj4KPiBMaW51eC0yLjYuMzYg YWRkZWQgImVwYiIgdG8gL3Byb2MvY3B1aW5mbyB0byBpbmRpY2F0ZQo+IGlmIGFuIHg4NiBwcm9j ZXNzb3Igc3VwcG9ydHMgTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBUywKPiB0aG91Z2ggdGhlIGtl cm5lbCBkb2VzIG5vdCBhY3R1YWxseSBwcm9ncmFtIHRoZSBNU1IuCj4KPiBJbiBNYXJjaCwgVmVu a2F0ZXNoIFBhbGxpcGFkaSBwcm9wb3NlZCBhIHNtYWxsIGRyaXZlcgo+IHRoYXQgcHJvZ3JhbW1l ZCBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTLCBiYXNlZCBvbgo+IHRoZSBjcHVmcmVxIGdvdmVy bm9yIGluIHVzZS4gIEl0IGFsc28gb2ZmZXJlZAo+IGEgYm9vdC10aW1lIGNtZGxpbmUgb3B0aW9u IHRvIG92ZXJyaWRlLgo+IGh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMTAvMy80LzQ1Nwo+IEJ1dCBo aWRpbmcgdGhlIGhhcmR3YXJlIHBvbGljeSBiZWhpbmQgdGhlCj4gZ292ZXJub3IgY2hvaWNlIHdh cyBkZWVtZWQgImtpbmRhIGlja3kiLgo+Cj4gU28gaW4gSnVuZSwgSSBwcm9wb3NlZCBhIGdlbmVy aWMgdXNlci9rZXJuZWwgQVBJIHRvCj4gY29uc29saWRhdGUgdGhlIHBvd2VyL3BlcmZvcm1hbmNl IHBvbGljeSB0cmFkZS1vZmYuCj4gIlJGQzogL3N5cy9wb3dlci9wb2xpY3lfcHJlZmVyZW5jZSIK PiBodHRwOi8vbGttbC5vcmcvbGttbC8yMDEwLzYvMTYvMzk5Cj4gVGhhdCBpcyBteSBwcmVmZXJl bmNlIGZvciBpbXBsZW1lbnRpbmcgdGhpcyBjYXBhYmlsaXR5LAo+IGJ1dCBJIHJlY2VpdmVkIG5v IHN1cHBvcnQgb24gdGhlIGxpc3QuCj4KPiBTbyBpbiBTZXB0ZW1iZXIsIEkgc2VudCB4ODZfZW5l cmd5X3BlcmZfcG9saWN5LmMgdG8gTEtNTCwKPiBhIHVzZXItc3BhY2UgdXRpbGl0eSB0aGF0IHNj cmliYmxlcyBkaXJlY3RseSB0byB0aGUgTVNSLgo+IGh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMTAv OS8yOC8yNDYKPgo+IEhlcmUgaXMgdGhlIHNhbWUgdXRpbGl0eSByZS1zZW50LCB0aGlzIHRpbWUg cHJvcG9zZWQKPiB0byByZXNpZGUgaW4gdGhlIGtlcm5lbCB0b29scyBkaXJlY3RvcnkuCj4KPiBT aWduZWQtb2ZmLWJ5OiBMZW4gQnJvd248bGVuLmJyb3duQGludGVsLmNvbT4KPiAtLS0KPiB2Mgo+ IGNyZWF0ZSBtYW4gcGFnZQo+IG1pbm9yIHR3ZWFrcyBpbiByZXNwb25zZSB0byByZXZpZXcgY29t bWVudHMKPgo+IHRvb2xzL3Bvd2VyL3g4Ni94ODZfZW5lcmd5X3BlcmZfcG9saWN5L01ha2VmaWxl ICAgIHwgICAgOCArCj4gICAuLi4veDg2X2VuZXJneV9wZXJmX3BvbGljeS44ICAgICAgICAgICAg ICAgICAgICAgICB8ICAxMDQgKysrKysrKwo+ICAgLi4uL3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3ku YyAgICAgICAgICAgICAgICAgICAgICAgfCAgMzI1ICsrKysrKysrKysrKysrKysrKysrCj4KPiBk aWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIveDg2L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kvTWFrZWZp bGUgYi90b29scy9wb3dlci94ODYveDg2X2VuZXJneV9wZXJmX3BvbGljeS9NYWtlZmlsZQo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZjQ1ODIzNwo+IC0tLSAvZGV2L251 bGwKPiArKysgYi90b29scy9wb3dlci94ODYveDg2X2VuZXJneV9wZXJmX3BvbGljeS9NYWtlZmls ZQo+IEBAIC0wLDAgKzEsOCBAQAo+ICt4ODZfZW5lcmd5X3BlcmZfcG9saWN5IDogeDg2X2VuZXJn eV9wZXJmX3BvbGljeS5jCj4gKwo+ICtjbGVhbiA6Cj4gKwlybSAtZiB4ODZfZW5lcmd5X3BlcmZf cG9saWN5Cj4gKwo+ICtpbnN0YWxsIDoKPiArCWluc3RhbGwgeDg2X2VuZXJneV9wZXJmX3BvbGlj eSAvdXNyL2Jpbi8KPiArCWluc3RhbGwgeDg2X2VuZXJneV9wZXJmX3BvbGljeS44IC91c3Ivc2hh cmUvbWFuL21hbjgvCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL3g4Ni94ODZfZW5lcmd5X3Bl cmZfcG9saWN5L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kuOCBiL3Rvb2xzL3Bvd2VyL3g4Ni94ODZf ZW5lcmd5X3BlcmZfcG9saWN5L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kuOAo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uOGVhYWFkNgo+IC0tLSAvZGV2L251bGwKPiArKysg Yi90b29scy9wb3dlci94ODYveDg2X2VuZXJneV9wZXJmX3BvbGljeS94ODZfZW5lcmd5X3BlcmZf cG9saWN5LjgKPiBAQCAtMCwwICsxLDEwNCBAQAo+ICsuXCIgIFRoaXMgcGFnZSBDb3B5cmlnaHQg KEMpIDIwMTAgTGVuIEJyb3duPGxlbi5icm93bkBpbnRlbC5jb20+Cj4gKy5cIiAgRGlzdHJpYnV0 ZWQgdW5kZXIgdGhlIEdQTCwgQ29weWxlZnQgMTk5NC4KPiArLlRIIFg4Nl9FTkVSR1lfUEVSRl9Q T0xJQ1kgOAo+ICsuU0ggTkFNRQo+ICt4ODZfZW5lcmd5X3BlcmZfcG9saWN5IFwtIHJlYWQgb3Ig d3JpdGUgTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBUwo+ICsuU0ggU1lOT1BTSVMKPiArLmZ0IEIK PiArLkIgeDg2X2VuZXJneV9wZXJmX3BvbGljeQo+ICsuUkIgWyAiXC1jIGNwdSIgXQo+ICsuUkIg WyAiXC12IiBdCj4gKy5SQiAiXC1yIgo+ICsuYnIKPiArLkIgeDg2X2VuZXJneV9wZXJmX3BvbGlj eQo+ICsuUkIgWyAiXC1jIGNwdSIgXQo+ICsuUkIgWyAiXC12IiBdCj4gKy5SQiAncGVyZm9ybWFu Y2UnCj4gKy5icgo+ICsuQiB4ODZfZW5lcmd5X3BlcmZfcG9saWN5Cj4gKy5SQiBbICJcLWMgY3B1 IiBdCj4gKy5SQiBbICJcLXYiIF0KPiArLlJCICdub3JtYWwnCj4gKy5icgo+ICsuQiB4ODZfZW5l cmd5X3BlcmZfcG9saWN5Cj4gKy5SQiBbICJcLWMgY3B1IiBdCj4gKy5SQiBbICJcLXYiIF0KPiAr LlJCICdwb3dlcnNhdmUnCj4gKy5icgo+ICsuQiB4ODZfZW5lcmd5X3BlcmZfcG9saWN5Cj4gKy5S QiBbICJcLWMgY3B1IiBdCj4gKy5SQiBbICJcLXYiIF0KPiArLlJCIG4KPiArLmJyCj4gKy5TSCBE RVNDUklQVElPTgo+ICtcZkJ4ODZfZW5lcmd5X3BlcmZfcG9saWN5XGZQCj4gK2FsbG93cyBzb2Z0 d2FyZSB0byBjb252ZXkKPiAraXRzIHBvbGljeSBmb3IgdGhlIHJlbGF0aXZlIGltcG9ydGFuY2Ug b2YgcGVyZm9ybWFuY2UKPiArdmVyc3VzIGVuZXJneSBzYXZpbmdzIHRvIHRoZSBwcm9jZXNzb3Iu Cj4gKwo+ICtUaGUgcHJvY2Vzc29yIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiBpbiBtb2RlbC1zcGVj aWZpYyB3YXlzCj4gK3doZW4gaXQgbXVzdCBzZWxlY3QgdHJhZGUtb2ZmcyBiZXR3ZWVuIHBlcmZv cm1hbmNlIGFuZAo+ICtlbmVyZ3kgZWZmaWNpZW5jeS4KPiArCj4gK1RoaXMgcG9saWN5IGhpbnQg ZG9lcyBub3Qgc3VwZXJzZWRlIFByb2Nlc3NvciBQZXJmb3JtYW5jZSBzdGF0ZXMKPiArKFAtc3Rh dGVzKSBvciBDUFUgSWRsZSBwb3dlciBzdGF0ZXMgKEMtc3RhdGVzKSwgYnV0IGFsbG93cwo+ICtz b2Z0d2FyZSB0byBoYXZlIGluZmx1ZW5jZSB3aGVyZSBpdCB3b3VsZCBvdGhlcndpc2UgYmUgdW5h YmxlCj4gK3RvIGV4cHJlc3MgYSBwcmVmZXJlbmNlLgo+ICsKPiArRm9yIGV4YW1wbGUsIHRoaXMg c2V0dGluZyBtYXkgdGVsbCB0aGUgaGFyZHdhcmUgaG93Cj4gK2FnZ3Jlc3NpdmVseSBvciBjb25z ZXJ2YXRpdmVseSB0byBjb250cm9sIGZyZXF1ZW5jeQo+ICtpbiB0aGUgInR1cmJvIHJhbmdlIiBh Ym92ZSB0aGUgZXhwbGljaXRseSBPUy1jb250cm9sbGVkCj4gK1Atc3RhdGUgZnJlcXVlbmN5IHJh bmdlLiAgSXQgbWF5IGFsc28gdGVsbCB0aGUgaGFyZHdhcmUKPiAraG93IGFnZ3Jlc3NpdmVseSBp cyBzaG91bGQgZW50ZXIgdGhlIE9TIHJlcXVlc3RlZCBDLXN0YXRlcy4KPiArCj4gK1N1cHBvcnQg Zm9yIHRoaXMgZmVhdHVyZSBpcyBpbmRpY2F0ZWQgYnkgQ1BVSUQuMDZILkVDWC5iaXQzCj4gK3Bl ciB0aGUgSW50ZWwgQXJjaGl0ZWN0dXJlcyBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwuCj4g Kwo+ICsuU1MgT3B0aW9ucwo+ICtcZkItY1xmUCBsaW1pdHMgb3BlcmF0aW9uIHRvIGEgc2luZ2xl IENQVS4KPiArVGhlIGRlZmF1bHQgaXMgdG8gb3BlcmF0ZSBvbiBhbGwgQ1BVcy4KPiArTm90ZSB0 aGF0IE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMgaXMgZGVmaW5lZCBwZXIKPiArbG9naWNhbCBw cm9jZXNzb3IsIGJ1dCB0aGF0IHRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9ucwo+ICtvZiB0aGUg TVNSIHdlcmUgc2hhcmVkIGFtb25nIGFsbCBwcm9jZXNzb3JzIGluIGVhY2ggcGFja2FnZS4KPiAr LlBQCj4gK1xmQi12XGZQIGluY3JlYXNlcyB2ZXJib3NpdHkuICBCeSBkZWZhdWx0Cj4gK3g4Nl9l bmVyZ3lfcGVyZl9wb2xpY3kgaXMgc2lsZW50Lgo+ICsuUFAKPiArXGZCLXJcZlAgaXMgZm9yICJy ZWFkLW9ubHkiIG1vZGUgLSB0aGUgdW5jaGFuZ2VkIHN0YXRlCj4gK2lzIHJlYWQgYW5kIGRpc3Bs YXllZC4KPiArLlBQCj4gKy5JIHBlcmZvcm1hbmNlCj4gK1NldCBhIHBvbGljeSB3aGVyZSBwZXJm b3JtYW5jZSBpcyBwYXJhbW91bnQuCj4gK1RoZSBwcm9jZXNzb3Igd2lsbCBiZSB1bndpbGxpbmcg dG8gc2FjcmlmaWNlIGFueSBwZXJmb3JtYW5jZQo+ICtmb3IgdGhlIHNha2Ugb2YgZW5lcmd5IHNh dmluZy4gVGhpcyBpcyB0aGUgaGFyZHdhcmUgZGVmYXVsdC4KPiArLlBQCj4gKy5JIG5vcm1hbAo+ ICtTZXQgYSBwb2xpY3kgd2l0aCBhIG5vcm1hbCBiYWxhbmNlIGJldHdlZW4gcGVyZm9ybWFuY2Ug YW5kIGVuZXJneSBlZmZpY2llbmN5Lgo+ICtUaGUgcHJvY2Vzc29yIHdpbGwgdG9sZXJhdGUgbWlu b3IgcGVyZm9ybWFuY2UgY29tcHJvbWlzZQo+ICtmb3IgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQg ZW5lcmd5IHNhdmluZ3MuCj4gK1RoaXMgcmVhc29uYWJsZSBkZWZhdWx0IGZvciBtb3N0IGRlc2t0 b3BzIGFuZCBzZXJ2ZXJzLgo+ICsuUFAKPiArLkkgcG93ZXJzYXZlCj4gK1NldCBhIHBvbGljeSB3 aGVyZSB0aGUgcHJvY2Vzc29yIGNhbiBhY2NlcHQKPiArYSBtZWFzdXJhYmxlIHBlcmZvcm1hbmNl IGhpdCB0byBtYXhpbWl6ZSBlbmVyZ3kgZWZmaWNpZW5jeS4KPiArLlBQCj4gKy5JIG4KPiArU2V0 IE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIuCj4gK1Ro ZSByYW5nZSBvZiB2YWxpZCBudW1iZXJzIGlzIDAtMTUsIHdoZXJlIDAgaXMgbWF4aW11bQo+ICtw ZXJmb3JtYW5jZSBhbmQgMTUgaXMgbWF4aW11bSBlbmVyZ3kgZWZmaWNpZW5jeS4KPiArCj4gKy5T SCBOT1RFUwo+ICsuQiAieDg2X2VuZXJneV9wZXJmX3BvbGljeSAiCj4gK3J1bnMgb25seSBhcyBy b290Lgo+ICsuU0ggRklMRVMKPiArLnRhCj4gKy5uZgo+ICsvZGV2L2NwdS8qL21zcgo+ICsuZmkK PiArCj4gKy5TSCAiU0VFIEFMU08iCj4gK21zcig0KQo+ICsuUFAKPiArLlNIIEFVVEhPUlMKPiAr Lm5mCj4gK1dyaXR0ZW4gYnkgTGVuIEJyb3duPGxlbi5icm93bkBpbnRlbC5jb20+Cj4gZGlmZiAt LWdpdCBhL3Rvb2xzL3Bvd2VyL3g4Ni94ODZfZW5lcmd5X3BlcmZfcG9saWN5L3g4Nl9lbmVyZ3lf cGVyZl9wb2xpY3kuYyBiL3Rvb2xzL3Bvd2VyL3g4Ni94ODZfZW5lcmd5X3BlcmZfcG9saWN5L3g4 Nl9lbmVyZ3lfcGVyZl9wb2xpY3kuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMC4uYjUzOTkyMwo+IC0tLSAvZGV2L251bGwKPiArKysgYi90b29scy9wb3dlci94ODYveDg2 X2VuZXJneV9wZXJmX3BvbGljeS94ODZfZW5lcmd5X3BlcmZfcG9saWN5LmMKPiBAQCAtMCwwICsx LDMyNSBAQAo+ICsvKgo+ICsgKiB4ODZfZW5lcmd5X3BlcmZfcG9saWN5IC0tIHNldCB0aGUgZW5l cmd5IHZlcnN1cyBwZXJmb3JtYW5jZQo+ICsgKiBwb2xpY3kgcHJlZmVyZW5jZSBiaWFzIG9uIHJl Y2VudCBYODYgcHJvY2Vzc29ycy4KPiArICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAx MCwgSW50ZWwgQ29ycG9yYXRpb24uCj4gKyAqIExlbiBCcm93bjxsZW4uYnJvd25AaW50ZWwuY29t Pgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAo+ICsgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNv bmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAo+ICsgKiB2ZXJzaW9u IDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dCBXSVRIT1VUCj4gKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgo+ICsgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yCj4gKyAqIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAo+ ICsgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLiwKPiArICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9u LCBNQSAwMjExMC0xMzAxIFVTQS4KPiArICovCj4gKwo+ICsjaW5jbHVkZTxzdGRpby5oPgo+ICsj aW5jbHVkZTx1bmlzdGQuaD4KPiArI2luY2x1ZGU8c3lzL3R5cGVzLmg+Cj4gKyNpbmNsdWRlPHN5 cy9zdGF0Lmg+Cj4gKyNpbmNsdWRlPHN5cy9yZXNvdXJjZS5oPgo+ICsjaW5jbHVkZTxmY250bC5o Pgo+ICsjaW5jbHVkZTxzaWduYWwuaD4KPiArI2luY2x1ZGU8c3lzL3RpbWUuaD4KPiArI2luY2x1 ZGU8c3RkbGliLmg+Cj4gKyNpbmNsdWRlPHN0cmluZy5oPgo+ICsKPiArdW5zaWduZWQgaW50IHZl cmJvc2U7CQkvKiBzZXQgd2l0aCAtdiAqLwo+ICt1bnNpZ25lZCBpbnQgcmVhZF9vbmx5OwkJLyog c2V0IHdpdGggLXIgKi8KPiArY2hhciAqcHJvZ25hbWU7Cj4gK3Vuc2lnbmVkIGxvbmcgbG9uZyBu ZXdfYmlhczsKPiAraW50IGNwdSA9IC0xOwo+ICsKPiArLyoKPiArICogVXNhZ2U6Cj4gKyAqCj4g KyAqIC1jIGNwdTogbGltaXQgYWN0aW9uIHRvIGEgc2luZ2xlIENQVSAoZGVmYXVsdCBpcyBhbGwg Q1BVcykKPiArICogLXY6IHZlcmJvc2Ugb3V0cHV0IChjYW4gaW52b2tlIG1vcmUgdGhhbiBvbmNl KQo+ICsgKiAtcjogcmVhZC1vbmx5LCBkb24ndCBjaGFuZ2UgYW55IHNldHRpbmdzCj4gKyAqCj4g KyAqICBwZXJmb3JtYW5jZQo+ICsgKglQZXJmb3JtYW5jZSBpcyBwYXJhbW91bnQuCj4gKyAqCVVu d2lsbGluZyB0byBzYWNyYWZpY2UgYW55IHBlcmZvcm1hbmNlCj4gKyAqCWZvciB0aGUgc2FrZSBv ZiBlbmVyZ3kgc2F2aW5nLiAoaGFyZHdhcmUgZGVmYXVsdCkKPiArICoKPiArICogIG5vcm1hbAo+ ICsgKglDYW4gdG9sZXJhdGUgbWlub3IgcGVyZm9ybWFuY2UgY29tcHJvbWlzZQo+ICsgKglmb3Ig cG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgZW5lcmd5IHNhdmluZ3MuCj4gKyAqCShyZWFzb25hYmxl IGRlZmF1bHQgZm9yIG1vc3QgZGVza3RvcHMgYW5kIHNlcnZlcnMpCj4gKyAqCj4gKyAqICBwb3dl cnNhdmUKPiArICoJQ2FuIHRvbGVyYXRlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGhpdAo+ICsg Kgl0byBtYXhpbWl6ZSBlbmVyZ3kgc2F2aW5ncy4KPiArICoKPiArICogbgo+ICsgKglhIG51bWVy aWNhbCB2YWx1ZSB0byB3cml0ZSB0byB0aGUgdW5kZXJseWluZyBNU1IuCj4gKyAqLwo+ICt2b2lk IHVzYWdlKHZvaWQpCj4gK3sKPiArCXByaW50ZigiJXM6IFstYyBjcHVdIFstdl0gIgo+ICsJCSIo LXIgfCAncGVyZm9ybWFuY2UnIHwgJ25vcm1hbCcgfCAncG93ZXJzYXZlJyB8IG4pXG4iLAo+ICsJ CXByb2duYW1lKTsKPiArCWV4aXQoMSk7Cj4gK30KPiArCj4gKyNkZWZpbmUgTVNSX0lBMzJfRU5F UkdZX1BFUkZfQklBUwkweDAwMDAwMWIwCj4gKwo+ICsjZGVmaW5lCUJJQVNfUEVSRk9STUFOQ0UJ CTAKPiArI2RlZmluZSBCSUFTX0JBTEFOQ0UJCQk2Cj4gKyNkZWZpbmUJQklBU19QT1dFUlNBVkUJ CQkxNQo+ICsKPiArdm9pZCBjbWRsaW5lKGludCBhcmdjLCBjaGFyICoqYXJndikKPiArewo+ICsJ aW50IG9wdDsKPiArCj4gKwlwcm9nbmFtZSA9IGFyZ3ZbMF07Cj4gKwo+ICsJd2hpbGUgKChvcHQg PSBnZXRvcHQoYXJnYywgYXJndiwgIitydmM6IikpICE9IC0xKSB7Cj4gKwkJc3dpdGNoIChvcHQp IHsKPiArCQljYXNlICdjJzoKPiArCQkJY3B1ID0gYXRvaShvcHRhcmcpOwo+ICsJCQlicmVhazsK PiArCQljYXNlICdyJzoKPiArCQkJcmVhZF9vbmx5ID0gMTsKPiArCQkJYnJlYWs7Cj4gKwkJY2Fz ZSAndic6Cj4gKwkJCXZlcmJvc2UrKzsKPiArCQkJYnJlYWs7Cj4gKwkJZGVmYXVsdDoKPiArCQkJ dXNhZ2UoKTsKPiArCQl9Cj4gKwl9Cj4gKwkvKiBpZiAtciwgdGhlbiBzaG91bGQgYmUgbm8gYWRk aXRpb25hbCBvcHRpbmQgKi8KPiArCWlmIChyZWFkX29ubHkmJiAgKGFyZ2M+ICBvcHRpbmQpKQo+ ICsJCXVzYWdlKCk7Cj4gKwo+ICsJLyoKPiArCSAqIGlmIG5vIC1yICwgdGhlbiBtdXN0IGJlIG9u ZSBhZGRpdGlvbmFsIG9wdGluZAo+ICsJICovCj4gKwlpZiAoIXJlYWRfb25seSkgewo+ICsKPiAr CQlpZiAoYXJnYyAhPSBvcHRpbmQgKyAxKSB7Cj4gKwkJCXByaW50ZigibXVzdCBzdXBwbHkgLXIg b3IgcG9saWN5IHBhcmFtXG4iKTsKPiArCQkJdXNhZ2UoKTsKPiArCQkJfQo+ICsKPiArCQlpZiAo IXN0cmNtcCgicGVyZm9ybWFuY2UiLCBhcmd2W29wdGluZF0pKSB7Cj4gKwkJCW5ld19iaWFzID0g QklBU19QRVJGT1JNQU5DRTsKPiArCQl9IGVsc2UgaWYgKCFzdHJjbXAoIm5vcm1hbCIsIGFyZ3Zb b3B0aW5kXSkpIHsKPiArCQkJbmV3X2JpYXMgPSBCSUFTX0JBTEFOQ0U7Cj4gKwkJfSBlbHNlIGlm ICghc3RyY21wKCJwb3dlcnNhdmUiLCBhcmd2W29wdGluZF0pKSB7Cj4gKwkJCW5ld19iaWFzID0g QklBU19QT1dFUlNBVkU7Cj4gKwkJfSBlbHNlIHsKPiArCQkJY2hhciAqZW5kcHRyOwo+ICsKPiAr CQkJbmV3X2JpYXMgPSBzdHJ0b3VsbChhcmd2W29wdGluZF0sJmVuZHB0ciwgMCk7Cj4gKwkJCWlm IChlbmRwdHIgPT0gYXJndltvcHRpbmRdIHx8Cj4gKwkJCQluZXdfYmlhcz4gIEJJQVNfUE9XRVJT QVZFKSB7Cj4gKwkJCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIHZhbHVlOiAlc1xuIiwKPiAr CQkJCQkJYXJndltvcHRpbmRdKTsKPiArCQkJCXVzYWdlKCk7Cj4gKwkJCX0KPiArCQl9Cj4gKwl9 Cj4gK30KPiArCj4gKy8qCj4gKyAqIHZhbGlkYXRlX2NwdWlkKCkKPiArICogcmV0dXJucyBvbiBz dWNjZXNzLCBxdWlldGx5IGV4aXRzIG9uIGZhaWx1cmUgKG1ha2UgdmVyYm9zZSB3aXRoIC12KQo+ ICsgKi8KPiArdm9pZCB2YWxpZGF0ZV9jcHVpZCh2b2lkKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQg ZWF4LCBlYngsIGVjeCwgZWR4LCBtYXhfbGV2ZWw7Cj4gKwljaGFyIGJyYW5kWzE2XTsKPiArCXVu c2lnbmVkIGludCBmbXMsIGZhbWlseSwgbW9kZWwsIHN0ZXBwaW5nOwo+ICsKPiArCWVheCA9IGVi eCA9IGVjeCA9IGVkeCA9IDA7Cj4gKwo+ICsJYXNtKCJjcHVpZCIgOiAiPWEiIChtYXhfbGV2ZWwp LCAiPWIiIChlYngpLCAiPWMiIChlY3gpLAo+ICsJCSI9ZCIgKGVkeCkgOiAiYSIgKDApKTsKPiAr Cj4gKwlpZiAoZWJ4ICE9IDB4NzU2ZTY1NDcgfHwgZWR4ICE9IDB4NDk2NTZlNjkgfHwgZWN4ICE9 IDB4NmM2NTc0NmUpIHsKPiArCQlpZiAodmVyYm9zZSkKPiArCQkJZnByaW50ZihzdGRlcnIsICIl LjRzJS40cyUuNHMgIT0gR2VudWluZUludGVsIiwKPiArCQkJCShjaGFyICopJmVieCwgKGNoYXIg KikmZWR4LCAoY2hhciAqKSZlY3gpOwo+ICsJCWV4aXQoMSk7Cj4gKwl9Cj4gKwo+ICsJYXNtKCJj cHVpZCIgOiAiPWEiIChmbXMpLCAiPWMiIChlY3gpLCAiPWQiIChlZHgpIDogImEiICgxKSA6ICJl YngiKTsKPiArCWZhbWlseSA9IChmbXM+PiAgOCkmICAweGY7Cj4gKwltb2RlbCA9IChmbXM+PiAg NCkmICAweGY7Cj4gKwlzdGVwcGluZyA9IGZtcyYgIDB4ZjsKPiArCWlmIChmYW1pbHkgPT0gNiB8 fCBmYW1pbHkgPT0gMHhmKQo+ICsJCW1vZGVsICs9ICgoZm1zPj4gIDE2KSYgIDB4Zik8PCAgNDsK PiArCj4gKwlpZiAodmVyYm9zZT4gIDEpCj4gKwkJcHJpbnRmKCJDUFVJRCAlcyAlZCBsZXZlbHMg ZmFtaWx5Om1vZGVsOnN0ZXBwaW5nICIKPiArCQkJIjB4JXg6JXg6JXggKCVkOiVkOiVkKVxuIiwg YnJhbmQsIG1heF9sZXZlbCwKPiArCQkJZmFtaWx5LCBtb2RlbCwgc3RlcHBpbmcsIGZhbWlseSwg bW9kZWwsIHN0ZXBwaW5nKTsKPiArCj4gKwlpZiAoIShlZHgmICAoMTw8ICA1KSkpIHsKPiArCQlp ZiAodmVyYm9zZSkKPiArCQkJcHJpbnRmKCJDUFVJRDogbm8gTVNSXG4iKTsKPiArCQlleGl0KDEp Owo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBTdXBwb3J0IGZvciBNU1JfSUEzMl9FTkVSR1lfUEVS Rl9CSUFTCj4gKwkgKiBpcyBpbmRpY2F0ZWQgYnkgQ1BVSUQuMDZILkVDWC5iaXQzCj4gKwkgKi8K PiArCWFzbSgiY3B1aWQiIDogIj1hIiAoZWF4KSwgIj1iIiAoZWJ4KSwgIj1jIiAoZWN4KSwgIj1k IiAoZWR4KSA6ICJhIiAoNikpOwo+ICsJaWYgKHZlcmJvc2UpCj4gKwkJcHJpbnRmKCJDUFVJRC4w NkguRUNYOiAweCV4XG4iLCBlY3gpOwo+ICsJaWYgKCEoZWN4JiAgKDE8PCAgMykpKSB7Cj4gKwkJ aWYgKHZlcmJvc2UpCj4gKwkJCXByaW50ZigiQ1BVSUQ6IE5vIE1TUl9JQTMyX0VORVJHWV9QRVJG X0JJQVNcbiIpOwo+ICsJCWV4aXQoMSk7Cj4gKwl9Cj4gKwlyZXR1cm47CS8qIHN1Y2Nlc3MgKi8K PiArfQo+ICsKPiArdW5zaWduZWQgbG9uZyBsb25nIGdldF9tc3IoaW50IGNwdSwgaW50IG9mZnNl dCkKPiArewo+ICsJdW5zaWduZWQgbG9uZyBsb25nIG1zcjsKPiArCWNoYXIgbXNyX3BhdGhbMzJd Owo+ICsJaW50IHJldHZhbDsKPiArCWludCBmZDsKPiArCj4gKwlzcHJpbnRmKG1zcl9wYXRoLCAi L2Rldi9jcHUvJWQvbXNyIiwgY3B1KTsKPiArCWZkID0gb3Blbihtc3JfcGF0aCwgT19SRE9OTFkp Owo+ICsJaWYgKGZkPCAgMCkgewo+ICsJCXByaW50ZigiVHJ5IFwiIyBtb2Rwcm9iZSBtc3JcIlxu Iik7Cj4gKwkJcGVycm9yKG1zcl9wYXRoKTsKPiArCQlleGl0KDEpOwo+ICsJfQo+ICsKPiArCXJl dHZhbCA9IHByZWFkKGZkLCZtc3IsIHNpemVvZiBtc3IsIG9mZnNldCk7Cj4gKwo+ICsJaWYgKHJl dHZhbCAhPSBzaXplb2YgbXNyKSB7Cj4gKwkJcHJpbnRmKCJwcmVhZCBjcHUlZCAweCV4ID0gJWRc biIsIGNwdSwgb2Zmc2V0LCByZXR2YWwpOwo+ICsJCWV4aXQoLTIpOwo+ICsJfQo+ICsJY2xvc2Uo ZmQpOwo+ICsJcmV0dXJuIG1zcjsKPiArfQo+ICsKPiArdW5zaWduZWQgbG9uZyBsb25nICBwdXRf bXNyKGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfbXNyLCBpbnQgb2Zmc2V0KQo+ICt7 Cj4gKwl1bnNpZ25lZCBsb25nIGxvbmcgb2xkX21zcjsKPiArCWNoYXIgbXNyX3BhdGhbMzJdOwo+ ICsJaW50IHJldHZhbDsKPiArCWludCBmZDsKPiArCj4gKwlzcHJpbnRmKG1zcl9wYXRoLCAiL2Rl di9jcHUvJWQvbXNyIiwgY3B1KTsKPiArCWZkID0gb3Blbihtc3JfcGF0aCwgT19SRFdSKTsKPiAr CWlmIChmZDwgIDApIHsKPiArCQlwZXJyb3IobXNyX3BhdGgpOwo+ICsJCWV4aXQoMSk7Cj4gKwl9 Cj4gKwo+ICsJcmV0dmFsID0gcHJlYWQoZmQsJm9sZF9tc3IsIHNpemVvZiBvbGRfbXNyLCBvZmZz ZXQpOwo+ICsJaWYgKHJldHZhbCAhPSBzaXplb2Ygb2xkX21zcikgewo+ICsJCXBlcnJvcigicHdy aXRlIik7Cj4gKwkJcHJpbnRmKCJwcmVhZCBjcHUlZCAweCV4ID0gJWRcbiIsIGNwdSwgb2Zmc2V0 LCByZXR2YWwpOwo+ICsJCWV4aXQoLTIpOwo+ICsJfQo+ICsKPiArCXJldHZhbCA9IHB3cml0ZShm ZCwmbmV3X21zciwgc2l6ZW9mIG5ld19tc3IsIG9mZnNldCk7Cj4gKwlpZiAocmV0dmFsICE9IHNp emVvZiBuZXdfbXNyKSB7Cj4gKwkJcGVycm9yKCJwd3JpdGUiKTsKPiArCQlwcmludGYoInB3cml0 ZSBjcHUlZCAweCV4ID0gJWRcbiIsIGNwdSwgb2Zmc2V0LCByZXR2YWwpOwo+ICsJCWV4aXQoLTIp Owo+ICsJfQo+ICsKPiArCWNsb3NlKGZkKTsKPiArCj4gKwlyZXR1cm4gb2xkX21zcjsKPiArfQo+ ICsKPiArdm9pZCBwcmludF9tc3IoaW50IGNwdSkKPiArewo+ICsJcHJpbnRmKCJjcHUlZDogMHgl MDE2bGx4XG4iLAo+ICsJCWNwdSwgZ2V0X21zcihjcHUsIE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJ QVMpKTsKPiArfQo+ICsKPiArdm9pZCB1cGRhdGVfbXNyKGludCBjcHUpCj4gK3sKPiArCXVuc2ln bmVkIGxvbmcgbG9uZyBwcmV2aW91c19tc3I7Cj4gKwo+ICsJcHJldmlvdXNfbXNyID0gcHV0X21z cihjcHUsIG5ld19iaWFzLCBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTKTsKPiArCj4gKwlpZiAo dmVyYm9zZSkKPiArCQlwcmludGYoImNwdSVkICBtc3IweCV4IDB4JTAxNmxseCAtPiAgMHglMDE2 bGx4XG4iLAo+ICsJCQljcHUsIE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMsIHByZXZpb3VzX21z ciwgbmV3X2JpYXMpOwo+ICsKPiArCXJldHVybjsKPiArfQo+ICsKPiArY2hhciAqcHJvY19zdGF0 ID0gIi9wcm9jL3N0YXQiOwo+ICsvKgo+ICsgKiBydW4gZnVuYygpIG9uIGV2ZXJ5IGNwdSBpbiAv ZGV2L2NwdQo+ICsgKi8KPiArdm9pZCBmb3JfZXZlcnlfY3B1KHZvaWQgKGZ1bmMpKGludCkpCj4g K3sKPiArCUZJTEUgKmZwOwo+ICsJaW50IHJldHZhbDsKPiArCj4gKwlmcCA9IGZvcGVuKHByb2Nf c3RhdCwgInIiKTsKPiArCWlmIChmcCA9PSBOVUxMKSB7Cj4gKwkJcGVycm9yKHByb2Nfc3RhdCk7 Cj4gKwkJZXhpdCgxKTsKPiArCX0KPiArCj4gKwlyZXR2YWwgPSBmc2NhbmYoZnAsICJjcHUgJSpk ICUqZCAlKmQgJSpkICUqZCAlKmQgJSpkICUqZCAlKmQgJSpkXG4iKTsKPiArCWlmIChyZXR2YWwg IT0gMCkgewo+ICsJCXBlcnJvcigiL3Byb2Mvc3RhdCBmb3JtYXQiKTsKPiArCQlleGl0KDEpOwo+ ICsJfQo+ICsKPiArCXdoaWxlICgxKSB7Cj4gKwkJaW50IGNwdTsKPiArCj4gKwkJcmV0dmFsID0g ZnNjYW5mKGZwLAo+ICsJCQkiY3B1JXUgJSpkICUqZCAlKmQgJSpkICUqZCAlKmQgJSpkICUqZCAl KmQgJSpkXG4iLAo+ICsJCQkmY3B1KTsKPiArCQlpZiAocmV0dmFsICE9IDEpCj4gKwkJCXJldHVy bjsKPiArCj4gKwkJZnVuYyhjcHUpOwo+ICsJfQo+ICsJZmNsb3NlKGZwKTsKPiArfQo+ICsKPiAr aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICt7Cj4gKwljbWRsaW5lKGFyZ2MsIGFy Z3YpOwo+ICsKPiArCWlmICh2ZXJib3NlPiAgMSkKPiArCQlwcmludGYoIng4Nl9lbmVyZ3lfcGVy Zl9wb2xpY3kgTm92IDI0LCAyMDEwIgo+ICsJCQkJIiAtIExlbiBCcm93bjxsZW5iQGtlcm5lbC5v cmc+XG4iKTsKPiArCWlmICh2ZXJib3NlPiAgMSYmICAhcmVhZF9vbmx5KQo+ICsJCXByaW50Zigi bmV3X2JpYXMgJWxsZFxuIiwgbmV3X2JpYXMpOwo+ICsKPiArCXZhbGlkYXRlX2NwdWlkKCk7Cj4g Kwo+ICsJaWYgKGNwdSAhPSAtMSkgewo+ICsJCWlmIChyZWFkX29ubHkpCj4gKwkJCXByaW50X21z cihjcHUpOwo+ICsJCWVsc2UKPiArCQkJdXBkYXRlX21zcihjcHUpOwo+ICsJfSBlbHNlIHsKPiAr CQlpZiAocmVhZF9vbmx5KQo+ICsJCQlmb3JfZXZlcnlfY3B1KHByaW50X21zcik7Cj4gKwkJZWxz ZQo+ICsJCQlmb3JfZXZlcnlfY3B1KHVwZGF0ZV9tc3IpOwo+ICsJfQo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4KSSBoYXZlIDIgcXVlc3Rpb25zLgoKMS4gdGhlIHVzYWdlIGxvb2tzIHRvbyBzaW1w bGUuIElmIEkgaGF2ZW4ndCByZWFkIHRoZSBjb21tZW50cwppbiB0aGUgc291cmNlIGNvZGVzLCBJ IGV2ZW4gY2FuJ3Qga25vdyB0aGUgZXhhY3QgbWVhbmluZyBvZiB0aGVzZQpwYXJhbWV0ZXJzLiBT dWNoIGFzIC12LCAtdnYgZXRjLiBIb3cgYWJvdXQgYWRkaW5nIHRoZSBjb21tZW50cwphcyB0aGUg cGFydCBvZiB0aGUgdXNhZ2UgPwoKMi4gdGhlIHBhcmFtdGVyICJub3JhbWwgfCBwZXJmb3JtYW5j ZSB8IHBvd2Vyc2F2ZSB8IG4iIGxvb2tzIHdlaXJkLgp3aHkgaXQgY2FuJ3QgbG9vayBsaWtlIG90 aGVyIHBhcmFtdGVyICgtciwgLXYgZXRjLikuIEZvciBleGFtcGxlLApJIGNhbid0IHVzZSBpdCBz dWNoIGFzCiIuL3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kgIC1jIDAgIG5vcm1hbCAtdiIKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtcG0gbWFpbGlu ZyBsaXN0CmxpbnV4LXBtQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMu bGludXgtZm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1wbQ==