From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [DOC v8] PV Calls protocol design Date: Tue, 7 Feb 2017 15:24:02 -0500 Message-ID: <20170207202402.GF7048@char.us.ORACLE.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cbCJA-00063Y-Ix for xen-devel@lists.xenproject.org; Tue, 07 Feb 2017 20:24:12 +0000 Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Stefano Stabellini Cc: jgross@suse.com, lars.kurth@citrix.com, wei.liu2@citrix.com, andrew.cooper3@citrix.com, Paul.Durrant@citrix.com, xen-devel@lists.xenproject.org, joao.m.martins@oracle.com, boris.ostrovsky@oracle.com, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org LnNuaXAuLgo+ICMjIyMgRnJvbnRlbmQgWGVuQnVzIE5vZGVzCj4gCj4gdmVyc2lvbgo+ICAgICAg VmFsdWVzOiAgICAgICAgIDxzdHJpbmc+Cj4gCj4gICAgICBQcm90b2NvbCB2ZXJzaW9uLCBjaG9z ZW4gYW1vbmcgdGhlIG9uZXMgc3VwcG9ydGVkIGJ5IHRoZSBiYWNrZW5kCj4gICAgICAoc2VlICoq dmVyc2lvbnMqKiB1bmRlciBbQmFja2VuZCBYZW5CdXMgTm9kZXNdKS4gQ3VycmVudGx5IHRoZQo+ ICAgICAgdmFsdWUgbXVzdCBiZSAiMSIuCj4gCj4gcG9ydAo+ICAgICAgVmFsdWVzOiAgICAgICAg IDx1aW50MzJfdD4KPiAKPiAgICAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBYZW4gZXZlbnQgY2hh bm5lbCB1c2VkIHRvIHNpZ25hbCBhY3Rpdml0eQo+ICAgICAgaW4gdGhlIGNvbW1hbmQgcmluZy4K PiAKPiByaW5nLXJlZgo+ICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KPiAKPiAgICAg IFRoZSBYZW4gZ3JhbnQgcmVmZXJlbmNlIGdyYW50aW5nIHBlcm1pc3Npb24gZm9yIHRoZSBiYWNr ZW5kIHRvIG1hcAo+ICAgICAgdGhlIHNvbGUgcGFnZSBpbiBhIHNpbmdsZSBwYWdlIHNpemVkIGNv bW1hbmQgcmluZy4KPiAKPiAjIyMjIEJhY2tlbmQgWGVuQnVzIE5vZGVzCj4gCj4gdmVyc2lvbnMK PiAgICAgIFZhbHVlczogICAgICAgICA8c3RyaW5nPgo+IAo+ICAgICAgTGlzdCBvZiBjb21tYSBz ZXBhcmF0ZWQgcHJvdG9jb2wgdmVyc2lvbnMgc3VwcG9ydGVkIGJ5IHRoZSBiYWNrZW5kLgo+ICAg ICAgRm9yIGV4YW1wbGUgIjEsMiwzIi4gQ3VycmVudGx5IHRoZSB2YWx1ZSBpcyBqdXN0ICIxIiwg YXMgdGhlcmUgaXMKPiAgICAgIG9ubHkgb25lIHZlcnNpb24uCj4gCj4gbWF4LXBhZ2Utb3JkZXIK PiAgICAgIFZhbHVlczogICAgICAgICA8dWludDMyX3Q+Cj4gCj4gICAgICBUaGUgbWF4aW11bSBz dXBwb3J0ZWQgc2l6ZSBvZiBhIG1lbW9yeSBhbGxvY2F0aW9uIGluIHVuaXRzIG9mCj4gICAgICBs b2cybihtYWNoaW5lIHBhZ2VzKSwgZS5nLiAwID09IDEgcGFnZSwgIDEgPSAyIHBhZ2VzLCAyID09 IDQgcGFnZXMsCj4gICAgICBldGMuCgouLiBmb3IgdGhlICoqZGF0YSByaW5ncyoqIChub3QgdG8g YmUgY29uZnVzZWQgd2l0aCB0aGUgY29tbWFuZCByaW5nKS4KCj4gCj4gZnVuY3Rpb24tY2FsbHMK PiAgICAgIFZhbHVlczogICAgICAgICA8dWludDMyX3Q+Cj4gCj4gICAgICBWYWx1ZSAiMCIgbWVh bnMgdGhhdCBubyBjYWxscyBhcmUgc3VwcG9ydGVkLgo+ICAgICAgVmFsdWUgIjEiIG1lYW5zIHRo YXQgc29ja2V0LCBjb25uZWN0LCByZWxlYXNlLCBiaW5kLCBsaXN0ZW4sIGFjY2VwdAo+ICAgICAg YW5kIHBvbGwgYXJlIHN1cHBvcnRlZC4KPiAKLi5zbmlwLi4KPiAjIyMgQ29tbWFuZHMgUmluZwo+ IAo+IFRoZSBzaGFyZWQgcmluZyBpcyB1c2VkIGJ5IHRoZSBmcm9udGVuZCB0byBmb3J3YXJkIFBP U0lYIGZ1bmN0aW9uIGNhbGxzCj4gdG8gdGhlIGJhY2tlbmQuIFdlIHNoYWxsIHJlZmVyIHRvIHRo aXMgcmluZyBhcyAqKmNvbW1hbmRzIHJpbmcqKiB0bwo+IGRpc3Rpbmd1aXNoIGl0IGZyb20gb3Ro ZXIgcmluZ3Mgd2hpY2ggY2FuIGJlIGNyZWF0ZWQgbGF0ZXIgaW4gdGhlCj4gbGlmZWN5Y2xlIG9m IHRoZSBwcm90b2NvbCAoc2VlIFtJbmRleGVzIFBhZ2UgYW5kIERhdGEgcmluZ10pLiBUaGUgZ3Jh bnQKPiByZWZlcmVuY2UgZm9yIHNoYXJlZCBwYWdlIGZvciB0aGlzIHJpbmcgaXMgc2hhcmVkIG9u IHhlbnN0b3JlIChzZWUKPiBbRnJvbnRlbmQgWGVuQnVzIE5vZGVzXSkuIFRoZSByaW5nIGZvcm1h dCBpcyBkZWZpbmVkIHVzaW5nIHRoZSBmYW1pbGlhcgo+IGBERUZJTkVfUklOR19UWVBFU2AgbWFj cm8gKGB4ZW4vaW5jbHVkZS9wdWJsaWMvaW8vcmluZy5oYCkuICBGcm9udGVuZAo+IHJlcXVlc3Rz IGFyZSBhbGxvY2F0ZWQgb24gdGhlIHJpbmcgdXNpbmcgdGhlIGBSSU5HX0dFVF9SRVFVRVNUYCBt YWNyby4KPiBUaGUgbGlzdCBvZiBjb21tYW5kcyBiZWxvdyBpcyBpbiBjYWxsaW5nIG9yZGVyLgo+ IAo+IFRoZSBmb3JtYXQgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgo+ICAgICAKPiAgICAgI2RlZmlu ZSBQVkNBTExTX1NPQ0tFVCAgICAgICAgIDAKPiAgICAgI2RlZmluZSBQVkNBTExTX0NPTk5FQ1Qg ICAgICAgIDEKPiAgICAgI2RlZmluZSBQVkNBTExTX1JFTEVBU0UgICAgICAgIDIKPiAgICAgI2Rl ZmluZSBQVkNBTExTX0JJTkQgICAgICAgICAgIDMKPiAgICAgI2RlZmluZSBQVkNBTExTX0xJU1RF TiAgICAgICAgIDQKPiAgICAgI2RlZmluZSBQVkNBTExTX0FDQ0VQVCAgICAgICAgIDUKPiAgICAg I2RlZmluZSBQVkNBTExTX1BPTEwgICAgICAgICAgIDYKPiAKPiAgICAgc3RydWN0IHhlbl9wdmNh bGxzX3JlcXVlc3Qgewo+ICAgICAJdWludDMyX3QgcmVxX2lkOyAvKiBwcml2YXRlIHRvIGd1ZXN0 LCBlY2hvZWQgaW4gcmVzcG9uc2UgKi8KPiAgICAgCXVpbnQzMl90IGNtZDsgICAgLyogY29tbWFu ZCB0byBleGVjdXRlICovCj4gICAgIAl1bmlvbiB7Cj4gICAgIAkJc3RydWN0IHhlbl9wdmNhbGxz X3NvY2tldCB7Cj4gICAgIAkJCXVpbnQ2NF90IGlkOwo+ICAgICAJCQl1aW50MzJfdCBkb21haW47 Cj4gICAgIAkJCXVpbnQzMl90IHR5cGU7Cj4gICAgIAkJCXVpbnQzMl90IHByb3RvY29sOwo+ICAg ICAgICAgICAgICAgICAjaWZkZWYgQ09ORklHX1g4Nl8zMgo+ICAgICAgICAgICAgICAgICB1aW50 OF90IHBhZFs0XTsKCkNvdWxkIHRoYXQgYmUgc2hpZnRlZCB0byB0aGUgcmlnaHQ/Cj4gICAgICAg ICAgICAgICAgICNlbmRpZgo+ICAgICAJCX0gc29ja2V0Owo+ICAgICAJCXN0cnVjdCB4ZW5fcHZj YWxsc19jb25uZWN0IHsKPiAgICAgCQkJdWludDY0X3QgaWQ7Cj4gICAgIAkJCXVpbnQ4X3QgYWRk clsyOF07Cj4gICAgIAkJCXVpbnQzMl90IGxlbjsKPiAgICAgCQkJdWludDMyX3QgZmxhZ3M7Cj4g ICAgIAkJCWdyYW50X3JlZl90IHJlZjsKPiAgICAgCQkJdWludDMyX3QgZXZ0Y2huOwo+ICAgICAg ICAgICAgICAgICAjaWZkZWYgQ09ORklHX1g4Nl8zMgo+ICAgICAgICAgICAgICAgICB1aW50OF90 IHBhZFs0XTsKPiAgICAgICAgICAgICAgICAgI2VuZGlmCj4gICAgIAkJfSBjb25uZWN0Owo+ICAg ICAJCXN0cnVjdCB4ZW5fcHZjYWxsc19yZWxlYXNlIHsKPiAgICAgCQkJdWludDY0X3QgaWQ7Cj4g ICAgIAkJCXVpbnQ4X3QgcmV1c2U7Cj4gICAgICAgICAgICAgICAgICNpZmRlZiBDT05GSUdfWDg2 XzMyCj4gICAgICAgICAgICAgICAgIHVpbnQ4X3QgcGFkWzddOwoKQ291bGQgdGhhdCBiZSBzaGlm dGVkIHRvIHRoZSByaWdodD8KPiAgICAgICAgICAgICAgICAgI2VuZGlmCj4gICAgIAkJfSByZWxl YXNlOwo+ICAgICAJCXN0cnVjdCB4ZW5fcHZjYWxsc19iaW5kIHsKPiAgICAgCQkJdWludDY0X3Qg aWQ7Cj4gICAgIAkJCXVpbnQ4X3QgYWRkclsyOF07Cj4gICAgIAkJCXVpbnQzMl90IGxlbjsKPiAg ICAgCQl9IGJpbmQ7Cj4gICAgIAkJc3RydWN0IHhlbl9wdmNhbGxzX2xpc3RlbiB7Cj4gICAgIAkJ CXVpbnQ2NF90IGlkOwo+ICAgICAJCQl1aW50MzJfdCBiYWNrbG9nOwo+ICAgICAgICAgICAgICAg ICAjaWZkZWYgQ09ORklHX1g4Nl8zMgo+ICAgICAgICAgICAgICAgICB1aW50OF90IHBhZFs0XTsK CkNvdWxkIHRoYXQgYmUgc2hpZnRlZCB0byB0aGUgcmlnaHQ/Cj4gICAgICAgICAgICAgICAgICNl bmRpZgo+ICAgICAJCX0gbGlzdGVuOwo+ICAgICAJCXN0cnVjdCB4ZW5fcHZjYWxsc19hY2NlcHQg ewo+ICAgICAJCQl1aW50NjRfdCBpZDsKPiAgICAgCQkJdWludDY0X3QgaWRfbmV3Owo+ICAgICAJ CQlncmFudF9yZWZfdCByZWY7Cj4gICAgIAkJCXVpbnQzMl90IGV2dGNobjsKPiAgICAgCQl9IGFj Y2VwdDsKPiAgICAgCQlzdHJ1Y3QgeGVuX3B2Y2FsbHNfcG9sbCB7Cj4gICAgIAkJCXVpbnQ2NF90 IGlkOwo+ICAgICAJCX0gcG9sbDsKPiAgICAgCQkvKiBkdW1teSBtZW1iZXIgdG8gZm9yY2Ugc2l6 ZW9mKHN0cnVjdCB4ZW5fcHZjYWxsc19yZXF1ZXN0KSB0byBtYXRjaCBhY3Jvc3MgYXJjaHMgKi8K PiAgICAgCQlzdHJ1Y3QgeGVuX3B2Y2FsbHNfZHVtbXkgewo+ICAgICAJCQl1aW50OF90IGR1bW15 WzU2XTsKPiAgICAgCQl9IGR1bW15Owo+ICAgICAJfSB1Owo+ICAgICB9Owo+IAo+IFRoZSBmaXJz dCB0d28gZmllbGRzIGFyZSBjb21tb24gZm9yIGV2ZXJ5IGNvbW1hbmQuIFRoZWlyIGJpbmFyeSBs YXlvdXQKPiBpczoKPiAKPiAgICAgMCAgICAgICA0ICAgICAgIDgKPiAgICAgKy0tLS0tLS0rLS0t LS0tLSsKPiAgICAgfHJlcV9pZCB8ICBjbWQgIHwKPiAgICAgKy0tLS0tLS0rLS0tLS0tLSsKPiAK PiAtICoqcmVxX2lkKiogaXMgZ2VuZXJhdGVkIGJ5IHRoZSBmcm9udGVuZCBhbmQgaXMgYSBjb29r aWUgdXNlZCB0bwo+ICAgaWRlbnRpZnkgb25lIHNwZWNpZmljIHJlcXVlc3QvcmVzcG9uc2UgcGFp ciBvZiBjb21tYW5kcy4gTm90IHRvIGJlCj4gICBjb25mdXNlZCB3aXRoIGFueSBjb21tYW5kICoq aWQqKiB3aGljaCBhcmUgdXNlZCB0byBpZGVudGlmeSBhIHNvY2tldAo+ICAgYWNyb3NzIG11bHRp cGxlIGNvbW1hbmRzLCBzZWUgW1NvY2tldF0uCj4gLSAqKmNtZCoqIGlzIHRoZSBjb21tYW5kIHJl cXVlc3RlZCBieSB0aGUgZnJvbnRlbmQ6Cj4gCj4gICAgIC0gYFBWQ0FMTFNfU09DS0VUYDogIDAK PiAgICAgLSBgUFZDQUxMU19DT05ORUNUYDogMQo+ICAgICAtIGBQVkNBTExTX1JFTEVBU0VgOiAy Cj4gICAgIC0gYFBWQ0FMTFNfQklORGA6ICAgIDMKPiAgICAgLSBgUFZDQUxMU19MSVNURU5gOiAg NAo+ICAgICAtIGBQVkNBTExTX0FDQ0VQVGA6ICA1Cj4gICAgIC0gYFBWQ0FMTFNfUE9MTGA6ICAg IDYKPiAKPiBCb3RoIGZpZWxkcyBhcmUgZWNob2VkIGJhY2sgYnkgdGhlIGJhY2tlbmQuIFNlZSBb U29ja2V0IGZhbWlsaWVzIGFuZAo+IGFkZHJlc3MgZm9ybWF0XSBmb3IgdGhlIGZvcm1hdCBvZiB0 aGUgKiphZGRyKiogZmllbGQgb2YgY29ubmVjdCBhbmQKPiBiaW5kLiBUaGUgbWF4aW11bSBzaXpl IG9mIGNvbW1hbmQgc3BlY2lmaWMgYXJndW1lbnRzIGlzIDU2IGJ5dGVzLiBBbnkKPiBmdXR1cmUg Y29tbWFuZCB0aGF0IHJlcXVpcmVzIG1vcmUgdGhhbiB0aGF0IHdpbGwgbmVlZCBhIGJ1bXAgdGhl Cj4gKip2ZXJzaW9uKiogb2YgdGhlIHByb3RvY29sLgo+IAo+IFNpbWlsYXJseSB0byBvdGhlciBY ZW4gcmluZyBiYXNlZCBwcm90b2NvbHMsIGFmdGVyIHdyaXRpbmcgYSByZXF1ZXN0IHRvCj4gdGhl IHJpbmcsIHRoZSBmcm9udGVuZCBjYWxscyBgUklOR19QVVNIX1JFUVVFU1RTX0FORF9DSEVDS19O T1RJRllgIGFuZAo+IGlzc3VlcyBhbiBldmVudCBjaGFubmVsIG5vdGlmaWNhdGlvbiB3aGVuIGEg bm90aWZpY2F0aW9uIGlzIHJlcXVpcmVkLgo+IAo+IEJhY2tlbmQgcmVzcG9uc2VzIGFyZSBhbGxv Y2F0ZWQgb24gdGhlIHJpbmcgdXNpbmcgdGhlIGBSSU5HX0dFVF9SRVNQT05TRWAgbWFjcm8uCj4g VGhlIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgo+IAo+ICAgICBzdHJ1Y3QgeGVuX3B2Y2FsbHNf cmVzcG9uc2Ugewo+ICAgICAgICAgdWludDMyX3QgcmVxX2lkOwo+ICAgICAgICAgdWludDMyX3Qg Y21kOwo+ICAgICAgICAgaW50MzJfdCByZXQ7Cj4gICAgICAgICB1aW50MzJfdCBwYWQ7Cj4gICAg ICAgICB1bmlvbiB7Cj4gICAgIAkJc3RydWN0IF94ZW5fcHZjYWxsc19zb2NrZXQgewo+ICAgICAJ CQl1aW50NjRfdCBpZDsKPiAgICAgCQl9IHNvY2tldDsKPiAgICAgCQlzdHJ1Y3QgX3hlbl9wdmNh bGxzX2Nvbm5lY3Qgewo+ICAgICAJCQl1aW50NjRfdCBpZDsKPiAgICAgCQl9IGNvbm5lY3Q7Cj4g ICAgIAkJc3RydWN0IF94ZW5fcHZjYWxsc19yZWxlYXNlIHsKPiAgICAgCQkJdWludDY0X3QgaWQ7 Cj4gICAgIAkJfSByZWxlYXNlOwo+ICAgICAJCXN0cnVjdCBfeGVuX3B2Y2FsbHNfYmluZCB7Cj4g ICAgIAkJCXVpbnQ2NF90IGlkOwo+ICAgICAJCX0gYmluZDsKPiAgICAgCQlzdHJ1Y3QgX3hlbl9w dmNhbGxzX2xpc3RlbiB7Cj4gICAgIAkJCXVpbnQ2NF90IGlkOwo+ICAgICAJCX0gbGlzdGVuOwo+ ICAgICAJCXN0cnVjdCBfeGVuX3B2Y2FsbHNfYWNjZXB0IHsKPiAgICAgCQkJdWludDY0X3QgaWQ7 Cj4gICAgIAkJfSBhY2NlcHQ7Cj4gICAgIAkJc3RydWN0IF94ZW5fcHZjYWxsc19wb2xsIHsKPiAg ICAgCQkJdWludDY0X3QgaWQ7Cj4gICAgIAkJfSBwb2xsOwo+ICAgICAJCXN0cnVjdCBfeGVuX3B2 Y2FsbHNfZHVtbXkgewo+ICAgICAJCQl1aW50OF90IGR1bW15WzhdOwo+ICAgICAJCX0gZHVtbXk7 Cj4gICAgIAl9IHU7Cj4gICAgIH07Cj4gCj4gVGhlIGZpcnN0IGZvdXIgZmllbGRzIGFyZSBjb21t b24gZm9yIGV2ZXJ5IHJlc3BvbnNlLiBUaGVpciBiaW5hcnkgbGF5b3V0Cj4gaXM6Cj4gCj4gICAg IDAgICAgICAgNCAgICAgICA4ICAgICAgIDEyICAgICAgMTYKPiAgICAgKy0tLS0tLS0rLS0tLS0t LSstLS0tLS0tKy0tLS0tLS0rCj4gICAgIHxyZXFfaWQgfCAgY21kICB8ICByZXQgIHwgIHBhZCAg fAo+ICAgICArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKPiAKPiAtICoqcmVxX2lk Kio6IGVjaG9lZCBiYWNrIGZyb20gcmVxdWVzdAo+IC0gKipjbWQqKjogZWNob2VkIGJhY2sgZnJv bSByZXF1ZXN0Cj4gLSAqKnJldCoqOiByZXR1cm4gdmFsdWUsIGlkZW50aWZpZXMgc3VjY2VzcyAo MCkgb3IgZmFpbHVyZSAoc2VlIFtFcnJvcgo+ICAgbnVtYmVyc10gaW4gZnVydGhlciBzZWN0aW9u cykuIElmIHRoZSAqKmNtZCoqIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlCj4gICBiYWNrZW5kLCBy ZXQgaXMgRU5PVFNVUC4KPiAtICoqcGFkKio6IHBhZGRpbmcKPiAKPiBBZnRlciBjYWxsaW5nIGBS SU5HX1BVU0hfUkVTUE9OU0VTX0FORF9DSEVDS19OT1RJRllgLCB0aGUgYmFja2VuZCBjaGVja3Mg d2hldGhlcgo+IGl0IG5lZWRzIHRvIG5vdGlmeSB0aGUgZnJvbnRlbmQgYW5kIGRvZXMgc28gdmlh IGV2ZW50IGNoYW5uZWwuCj4gCj4gQSBkZXNjcmlwdGlvbiBvZiBlYWNoIGNvbW1hbmQsIHRoZWly IGFkZGl0aW9uYWwgcmVxdWVzdCBhbmQgcmVzcG9uc2UKPiBmaWVsZHMgZm9sbG93Lgo+IAo+IAo+ ICMjIyMgU29ja2V0Cj4gCj4gVGhlICoqc29ja2V0Kiogb3BlcmF0aW9uIGNvcnJlc3BvbmRzIHRv IHRoZSBQT1NJWCBbc29ja2V0XVtzb2NrZXRdCj4gZnVuY3Rpb24uIEl0IGNyZWF0ZXMgYSBuZXcg c29ja2V0IG9mIHRoZSBzcGVjaWZpZWQgZmFtaWx5LCB0eXBlIGFuZAo+IHByb3RvY29sLiAqKmlk KiogaXMgZnJlZWx5IGNob3NlbiBieSB0aGUgZnJvbnRlbmQgYW5kIHJlZmVyZW5jZXMgdGhpcwo+ IHNwZWNpZmljIHNvY2tldCBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZC4gU2VlIFtTb2NrZXQgZmFt aWxpZXMgYW5kCj4gYWRkcmVzcyBmb3JtYXRdLgoKLi4gdG8gc2VlIHdoaWNoIG9uZXMgYXJlIHN1 cHBvcnRlZCBieSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlCnByb3RvY29sLgoKPiAKPiBSZXF1 ZXN0IGZpZWxkczoKPiAKPiAtICoqY21kKiogdmFsdWU6IDAKPiAtIGFkZGl0aW9uYWwgZmllbGRz Ogo+ICAgLSAqKmlkKio6IGdlbmVyYXRlZCBieSB0aGUgZnJvbnRlbmQsIGl0IGlkZW50aWZpZXMg dGhlIG5ldyBzb2NrZXQKPiAgIC0gKipkb21haW4qKjogdGhlIGNvbW11bmljYXRpb24gZG9tYWlu Cj4gICAtICoqdHlwZSoqOiB0aGUgc29ja2V0IHR5cGUKPiAgIC0gKipwcm90b2NvbCoqOiB0aGUg cGFydGljdWxhciBwcm90b2NvbCB0byBiZSB1c2VkIHdpdGggdGhlIHNvY2tldCwgdXN1YWxseSAw Cj4gCj4gUmVxdWVzdCBiaW5hcnkgbGF5b3V0Ogo+IAo+ICAgICA4ICAgICAgIDEyICAgICAgMTYg ICAgICAyMCAgICAgMjQgICAgICAgMjgKPiAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0t LS0tLS0rLS0tLS0tLSsKPiAgICAgfCAgICAgICBpZCAgICAgIHxkb21haW4gfCB0eXBlICB8cHJv dG9jb3wKPiAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKPiAK PiBSZXNwb25zZSBhZGRpdGlvbmFsIGZpZWxkczoKPiAKPiAtICoqaWQqKjogZWNob2VkIGJhY2sg ZnJvbSByZXF1ZXN0Cj4gCj4gUmVzcG9uc2UgYmluYXJ5IGxheW91dDoKPiAKPiAgICAgMTYgICAg ICAgMjAgICAgICAgMjQKPiAgICAgKy0tLS0tLS0rLS0tLS0tLS0rCj4gICAgIHwgICAgICAgaWQg ICAgICAgfAo+ICAgICArLS0tLS0tLSstLS0tLS0tLSsKPiAKPiBSZXR1cm4gdmFsdWU6Cj4gCj4g ICAtIDAgb24gc3VjY2Vzcwo+ICAgLSBTZWUgdGhlIFtQT1NJWCBzb2NrZXQgZnVuY3Rpb25dW2Nv bm5lY3RdIGZvciBlcnJvciBuYW1lczsgc2VlCj4gICAgIFtFcnJvciBudW1iZXJzXSBpbiBmdXJ0 aGVyIHNlY3Rpb25zLgo+IAo+ICMjIyMgQ29ubmVjdAo+IAo+IFRoZSAqKmNvbm5lY3QqKiBvcGVy YXRpb24gY29ycmVzcG9uZHMgdG8gdGhlIFBPU0lYIFtjb25uZWN0XVtjb25uZWN0XQo+IGZ1bmN0 aW9uLiBJdCBjb25uZWN0cyBhIHByZXZpb3VzbHkgY3JlYXRlZCBzb2NrZXQgKGlkZW50aWZpZWQg YnkgKippZCoqKQo+IHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcy4KPiAKPiBUaGUgY29ubmVjdCBv cGVyYXRpb24gY3JlYXRlcyBhIG5ldyBzaGFyZWQgcmluZywgd2hpY2ggd2UnbGwgY2FsbCAqKmRh dGEKPiByaW5nKiouIFRoZSBkYXRhIHJpbmcgaXMgdXNlZCB0byBzZW5kIGFuZCByZWNlaXZlIGRh dGEgZnJvbSB0aGUKPiBzb2NrZXQuIFRoZSBjb25uZWN0IG9wZXJhdGlvbiBwYXNzZXMgdHdvIGFk ZGl0aW9uYWwgcGFyYW1ldGVyczoKPiAqKmV2dGNobioqIGFuZCAqKnJlZioqLiAqKmV2dGNobioq IGlzIHRoZSBwb3J0IG51bWJlciBvZiBhIG5ldyBldmVudAo+IGNoYW5uZWwgd2hpY2ggd2lsbCBi ZSB1c2VkIGZvciBub3RpZmljYXRpb25zIG9mIGFjdGl2aXR5IG9uIHRoZSBkYXRhCj4gcmluZy4g KipyZWYqKiBpcyB0aGUgZ3JhbnQgcmVmZXJlbmNlIG9mIHRoZSAqKmluZGV4ZXMgcGFnZSoqOiBh IHBhZ2UKPiB3aGljaCBjb250YWlucyBzaGFyZWQgaW5kZXhlcyB0aGF0IHBvaW50IHRvIHRoZSB3 cml0ZSBhbmQgcmVhZCBsb2NhdGlvbnMKPiBpbiB0aGUgZGF0YSByaW5nLiBUaGUgKippbmRleGVz IHBhZ2UqKiBhbHNvIGNvbnRhaW5zIHRoZSBmdWxsIGFycmF5IG9mCgpzL2RhdGEgcmluZy8qKmRh dGEgcmluZyoqLyAKCj4gZ3JhbnQgcmVmZXJlbmNlcyBmb3IgdGhlIGRhdGEgcmluZy4gV2hlbiB0 aGUgZnJvbnRlbmQgaXNzdWVzIGEKPiAqKmNvbm5lY3QqKiBjb21tYW5kLCB0aGUgYmFja2VuZDoK PiAKPiAtIGZpbmRzIGl0cyBvd24gaW50ZXJuYWwgc29ja2V0IGNvcnJlc3BvbmRpbmcgdG8gKipp ZCoqCj4gLSBjb25uZWN0cyB0aGUgc29ja2V0IHRvICoqYWRkcioqCj4gLSBtYXBzIHRoZSBncmFu dCByZWZlcmVuY2UgKipyZWYqKiwgdGhlIGluZGV4ZXMgcGFnZSwgc2VlIHN0cnVjdAo+ICAgcHZj YWxsc19kYXRhX2ludGYKPiAtIG1hcHMgYWxsIHRoZSBncmFudCByZWZlcmVuY2VzIGxpc3RlZCBp biBgc3RydWN0IHB2Y2FsbHNfZGF0YV9pbnRmYCBhbmQKPiAgIHVzZXMgdGhlbSBhcyBzaGFyZWQg bWVtb3J5IGZvciB0aGUgZGF0YSByaW5nCgpzL2RhdGEgcmluZy8qKmRhdGEgcmluZyoqLyBwZXJo YXBzPwoKPiAtIGJpbmQgdGhlICoqZXZ0Y2huKioKPiAtIHJlcGxpZXMgdG8gdGhlIGZyb250ZW5k Cj4gCj4gVGhlIFtJbmRleGVzIFBhZ2UgYW5kIERhdGEgcmluZ10gZm9ybWF0IHdpbGwgYmUgZGVz Y3JpYmVkIGluIHRoZQo+IGZvbGxvd2luZyBzZWN0aW9uLiBUaGUgZGF0YSByaW5nIGlzIHVubWFw cGVkIGFuZCBmcmVlZCB1cG9uIGlzc3VpbmcgYQo+ICoqcmVsZWFzZSoqIGNvbW1hbmQgb24gdGhl IGFjdGl2ZSBzb2NrZXQgaWRlbnRpZmllZCBieSAqKmlkKiouIEEKPiBmcm9udGVuZCBzdGFnZSBj aGFuZ2UgY2FuIGFsc28gY2F1c2UgZGF0YSByaW5ncyB0byBiZSB1bm1hcHBlZC4KCnMvc3RhZ2Uv c3RhdGUvCj4gCj4gUmVxdWVzdCBmaWVsZHM6Cj4gCj4gLSAqKmNtZCoqIHZhbHVlOiAwCj4gLSBh ZGRpdGlvbmFsIGZpZWxkczoKPiAgIC0gKippZCoqOiBpZGVudGlmaWVzIHRoZSBzb2NrZXQKPiAg IC0gKiphZGRyKio6IGFkZHJlc3MgdG8gY29ubmVjdCB0bywgc2VlIFtTb2NrZXQgZmFtaWxpZXMg YW5kIGFkZHJlc3MgZm9ybWF0XQoKCkhtLCBzbyB3aGF0IGRvIHdlIGRvIGlmIHdlIHdhbnQgdG8g c3VwcG9ydCBBRl9VTklYIHdoaWNoIGhhcyBhbiBhZGRyIG9mCjEwOCBieXRlcz8KCj4gICAtICoq bGVuKio6IGFkZHJlc3MgbGVuZ3RoCgp1cCB0byAyOCBvY3RldHMuCgo+ICAgLSAqKmZsYWdzKio6 IGZsYWdzIGZvciB0aGUgY29ubmVjdGlvbiwgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2FnZQo+ICAg LSAqKnJlZioqOiBncmFudCByZWZlcmVuY2Ugb2YgdGhlIGluZGV4ZXMgcGFnZQo+ICAgLSAqKmV2 dGNobioqOiBwb3J0IG51bWJlciBvZiB0aGUgZXZ0Y2huIHRvIHNpZ25hbCBhY3Rpdml0eSBvbiB0 aGUgZGF0YSByaW5nCj4gCj4gUmVxdWVzdCBiaW5hcnkgbGF5b3V0Ogo+IAo+ICAgICA4ICAgICAg IDEyICAgICAgMTYgICAgICAyMCAgICAgIDI0ICAgICAgMjggICAgICAzMiAgICAgIDM2ICAgICAg NDAgICAgICA0NAo+ICAgICArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0t Ky0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4gICAgIHwgICAgICAgaWQgICAgICB8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgICAgICAgICAgICAgICAgICAgICAgIHwK PiAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0t LS0tLS0rLS0tLS0tLSstLS0tLS0tKwo+ICAgICB8IGxlbiAgIHwgZmxhZ3MgfCAgcmVmICB8ZXZ0 Y2huIHwKPiAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4gCj4gUmVzcG9u c2UgYWRkaXRpb25hbCBmaWVsZHM6Cj4gCj4gLSAqKmlkKio6IGVjaG9lZCBiYWNrIGZyb20gcmVx dWVzdAo+IAo+IFJlc3BvbnNlIGJpbmFyeSBsYXlvdXQ6Cj4gCj4gICAgIDE2ICAgICAgMjAgICAg ICAyNAo+ICAgICArLS0tLS0tLSstLS0tLS0tKwo+ICAgICB8ICAgICAgIGlkICAgICAgfAo+ICAg ICArLS0tLS0tLSstLS0tLS0tKwo+IAo+IFJldHVybiB2YWx1ZToKPiAKPiAgIC0gMCBvbiBzdWNj ZXNzCj4gICAtIFNlZSB0aGUgW1BPU0lYIGNvbm5lY3QgZnVuY3Rpb25dW2Nvbm5lY3RdIGZvciBl cnJvciBuYW1lczsgc2VlCj4gICAgIFtFcnJvciBudW1iZXJzXSBpbiBmdXJ0aGVyIHNlY3Rpb25z Lgo+IAo+ICMjIyMgUmVsZWFzZQo+IAo+IFRoZSAqKnJlbGVhc2UqKiBvcGVyYXRpb24gY2xvc2Vz IGFuIGV4aXN0aW5nIGFjdGl2ZSBvciBhIHBhc3NpdmUgc29ja2V0Lgo+IAo+IFdoZW4gYSByZWxl YXNlIGNvbW1hbmQgaXMgaXNzdWVkIG9uIGEgcGFzc2l2ZSBzb2NrZXQsIHRoZSBiYWNrZW5kCj4g cmVsZWFzZXMgaXQgYW5kIGZyZWVzIGl0cyBpbnRlcm5hbCBtYXBwaW5ncy4gV2hlbiBhIHJlbGVh c2UgY29tbWFuZCBpcwo+IGlzc3VlZCBmb3IgYW4gYWN0aXZlIHNvY2tldCwgdGhlIGRhdGEgcmlu ZyBhbmQgaW5kZXhlcyBwYWdlIGFyZSBhbHNvCj4gdW5tYXBwZWQgYW5kIGZyZWVkOgo+IAo+IC0g ZnJvbnRlbmQgc2VuZHMgcmVsZWFzZSBjb21tYW5kIGZvciBhbiBhY3RpdmUgc29ja2V0Cj4gLSBi YWNrZW5kIHJlbGVhc2VzIHRoZSBzb2NrZXQKPiAtIGJhY2tlbmQgdW5tYXBzIHRoZSBkYXRhIHJp bmcKPiAtIGJhY2tlbmQgdW5tYXBzIHRoZSBpbmRleGVzIHBhZ2UKPiAtIGJhY2tlbmQgdW5iaW5k cyB0aGUgZXZlbnQgY2hhbm5lbAo+IC0gYmFja2VuZCByZXBsaWVzIHRvIGZyb250ZW5kIHdpdGgg YW4gKipyZXQqKiB2YWx1ZQo+IC0gZnJvbnRlbmQgZnJlZXMgZGF0YSByaW5nLCBpbmRleGVzIHBh Z2UgYW5kIHVuYmluZHMgZXZlbnQgY2hhbm5lbAo+IAo+IFJlcXVlc3QgZmllbGRzOgo+IAo+IC0g KipjbWQqKiB2YWx1ZTogMQo+IC0gYWRkaXRpb25hbCBmaWVsZHM6Cj4gICAtICoqaWQqKjogaWRl bnRpZmllcyB0aGUgc29ja2V0Cj4gICAtICoqcmV1c2UqKjogYW4gb3B0aW1pemF0aW9uIGhpbnQg Zm9yIHRoZSBiYWNrZW5kLiBUaGUgZmllbGQgaXMKPiAgICAgaWdub3JlZCBmb3IgcGFzc2l2ZSBz b2NrZXRzLiBXaGVuIHNldCB0byAxLCB0aGUgZnJvbnRlbmQgbGV0cyB0aGUKPiAgICAgYmFja2Vu ZCBrbm93IHRoYXQgaXQgd2lsbCByZXVzZSBleGFjdGx5IHRoZSBzYW1lIHNldCBvZiBncmFudCBw YWdlcwo+ICAgICAoaW5kZXhlcyBwYWdlIGFuZCBkYXRhIHJpbmcpIGFuZCBldmVudCBjaGFubmVs IHdoZW4gY3JlYXRpbmcgb25lIG9mCj4gICAgIHRoZSBuZXh0IGFjdGl2ZSBzb2NrZXRzLiBUaGUg YmFja2VuZCBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgaXQgYnkKPiAgICAgZGVsYXlpbmcgdW5tYXBw aW5nIGdyYW50cyBhbmQgdW5iaW5kaW5nIHRoZSBldmVudCBjaGFubmVsLiBUaGUKPiAgICAgYmFj a2VuZCBpcyBmcmVlIHRvIGlnbm9yZSB0aGUgaGludC4gUmV1c2VkIGRhdGEgcmluZ3MgYXJlIGZv dW5kIGJ5Cj4gICAgICoqcmVmKiosIHRoZSBncmFudCByZWZlcmVuY2Ugb2YgdGhlIHBhZ2UgY29u dGFpbmluZyB0aGUgaW5kZXhlcy4KPiAKPiBSZXF1ZXN0IGJpbmFyeSBsYXlvdXQ6Cj4gCj4gICAg IDggICAgICAgMTIgICAgICAxNiAgICAxNwo+ICAgICArLS0tLS0tLSstLS0tLS0tKy0tLS0tKwo+ ICAgICB8ICAgICAgIGlkICAgICAgfHJldXNlfAo+ICAgICArLS0tLS0tLSstLS0tLS0tKy0tLS0t Kwo+IAo+IFJlc3BvbnNlIGFkZGl0aW9uYWwgZmllbGRzOgo+IAo+IC0gKippZCoqOiBlY2hvZWQg YmFjayBmcm9tIHJlcXVlc3QKPiAKPiBSZXNwb25zZSBiaW5hcnkgbGF5b3V0Ogo+IAo+ICAgICAx NiAgICAgIDIwICAgICAgMjQKPiAgICAgKy0tLS0tLS0rLS0tLS0tLSsKPiAgICAgfCAgICAgICBp ZCAgICAgIHwKPiAgICAgKy0tLS0tLS0rLS0tLS0tLSsKPiAKPiBSZXR1cm4gdmFsdWU6Cj4gCj4g ICAtIDAgb24gc3VjY2Vzcwo+ICAgLSBTZWUgdGhlIFtQT1NJWCBzaHV0ZG93biBmdW5jdGlvbl1b c2h1dGRvd25dIGZvciBlcnJvciBuYW1lczsgc2VlCj4gICAgIFtFcnJvciBudW1iZXJzXSBpbiBm dXJ0aGVyIHNlY3Rpb25zLgo+IAo+ICMjIyMgQmluZAo+IAo+IFRoZSAqKmJpbmQqKiBvcGVyYXRp b24gY29ycmVzcG9uZHMgdG8gdGhlIFBPU0lYIFtiaW5kXVtiaW5kXSBmdW5jdGlvbi4KPiBJdCBh c3NpZ25zIHRoZSBhZGRyZXNzIHBhc3NlZCBhcyBwYXJhbWV0ZXIgdG8gYSBwcmV2aW91c2x5IGNy ZWF0ZWQKPiBzb2NrZXQsIGlkZW50aWZpZWQgYnkgKippZCoqLiAqKkJpbmQqKiwgKipsaXN0ZW4q KiBhbmQgKiphY2NlcHQqKiBhcmUKPiB0aGUgdGhyZWUgb3BlcmF0aW9ucyByZXF1aXJlZCB0byBo YXZlIGZ1bGx5IHdvcmtpbmcgcGFzc2l2ZSBzb2NrZXRzIGFuZAo+IHNob3VsZCBiZSBpc3N1ZWQg aW4gdGhhdCBvcmRlci4KPiAKPiBSZXF1ZXN0IGZpZWxkczoKPiAKPiAtICoqY21kKiogdmFsdWU6 IDIKPiAtIGFkZGl0aW9uYWwgZmllbGRzOgo+ICAgLSAqKmlkKio6IGlkZW50aWZpZXMgdGhlIHNv Y2tldAo+ICAgLSAqKmFkZHIqKjogYWRkcmVzcyB0byBjb25uZWN0IHRvLCBzZWUgW1NvY2tldCBm YW1pbGllcyBhbmQgYWRkcmVzcwo+ICAgICBmb3JtYXRdCj4gICAtICoqbGVuKio6IGFkZHJlc3Mg bGVuZ3RoCgouLiB1cCB0byAyOCBvY3RldHMuCj4gCj4gUmVxdWVzdCBiaW5hcnkgbGF5b3V0Ogo+ IAo+ICAgICA4ICAgICAgIDEyICAgICAgMTYgICAgICAyMCAgICAgIDI0ICAgICAgMjggICAgICAz MiAgICAgIDM2ICAgICAgNDAgICAgICA0NAo+ICAgICArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0r LS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4gICAgIHwg ICAgICAgaWQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgICAgICAgICAg ICAgICAgICAgICAgIHwKPiAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0t LS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKwo+ICAgICB8ICBsZW4gIHwKPiAg ICAgKy0tLS0tLS0rCj4gCj4gUmVzcG9uc2UgYWRkaXRpb25hbCBmaWVsZHM6Cj4gCj4gLSAqKmlk Kio6IGVjaG9lZCBiYWNrIGZyb20gcmVxdWVzdAo+IAo+IFJlc3BvbnNlIGJpbmFyeSBsYXlvdXQ6 Cj4gCj4gICAgIDE2ICAgICAgMjAgICAgICAyNAo+ICAgICArLS0tLS0tLSstLS0tLS0tKwo+ICAg ICB8ICAgICAgIGlkICAgICAgfAo+ICAgICArLS0tLS0tLSstLS0tLS0tKwo+IAo+IFJldHVybiB2 YWx1ZToKPiAKPiAgIC0gMCBvbiBzdWNjZXNzCj4gICAtIFNlZSB0aGUgW1BPU0lYIGJpbmQgZnVu Y3Rpb25dW2JpbmRdIGZvciBlcnJvciBuYW1lczsgc2VlCj4gICAgIFtFcnJvciBudW1iZXJzXSBp biBmdXJ0aGVyIHNlY3Rpb25zLgo+IAo+IAouLnNuaXAuLgo+ICMjIyMgQWNjZXB0Cj4gCj4gVGhl ICoqYWNjZXB0Kiogb3BlcmF0aW9uIGV4dHJhY3RzIHRoZSBmaXJzdCBjb25uZWN0aW9uIHJlcXVl c3Qgb24gdGhlCj4gcXVldWUgb2YgcGVuZGluZyBjb25uZWN0aW9ucyBmb3IgdGhlIGxpc3Rlbmlu ZyBzb2NrZXQgaWRlbnRpZmllZCBieQo+ICoqaWQqKiBhbmQgY3JlYXRlcyBhIG5ldyBjb25uZWN0 ZWQgc29ja2V0LiBUaGUgaWQgb2YgdGhlIG5ldyBzb2NrZXQgaXMKPiBhbHNvIGNob3NlbiBieSB0 aGUgZnJvbnRlbmQgYW5kIHBhc3NlZCBhcyBhbiBhZGRpdGlvbmFsIGZpZWxkIG9mIHRoZQo+IGFj Y2VwdCByZXF1ZXN0IHN0cnVjdCAoKippZF9uZXcqKikuIFNlZSB0aGUgW1BPU0lYIGFjY2VwdCBm dW5jdGlvbl1bYWNjZXB0XQo+IGFzIHJlZmVyZW5jZS4KPiAKPiBTaW1pbGFybHkgdG8gdGhlICoq Y29ubmVjdCoqIG9wZXJhdGlvbiwgKiphY2NlcHQqKiBjcmVhdGVzIG5ldyBbSW5kZXhlcwo+IFBh Z2UgYW5kIERhdGEgcmluZ10uIFRoZSBkYXRhIHJpbmcgaXMgdXNlZCB0byBzZW5kIGFuZCByZWNl aXZlIGRhdGEgZnJvbQo+IHRoZSBzb2NrZXQuIFRoZSAqKmFjY2VwdCoqIG9wZXJhdGlvbiBwYXNz ZXMgdHdvIGFkZGl0aW9uYWwgcGFyYW1ldGVyczoKPiAqKmV2dGNobioqIGFuZCAqKnJlZioqLiAq KmV2dGNobioqIGlzIHRoZSBwb3J0IG51bWJlciBvZiBhIG5ldyBldmVudAo+IGNoYW5uZWwgd2hp Y2ggd2lsbCBiZSB1c2VkIGZvciBub3RpZmljYXRpb25zIG9mIGFjdGl2aXR5IG9uIHRoZSBkYXRh CgpzL2RhdGEvKipkYXRhLwo+IHJpbmcuICoqcmVmKiogaXMgdGhlIGdyYW50IHJlZmVyZW5jZSBv ZiB0aGUgKippbmRleGVzIHBhZ2UqKjogYSBwYWdlCgpzL3JpbmcvcmluZyoqLwoKPiB3aGljaCBj b250YWlucyBzaGFyZWQgaW5kZXhlcyB0aGF0IHBvaW50IHRvIHRoZSB3cml0ZSBhbmQgcmVhZCBs b2NhdGlvbnMKPiBpbiB0aGUgZGF0YSByaW5nLiBUaGUgKippbmRleGVzIHBhZ2UqKiBhbHNvIGNv bnRhaW5zIHRoZSBmdWxsIGFycmF5IG9mCgpQZXJoYXBzIGhpZ2hsaWdodCBkYXRhIHJpbmcgaGVy ZT8KCj4gZ3JhbnQgcmVmZXJlbmNlcyBmb3IgdGhlIGRhdGEgcmluZy4KPiAKPiBUaGUgYmFja2Vu ZCB3aWxsIHJlcGx5IHRvIHRoZSByZXF1ZXN0IG9ubHkgd2hlbiBhIG5ldyBjb25uZWN0aW9uIGlz Cj4gc3VjY2Vzc2Z1bGx5IGFjY2VwdGVkLCBpLmUuIHRoZSBiYWNrZW5kIGRvZXMgbm90IHJldHVy biBFQUdBSU4gb3IKPiBFV09VTERCTE9DSy4KPiAKPiBFeGFtcGxlIHdvcmtmbG93Ogo+IAo+IC0g ZnJvbnRlbmQgaXNzdWVzIGFuICoqYWNjZXB0KiogcmVxdWVzdAo+IC0gYmFja2VuZCB3YWl0cyBm b3IgYSBjb25uZWN0aW9uIHRvIGJlIGF2YWlsYWJsZSBvbiB0aGUgc29ja2V0Cj4gLSBhIG5ldyBj b25uZWN0aW9uIGJlY29tZXMgYXZhaWxhYmxlCj4gLSBiYWNrZW5kIGFjY2VwdHMgdGhlIG5ldyBj b25uZWN0aW9uCj4gLSBiYWNrZW5kIGNyZWF0ZXMgYW4gaW50ZXJuYWwgbWFwcGluZyBmcm9tICoq aWRfbmV3KiogdG8gdGhlIG5ldyBzb2NrZXQKPiAtIGJhY2tlbmQgbWFwcyB0aGUgZ3JhbnQgcmVm ZXJlbmNlICoqcmVmKiosIHRoZSBpbmRleGVzIHBhZ2UsIHNlZSBzdHJ1Y3QKPiAgIHB2Y2FsbHNf ZGF0YV9pbnRmCj4gLSBiYWNrZW5kIG1hcHMgYWxsIHRoZSBncmFudCByZWZlcmVuY2VzIGxpc3Rl ZCBpbiBgc3RydWN0Cj4gICBwdmNhbGxzX2RhdGFfaW50ZmAgYW5kIHVzZXMgdGhlbSBhcyBzaGFy ZWQgbWVtb3J5IGZvciB0aGUgbmV3IGRhdGEKPiAgIHJpbmcgKippbioqIGFuZCAqKm91dCoqIGFy cmF5cwo+IC0gYmFja2VuZCBiaW5kcyB0byB0aGUgKipldnRjaG4qKgo+IC0gYmFja2VuZCByZXBs aWVzIHRvIHRoZSBmcm9udGVuZCB3aXRoIGEgKipyZXQqKiB2YWx1ZQo+IAo+IFJlcXVlc3QgZmll bGRzOgo+IAo+IC0gKipjbWQqKiB2YWx1ZTogNAo+IC0gYWRkaXRpb25hbCBmaWVsZHM6Cj4gICAt ICoqaWQqKjogaWQgb2YgbGlzdGVuaW5nIHNvY2tldAo+ICAgLSAqKmlkX25ldyoqOiBpZCBvZiB0 aGUgbmV3IHNvY2tldAo+ICAgLSAqKnJlZioqOiBncmFudCByZWZlcmVuY2Ugb2YgdGhlIGluZGV4 ZXMgcGFnZQo+ICAgLSAqKmV2dGNobioqOiBwb3J0IG51bWJlciBvZiB0aGUgZXZ0Y2huIHRvIHNp Z25hbCBhY3Rpdml0eSBvbiB0aGUgZGF0YSByaW5nCj4gCj4gUmVxdWVzdCBiaW5hcnkgbGF5b3V0 Ogo+IAo+ICAgICA4ICAgICAgIDEyICAgICAgMTYgICAgICAyMCAgICAgIDI0ICAgICAgMjggICAg ICAzMgo+ICAgICArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0t LS0rCj4gICAgIHwgICAgICAgaWQgICAgICB8ICAgIGlkX25ldyAgICAgfCAgcmVmICB8ZXZ0Y2hu IHwKPiAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0t Kwo+IAo+IFJlc3BvbnNlIGFkZGl0aW9uYWwgZmllbGRzOgo+IAo+IC0gKippZCoqOiBpZCBvZiB0 aGUgbGlzdGVuaW5nIHNvY2tldCwgZWNob2VkIGJhY2sgZnJvbSByZXF1ZXN0Cj4gCj4gUmVzcG9u c2UgYmluYXJ5IGxheW91dDoKPiAKPiAgICAgMTYgICAgICAyMCAgICAgIDI0Cj4gICAgICstLS0t LS0tKy0tLS0tLS0rCj4gICAgIHwgICAgICAgaWQgICAgICB8Cj4gICAgICstLS0tLS0tKy0tLS0t LS0rCj4gCj4gUmV0dXJuIHZhbHVlOgo+IAo+ICAgLSAwIG9uIHN1Y2Nlc3MKPiAgIC0gU2VlIHRo ZSBbUE9TSVggYWNjZXB0IGZ1bmN0aW9uXVthY2NlcHRdIGZvciBlcnJvciBuYW1lczsgc2VlCj4g ICAgIFtFcnJvciBudW1iZXJzXSBpbiBmdXJ0aGVyIHNlY3Rpb25zLgo+IAo+IAouLnNuaXAuLgo+ ICMjIyBJbmRleGVzIFBhZ2UgYW5kIERhdGEgcmluZwo+IAo+IERhdGEgcmluZ3MgYXJlIHVzZWQg Zm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBkYXRhIG92ZXIgYSBjb25uZWN0ZWQgc29ja2V0LiBU aGV5Cj4gYXJlIGNyZWF0ZWQgdXBvbiBhIHN1Y2Nlc3NmdWwgKiphY2NlcHQqKiBvciAqKmNvbm5l Y3QqKiBjb21tYW5kLgo+IFRoZSAqKnNlbmRtc2cqKiBhbmQgKipyZWN2bXNnKiogY2FsbHMgYXJl IGltcGxlbWVudGVkIGJ5IHNlbmRpbmcgZGF0YSBhbmQKPiByZWNlaXZpbmcgZGF0YSBmcm9tIGEg ZGF0YSByaW5nLCBhbmQgdXBkYXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXhlcwo+IG9uIHRo ZSAqKmluZGV4ZXMgcGFnZSoqLgo+IAo+IEZpcnN0bHksIHRoZSAqKmluZGV4ZXMgcGFnZSoqIGlz IHNoYXJlZCBieSBhICoqY29ubmVjdCoqIG9yICoqYWNjZXB0KioKPiBjb21tYW5kLCBzZWUgKipy ZWYqKiBwYXJhbWV0ZXIgaW4gdGhlaXIgc2VjdGlvbnMuIFRoZSBjb250ZW50IG9mIHRoZQo+ICoq aW5kZXhlcyBwYWdlKiogaXMgcmVwcmVzZW50ZWQgYnkgYHN0cnVjdCBwdmNhbGxzX3JpbmdfaW50 ZmAsIHNlZQo+IGJlbG93LiBUaGUgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGdyYW50 IHJlZmVyZW5jZXMgd2hpY2gKPiBjb25zdGl0dXRlIHRoZSAqKmluKiogYW5kICoqb3V0KiogYnVm ZmVycyBvZiB0aGUgZGF0YSByaW5nLCBzZWUgcmVmW10KPiBiZWxvdy4gVGhlIGJhY2tlbmQgbWFw cyB0aGUgZ3JhbnQgcmVmZXJlbmNlcyBjb250aWd1b3VzbHkuIE9mIHRoZQo+IHJlc3VsdGluZyBz aGFyZWQgbWVtb3J5LCB0aGUgZmlyc3QgaGFsZiBpcyBkZWRpY2F0ZWQgdG8gdGhlICoqaW4qKiBh cnJheQo+IGFuZCB0aGUgc2Vjb25kIGhhbGYgdG8gdGhlICoqb3V0KiogYXJyYXkuIFRoZXkgYXJl IHVzZWQgYXMgY2lyY3VsYXIKPiBidWZmZXJzIGZvciB0cmFuc2ZlcnJpbmcgZGF0YSwgYW5kLCB0 b2dldGhlciwgdGhleSBhcmUgdGhlIGRhdGEgcmluZy4KPiAKPiAKPiAgICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICBJbmRleGVzIHBhZ2UKPiAgIHwgQ29tbWFu ZCByaW5nOiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSsKPiAgIHwgQDA6IHhlbl9wdmNhbGxzX2Nvbm5lY3Q6ICB8ICAgICAgICAgICAgICAgICB8 QDAgcHZjYWxsc19kYXRhX2ludGY6IHwKICAgICAgXi0tIFRoZSBmaXJzdCA2NCBieXRlcyBhcmUg cmVzZXJ2ZWQgZm9yIHRoZSBpbl9jb25zLCBldGMuCiAgICAgICAgICAgUGVyaGFwcyBqdXN0IHN0 YXJ0IGF0IEA2NCAoQW5kIG5hdHVyYWxseSBhZGQgdGhhdCB0byB0aGUgJ3JlZicpCgogICAgICAK PiAgIHwgQDQ0OiByZWYgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4rQDc2OiBy aW5nX29yZGVyID0gMSAgIHwKPiAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICAgICB8QDgwOiByZWZbMF0rICAgICAgICAgIHwKPiAgICstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICB8QDg0OiByZWZbMV0rICAgICAgICAgIHwKPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg ICB8ICAgICAgICAgIHwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwKPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdiAoZGF0YSByaW5nKQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArLS0tLS0tLSstLS0tLS0tLS0tLSsKPiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgQDAtPjQwOTg6IGluICAgICB8 Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg IHJlZlswXSAgICAgICAgICAgfAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLXwKPiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgQDQwOTktPjgxOTY6IG91dCB8 Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg IHJlZlsxXSAgICAgICAgICAgfAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiAgCj4gCgpUaGFuayB5b3Uh Cgo+ICMjIyMgSW5kZXhlcyBQYWdlIFN0cnVjdHVyZQo+IAo+ICAgICB0eXBlZGVmIHVpbnQzMl90 IFBWQ0FMTFNfUklOR19JRFg7Cj4gCj4gICAgIHN0cnVjdCBwdmNhbGxzX2RhdGFfaW50ZiB7Cj4g ICAgIAlQVkNBTExTX1JJTkdfSURYIGluX2NvbnMsIGluX3Byb2Q7Cj4gICAgIAlpbnQzMl90IGlu X2Vycm9yOwoKWW91IGRvbid0IHdhbnQgdG8gcGVyaGFwcyBpbmNsdWRlIGluX2V2ZW50Pwo+IAo+ ICAgICAJdWludDhfdCBwYWRbNTJdOwo+IAo+ICAgICAJUFZDQUxMU19SSU5HX0lEWCBvdXRfY29u cywgb3V0X3Byb2Q7Cj4gICAgIAlpbnQzMl90IG91dF9lcnJvcjsKCkFuZCBvdXRfZXZlbnQgYXMg d2F5IHRvIGRvIHNvbWUgZm9ybSBvZiBpbnRlcnJ1cHQgbWl0aWdhdGlvbgooc2ltaWxhciB0byB3 aGF0IHlvdSBoYWQgcHJvcG9zZWQ/KQoKPiAKPiAgICAgCXVpbnQzMl90IHJpbmdfb3JkZXI7Cj4g ICAgIAlncmFudF9yZWZfdCByZWZbXTsKPiAgICAgfTsKPiAKPiAgICAgLyogbm90IGFjdHVhbGx5 IEMgY29tcGxpYW50IChyaW5nX29yZGVyIGNoYW5nZXMgZnJvbSBzb2NrZXQgdG8gc29ja2V0KSAq Lwo+ICAgICBzdHJ1Y3QgcHZjYWxsc19kYXRhIHsKPiAgICAgICAgIGNoYXIgaW5bKCgxPDxyaW5n X29yZGVyKTw8UEFHRV9TSElGVCkvMl07Cj4gICAgICAgICBjaGFyIG91dFsoKDE8PHJpbmdfb3Jk ZXIpPDxQQUdFX1NISUZUKS8yXTsKPiAgICAgfTsKPiAKPiAtICoqcmluZ19vcmRlcioqCj4gICBJ dCByZXByZXNlbnRzIHRoZSBvcmRlciBvZiB0aGUgZGF0YSByaW5nLiBUaGUgZm9sbG93aW5nIGxp c3Qgb2YgZ3JhbnQKPiAgIHJlZmVyZW5jZXMgaXMgb2YgYCgxIDw8IHJpbmdfb3JkZXIpYCBlbGVt ZW50cy4gSXQgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbgo+ICAgKiptYXgtcGFnZS1vcmRlcioqLCBh cyBzcGVjaWZpZWQgYnkgdGhlIGJhY2tlbmQgb24gWGVuQnVzLiBJdCBoYXMgdG8KPiAgIGJlIG9u ZSBhdCBtaW5pbXVtLgoKT2g/IFdoeSBub3QgemVybz8gKDRLQikgYXMgdGhlICdtYXgtcGFnZS1v cmRlcicgaGFzIGFuIGV4YW1wbGUgb2YgemVybyBvcmRlcj8KUGVyaGFwcyBpZiBpdCBNVVNUIGJl IG9uZSBvciBtb3JlIHRoZW4gdGhlICdtYXgtcGFnZS1vcmRlcicgc2hvdWxkIHNheQp0aGF0IGF0 IGxlYXN0IGl0IE1VU1QgYmUgb25lPwoKCj4gLSAqKnJlZltdKioKPiAgIFRoZSBsaXN0IG9mIGdy YW50IHJlZmVyZW5jZXMgd2hpY2ggd2lsbCBjb250YWluIHRoZSBhY3R1YWwgZGF0YS4gVGhleSBh cmUKPiAgIG1hcHBlZCBjb250aWd1b3NseSBpbiB2aXJ0dWFsIG1lbW9yeS4gVGhlIGZpcnN0IGhh bGYgb2YgdGhlIHBhZ2VzIGlzIHRoZQo+ICAgKippbioqIGFycmF5LCB0aGUgc2Vjb25kIGhhbGYg aXMgdGhlICoqb3V0KiogYXJyYXkuIFRoZSBhcnJheXMgbXVzdAo+ICAgaGF2ZSBhIHBvd2VyIG9m IHR3byBzaXplLiBUb2dldGhlciwgdGhlaXIgc2l6ZSBpcyBgKDEgPDwgcmluZ19vcmRlcikgKgo+ ICAgUEFHRV9TSVpFYC4KPiAtICoqaW4qKiBpcyBhbiBhcnJheSB1c2VkIGFzIGNpcmN1bGFyIGJ1 ZmZlcgo+ICAgSXQgY29udGFpbnMgZGF0YSByZWFkIGZyb20gdGhlIHNvY2tldC4gVGhlIHByb2R1 Y2VyIGlzIHRoZSBiYWNrZW5kLCB0aGUKPiAgIGNvbnN1bWVyIGlzIHRoZSBmcm9udGVuZC4KPiAt ICoqb3V0KiogaXMgYW4gYXJyYXkgdXNlZCBhcyBjaXJjdWxhciBidWZmZXIKPiAgIEl0IGNvbnRh aW5zIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgc29ja2V0LiBUaGUgcHJvZHVjZXIgaXMgdGhl IGZyb250ZW5kLAo+ICAgdGhlIGNvbnN1bWVyIGlzIHRoZSBiYWNrZW5kLgo+IC0gKippbl9jb25z KiogYW5kICoqaW5fcHJvZCoqCj4gICBDb25zdW1lciBhbmQgcHJvZHVjZXIgaW5kZXhlcyBmb3Ig ZGF0YSByZWFkIGZyb20gdGhlIHNvY2tldC4gVGhleSBrZWVwIHRyYWNrCj4gICBvZiBob3cgbXVj aCBkYXRhIGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQgYnkgdGhlIGZyb250ZW5kIGZyb20gdGhl ICoqaW4qKgo+ICAgYXJyYXkuICoqaW5fcHJvZCoqIGlzIGluY3JlYXNlZCBieSB0aGUgYmFja2Vu ZCwgYWZ0ZXIgd3JpdGluZyBkYXRhIHRvICoqaW4qKi4KPiAgICoqaW5fY29ucyoqIGlzIGluY3Jl YXNlZCBieSB0aGUgZnJvbnRlbmQsIGFmdGVyIHJlYWRpbmcgZGF0YSBmcm9tICoqaW4qKi4KPiAt cmluZy1wYWdlLW9yZGVyCgo/Pz8gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4u b3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK