From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v3 05/10] xen/arm: Setup virtual paging for non-boot CPUs on hotplug/resume Date: Mon, 30 Apr 2018 15:47:16 +0100 Message-ID: References: <20180427171258.28852-1-mirela.simonovic@aggios.com> <20180427171258.28852-6-mirela.simonovic@aggios.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180427171258.28852-6-mirela.simonovic@aggios.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Mirela Simonovic , xen-devel@lists.xen.org Cc: edgar.iglesias@xilinx.com, sstabellini@kernel.org, dm@aggios.com List-Id: xen-devel@lists.xenproject.org SGkgTWlyZWxhLAoKT24gMjcvMDQvMTggMTg6MTIsIE1pcmVsYSBTaW1vbm92aWMgd3JvdGU6Cj4g SW4gZXhpc3RpbmcgY29kZSB0aGUgdmlydHVhbCBwYWdpbmcgZm9yIG5vbi1ib290IENQVXMgaXMg c2V0dXAgb25seSBvbiBib290Lgo+IFRoZSBzZXR1cCBpcyB0cmlnZ2VyZWQgZnJvbSBzdGFydF94 ZW4oKSBhZnRlciBhbGwgQ1BVcyBhcmUgYnJvdWdodCBvbmxpbmUuCj4gSW4gb3RoZXIgd29yZHMs IHRoZSBpbml0aWFsaXphdGlvbiBvZiBWVENSX0VMMiByZWdpc3RlciBpcyBkb25lIG91dCBvZiB0 aGUKPiBjcHVfdXAvc3RhcnRfc2Vjb25kYXJ5KCkgY29udHJvbCBmbG93LiBIb3dldmVyLCB0aGUg Y3B1X3VwIGZsb3cgaXMgYWxzbyB1c2VkCj4gdG8gaG90cGx1ZyBub24tYm9vdCBDUFVzIG9uIHJl c3VtZSBmcm9tIHN1c3BlbmQgdG8gUkFNIHN0YXRlLCBpbiB3aGljaCBjYXNlCj4gdGhlIHZpcnR1 YWwgcGFnaW5nIHdpbGwgbm90IGJlIGNvbmZpZ3VyZWQuCj4gCj4gV2l0aCB0aGlzIHBhdGNoIHRo ZSBzZXR0aW5nIG9mIHBhZ2luZyBpcyB0cmlnZ2VyZWQgZnJvbSBzdGFydF9zZWNvbmRhcnkoKQo+ IGZ1bmN0aW9uIHVzaW5nIGNwdSBzdGFydGluZyBub3RpZmllciAobm90aWZ5X2NwdV9zdGFydGlu ZygpIGNhbGwpLiBUaGUKPiBub3RpZmllciBpcyByZWdpc3RlcmVkIGluIHAybS5jIHVzaW5nIGlu aXQgY2FsbC4gVGhpcyBoYXMgdG8gYmUgZG9uZSB3aXRoCj4gaW5pdCBjYWxsIHJhdGhlciB0aGFu IHByZXNtcF9pbml0IGJlY2F1c2UgdGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2sgZGVwZW5kcwo+IG9u IHZ0Y3IgY29uZmlndXJhdGlvbiB2YWx1ZSB3aGljaCBpcyBzZXR1cCBhZnRlciB0aGUgcHJlc21w IGluaXQgY2FsbHMKPiBhcmUgZXhlY3V0ZWQgKGRvX3ByZXNtcF9pbml0Y2FsbHMoKSBjYWxsZWQg ZnJvbSBzdGFydF94ZW4oKSkuIEluaXQgY2FsbHMKPiBhcmUgZXhlY3V0ZWQgYWZ0ZXIgaW5pdGlh bCB2aXJ0dWFsIHBhZ2luZyBpcyBzZXQgdXAgZm9yIGFsbCBDUFVzIG9uIGJvb3QuCj4gVGhpcyBl bnN1cmVzIHRoYXQgbm8gY2FsbGJhY2sgY2FuIGZpcmUgdW50aWwgdGhlIHZ0Y3IgdmFsdWUgaXMg Y2FsY3VsYXRlZAo+IGJ5IFhlbiBhbmQgdmlydHVhbCBwYWdpbmcgaXMgc2V0IHVwIGluaXRpYWxs eSBmb3IgYWxsIENQVXMuIEFsc28sIHRoaXMgd2F5Cj4gdGhlIHZpcnR1YWwgcGFnaW5nIHNldHVw IGluIGJvb3Qgc2NlbmFyaW8gcmVtYWlucyB1bmNoYW5nZWQuCj4gCj4gSXQgaXMgYXNzdW1lZCBo ZXJlIHRoYXQgYWZ0ZXIgdGhlIHN5c3RlbSBjb21wbGV0ZWQgdGhlIGJvb3QsIENQVXMgdGhhdAo+ IGV4ZWN1dGUgc3RhcnRfc2Vjb25kYXJ5KCkgd2VyZSBib290ZWQgYXMgd2VsbCB3aGVuIHRoZSBY ZW4gaXRzZWxmIHdhcwo+IGJvb3RlZC4gQWNjb3JkaW5nIHRvIHRoaXMgYXNzdW1wdGlvbiBub24t Ym9vdCBDUFVzIHdpbGwgYWx3YXlzIGJlIGNvbXBsaWFudAo+IHdpdGggdGhlIFZUQ1JfRUwyIHZh bHVlIHRoYXQgd2FzIHNlbGVjdGVkIGJ5IFhlbiBvbiBib290Lgo+IEN1cnJlbnRseSwgdGhlcmUg aXMgbm8gbWVjaGFuaXNtIHRvIHRyaWdnZXIgaG90cGx1Z2dpbmcgb2YgYSBDUFUuIFRoaXMKPiB3 aWxsIGJlIGFkZGVkIHdpdGggdGhlIHN1c3BlbmQgdG8gUkFNIHN1cHBvcnQgZm9yIEFSTSwgd2hl cmUgdGhlIGhvdHBsdWcKPiBvZiBub24tYm9vdCBDUFVzIHdpbGwgYmUgdHJpZ2dlcmVkIHZpYSBl bmFibGVfbm9uYm9vdF9jcHVzKCkgY2FsbC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBNaXJlbGEgU2lt b25vdmljIDxtaXJlbGEuc2ltb25vdmljQGFnZ2lvcy5jb20+Cj4gCj4gLS0tCj4gQ0M6IFN0ZWZh bm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4KPiBDQzogSnVsaWVuIEdyYWxs IDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KPiAtLS0KPiBDaGFuZ2VzIGluIHYyOgo+IC1GaXggY29t bWl0IG1lc3NhZ2UKPiAtU2F2ZSBjb25maWd1cmVkIFZUQ1JfRUwyIHZhbHVlIGludG8gc3RhdGlj IHZhcmlhYmxlIHRoYXQgd2lsbCBiZSB1c2VkCj4gICBieSBub24tYm9vdCBDUFVzIG9uIGhvdHBs dWcKPiAtQWRkIHNldHVwX3ZpcnRfcGFnaW5nX3NlY29uZGFyeSgpIGFuZCBpbnZva2UgaXQgZnJv bSBzdGFydF9zZWNvbmRhcnkoKQo+ICAgaWYgdGhhdCBDUFUgaGFzIHRvIHNldHVwIHZpcnR1YWwg cGFnaW5nIChpZiB0aGUgc3lzdGVtIHN0YXRlIGlzIG5vdCBib290KQo+IAo+IENoYW5nZXMgaW4g djM6Cj4gLUZpeCBjb21taXQgbWVzc2FnZQo+IC1SZW1vdmUgc2V0dXBfdmlydF9wYWdpbmdfc2Vj b25kYXJ5KCkgYW5kIHVzZSBub3RpZmllciB0byBzZXR1cCB2aXJ0dWFsCj4gICBwYWdpbmcgZm9y IG5vbi1ib290IENQVSBvbiBob3RwbHVnLgo+IC1JbiBzZXR1cF92aXJ0X3BhZ2luZygpIHVzZSB2 dGNyIHN0YXRpYyB2YXJpYWJsZSBpbnN0ZWFkIG9mIGxvY2FsIHZhbAo+IC1JbiBzZXR1cF92aXJ0 X3BhZ2luZ19vbmUoKSB1c2UgdnRjciBzdGF0aWMgdmFyaWFibGUgaW5zdGVhZCBvZiBwcm92aWRl ZAo+ICAgYXJndW1lbnQKPiAtLS0KPiAgIHhlbi9hcmNoL2FybS9wMm0uYyB8IDgyICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQo+ICAgMSBmaWxl IGNoYW5nZWQsIDYyIGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1n aXQgYS94ZW4vYXJjaC9hcm0vcDJtLmMgYi94ZW4vYXJjaC9hcm0vcDJtLmMKPiBpbmRleCBkNDNj M2FhODk2Li45OGExZmU2ZGU5IDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2FybS9wMm0uYwo+ICsr KyBiL3hlbi9hcmNoL2FybS9wMm0uYwo+IEBAIC04LDYgKzgsOCBAQAo+ICAgI2luY2x1ZGUgPHhl bi9pb2NhcC5oPgo+ICAgI2luY2x1ZGUgPHhlbi9tZW1fYWNjZXNzLmg+Cj4gICAjaW5jbHVkZSA8 eGVuL3htYWxsb2MuaD4KPiArI2luY2x1ZGUgPHhlbi9ub3RpZmllci5oPgo+ICsjaW5jbHVkZSA8 eGVuL2NwdS5oPgoKUGxlYXNlIGFkZCB0aGVtIGFscGhhYmV0aWNhbGx5LgoKPiAgICNpbmNsdWRl IDxwdWJsaWMvdm1fZXZlbnQuaD4KPiAgICNpbmNsdWRlIDxhc20vZmx1c2h0bGIuaD4KPiAgICNp bmNsdWRlIDxhc20vZXZlbnQuaD4KPiBAQCAtMTQ1MSwyNCArMTQ1MywxNyBAQCBlcnI6Cj4gICAg ICAgcmV0dXJuIHBhZ2U7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3Zp cnRfcGFnaW5nX29uZSh2b2lkICpkYXRhKQo+ICsvKiBWVENSIHZhbHVlIHRvIGJlIGNvbmZpZ3Vy ZWQgYnkgYWxsIENQVXMuIFNldCBvbmx5IG9uY2UgYnkgdGhlIGJvb3QgQ1BVICovCj4gK3N0YXRp YyB1aW50NjRfdCBfX3JlYWRfbW9zdGx5IHZ0Y3I7Cj4gKwo+ICtzdGF0aWMgdm9pZCBzZXR1cF92 aXJ0X3BhZ2luZ19vbmUodm9pZCAqZGF0YSkKPiAgIHsKPiAtICAgIHVuc2lnbmVkIGxvbmcgdmFs ID0gKHVuc2lnbmVkIGxvbmcpZGF0YTsKPiAtICAgIFdSSVRFX1NZU1JFRzMyKHZhbCwgVlRDUl9F TDIpOwo+ICsgICAgV1JJVEVfU1lTUkVHMzIodnRjciwgVlRDUl9FTDIpOwo+ICAgICAgIGlzYigp Owo+ICAgfQo+ICAgCj4gICB2b2lkIF9faW5pdCBzZXR1cF92aXJ0X3BhZ2luZyh2b2lkKQo+ICAg ewo+IC0gICAgLyogU2V0dXAgU3RhZ2UgMiBhZGRyZXNzIHRyYW5zbGF0aW9uICovCj4gLSAgICB1 bnNpZ25lZCBsb25nIHZhbCA9IFZUQ1JfUkVTMXxWVENSX1NIMF9JU3xWVENSX09SR04wX1dCV0F8 VlRDUl9JUkdOMF9XQldBOwo+IC0KPiAtI2lmZGVmIENPTkZJR19BUk1fMzIKPiAtICAgIHByaW50 aygiUDJNOiA0MC1iaXQgSVBBXG4iKTsKPiAtICAgIHAybV9pcGFfYml0cyA9IDQwOwo+IC0gICAg dmFsIHw9IFZUQ1JfVDBTWigweDE4KTsgLyogNDAgYml0IElQQSAqLwo+IC0gICAgdmFsIHw9IFZU Q1JfU0wwKDB4MSk7IC8qIFAyTSBzdGFydHMgYXQgZmlyc3QgbGV2ZWwgKi8KPiAtI2Vsc2UgLyog Q09ORklHX0FSTV82NCAqLwo+ICAgICAgIGNvbnN0IHN0cnVjdCB7Cj4gICAgICAgICAgIHVuc2ln bmVkIGludCBwYWJpdHM7IC8qIFBoeXNpY2FsIEFkZHJlc3MgU2l6ZSAqLwo+ICAgICAgICAgICB1 bnNpZ25lZCBpbnQgdDBzejsgICAvKiBEZXNpcmVkIFQwU1osIG1pbmltdW0gaW4gY29tbWVudCAq Lwo+IEBAIC0xNDkxLDYgKzE0ODYsMTYgQEAgdm9pZCBfX2luaXQgc2V0dXBfdmlydF9wYWdpbmco dm9pZCkKPiAgICAgICB1bnNpZ25lZCBpbnQgcGFfcmFuZ2UgPSAweDEwOyAvKiBMYXJnZXIgdGhh biBhbnkgcG9zc2libGUgdmFsdWUgKi8KPiAgICAgICBib29sIHZtaWRfOF9iaXQgPSBmYWxzZTsK ClRoYXQncyBub3QgZ29pbmcgdG8gYnVpbGQgb24gYXJtMzIgYmVjYXVzZSB2bWlkXzhfYml0ICYg Y28gYXJlIG5vdCB1c2VkLiAKV2hpbGUgSSB3aWxsIG5vdCBhc2sgeW91IHRvIHRlc3QgdGhlIGNo YW5nZXMgb24gMzItYml0IGJvYXJkLCBJIHdvdWxkIGF0IApsZWFzdCB3YW50IGVhY2ggY2hhbmdl IHRvIGJlIGJ1aWxkIHRlc3QgaXQgb24gaW1wYWN0ZWQgYXJjaGl0ZWN0dXJlLgoKSW4gdGhhdCBw YXJ0aWN1bGFyIGNhc2UsIHlvdSBjYW4ganVzdCBtb3ZlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB2 dGNyIGF0IAphZnRlciB0aGUgZW5kaWYgYmVjYXVzZSB0aGVyZSBpcyBub3RoaW5nIHRoYXQgcmVx dWlyZWQgdGhhdCB0byBiZSBzZXR1cCAKdmVyeSBlYXJseS4KCj4gICAKPiArICAgIC8qIFNldHVw IFN0YWdlIDIgYWRkcmVzcyB0cmFuc2xhdGlvbiAqLwo+ICsgICAgdnRjciA9IFZUQ1JfUkVTMXxW VENSX1NIMF9JU3xWVENSX09SR04wX1dCV0F8VlRDUl9JUkdOMF9XQldBOwo+ICsKPiArI2lmZGVm IENPTkZJR19BUk1fMzIKPiArICAgIHByaW50aygiUDJNOiA0MC1iaXQgSVBBXG4iKTsKPiArICAg IHAybV9pcGFfYml0cyA9IDQwOwo+ICsgICAgdnRjciB8PSBWVENSX1QwU1ooMHgxOCk7IC8qIDQw IGJpdCBJUEEgKi8KPiArICAgIHZ0Y3IgfD0gVlRDUl9TTDAoMHgxKTsgLyogUDJNIHN0YXJ0cyBh dCBmaXJzdCBsZXZlbCAqLwo+ICsjZWxzZSAvKiBDT05GSUdfQVJNXzY0ICovCj4gKwo+ICAgICAg IGZvcl9lYWNoX29ubGluZV9jcHUgKCBjcHUgKQo+ICAgICAgIHsKPiAgICAgICAgICAgY29uc3Qg c3RydWN0IGNwdWluZm9fYXJtICppbmZvID0gJmNwdV9kYXRhW2NwdV07Cj4gQEAgLTE1MTMsMTQg KzE1MTgsMTQgQEAgdm9pZCBfX2luaXQgc2V0dXBfdmlydF9wYWdpbmcodm9pZCkKPiAgICAgICBp ZiAoIHBhX3JhbmdlID49IEFSUkFZX1NJWkUocGFfcmFuZ2VfaW5mbykgfHwgIXBhX3JhbmdlX2lu Zm9bcGFfcmFuZ2VdLnBhYml0cyApCj4gICAgICAgICAgIHBhbmljKCJVbmtub3duIGVuY29kaW5n IG9mIElEX0FBNjRNTUZSMF9FTDEuUEFSYW5nZSAleFxuIiwgcGFfcmFuZ2UpOwo+ICAgCj4gLSAg ICB2YWwgfD0gVlRDUl9QUyhwYV9yYW5nZSk7Cj4gLSAgICB2YWwgfD0gVlRDUl9URzBfNEs7Cj4g KyAgICB2dGNyIHw9IFZUQ1JfUFMocGFfcmFuZ2UpOwo+ICsgICAgdnRjciB8PSBWVENSX1RHMF80 SzsKPiAgIAo+ICAgICAgIC8qIFNldCB0aGUgVlMgYml0IG9ubHkgaWYgMTYgYml0IFZNSUQgaXMg c3VwcG9ydGVkLiAqLwo+ICAgICAgIGlmICggTUFYX1ZNSUQgPT0gTUFYX1ZNSURfMTZfQklUICkK PiAtICAgICAgICB2YWwgfD0gVlRDUl9WUzsKPiAtICAgIHZhbCB8PSBWVENSX1NMMChwYV9yYW5n ZV9pbmZvW3BhX3JhbmdlXS5zbDApOwo+IC0gICAgdmFsIHw9IFZUQ1JfVDBTWihwYV9yYW5nZV9p bmZvW3BhX3JhbmdlXS50MHN6KTsKPiArICAgICAgICB2dGNyIHw9IFZUQ1JfVlM7Cj4gKyAgICB2 dGNyIHw9IFZUQ1JfU0wwKHBhX3JhbmdlX2luZm9bcGFfcmFuZ2VdLnNsMCk7Cj4gKyAgICB2dGNy IHw9IFZUQ1JfVDBTWihwYV9yYW5nZV9pbmZvW3BhX3JhbmdlXS50MHN6KTsKPiAgIAo+ICAgICAg IHAybV9yb290X29yZGVyID0gcGFfcmFuZ2VfaW5mb1twYV9yYW5nZV0ucm9vdF9vcmRlcjsKPiAg ICAgICBwMm1fcm9vdF9sZXZlbCA9IDIgLSBwYV9yYW5nZV9pbmZvW3BhX3JhbmdlXS5zbDA7Cj4g QEAgLTE1MzIsMTYgKzE1MzcsNTMgQEAgdm9pZCBfX2luaXQgc2V0dXBfdmlydF9wYWdpbmcodm9p ZCkKPiAgICAgICAgICAgICAgKCBNQVhfVk1JRCA9PSBNQVhfVk1JRF8xNl9CSVQgKSA/IDE2IDog OCk7Cj4gICAjZW5kaWYKPiAgICAgICBwcmludGsoIlAyTTogJWQgbGV2ZWxzIHdpdGggb3JkZXIt JWQgcm9vdCwgVlRDUiAweCVseFxuIiwKPiAtICAgICAgICAgICA0IC0gUDJNX1JPT1RfTEVWRUws IFAyTV9ST09UX09SREVSLCB2YWwpOwo+ICsgICAgICAgICAgIDQgLSBQMk1fUk9PVF9MRVZFTCwg UDJNX1JPT1RfT1JERVIsIHZ0Y3IpOwo+ICAgCj4gICAgICAgcDJtX3ZtaWRfYWxsb2NhdG9yX2lu aXQoKTsKPiAgIAo+ICAgICAgIC8qIEl0IGlzIG5vdCBhbGxvd2VkIHRvIGNvbmNhdGVuYXRlIGEg bGV2ZWwgemVybyByb290ICovCj4gICAgICAgQlVHX09OKCBQMk1fUk9PVF9MRVZFTCA9PSAwICYm IFAyTV9ST09UX09SREVSID4gMCApOwo+IC0gICAgc2V0dXBfdmlydF9wYWdpbmdfb25lKCh2b2lk ICopdmFsKTsKPiAtICAgIHNtcF9jYWxsX2Z1bmN0aW9uKHNldHVwX3ZpcnRfcGFnaW5nX29uZSwg KHZvaWQgKil2YWwsIDEpOwo+ICsgICAgc2V0dXBfdmlydF9wYWdpbmdfb25lKE5VTEwpOwo+ICsg ICAgc21wX2NhbGxfZnVuY3Rpb24oc2V0dXBfdmlydF9wYWdpbmdfb25lLCBOVUxMLCAxKTsKPiAr fQo+ICsKPiArc3RhdGljIGludCBjcHVfdmlydF9wYWdpbmdfY2FsbGJhY2soCj4gKyAgICBzdHJ1 Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUp CgpUaGUgaW5kZW50YXRpb24gbG9va3Mgd3JvbmcuCgo+ICt7Cj4gKyAgICBzd2l0Y2ggKCBhY3Rp b24gKQo+ICsgICAgewo+ICsgICAgY2FzZSBDUFVfU1RBUlRJTkc6Cj4gKyAgICAgICAgQVNTRVJU KHN5c3RlbV9zdGF0ZSAhPSBTWVNfU1RBVEVfYm9vdCk7CgpJIHdhcyBhYm91dCB0byBjb21wbGFp biBhYm91dCB0aGlzIGJ1dCB0aGVuIHNhdyB5b3UgYWRkIHRoZSBub3RpZmllcnMgCmFmdGVyLiBU aGF0J3MgcXVpdGUgY2xldmVyIGFuZCB0aGUgY29tbWVudCBpcyByZWFsbHkgaGVscGZ1bCA6KS4K Cj4gKyAgICAgICAgc2V0dXBfdmlydF9wYWdpbmdfb25lKE5VTEwpOwo+ICsgICAgICAgIGJyZWFr Owo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICBicmVhazsKPiArICAgIH0KPiArCj4gKyAgICBy ZXR1cm4gTk9USUZZX0RPTkU7Cj4gICB9Cj4gICAKPiArc3RhdGljIHN0cnVjdCBub3RpZmllcl9i bG9jayBjcHVfdmlydF9wYWdpbmdfbmZiID0gewo+ICsgICAgLm5vdGlmaWVyX2NhbGwgPSBjcHVf dmlydF9wYWdpbmdfY2FsbGJhY2ssCj4gKyAgICAucHJpb3JpdHkgPSAxMDAgLyogaGlnaGVzdCBw cmlvcml0eSAqLwo+ICt9Owo+ICsKPiArc3RhdGljIGludCBfX2luaXQgY3B1X3ZpcnRfcGFnaW5n X2luaXQodm9pZCkKPiArewo+ICsgICAgcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVfdmlydF9w YWdpbmdfbmZiKTsKPiArICAgIHJldHVybiAwOwo+ICt9CgpOSVQ6IE1pc3NpbmcgbmV3bGluZS4K Cj4gKy8qCj4gKyAqIEluaXRpYWxpemF0aW9uIG9mIHRoZSBub3RpZmllciBoYXMgdG8gYmUgZG9u ZSBhdCBpbml0IHJhdGhlciB0aGFuIHByZXNtcF9pbml0Cj4gKyAqIHBoYXNlIGJlY2F1c2U6IHRo ZSByZWdpc3RlcmVkIG5vdGlmaWVyIGlzIHVzZWQgdG8gc2V0dXAgdmlydHVhbCBwYWdpbmcgZm9y Cj4gKyAqIG5vbi1ib290IENQVXMgYWZ0ZXIgdGhlIGluaXRpYWwgdmlydHVhbCBwYWdpbmcgZm9y IGFsbCBDUFVzIGlzIGFscmVhZHkgc2V0dXAsCj4gKyAqIGkuZS4gd2hlbiBhIG5vbi1ib290IENQ VSBpcyBob3RwbHVnZ2VkIGFmdGVyIHRoZSBzeXN0ZW0gaGFzIGJvb3RlZC4gSW4gb3RoZXIKPiAr ICogd29yZHMsIHRoZSBub3RpZmllciBzaG91bGQgYmUgcmVnaXN0ZXJlZCBhZnRlciB0aGUgdmly dHVhbCBwYWdpbmcgaXMKPiArICogaW5pdGlhbGx5IHNldHVwIChzZXR1cF92aXJ0X3BhZ2luZygp IGlzIGNhbGxlZCBmcm9tIHN0YXJ0X3hlbigpKS4gVGhpcyBpcwo+ICsgKiByZXF1aXJlZCBiZWNh dXNlIHZ0Y3IgY29uZmlnIHZhbHVlIGhhcyB0byBiZSBzZXQgYmVmb3JlIGEgbm90aWZpZXIgY2Fu IGZpcmUuCj4gKyAqLwo+ICtfX2luaXRjYWxsKGNwdV92aXJ0X3BhZ2luZ19pbml0KTsKPiArCj4g ICAvKgo+ICAgICogTG9jYWwgdmFyaWFibGVzOgo+ICAgICogbW9kZTogQwo+IAoKQ2hlZXJzLAoK LS0gCkp1bGllbiBHcmFsbAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVj dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1k ZXZlbA==