From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH igt] Add the new case for create GVT-g Linux guest based on KVMGT Date: Fri, 30 Dec 2016 20:22:29 +0100 Message-ID: <20161230192229.GN8712@dvetter-linux.ger.corp.intel.com> References: <1483118693-5542-1-git-send-email-terrence.xu@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wj0-x243.google.com (mail-wj0-x243.google.com [IPv6:2a00:1450:400c:c01::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id BDD7F6E224 for ; Fri, 30 Dec 2016 19:22:34 +0000 (UTC) Received: by mail-wj0-x243.google.com with SMTP id j10so61766208wjb.3 for ; Fri, 30 Dec 2016 11:22:34 -0800 (PST) Content-Disposition: inline In-Reply-To: <1483118693-5542-1-git-send-email-terrence.xu@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Terrence Xu Cc: zhenyu.z.wang@intel.com, tomi.p.sarvela@intel.com, intel-gfx@lists.freedesktop.org, zhiyuan.lv@intel.com, gordon.jin@intel.com, Benyu Xu , hongbo.wang@intel.com List-Id: intel-gfx@lists.freedesktop.org T24gU2F0LCBEZWMgMzEsIDIwMTYgYXQgMDE6MjQ6NTNBTSArMDgwMCwgVGVycmVuY2UgWHUgd3Jv dGU6Cj4gR1ZULWcgKEludGVswq4gR3JhcGhpY3MgVmlydHVhbGl6YXRpb24gVGVjaG5vbG9neSkg aXMgYSBmdWxsIEdQVQo+IHZpcnR1YWxpemF0aW9uIHNvbHV0aW9uIHdpdGggbWVkaWF0ZWQgcGFz cy10aHJvdWdoIHN1cHBvcnQuCj4gCj4gVGhpcyBjYXNlIGlzIGZvciBjcmVhdGUgYmFzaWMgTGlu dXggZ3Vlc3QgYmFzZWQgb24gS1ZNR1Qgd2l0aCBWRklPCj4gZnJhbWV3b3JrLCBpdCBpbmNsdWRp bmcgY3JlYXRlIHZncHUsIGNyZWF0ZSBndWVzdCwgY2hlY2sgSVAgYWRkcmVzcywKPiBkZXN0cm95 IGd1ZXN0LCByZW1vdmUgdmdwdSxjaGVjayBkbWVzZyBsb2csIGV0YyBmdW5jdGlvbnMuCj4gCj4g U2lnbmVkLW9mZi1ieTogVGVycmVuY2UgWHUgPHRlcnJlbmNlLnh1QGludGVsLmNvbT4KPiBTaWdu ZWQtb2ZmLWJ5OiBCZW55dSBYdSA8YmVueXV4Lnh1QGludGVsLmNvbT4KPiAtLS0KPiAgdGVzdHMv TWFrZWZpbGUuc291cmNlcyB8ICAgMSArCj4gIHRlc3RzL2d2dGdfZ3Vlc3QuYyAgICAgfCAzMjMg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAyIGZp bGVzIGNoYW5nZWQsIDMyNCBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0 cy9ndnRnX2d1ZXN0LmMKPiAKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBi L3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCAwNGRkMmQ1Li4wOWI5MzZlIDEwMDY0NAo+ IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzCj4gQEAgLTIxOSw2ICsyMTksNyBAQCBURVNUU19wcm9ncyA9IFwKPiAgCXByaW1lX3VkbCBc Cj4gIAlkcnZfbW9kdWxlX3JlbG9hZCBcCj4gIAlrbXNfc3lzZnNfZWRpZF90aW1pbmcgXAo+ICsg ICAgZ3Z0Z19ndWVzdCBcCj4gIAkkKE5VTEwpCj4gIAo+ICAjIElNUE9SVEFOVDogVGhlIFpaXyB0 ZXN0cyBuZWVkIHRvIGJlIHJ1biBsYXN0IQo+IGRpZmYgLS1naXQgYS90ZXN0cy9ndnRnX2d1ZXN0 LmMgYi90ZXN0cy9ndnRnX2d1ZXN0LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAuLmI5ZTYzMDQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvdGVzdHMvZ3Z0Z19ndWVzdC5j Cj4gQEAgLTAsMCArMSwzMjMgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IDIwMTYgSW50ZWwgQ29y cG9yYXRpb24KPiArICogICBUZXJyZW5jZSBYdSA8dGVycmVuY2UueHVAaW50ZWwuY29tPgo+ICsg Kgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiAr ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KPiArICogYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBT SEFMTCBUSEUKPiArICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsv Kgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgaW50ZW5kZWQgZm9yIHRlc3Rpbmcgb2YgdmFsaWRhdGUg R1ZULWcgdmlydHVhbCBtYWNoaW5lCj4gKyAqIGNyZWF0aW9uIG9mIGFsbG93IGZvciB0ZXN0aW5n IG9mIEtWTUdUIC8gWGVuR1QuCj4gKyAqCj4gKyAqIFRPRE86Cj4gKyAqIEVuYWJsZSBtb3JlIEdW VC1nIHJlbGF0ZWQgdGVzdCBjYXNlcy4KPiArICovCj4gKyNpZmRlZiBIQVZFX0NPTkZJR19ICj4g KyNpbmNsdWRlICJjb25maWcuaCIKPiArI2VuZGlmCj4gKwo+ICsjaW5jbHVkZSAiaWd0LmgiCj4g KyNpbmNsdWRlIDxlcnJuby5oPgo+ICsjaW5jbHVkZSA8Z2V0b3B0Lmg+Cj4gKyNpbmNsdWRlIDxt YXRoLmg+Cj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4KPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiAr I2luY2x1ZGUgPHN0cmluZ3MuaD4KPiArI2luY2x1ZGUgPHVuaXN0ZC5oPgo+ICsjaW5jbHVkZSA8 dGVybWlvcy5oPgo+ICsjaW5jbHVkZSA8c3lzL3BvbGwuaD4KPiArI2luY2x1ZGUgPHN5cy90aW1l Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KPiArI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+ ICsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVk ZSA8c3RkbGliLmg+Cj4gKyNpbmNsdWRlIDxzaWduYWwuaD4KPiArI2luY2x1ZGUgPHN0ZGlvLmg+ Cj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArI2luY2x1ZGUgPHRpbWUuaD4KPiArI2luY2x1ZGUg PHVuaXN0ZC5oPgo+ICsjaW5jbHVkZSA8cHdkLmg+Cj4gKyNpbmNsdWRlIDxsaW1pdHMuaD4KPiAr Cj4gKyNkZWZpbmUgUkFORE9NKHgpIChyYW5kKCkgJSB4KQo+ICsKPiArc3RhdGljIHVuc2lnbmVk IGNoYXIgbWFjX2FkZHJbMTddID0geycwJywgJzAnLCAnOicsICcwJywgJzAnLCAnOicsCj4gKyAg ICAnMCcsICcwJywgJzonLCAnMCcsICcwJywgJzonLCAnMCcsICcwJywgJzonLCAnMCcsICcwJ307 Cj4gK3N0YXRpYyBjaGFyIHV1aWRbNDBdOwo+ICtzdGF0aWMgY2hhciBndWVzdF9pcFszMl07Cj4g Kwo+ICtzdGF0aWMgY2hhciBxZW11X3BhdGhbUEFUSF9NQVhdID0gezB9Owo+ICtzdGF0aWMgY2hh ciBoZGFfcGF0aFtQQVRIX01BWF0gPSB7MH07Cj4gK3N0YXRpYyBjaGFyIGJpb3NfcGF0aFtQQVRI X01BWF0gPSB7MH07Cj4gKwo+ICtzdGF0aWMgaW50IHN1cGVyX3N5c3RlbShjb25zdCBjaGFyICpj bWQsIGNoYXIgKnJldG1zZywgaW50IG1zZ19sZW4pCj4gK3sKPiArICAgIEZJTEUgKmZwOwo+ICsg ICAgaW50IHJlcyA9IC0xOwo+ICsgICAgaWYgKGNtZCA9PSBOVUxMIHx8IHJldG1zZyA9PSBOVUxM IHx8IG1zZ19sZW4gPCAwKSB7Cj4gKyAgICAgICAgaWd0X2luZm8oIkVycm9yOiAlcyBzeXN0ZW0g cGFyYW1lciBpbnZhbGlkIVxuIiwgX19mdW5jX18pOwo+ICsgICAgICAgIHJldHVybiAxOwo+ICsg ICAgfQo+ICsgICAgZnAgPSBwb3BlbihjbWQsICJyIik7Cj4gKyAgICBpZiAoZnAgPT0gTlVMTCkg ewo+ICsgICAgICAgIHBlcnJvcigicG9wZW4iKTsKPiArICAgICAgICBpZ3RfaW5mbygiRXJyb3I6 ICVzIHBvcGVuIGVycm9yOiAlc1xuIiwgX19mdW5jX18sIHN0cmVycm9yKGVycm5vKSk7Cj4gKyAg ICAgICAgcmV0dXJuIDI7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIG1lbXNldChyZXRtc2cs IDAsIG1zZ19sZW4pOwo+ICsgICAgICAgIHdoaWxlIChmZ2V0cyhyZXRtc2csIG1zZ19sZW4sIGZw KSkgewo+ICsgICAgICAgICAgICA7Cj4gKyAgICAgICAgfTsKPiArICAgICAgICByZXMgPSBwY2xv c2UoZnApOwo+ICsgICAgICAgIGlmIChyZXMgPT0gLTEpIHsKPiArICAgICAgICAgICAgaWd0X2lu Zm8oIkVycm9yOiVzIGNsb3NlIHBvcGVuIGZpbGUgcG9pbnRlciBmcCBlcnJvciFcbiIsIF9fZnVu Y19fKTsKPiArICAgICAgICAgICAgcmV0dXJuIDM7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHJl dG1zZ1tzdHJsZW4ocmV0bXNnKSAtIDFdID0gJ1wwJzsKPiArICAgICAgICByZXR1cm4gMDsKPiAr ICAgIH0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY3JlYXRlX2d1ZXN0KHZvaWQpCj4gK3sKPiAr ICAgIGNoYXIgY3JlYXRlX3Fjb3dfY21kW1BBVEhfTUFYXSA9IHswfTsKPiArICAgIGNoYXIgY3Jl YXRlX3ZncHVfY21kW1BBVEhfTUFYXSA9IHswfTsKPiArICAgIGNoYXIgY3JlYXRlX2luc3RhbmNl X2NtZFtQQVRIX01BWF0gPSB7MH07Cj4gKwo+ICsgICAgc3ByaW50ZihjcmVhdGVfcWNvd19jbWQs ICJxZW11LWltZyBjcmVhdGUgLWIgJXMgLWYgcWNvdzIgJXMucWNvdzIiLAo+ICsgICAgICAgICAg ICBoZGFfcGF0aCwgaGRhX3BhdGgpOwo+ICsgICAgc3ByaW50ZihjcmVhdGVfdmdwdV9jbWQsICJl Y2hvIFwiJXNcIiA+IC9zeXMvYnVzL3BjaS9kZXZpY2VzLzAwMDA6MDA6MDIuMC8iCj4gKyAgICAg ICAgICAgIm1kZXZfc3VwcG9ydGVkX3R5cGVzL2k5MTUtR1ZUZ19WNF8xL2NyZWF0ZSIsIHV1aWQp Owo+ICsgICAgc3ByaW50ZihjcmVhdGVfaW5zdGFuY2VfY21kLCAiJXMgLW0gMjA0OCAtc21wIDIg LU0gcGMgLW5hbWUgZ3Z0Z19ndWVzdCIKPiArICAgICAgICAgICAiIC1oZGEgJXMucWNvdzIgLWJp b3MgJXMgLWVuYWJsZS1rdm0gLS1uZXQgbmljLG1hY2FkZHI9JXMgLW5ldCIKPiArICAgICAgICAg ICAiIHRhcCxzY3JpcHQ9L2V0Yy9xZW11LWlmdXAgLXZnYSBub25lIC1kZXZpY2UgaXNhLXZnYSAt ayBlbi11cyIKPiArICAgICAgICAgICAiIC1zZXJpYWwgc3RkaW8gLXZuYyA6MSAtbWFjaGluZSBr ZXJuZWxfaXJxY2hpcD1vbiAtZ2xvYmFsIgo+ICsgICAgICAgICAgICIgUElJWDRfUE0uZGlzYWJs ZV9zMz0xIC1nbG9iYWwgUElJWDRfUE0uZGlzYWJsZV9zND0xIC1jcHUgaG9zdCIKPiArICAgICAg ICAgICAiIC11c2IgLXVzYmRldmljZSB0YWJsZXQgLWRldmljZSB2ZmlvLXBjaSxzeXNmc2Rldj0i Cj4gKyAgICAgICAgICAgIi9zeXMvYnVzL3BjaS9kZXZpY2VzLzAwMDA6MDA6MDIuMC8lcyAmIiwK PiArICAgICAgICAgICBxZW11X3BhdGgsIGhkYV9wYXRoLCBiaW9zX3BhdGgsIG1hY19hZGRyLCB1 dWlkKTsKPiArICAgIHN5c3RlbShjcmVhdGVfcWNvd19jbWQpOwo+ICsgICAgc3lzdGVtKGNyZWF0 ZV92Z3B1X2NtZCk7Cj4gKyAgICBzeXN0ZW0oY3JlYXRlX2luc3RhbmNlX2NtZCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGRlc3Ryb3lfYWxsX2d1ZXN0KHZvaWQpCj4gK3sKPiArICAgIHN5c3Rl bSgicGtpbGwgcWVtdSIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCByZW1vdmVfdmdwdSh2b2lk KQo+ICt7Cj4gKyAgICBjaGFyIGNtZFsxMjhdID0gezB9Owo+ICsgICAgc3ByaW50ZihjbWQsICJl Y2hvIDEgPiAvc3lzL2J1cy9wY2kvZGV2aWNlcy8wMDAwOjAwOjAyLjAvJXMvcmVtb3ZlIiwgdXVp ZCk7Cj4gKyAgICBzeXN0ZW0oY21kKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZ2VuX21hY19h ZGRyKHZvaWQpCj4gK3sKPiArICAgIHVuc2lnbmVkIGNoYXIgbWFjX2VudW1bMTZdID0geycwJywg JzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywKPiArICAgICAgICAnNycsICc4JywgJzknLCAn QScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnfTsKPiArICAgIHVuc2lnbmVkIHNob3J0IGksIG4g PSAyOwo+ICsgICAgc3JhbmQoZ2V0cGlkKCkpOwo+ICsgICAgZm9yIChpID0gMiwgbiA9IDI7IGkg PCAxNTsgaSsrLCBuKyspIHsKPiArICAgICAgICBpZiAobWFjX2FkZHJbbl0gIT0gJzonKSB7Cj4g KyAgICAgICAgICAgIG1hY19hZGRyW25dID0gbWFjX2VudW1bUkFORE9NKDE2KV07Cj4gKyAgICAg ICAgfQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBnZW5fdXVpZCh2b2lkKQo+ICt7 Cj4gKyAgICBzdXBlcl9zeXN0ZW0oInV1aWRnZW4iLCB1dWlkLCBzaXplb2YodXVpZCkpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgY2hhciAqZmV0Y2hfaXBfYnlfbWFjKHVuc2lnbmVkIGNoYXIgKm1hYykK PiArewo+ICsgICAgY2hhciBjbWRbMTAyNF0gPSB7MH07Cj4gKyAgICBzcHJpbnRmKGNtZCwgImFy cC1zY2FuIC1sIC1JICQoaXAgYWRkciBzaG93fGdyZXAgaW5ldHxncmVwIGdsb2JhbHwiCj4gKyAg ICAgICAgImF3ayAne3ByaW50ICRORjt9Jyl8Z3JlcCAtaSAlc3xhd2sgJ3twcmludCAkMX0nIiwg bWFjKTsKPiArICAgIHN1cGVyX3N5c3RlbShjbWQsIGd1ZXN0X2lwLCBzaXplb2YoZ3Vlc3RfaXAp KTsKPiArICAgIHJldHVybiBndWVzdF9pcDsKPiArfQo+ICsKPiArc3RhdGljIGludCBjaGVja19n dWVzdF9pcCh2b2lkKQo+ICt7Cj4gKyAgICBpbnQgdGltZW91dCA9IDA7Cj4gKyAgICB3aGlsZSAo dGltZW91dCA8PSAxMikgewo+ICsgICAgICAgIGlndF9pbmZvKCJUcnkgdG8gY29ubm5lY3QgZ3Vl c3QsdGhlICVkIHRpbWUuXG4iLCB0aW1lb3V0KTsKPiArICAgICAgICBpZiAodGltZW91dCA9PSAx Mikgewo+ICsgICAgICAgICAgICBpZ3RfaW5mbygiQ2Fubm90IGNvbm5lY3QgdG8gZ3Vlc3QuXG4i KTsKPiArICAgICAgICAgICAgcmV0dXJuIDE7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAg ICAgIH0KPiArCj4gKyAgICAgICAgZmV0Y2hfaXBfYnlfbWFjKG1hY19hZGRyKTsKPiArCj4gKyAg ICAgICAgaWYgKGd1ZXN0X2lwWzBdICE9ICdcMCcpIHsKPiArICAgICAgICAgICAgaWd0X2luZm8o IkZldGNoZWQgZ3Vlc3QgaXAgYWRkcmVzczogJXMuXG4iLCBndWVzdF9pcCk7Cj4gKyAgICAgICAg ICAgIGJyZWFrOwo+ICsgICAgICAgIH0KPiArICAgICAgICB0aW1lb3V0Kys7Cj4gKyAgICAgICAg c2xlZXAoNSk7Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgY2xlYXJfZG1lc2codm9pZCkKPiArewo+ICsgICAgc3lzdGVtKCJkbWVzZyAtYyIpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGNoZWNrX2RtZXNnKHZvaWQpCj4gK3sKPiArICAgIGNoYXIgZXJy b3Jsb2dbUEFUSF9NQVhdID0gezB9Owo+ICsKPiArICAgIHN1cGVyX3N5c3RlbSgiZG1lc2d8Z3Jl cCAtRSBcIkdQVSBIQU5HfGdmeCByZXNldHxCVUdcIiIsIGVycm9ybG9nLAo+ICsgICAgICAgICAg ICBzaXplb2YoZXJyb3Jsb2cpKTsKPiArCj4gKyAgICBpZiAoZXJyb3Jsb2dbMF0gPT0gJ1wwJykg ewo+ICsgICAgICAgIHJldHVybiAwOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICByZXR1cm4g MTsKPiArICAgIH0KPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgb3B0c3RyW10gPSAiaCI7 Cj4gKwo+ICtzdGF0aWMgdm9pZCBwcmludF9oZWxwKHZvaWQpCj4gK3sKPiArICAgIGlndF9pbmZv KCJcbiBbb3B0aW9uc11cbiIKPiArICAgICAgICAgICItaCwgLS1oZWxwICAgICBkaXNwbGF5IHVz YWdlXG4iCj4gKyAgICAgICAgICAiLXEsIC0tcWVtdSAgICAgdGhlIHFlbXUgcGF0aFxuIgo+ICsg ICAgICAgICAgIi1hLCAtLWhkYSAgICAgIHRoZSBoZGEgcmF3IGltYWdlIC8gcWNvdyBwYXRoXG4i Cj4gKyAgICAgICAgICAiLWIsIC0tYmlvcyAgICAgdGhlIHNlYWJpb3MgcGF0aFxuXG4iCj4gKyAg ICAgICAgICApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcmdfbWlzbWF0Y2godm9pZCkKPiAr ewo+ICsgICAgaWd0X2luZm8oIiBhcmd1bWVudCBtaXNtYXRjaCFcbiIpOwo+ICt9Cj4gKwo+ICtp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCgpUaGF0J3Mgbm90IGFuIGlndCB0ZXN0Y2Fz ZSwgYW5kIGlmIHlvdSdkIHJ1biB3aXRoIHRoZSB0ZXN0cnVubmVyIGl0IHRoZW4KaXQnZCBnbyBi b29tLiBBZ2FpbiBJJ20gbm90IHJlYWxseSBzdXJlIHdoeSB0aGlzIG5lZWRzIHRvIGJlIGFuIGln dAp0ZXN0Y2FzZSwgc2luY2UgdGhlIGVudGlyZSBzZXR1cCBpcyBxdWl0ZSBpbnZvbHZlZCwgYW5k IGl0IG5lZWRzIHZlcnkKc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyB0byBydW4gcHJvcGVybHkuCgpJ IGd1ZXNzIG1lcmdpbmcgdGhpcyB0byBpZ3QgbWFrZXMgc29tZSBzZW5zZSwgYnV0IHByb2JhYmx5 IGJldHRlciBhcyBhCmZyZWUtc3RhbmRpbmcgdG9vIG9yIHNvbWV0aGluZyBzaW1pbGFyLgotRGFu aWVsCgo+ICt7Cj4gKyAgICBpbnQgb3B0ID0gLTE7Cj4gKyAgICBjb25zdCBjaGFyICpvcHRzdHJp bmcgPSAiaHE6YTpiOiI7Cj4gKyAgICBzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNb XSA9IHsKPiArICAgICAgICB7ImhlbHAiLCAwLCBOVUxMLCAnaCd9LAo+ICsgICAgICAgIHsicWVt dSIsIDEsIE5VTEwsICdxJ30sCj4gKyAgICAgICAgeyJoZGEiLCAgMSwgTlVMTCwgJ2EnfSwKPiAr ICAgICAgICB7ImJpb3MiLCAxLCBOVUxMLCAnYid9LAo+ICsgICAgICAgIHswLCAwLCAwLCAwfQo+ ICsgICAgfTsKPiArCj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAgIGludCBmbGFnX2NudCA9IDA7 Cj4gKyAgICBpbnQgaF9mbGFnID0gMDsKPiArICAgIGludCBxX2ZsYWcgPSAwOwo+ICsgICAgaW50 IGFfZmxhZyA9IDA7Cj4gKyAgICBpbnQgYl9mbGFnID0gMDsKPiArCj4gKyAgICBpZiAoYXJnYyA9 PSAxKSB7Cj4gKyAgICAgICAgcHJpbnRfaGVscCgpOwo+ICsgICAgICAgIHJldHVybiAwOwo+ICsg ICAgfQo+ICsKPiArICAgIHdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgb3B0 c3RyaW5nLCBsb25nX29wdGlvbnMsIE5VTEwpKQo+ICsgICAgICAgICAgICAhPSAtMSkgewo+ICsg ICAgICAgIHN3aXRjaCAob3B0KSB7Cj4gKyAgICAgICAgY2FzZSAnaCc6Cj4gKyAgICAgICAgICAg IGhfZmxhZyA9IDE7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgJ3EnOgo+ ICsgICAgICAgICAgICBzdHJjcHkocWVtdV9wYXRoLCBvcHRhcmcpOwo+ICsgICAgICAgICAgICBx X2ZsYWcgPSAxOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNlICdhJzoKPiAr ICAgICAgICAgICAgc3RyY3B5KGhkYV9wYXRoLCBvcHRhcmcpOwo+ICsgICAgICAgICAgICBhX2Zs YWcgPSAxOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNlICdiJzoKPiArICAg ICAgICAgICAgc3RyY3B5KGJpb3NfcGF0aCwgb3B0YXJnKTsKPiArICAgICAgICAgICAgYl9mbGFn ID0gMTsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSAnOic6Cj4gKyAgICAg ICAgICAgIHJldCA9IC0xOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNlICc/ JzoKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAg ICAgIH0KPiArCj4gKyAgICAgICAgaWYgKHJldCkgewo+ICsgICAgICAgICAgICBicmVhazsKPiAr ICAgICAgICB9Cj4gKyAgICB9Owo+ICsKPiArICAgIGlmIChyZXQgIT0gMCkgewo+ICsgICAgICAg IGFyZ19taXNtYXRjaCgpOwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgZmxhZ19jbnQgPSBoX2ZsYWcgKyBxX2ZsYWcgKyBhX2ZsYWcgKyBiX2ZsYWc7Cj4gKwo+ICsg ICAgaWYgKGZsYWdfY250ID09IDEpIHsKPiArICAgICAgICBpZiAoaF9mbGFnID09IDEpIHsKPiAr ICAgICAgICAgICAgcHJpbnRfaGVscCgpOwo+ICsgICAgICAgICAgICByZXR1cm4gMDsKPiArICAg ICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICBhcmdfbWlzbWF0Y2goKTsKPiArICAgICAgICAg ICAgcmV0dXJuIC0xOwo+ICsgICAgICAgIH0KPiArICAgIH0gZWxzZSBpZiAoZmxhZ19jbnQgPT0g Mykgewo+ICsgICAgICAgIGlmIChxX2ZsYWcgPT0gMSAmJiBhX2ZsYWcgPT0gMSAmJiBiX2ZsYWcg PT0gMSkgewo+ICsgICAgICAgICAgICBpZ3RfaW5mbygiXG5xZW11X3BhdGg6ICVzXG4gaGRhX3Bh dGg6ICVzXG4gYmlvc19wYXRoOiAlc1xuIiwKPiArICAgICAgICAgICAgICAgICAgICBxZW11X3Bh dGgsIGhkYV9wYXRoLCBiaW9zX3BhdGgpOwo+ICsgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAg ICAgIGFyZ19taXNtYXRjaCgpOwo+ICsgICAgICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICAgICAg fQo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICBhcmdfbWlzbWF0Y2goKTsKPiArICAgICAgICBy ZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZGVzdHJveV9hbGxfZ3Vlc3QoKTsKPiArICAg IGNsZWFyX2RtZXNnKCk7Cj4gKwo+ICsgICAgZ2VuX21hY19hZGRyKCk7Cj4gKyAgICBnZW5fdXVp ZCgpOwo+ICsgICAgY3JlYXRlX2d1ZXN0KCk7Cj4gKwo+ICsgICAgaWYgKGNoZWNrX2d1ZXN0X2lw KCkpIHsKPiArICAgICAgICByZXQgPSAxOwo+ICsgICAgfQo+ICsKPiArICAgIGRlc3Ryb3lfYWxs X2d1ZXN0KCk7Cj4gKyAgICBzbGVlcCg1KTsKPiArICAgIHJlbW92ZV92Z3B1KCk7Cj4gKwo+ICsg ICAgaWYgKGNoZWNrX2RtZXNnKCkgPiAwKSB7Cj4gKyAgICAgICAgcmV0ID0gMTsKPiArICAgIH0K PiArCj4gKyAgICBpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4gKyAgICBpZ3RfZXhpdCgpOwo+ICt9 Cj4gLS0gCj4gMS45LjEKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRl bCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK