From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Subject: Re: [PATCH 13 of 29 RFC] libxl: add hotplug script calls for Linux Date: Tue, 7 Feb 2012 10:04:59 +0100 Message-ID: References: <98a4f01033786a2fc15b.1328189208@debian.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: rshriram@cs.ubc.ca Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org MjAxMi8yLzcgU2hyaXJhbSBSYWphZ29wYWxhbiA8cnNocmlyYW1AY3MudWJjLmNhPjoKPiBPbiBU aHUsIEZlYiAyLCAyMDEyIGF0IDU6MjYgQU0sIFJvZ2VyIFBhdSBNb25uZSA8cm9nZXIucGF1QGVu dGVsLnVwYy5lZHU+Cj4gd3JvdGU6Cj4+Cj4+ICMgSEcgY2hhbmdlc2V0IHBhdGNoCj4+ICMgVXNl ciBSb2dlciBQYXUgTW9ubmUgPHJvZ2VyLnBhdUBlbnRlbC51cGMuZWR1Pgo+PiAjIERhdGUgMTMy ODE3NzU5MSAtMzYwMAo+PiAjIE5vZGUgSUQgOThhNGYwMTAzMzc4NmEyZmMxNWI0MTMwODk3YzM1 ZjY0YTY3NmU0MAo+PiAjIFBhcmVudCDCoDZjMjY5MDkyMWZiYTU4MGRkN2RkODM2ZGEzYmU0ODRk ZWUwNDliZTAKPj4gbGlieGw6IGFkZCBob3RwbHVnIHNjcmlwdCBjYWxscyBmb3IgTGludXgKPj4K Pj4gVGhpcyBwYXRjaHMgYWRkcyB0aGUgbmVjZXNzYXJ5IGxvZ2ljIHRvIGNhbGwgaG90cGx1ZyBz Y3JpcHRzIGRpcmVjdGx5Cj4+IGZyb20gbGlieGwuIExpbnV4IGhvdHBsdWcgc2NyaXRwcyByZWFk IG1vc3QgcGFyYW1ldGVycyBmcm9tIHRoZSBjYWxsZXIKPj4gZW52aXJvbm1lbnQgKHNpbmNlIHVk ZXYgc2V0IHRoaXMgcGFyYW1ldGVycyBhdXRvbWF0aWNhbGx5KS4gSW4gdGhpcwo+PiBpbXBsZW1l bnRhdGlvbiB3ZSBmYWtlIHVkZXYgcGFyYW1ldGVycywgc28gbm8gY2hhbmdlcyBhcmUgbmVlZGVk IHRvCj4+IHRoZSBzY3JpcHRzIGl0c2VsZi4KPj4KPj4gQ3VycmVudGx5LCB0aGUgZm9sbG93aW5n IHNjcmlwdHMgYXJlIGNhbGxlZDoKPj4KPj4gwqAqIGJsb2NrOiB1c2VkIHdoZW4gZGlzayBiYWNr ZW5kIGlzIFBIWS4KPj4KPj4gwqAqIGJsa3RhcDogdXNlZCB3aGVuIGRpc2sgYmFja2VuZCBpcyBU QVAuCj4+Cj4KPiBTb3JyeSBpZiB0aGlzIGlzIGEgYml0IGRlbnNlLCBidXQgeW91IGhhdmUgYmVl biB0aHJvdWdoIHRoZSBjb2RlCj4gYWxyZWFkeSA7KQo+IElzIHRoZXJlIGFuIG9wdGlvbiB0byBj YWxsIG90aGVyIHNjcmlwdHMgb3RoZXIgdGhhbiBibG9jay9ibGt0YXAgPwoKbGlieGwgaGFzIHNv bWUgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3Igc2V0dGluZyBjdXN0b20gaG90cGx1ZyBzY3JpcHRz CmZvciBoYXJkIGRyaXZlcyBpbiBjb25maWd1cmF0aW9uIGZpbGVzIChqdXN0IGxpa2UgeW91IGRv IGZvciBuaWMKaW50ZXJmYWNlcyksIHRoaXMgaXMgY3VycmVudGx5IGRpc2FibGVkIGJ1dCBjb3Vs ZCBiZSBlbmFibGVkIGluIGZ1dHVyZQpyZWxlYXNlcy4KCj4gRm9yIGUuZy4sIGlmIEkgd2VyZSB0 byBhZGQgYSBiYWNrZW5kIHR5cGUgRFJCRC9GT09CQVIsCj4gYW5kIHdpc2ggdG8gY2FsbCBzY3Jp cHQgImJsb2NrLTxkcmJkfGZvb2Jhcj4sIGhvdyBkbyB5b3Ugc3VnZ2VzdCBJCj4gcHJvY2VlZCA/ CgpXZWxsLCBJIHNlZSBzZXZlcmFsIGFwcHJvYWNoZXMgaGVyZSwgcmlnaHQgbm93IHdlIGNhbGwg TGludXggaG90cGx1ZwpzY3JpcHRzIGFkZGluZyB0aGUgbmVjZXNzYXJ5IGVudiB2YXJpYWJsZXMs IHNpbmNlIHVkZXYgdXNlZCB0byBzZXQKdGhvc2UgdmFyaWFibGVzIGF1dG9tYXRpY2FsbHksIGFu ZCB3ZSB3aWxsIGNvbnRpbnVlIHRvIGRvIGl0IHRoYXQgd2F5CnVudGlsIHhlbmQgaXMgcmVtb3Zl ZC4gSSB0aGluayBpdCdzIG1vc3Qgc3VpdGFibGUgdG8gcGFzcyB0aG9zZQpwYXJhbWV0ZXJzIGFz IGFyZ3VtZW50cyB0byB0aGUgc2NyaXB0LCBidXQgdGhpcyBhcyBJIHNhaWQgYmVmb3JlIGlzIGEK bG9uZyB0ZXJtIGdvYWwuCgo+IMKgIFN0YXJ0IG15IHdheSBmcm9tIGRlZmluaW5nIG5ldyBkaXNr IGJhY2tlbmQgdHlwZXMgYW5kIGp1c3QgYWRkCj4gaG90cGx1ZyBoYW5kbGVycyBmb3IgdGhlc2Ug YmxvY2stKiBkZXZpY2VzIGFuZCBmaW5hbGx5IGV4cG9zZSB0aGVtIGFzCj4gcGh5IGRldmljZXMg dG8gbGlieGwgPwoKVGhhdCdzIHJlYWxseSB1cCB0byB5b3UsIGJ1dCBpZiB5b3Ugd2FudCB0byBw YXNzIHRoZW0gYXMgUEhZIGRldmljZXMsCnlvdSBzaG91bGQgbW9kaWZ5IHRoZSBsaWJ4bF9fdHJ5 X3BoeV9iYWNrZW5kIGZ1bmN0aW9uIGluc2lkZQpsaWJ4bF9saW51eC5jIGFuZCBsaWJ4bF9uZXRi c2QuYy4gSWYgeW91IHdhbnQgdGhpcyBjaGFuZ2VzIHRvIGJlIGFkZGVkCnRvIHVwc3RyZWFtIGl0 IG1pZ2h0IGJlIGJlc3QgdG8gZGVmaW5lIHlvdXIgb3duIGJhY2tlbmQgdHlwZSwKb3ZlcmxvYWRp bmcgdGhlIFBIWSB0eXBlIGl0J3Mgbm90IGNsZWFyZXIsIGFuZCBQSFkgc2hvdWxkIG9ubHkgYmUg dXNlZApmb3IgcGh5c2ljYWwgcGFydGl0aW9ucyAoYWdhaW4sIHNpbmNlIEkgZG9uJ3Qga25vdyB5 b3VyIHNwZWNpZmljCmltcGxlbWVudGF0aW9uLCBJIGNhbm5vdCBiZSBzdXJlIG9mIHRoZSBtb3N0 IHN1aXRhYmxlIHdheSB0byB0YWNrbGUKdGhpcyBwcm9ibGVtKS4KCj4KPiBzaHJpcmFtCj4KPj4K Pj4gwqAqIHZpZi0qOiB1c2VkIHdoZW4gYWRkaW5nIGEgbmV0d29yayBpbnRlcmZhY2UgYW5kIGNh biBiZSBtYW51YWxseSBzZXQKPj4gwqAgYnkgdGhlIHVzZXIuCj4+Cj4+IHVkZXYgcnVsZXMgZGVz Y3JpdmUgbW9yZSBkZXZpY2UgdHlwZXMsIGN1cnJlbnRseSB0aGUgZm9sbG93aW5nIHNjcmlwdHMK Pj4gYXJlIE5PVCBleGVjdXRlZCBmcm9tIGxpYnhsIGJlY2F1c2UgSSB3YXNuJ3QgYWJsZSB0byBm aW5kIGFueSBzdXBwb3J0Cj4+IGZvciB0aGlzIGRldmljZSB0eXBlcyBpbiBsaWJ4bDoKPj4KPj4g wqAqIHZ0cG0KPj4KPj4gwqAqIHZpZjIKPj4KPj4gwqAqIHZzY3NpCj4+Cj4+IMKgKiB2aWYtc2V0 dXAgd2l0aCBkZXZpY2VzIG9mIHR5cGUgdGFwKgo+Pgo+PiBUaGlzIHBhdGNoIGp1c3QgYWRkcyB0 aGUgbmVjZXNzYXJ5IGNvZGUsIGJ1dCBob3RwbHVnIHNjcmlwdHMgYXJlIE5PVAo+PiBjYWxsZWQg ZnJvbSBsaWJ4bCB5ZXQsIGZvbGxvd2luZyBwYXRjaGVzIHdpbGwgZGlzYWJsZSB1ZGV2IHJ1bGVz IGFuZAo+PiB1c2UgdGhpcyBjYWxscyBpbnN0ZWFkLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBSb2dl ciBQYXUgTW9ubmUgPHJvZ2VyLnBhdUBlbnRlbC51cGMuZWR1Pgo+Pgo+PiBkaWZmIC1yIDZjMjY5 MDkyMWZiYSAtciA5OGE0ZjAxMDMzNzggdG9vbHMvbGlieGwvbGlieGxfbGludXguYwo+PiAtLS0g YS90b29scy9saWJ4bC9saWJ4bF9saW51eC5jIFRodSBGZWIgMDIgMTE6MTA6MjQgMjAxMiArMDEw MAo+PiArKysgYi90b29scy9saWJ4bC9saWJ4bF9saW51eC5jIFRodSBGZWIgMDIgMTE6MTM6MTEg MjAxMiArMDEwMAo+PiBAQCAtMjYsMTAgKzI2LDE3MiBAQCBpbnQgbGlieGxfX3RyeV9waHlfYmFj a2VuZChtb2RlX3Qgc3RfbW9kCj4+IMKgIMKgIHJldHVybiAxOwo+PiDCoH0KPj4KPj4gKy8qIEhv dHBsdWcgc2NyaXB0cyBoZWxwZXJzICovCj4+ICsjaWYgMAo+PiArc3RhdGljIGNoYXIgKipnZXRf aG90cGx1Z19lbnYobGlieGxfX2djICpnYywgbGlieGxfX2RldmljZSAqZGV2KQo+PiArewo+PiAr IMKgIMKgbGlieGxfY3R4ICpjdHggPSBsaWJ4bF9fZ2Nfb3duZXIoZ2MpOwo+PiArIMKgIMKgY2hh ciAqYmVfcGF0aCA9IGxpYnhsX19kZXZpY2VfYmFja2VuZF9wYXRoKGdjLCBkZXYpOwo+PiArIMKg IMKgZmxleGFycmF5X3QgKmZfZW52Owo+PiArIMKgIMKgaW50IG5yID0gMDsKPj4gKwo+PiArIMKg IMKgZl9lbnYgPSBmbGV4YXJyYXlfbWFrZSgxMSwgMSk7Cj4+ICsgwqAgwqBpZiAoIWZfZW52KSB7 Cj4+ICsgwqAgwqAgwqAgwqBMSUJYTF9fTE9HKGN0eCwgTElCWExfX0xPR19FUlJPUiwKPj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAidW5hYmxlIHRvIGNyZWF0ZSBlbnZpcm9ubWVudCBh cnJheSIpOwo+PiArIMKgIMKgIMKgIMKgcmV0dXJuIE5VTEw7Cj4+ICsgwqAgwqB9Cj4+ICsKPj4g KyDCoCDCoGZsZXhhcnJheV9zZXQoZl9lbnYsIG5yKyssICJzY3JpcHQiKTsKPj4gKyDCoCDCoGZs ZXhhcnJheV9zZXQoZl9lbnYsIG5yKyssIGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwKPj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBsaWJ4bF9fc3By aW50ZihnYywgIiVzLyVzIiwKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJlX3BhdGgsCj4+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAic2NyaXB0IikpKTsKPj4gKyDCoCDCoGZsZXhhcnJheV9zZXQoZl9lbnYsIG5yKyssICJYRU5C VVNfVFlQRSIpOwo+PiArIMKgIMKgZmxleGFycmF5X3NldChmX2VudiwgbnIrKywgKGNoYXIgKikK Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGxpYnhsX19kZXZpY2Vfa2luZF90b19zdHJp bmcoZGV2LT5iYWNrZW5kX2tpbmQpKTsKPj4gKyDCoCDCoGZsZXhhcnJheV9zZXQoZl9lbnYsIG5y KyssICJYRU5CVVNfUEFUSCIpOwo+PiArIMKgIMKgZmxleGFycmF5X3NldChmX2VudiwgbnIrKywK Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGxpYnhsX19zcHJpbnRmKGdjLCAiYmFja2Vu ZC8lcy8ldS8lZCIsCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBsaWJ4bF9fZGV2aWNl X2tpbmRfdG9fc3RyaW5nKGRldi0+YmFja2VuZF9raW5kKSwKPj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoGRldi0+ZG9taWQsIGRldi0+ZGV2aWQpKTsKPj4gKyDCoCDCoGZsZXhhcnJheV9z ZXQoZl9lbnYsIG5yKyssICJYRU5CVVNfQkFTRV9QQVRIIik7Cj4+ICsgwqAgwqBmbGV4YXJyYXlf c2V0KGZfZW52LCBucisrLCAiYmFja2VuZCIpOwo+PiArIMKgIMKgaWYgKGRldi0+YmFja2VuZF9r aW5kID09IExJQlhMX19ERVZJQ0VfS0lORF9WSUYpIHsKPj4gKyDCoCDCoCDCoCDCoGZsZXhhcnJh eV9zZXQoZl9lbnYsIG5yKyssICJ2aWYiKTsKPj4gKyDCoCDCoCDCoCDCoGZsZXhhcnJheV9zZXQo Zl9lbnYsIG5yKyssCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBsaWJ4bF9f c3ByaW50ZihnYywgIiVzJXUuJWQiLAo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgbGlieGxfX2RldmljZV9raW5kX3RvX3N0cmluZyhkZXYtPmJhY2tlbmRfa2luZCksCj4+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBkZXYtPmRvbWlkLCBkZXYtPmRldmlkKSk7 Cj4+ICsgwqAgwqB9Cj4+ICsgwqAgwqBmbGV4YXJyYXlfc2V0KGZfZW52LCBucisrLCBOVUxMKTsK Pj4gKwo+PiArIMKgIMKgcmV0dXJuIChjaGFyICoqKSBmbGV4YXJyYXlfY29udGVudHMoZl9lbnYp Owo+PiArfQo+PiArCj4+IMKgLyogSG90cGx1ZyBzY3JpcHRzIGNhbGxlciBmdW5jdGlvbnMgKi8K Pj4KPj4gK3N0YXRpYyBpbnQgbGlieGxfX2hvdHBsdWdfbmljKGxpYnhsX19nYyAqZ2MsIGxpYnhs X19kZXZpY2UgKmRldiwKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBsaWJ4 bF9faG90cGx1Z19hY3Rpb24gYWN0aW9uKQo+PiArewo+PiArIMKgIMKgbGlieGxfY3R4ICpjdHgg PSBsaWJ4bF9fZ2Nfb3duZXIoZ2MpOwo+PiArIMKgIMKgY2hhciAqYmVfcGF0aCA9IGxpYnhsX19k ZXZpY2VfYmFja2VuZF9wYXRoKGdjLCBkZXYpOwo+PiArIMKgIMKgY2hhciAqc2NyaXB0LCAqd2hh dDsKPj4gKyDCoCDCoGNoYXIgKiphcmdzLCAqKmVudjsKPj4gKyDCoCDCoGludCBzdGF0dXMsIG5y ID0gMDsKPj4gKyDCoCDCoGludCByYyA9IC0xOwo+PiArIMKgIMKgZmxleGFycmF5X3QgKmZfYXJn czsKPj4gKwo+PiArIMKgIMKgc2NyaXB0ID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLAo+ PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbGlieGxfX3Nwcmlu dGYoZ2MsICIlcy8lcyIsIGJlX3BhdGgsCj4+ICJzY3JpcHQiKSk7Cj4+ICsgwqAgwqBpZiAoIXNj cmlwdCkgewo+PiArIMKgIMKgIMKgIMKgTElCWExfX0xPRyhjdHgsIExJQlhMX19MT0dfRVJST1Is ICJ1bmFibGUgdG8gcmVhZCBzY3JpcHQgZnJvbQo+PiAlcyIsCj4+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBiZV9wYXRoKTsK Pj4gKyDCoCDCoCDCoCDCoHJldHVybiAtMTsKPj4gKyDCoCDCoH0KPj4gKwo+PiArIMKgIMKgZW52 ID0gZ2V0X2hvdHBsdWdfZW52KGdjLCBkZXYpOwo+PiArIMKgIMKgaWYgKCFlbnYpCj4+ICsgwqAg wqAgwqAgwqByZXR1cm4gLTE7Cj4+ICsKPj4gKyDCoCDCoGZfYXJncyA9IGZsZXhhcnJheV9tYWtl KDQsIDEpOwo+PiArIMKgIMKgaWYgKCFmX2FyZ3MpIHsKPj4gKyDCoCDCoCDCoCDCoExJQlhMX19M T0coY3R4LCBMSUJYTF9fTE9HX0VSUk9SLCAidW5hYmxlIHRvIGNyZWF0ZSBhcmd1bWVudHMKPj4g YXJyYXkiKTsKPj4gKyDCoCDCoCDCoCDCoHJldHVybiAtMTsKPj4gKyDCoCDCoH0KPj4gKwo+PiAr IMKgIMKgZmxleGFycmF5X3NldChmX2FyZ3MsIG5yKyssIHNjcmlwdCk7Cj4+ICsgwqAgwqBmbGV4 YXJyYXlfc2V0KGZfYXJncywgbnIrKywgYWN0aW9uID09IENPTk5FQ1QgPyAib25saW5lIiA6Cj4+ ICJvZmZsaW5lIik7Cj4+ICsgwqAgwqBmbGV4YXJyYXlfc2V0KGZfYXJncywgbnIrKywgInR5cGVf aWY9dmlmIik7Cj4+ICsgwqAgwqBmbGV4YXJyYXlfc2V0KGZfYXJncywgbnIrKywgTlVMTCk7Cj4+ ICsKPj4gKyDCoCDCoGFyZ3MgPSAoY2hhciAqKikgZmxleGFycmF5X2NvbnRlbnRzKGZfYXJncyk7 Cj4+ICsgwqAgwqB3aGF0ID0gbGlieGxfX3NwcmludGYoZ2MsICIlcyAlcyIsIGFyZ3NbMF0sCj4+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBhY3Rpb24gPT0gQ09OTkVD VCA/ICJjb25uZWN0IiA6ICJkaXNjb25uZWN0Iik7Cj4+ICsgwqAgwqBMSUJYTF9fTE9HKGN0eCwg TElCWExfX0xPR19ERUJVRywKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiQ2FsbGluZyBob3Rw bHVnIHNjcmlwdDogJXMgJXMgJXMiLAo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGFyZ3NbMF0s IGFyZ3NbMV0sIGFyZ3NbMl0pOwo+PiArIMKgIMKgc3RhdHVzID0gbGlieGxfX2ZvcmtleGVjKGdj LCAtMSwgLTEsIC0xLCBhcmdzWzBdLCBhcmdzLCBlbnYsIHdoYXQpOwo+PiArIMKgIMKgaWYgKHN0 YXR1cykgewo+PiArIMKgIMKgIMKgIMKgcmMgPSAtMTsKPj4gKyDCoCDCoCDCoCDCoGdvdG8gb3V0 Owo+PiArIMKgIMKgfQo+PiArIMKgIMKgcmMgPSAwOwo+PiArCj4+ICtvdXQ6Cj4+ICsgwqAgwqBm cmVlKGVudik7Cj4+ICsgwqAgwqBmcmVlKGFyZ3MpOwo+PiArIMKgIMKgcmV0dXJuIHJjOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IGxpYnhsX19ob3RwbHVnX2Rpc2sobGlieGxfX2djICpnYywg bGlieGxfX2RldmljZSAqZGV2LAo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGxpYnhsX19ob3RwbHVnX2FjdGlvbiBhY3Rpb24pCj4+ICt7Cj4+ICsgwqAgwqBsaWJ4bF9jdHgg KmN0eCA9IGxpYnhsX19nY19vd25lcihnYyk7Cj4+ICsgwqAgwqBjaGFyICpiZV9wYXRoID0gbGli eGxfX2RldmljZV9iYWNrZW5kX3BhdGgoZ2MsIGRldik7Cj4+ICsgwqAgwqBjaGFyICpzY3JpcHQs ICp3aGF0Owo+PiArIMKgIMKgY2hhciAqKmFyZ3MsICoqZW52Owo+PiArIMKgIMKgaW50IHN0YXR1 cywgbnIgPSAwOwo+PiArIMKgIMKgaW50IHJjID0gLTE7Cj4+ICsgwqAgwqBmbGV4YXJyYXlfdCAq Zl9hcmdzOwo+PiArCj4+ICsgwqAgwqBzY3JpcHQgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05V TEwsCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBsaWJ4bF9f c3ByaW50ZihnYywgIiVzLyVzIiwgYmVfcGF0aCwKPj4gInNjcmlwdCIpKTsKPj4gKyDCoCDCoGlm ICghc2NyaXB0KSB7Cj4+ICsgwqAgwqAgwqAgwqBMSUJYTF9fTE9HKGN0eCwgTElCWExfX0xPR19F UlJPUiwgInVuYWJsZSB0byByZWFkIHNjcmlwdCBmcm9tCj4+ICVzIiwKPj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJlX3Bh dGgpOwo+PiArIMKgIMKgIMKgIMKgcmV0dXJuIC0xOwo+PiArIMKgIMKgfQo+PiArCj4+ICsgwqAg wqBlbnYgPSBnZXRfaG90cGx1Z19lbnYoZ2MsIGRldik7Cj4+ICsgwqAgwqBpZiAoIWVudikKPj4g KyDCoCDCoCDCoCDCoHJldHVybiAtMTsKPj4gKwo+PiArIMKgIMKgZl9hcmdzID0gZmxleGFycmF5 X21ha2UoMywgMSk7Cj4+ICsgwqAgwqBpZiAoIWZfYXJncykgewo+PiArIMKgIMKgIMKgIMKgTElC WExfX0xPRyhjdHgsIExJQlhMX19MT0dfRVJST1IsICJ1bmFibGUgdG8gY3JlYXRlIGFyZ3VtZW50 cwo+PiBhcnJheSIpOwo+PiArIMKgIMKgIMKgIMKgcmV0dXJuIC0xOwo+PiArIMKgIMKgfQo+PiAr Cj4+ICsgwqAgwqBmbGV4YXJyYXlfc2V0KGZfYXJncywgbnIrKywgc2NyaXB0KTsKPj4gKyDCoCDC oGZsZXhhcnJheV9zZXQoZl9hcmdzLCBucisrLCBhY3Rpb24gPT0gQ09OTkVDVCA/ICJhZGQiIDog InJlbW92ZSIpOwo+PiArIMKgIMKgZmxleGFycmF5X3NldChmX2FyZ3MsIG5yKyssIE5VTEwpOwo+ PiArCj4+ICsgwqAgwqBhcmdzID0gKGNoYXIgKiopIGZsZXhhcnJheV9jb250ZW50cyhmX2FyZ3Mp Owo+PiArIMKgIMKgd2hhdCA9IGxpYnhsX19zcHJpbnRmKGdjLCAiJXMgJXMiLCBhcmdzWzBdLAo+ PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYWN0aW9uID09IENPTk5F Q1QgPyAiY29ubmVjdCIgOiAiZGlzY29ubmVjdCIpOwo+PiArIMKgIMKgTElCWExfX0xPRyhjdHgs IExJQlhMX19MT0dfREVCVUcsCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIkNhbGxpbmcgaG90 cGx1ZyBzY3JpcHQ6ICVzICVzIiwKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhcmdzWzBdLCBh cmdzWzFdKTsKPj4gKyDCoCDCoHN0YXR1cyA9IGxpYnhsX19mb3JrZXhlYyhnYywgLTEsIC0xLCAt MSwgYXJnc1swXSwgYXJncywgZW52LCB3aGF0KTsKPj4gKyDCoCDCoGlmIChzdGF0dXMpIHsKPj4g KyDCoCDCoCDCoCDCoHJjID0gLTE7Cj4+ICsgwqAgwqAgwqAgwqBnb3RvIG91dDsKPj4gKyDCoCDC oH0KPj4gKyDCoCDCoHJjID0gMDsKPj4gKwo+PiArb3V0Ogo+PiArIMKgIMKgZnJlZShlbnYpOwo+ PiArIMKgIMKgZnJlZShhcmdzKTsKPj4gKyDCoCDCoHJldHVybiByYzsKPj4gK30KPj4gKyNlbmRp ZiAvKiAwICovCj4+IMKgaW50IGxpYnhsX19kZXZpY2VfaG90cGx1ZyhsaWJ4bF9fZ2MgKmdjLCBs aWJ4bF9fZGV2aWNlICpkZXYsCj4+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGxpYnhsX19ob3RwbHVnX2FjdGlvbiBhY3Rpb24pCj4+IMKgewo+PiAtIMKgIMKgcmV0dXJu IDA7Cj4+ICsgwqAgwqBpbnQgcmMgPSAwOwo+PiArI2lmIDAKPj4gKyDCoCDCoHN3aXRjaCAoZGV2 LT5iYWNrZW5kX2tpbmQpIHsKPj4gKyDCoCDCoGNhc2UgTElCWExfX0RFVklDRV9LSU5EX1ZJRjoK Pj4gKyDCoCDCoCDCoCDCoHJjID0gbGlieGxfX2hvdHBsdWdfbmljKGdjLCBkZXYsIGFjdGlvbik7 Cj4+ICsgwqAgwqAgwqAgwqBicmVhazsKPj4gKyDCoCDCoGNhc2UgTElCWExfX0RFVklDRV9LSU5E X1ZCRDoKPj4gKyDCoCDCoCDCoCDCoHJjID0gbGlieGxfX2hvdHBsdWdfZGlzayhnYywgZGV2LCBh Y3Rpb24pOwo+PiArIMKgIMKgIMKgIMKgYnJlYWs7Cj4+ICsgwqAgwqBkZWZhdWx0Ogo+PiArIMKg IMKgIMKgIMKgcmMgPSAwOwo+PiArIMKgIMKgIMKgIMKgYnJlYWs7Cj4+ICsgwqAgwqB9Cj4+ICsj ZW5kaWYgLyogMCAqLwo+PiArIMKgIMKgcmV0dXJuIHJjOwo+PiDCoH0KPj4KPj4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4gWGVuLWRldmVsIG1haWxp bmcgbGlzdAo+PiBYZW4tZGV2ZWxAbGlzdHMueGVuc291cmNlLmNvbQo+PiBodHRwOi8vbGlzdHMu eGVuc291cmNlLmNvbS94ZW4tZGV2ZWwKPgo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0 cy54ZW5zb3VyY2UuY29tCmh0dHA6Ly9saXN0cy54ZW5zb3VyY2UuY29tL3hlbi1kZXZlbAo=