LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQpIYXNoOiBSSVBFTUQxNjAKCk9uIEZy aSwgMTEgSmFuIDIwMTMgMDg6NDk6MzAgKzAwMDAKTHVpcyBNb3JlaXJhIDxsdWlzLm1vcmVpcmEx NTc1QGdvb2dsZW1haWwuY29tPiB3cm90ZToKCj4gVGhpcyBpcyB3aGF0IEkgY2FtZSB1cCB3aXRo IGFzIGEgc3lzdGVtIGFuZCBhbHNvIHJlZ2FyZGluZyB0aGUKPiBhbmFsb2d1ZSBzZW5zb3JzIGNv bm5lY3RlZCB0byB0aGUgQURDIG1vZHVsZSwgYXQgdGhlIG1vbWVudCBpIGhhdmUgbm8KPiBjb2Rl IGp1c3QgdGhlIGNvbmNlcHQgb2YgaXQ6Cj4gCj4gLSBUaGUgc2Vuc29yKHMpIGFyZSBwaHlzaWNh bGx5IGF0dGFjaGVkIHRvIHRoZSBsb2NhbCBBREMgYWx0aG91Z2gKPiBsYXRlciBJIG1heSB3YW50 IHRvIG1ha2UgdGhlbSByZW1vdGUsIGJ1dCBsZXRzIG5vdCBjb21wbGljYXRlIHRoaW5ncwo+IGF0 IHRoZSBtb21lbnQuCj4gLSBJIGNhbGxlZCB0aGUgc3lzdGVtIGEgbW9kdWxlLCB0aGUgbW9kdWxl IGNvbW11bmljYXRlcyB3aXRoIHRoZSBQQwo+IHZpYSB0aGUgVVNBUlQgdXNpbmcgYSBwYWNrZXQg c3lzdGVtIHdoaWNoIEkgYWxyZWFkeSBoYXZlIHdvcmtpbmcgYnV0Cj4gbm90IGRvaW5nIG11Y2gu Cj4gLSBJIGNyZWF0ZWQgYW4gYWRjX1N1Yk1vZHVsZS4KPiAtIHRoZSBtb2R1bGUgd2lsbCBoYXZl IGFuIDhiaXQgImFkZHJlc3MiIGZvciB0aGUgbW9tZW50Lgo+IC0gdGhlIFN1YiBtb2R1bGVzIHdp bGwgaGF2ZSBhbHNvIGFuIDhiaXQgImFkZHJlc3MuCj4gLSB0aGUgbG9naWNhbCBzZW5zb3IgaXMg aWRlbnRpZmllZCBieSBhIG51bWJlciB3aGljaCBhdCB0aGlzIHBvaW50Cj4gd2lsbCBiZSBwcmVk ZWZpbmVkLgo+IAo+IFRvIHN0YXJ0IHdpdGggdGhlcmUgd2lsbCBub3QgYmUgY29uZmlndXJhdGlv biBvbiB0aGUgZmx5LAo+IGNvbmZpZ3VyYXRpb24gYW5kIGluaXRpYWxpc2F0aW9uIG9mIHRoZSBB REMgd2lsbCBiZSBkb25lIGF0IHN0YXJ0dXAKPiBhbmQgc2Vuc29ycyBjcmVhdGVkIGF0IHRoZSBz dGFydHVwIHRvby4KCkRvIHlvdSBuZWVkIHRvIGludGVycHJldCBzZW5zb3IgdmFsdWVzIG9uIHRo ZSBNQ1U/IElmIG5vdCwganVzdCBwYXNzCnRoZW0gYXMgcmF3IHJlYWRpbmdzIHRvIHRoZSBQQyBh bmQgbGV0IGl0IHVuZGVyc3RhbmQgd2hhdCB0eXBlIG9mCnNlbnNvciBpcyBwbHVnZ2VkIGludG8g ZWFjaCBwaW4gYW5kIGNvbnZlcnQgaGUgdmFsdWVzCmFwcHJvcHJpYXRlbHnigJRub3RoaW5nIHRv IGJlIGRvbmUgaW4gdGhlIE1DVSBjb2RlLgoKSWYgeW91IGRvIG5lZWQgdG8gaW50ZXJwcmV0IHNl bnNvciB2YWx1ZXMgb24gdGhlIE1DVSwgaXQgc291bmRzIGxpa2UKeW914oCZcmUgcHJvYmFibHkg bG9va2luZyBmb3IgYSBiYXNpYyBvYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1pbmcKcGFyYWRpZ20s IHdoaWNoIGNhbiBiZSBkb25lIHF1aXRlIGVhc2lseSBpbiBDLiBIZXJl4oCZcyB3aGF0IHlvdSBk bzoKCkRpdmlkZSBib3RoIHlvdXIgZGF0YSBhbmQgZnVuY3Rpb25hbGl0eSBpbnRvIHRoYXQgd2hp Y2g6CigxKSBpcyBleGFjdGx5IHRoZSBzYW1lIGZvciBhbGwgc2Vuc29ycywKKDIpIGlzIHRoZSBz YW1lIGZvciBhbGwgc2Vuc29ycyBvZiB0aGUgc2FtZSB0eXBlIChzYXksIG1vZGVsIG51bWJlcikK YnV0IGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IHR5cGVzIG9yIHNlbnNvciAoZS5nLiBhIG1hcHBp bmcgZnVuY3Rpb24gdG8KY29udmVydCBmcm9tIEFEQyByZWFkaW5ncyB0byB1c2VmdWwgaHVtYW4t cmVhZGFibGUgdW5pdHMsIG9yIGEgc3RyaW5nCmNvbnRhaW5pbmcgdGhlIHR5cGUgb2Ygc2Vuc29y IGZvciBkaXNwbGF5KSwgYW5kCigzKSBpcyBkaWZmZXJlbnQgZm9yIGVhY2ggaW5kaXZpZHVhbCBz ZW5zb3IsIGJ1dCBleGlzdHMgYWNyb3NzIGFsbApzZW5zb3IgdHlwZXMgKGUuZy4gaGlnaCBhbmQg bG93IGFsYXJtIGxldmVscywgc3RyaW5nIG5hbWUgb2Ygd2hhdCB0aGUKc2Vuc29yIGlzIG1lYXN1 cmluZ+KAlHlvdSB3aWxsIHVzdWFsbHksIGJ1dCBub3QgbmVjZXNzYXJpbHksIG5vdCBoYXZlCmZ1 bmN0aW9ucyBoZXJlLCBvbmx5IGRhdGEpLCBhbmQKKDQpIGlzIGRpZmZlcmVudCBmb3IgZWFjaCBp bmRpdmlkdWFsIHNlbnNvciBhbmQgbWF5IG5vdCBldmVuIGV4aXN0IGZvcgpzb21lIHNlbnNvciAo ZS5nLiBjYWxpYnJhdGlvbiB2YWx1ZXMpLgoKRm9yIHN0dWZmIGluIGNhdGVnb3J5IDEsIHRoaXMg cmVhbGx5IGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIHNlbnNvcnMKdGhlbXNlbHZlcy4gTm90 IHRhbGtpbmcgYWJvdXQgdGhhdCBmdXJ0aGVyLgoKRm9yIHN0dWZmIGluIGNhdGVnb3J5IDIsIGRl ZmluZSBhIHN0cnVjdCB0eXBlIHRoYXQgY29udGFpbnMgYWxsIHRob3NlCnRoaW5ncy4gRm9yIGVh Y2ggdmFyaWFibGUgd2hvc2UgdmFsdWUgZGlmZmVycyBiZXR3ZWVuIHR5cGVzIG9mIHNlbnNvcnMs CnB1dCBhIHZhcmlhYmxlIGluIHRoZSBzdHJ1Y3QuIEZvciBlYWNoIGZ1bmN0aW9uIHRoYXQgbmVl ZHMgdG8gYmUKaW1wbGVtZW50ZWQgZGlmZmVyZW50bHkgKGUuZy4g4oCcY29udmVydF9hZGNfdG9f cHJpbnRhYmxl4oCdKSBiZXR3ZWVuCnNlbnNvciB0eXBlcywgcHV0IGEgZnVuY3Rpb24gcG9pbnRl ciBpbiB0aGUgc3RydWN0LiBJdOKAmXMgcHJvYmFibHkgYQpnb29kIGlkZWEgdG8gaW5jbHVkZSBh biBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBoZXJlIHRvby4gVGhpcyBpcyBjYWxsZWQKdGhlIOKA nGNsYXNzIHN0cnVjdOKAnSBvciDigJxvcHMgc3RydWN04oCdLiBJbiB0aGlzIGNhc2UsIHlvdSB3 b3VsZCBoYXZlIGp1c3QKb25lIHN0cnVjdCB0eXBlLCDigJxzdHJ1Y3Qgc2Vuc29yX29wcyB7IHZv aWQgKCppbml0X3NlbnNvcikoc3RydWN0CnNlbnNvciAqc2Vuc29yKTsgdm9pZCAoKmFkY190b19w cmludGFibGUpKHN0cnVjdCBzZW5zb3IgKnNlbnNvciwKdWludDE2X3QgYWRjLCBjaGFyICpzdHJp bmdfYnVmZmVyKTsgLyogbW9yZSBzdHVmZiAqLyB9O+KAnS4KCkZvciBzdHVmZiBpbiBjYXRlZ29y eSAzLCBkZWZpbmUgYSBzdHJ1Y3QgdHlwZSB0aGF0IGNvbnRhaW5zIGFsbCB0aG9zZQp0aGluZ3Ms IHBsdXMgYSB2YXJpYWJsZSBvZiB0eXBlIOKAnGNvbnN0IHN0cnVjdCBzZW5zb3Jfb3BzICrigJ0g KGNhbGxlZArigJxvcHPigJ0pLCBwbHVzIGEgdmFyaWFibGUgb2YgdHlwZSDigJx2b2lkICrigJ0g KGNhbGxlZCDigJxwcml2YXRl4oCdKS4gSW4gdGhpcwpjYXNlLCB5b3Ugd291bGQgaGF2ZSBqdXN0 IG9uZSBzdHJ1Y3QgdHlwZSwg4oCcc3RydWN0IHNlbnNvciB7IGNvbnN0CnN0cnVjdCBzZW5zb3Jf b3BzICpvcHM7IHZvaWQgKnByaXZhdGU7IHVpbnQ4X3QgYWRjX2NoYW5uZWw7IC8qIG1vcmUKc3R1 ZmYgKi8gfTvigJ0uCgpOb3cgd3JpdGUgYSAuYyBmaWxlIGFuZCBhIC5oIGZpbGUgZm9yIGVhY2gg bW9kZWwgb2Ygc2Vuc29yIChzYXksCuKAnHRoZXJtaXN0b3IuY+KAnSBhbmQg4oCcdGhlcm1pc3Rv ci5o4oCdKS4KCkluIHRoZSAuaCBmaWxlIGZvciBhIHNlbnNvciBtb2RlbCwgaW5jbHVkZSBhIGRl ZmluaXRpb24gb2YgdGhlIHNlbnNvcuKAmXMKcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSB3aGljaCBo b2xkcyBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byBlYWNoIHNlbnNvcgooZS5nLiDigJxzdHJ1Y3Qg dGhlcm1pc3Rvcl9wcml2YXRlIHsgdWludDE2X3QgZmlsdGVyX2RhdGFbOF07IH074oCdKS4gSWYK aXQgZG9lc27igJl0IG5lZWQgYW55IHN1Y2ggZGF0YSwgdXNlIGFuIGVtcHR5IHN0cnVjdC4gQWxz byBpbmNsdWRlIGFuCmV4dGVybiBkZWNsYXJhdGlvbiBvZiB0aGUgb3BzIHN0cnVjdHVyZSBmb3Ig dGhlIHNlbnNvciwgZS5nLiDigJxleHRlcm4KY29uc3Qgc3RydWN0IHNlbnNvcl9vcHMgdGhlcm1p c3Rvcl9vcHM74oCdLgoKSW4gdGhlIC5jIGZpbGUgZm9yIGEgc2Vuc29yIG1vZGVsLCB3cml0ZSBh IGZ1bmN0aW9uICh3aGljaCBzaG91bGQgYmUK4oCcc3RhdGlj4oCd4oCUdGhhdCBpcywgbm90IGV4 cG9ydGVkIGZyb20gdGhlIGZpbGUpIGZvciBlYWNoIGZ1bmN0aW9uIGluCmNhdGVnb3J5IDI7IGlu IHRoaXMgY2FzZSwgc2F5LCDigJxzdGF0aWMgdm9pZAp0aGVybWlzdG9yX2FkY190b19wcmludGFi bGUoY29uc3Qgc3RydWN0IHNlbnNvciAqc2Vuc29yLCB1aW50MTZfdCBhZGMsCmNoYXIgKnN0cmlu Z19idWZmZXIpIHsgLyogaW1wbGVtZW50IHRoaXMgc3VpdGFibGUgZm9yIHRoZXJtaXN0b3JzCiov IH3igJ0uIFVuZGVyIHRoZXNlIGZ1bmN0aW9ucywgZGVmaW5lIG9uZSBzaW5nbGUgZ2xvYmFsIGlu c3RhbmNlIG9mCnN0cnVjdCBzZW5zb3Jfb3BzLCBsaWtlIHNvOiDigJxjb25zdCBzdHJ1Y3Qgc2Vu c29yX29wcyB0aGVybWlzdG9yX29wcyA9CnsgJnRoZXJtaXN0b3JfYWRjX3RvX3ByaW50YWJsZSwg LyogbW9yZSBzdHVmZiAqLyB9O+KAnS4gQXMgYW4gZXhhbXBsZSwKdGhlcm1pc3Rvcl9pbml0IG1p Z2h0IGxvb2sgbGlrZSB0aGlzLCBpZiBhbGwgaXQgbmVlZHMgdG8gZG8gaXMgY2xlYXIKdGhlIGZp bHRlciBkYXRhLCBzaG93aW5nIGhvdyB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSBpcyB1c2Vk OgoKc3RhdGljIHZvaWQgdGhlcm1pc3Rvcl9pbml0KHN0cnVjdCBzZW5zb3IgKnNlbnNvcikgewoJ LyogR2V0IGFjY2VzcyB0byB0aGUgdGhlcm1pc3Rvcl9wcml2YXRlIGZvciBUSElTIFNFTlNPUi4g Ki8KCXN0cnVjdCB0aGVybWlzdG9yX3ByaXZhdGUgKnByaXYgPSBzZW5zb3ItPnByaXZhdGU7Cgkv KiBDbGVhciB0aGUgZmlsdGVyIGRhdGEuICovCgltZW1zZXQocHJpdi0+ZmlsdGVyX2RhdGEsIDAs IHNpemVvZihwcml2LT5maWx0ZXJfZGF0YSkpOwp9CgpGaW5hbGx5LCBpbiBzb21lIG90aGVyIC5j IGZpbGUgKHBlcmhhcHMgeW91ciBtYWluIGZpbGUsIG9yIHBlcmhhcHMgYQpzZXBhcmF0ZSBmaWxl IGRlZGljYXRlZCBqdXN0IHRvIHRoaXMgcHVycG9zZSksIHlvdSBuZWVkIHRvIGRlZmluZSB3aGF0 CnNlbnNvcnMgYXJlIG9uIHRoaXMgYm9hcmQuIEFzc3VtZSB0aGF0IG9uIHRoaXMgYm9hcmQgdGhl cmUgYXJlIHR3bwp0aGVybWlzdG9ycyBvbiBBREMgY2hhbm5lbHMgMCBhbmQgMSwgYSBmbG93IHNl bnNvciBvbiBjaGFubmVsIDIsIGFuZCBhCnByZXNzdXJlIHNlbnNvciBvbiBjaGFubmVsIDMuIFlv dSB3b3VsZCB3cml0ZSBzb21ldGhpbmcgbGlrZSB0aGlzIGluCnlvdXIgYm9hcmQgZGVmaW5pdGlv biAuYyBmaWxlOgoKI2luY2x1ZGUgImZsb3cuaCIKI2luY2x1ZGUgInByZXNzdXJlLmgiCiNpbmNs dWRlICJ0aGVybWlzdG9yLmgiCgpzdGF0aWMgc3RydWN0IHRoZXJtaXN0b3JfcHJpdmF0ZSBzZW5z b3IwX3ByaXYsIHNlbnNvcjFfcHJpdjsKc3RhdGljIHN0cnVjdCBmbG93X3ByaXZhdGUgc2Vuc29y Ml9wcml2OwpzdGF0aWMgc3RydWN0IHByZXNzdXJlX3ByaXZhdGUgc2Vuc29yM19wcml2OwoKc3Ry dWN0IHNlbnNvciBzZW5zb3JzW05VTV9TRU5TT1JTXSA9IHsKCXsKCQkvKiBvcHMgKi8gJnRoZXJt aXN0b3Jfb3BzLAoJCS8qIHByaXZhdGUgKi8gJnNlbnNvcjBfcHJpdiwKCQkvKiBhZGNfY2hhbm5l bCAqLyAwLAoJCS8qIG1vcmUgc3R1ZmYgKi8KCX0sCgl7CgkJLyogb3BzICovICZ0aGVybWlzdG9y X29wcywKCQkvKiBwcml2YXRlICovICZzZW5zb3IxX3ByaXYsCgkJLyogYWRjX2NoYW5uZWwgKi8g MSwKCQkvKiBtb3JlIHN0dWZmICovCgl9LAoJewoJCS8qIG9wcyAqLyAmZmxvd19vcHMsCgkJLyog cHJpdmF0ZSAqLyAmc2Vuc29yMl9wcml2LAoJCS8qIGFkY19jaGFubmVsICovIDIsCgkJLyogbW9y ZSBzdHVmZiAqLwoJfSwKCXsKCQkvKiBvcHMgKi8gJnByZXNzdXJlX29wcywKCQkvKiBwcml2YXRl ICovICZzZW5zb3IzX3ByaXYsCgkJLyogYWRjX2NoYW5uZWwgKi8gMywKCQkvKiBtb3JlIHN0dWZm ICovCgl9LAp9OwoKCkZpbmFsbHksIGluIHlvdXIgbWFpbiBjb2RlLCB0byBlLmcuIGluaXRpYWxp emUgYWxsIHlvdXIgc2Vuc29ycywgeW91Cmp1c3QgZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKCmZv ciAodWludDhfdCBpID0gMDsgaSA8IE5VTV9TRU5TT1JTOyArK2kpIHsKCXNlbnNvcnNbaV0ub3Bz LT5pbml0KCZzZW5zb3JzW2ldKTsKfQoKT3IgdG8gcmVhZCB0aGVtIGFuZCBzaG93IGh1bWFuLXJl YWRhYmxlIHN0cmluZ3Mgb24gYW4gTENELCB5b3UgbWlnaHQgZG8KdGhpczoKCmZvciAodWludDhf dCBpID0gMDsgaSA8IE5VTV9TRU5TT1JTOyArK2kpIHsKCXVpbnQxNl90IGFkY192YWx1ZSA9IHJl YWRfYWRjKHNlbnNvcnNbaV0uYWRjX2NoYW5uZWwpOwoJY2hhciBidWZmZXJbMzJdOwoJc2Vuc29y c1tpXS5vcHMtPmFkY190b19wcmludGFibGUoJnNlbnNvcnNbaV0sIGFkY192YWx1ZSwKCWJ1ZmZl cik7CglwcmludF90b19sY2QoYnVmZmVyKTsKfQoKT3Igd2hhdGV2ZXIgeW91IHdhbnQhCgpUaGVy ZSBhcmUgc29tZSB2YXJpYXRpb25zIHBvc3NpYmxlLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQg dG8gZ2V0IHJpZApvZiBzb21lIGluZGlyZWN0aW9uIGFuZCBpbXByb3ZlIGNvZGUgc3BlZWQgYXQg dGhlIHByaWNlIG9mIGEgYml0IG9mCm1lbW9yeSwgaW5zdGVhZCBvZiBoYXZpbmcgYSB2b2lkKiBw cml2YXRlIHlvdSBjYW4gaGF2ZSBhIHVuaW9uIHdpdGggYWxsCnRoZSBwcml2YXRlIHN0cnVjdHMg aW4gaXTigJRub3cgaW5zdGVhZCBvZiBoYXZpbmcgdG8gZm9sbG93IHRoZSBwb2ludGVyLAp5b3Ug anVzdCBwdXQgdGhlIHVuaW9uIGRpcmVjdGx5IGluc2lkZSBzdHJ1Y3Qgc2Vuc29yOyB0aGUgZG93 bnNpZGUgaXMKZXZlbiBpZiBhIHBhcnRpY3VsYXIgc2Vuc29yIGhhcyBhIHJlYWxseSBzbWFsbCBw cml2YXRlIHN0cnVjdCwgaXQKY29udGFpbnMgdGhlIHdob2xlIHVuaW9uIHNvIGl0IHdpbGwgYmUg YXMgYmlnIGFzIHRoZSBiaWdnZXN0IHByaXZhdGUKc3RydWN0LiBZb3UgY2FuIGFsc28gbGVhdmUg b3V0IGFueSBvZiB0aGUgYml0cyB0aGF0IHlvdSBkb27igJl0IG5lZWQgaW4KeW91ciBlbnZpcm9u bWVudCwgb2YgY291cnNlLCBhbmQgaW4gYSBIYXJ2YXJkIGVudmlyb25tZW50IGxpa2UgYSBQSUMg aXQKbWF5IHRha2Ugc29tZSB0aGlua2luZyB0byBmaWd1cmUgb3V0IHdoaWNoIGJpdHMgYW5kIHBp ZWNlcyBzaG91bGQgYmUgaW4KUk9NIChoaW50OiB0aGUgb3BzIHN0cnVjdHMpIGFuZCB3aGljaCBz aG91bGQgYmUgaW4gUkFNIChoaW50Ogpwcm9iYWJseSBldmVyeXRoaW5nIGVsc2UpIGFuZCBnZXQg dGhlIHBvaW50ZXJzIGJldHdlZW4gdGhlbSB3b3JraW5nCnJpZ2h0LiBBbHRob3VnaCB5b3UgKmNv dWxkKiBpbiB0aGVvcnkgZXZlbiBzcGxpdCB0aGUgc3RydWN0IHNlbnNvciBpbnRvCnR3byBzdHJ1 Y3RzLCBvbmUgb2Ygd2hpY2ggbGl2ZXMgaW4gUkFNIGFuZCBvbmUgaW4gUk9NLiBMb3RzIG9mIG9w dGlvbnMhCgpDaHJpcwotLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLQpWZXJzaW9uOiBHbnVQ RyB2Mi4wLjE5IChHTlUvTGludXgpCgppRVlFQVJFREFBWUZBbER2NDEwQUNna1FYVUY2aE9UR1A3 ZU5ad0NnaXo3WDRjSitSTE40N2x4YzQ2azF6eHlTCm5UUUFvSnlPbWdjVWxHU0M4ejRUaU5lT3Fu a2NBeFRxCj1tQ3EvCi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQoKLS0gCmh0dHA6Ly93d3cu cGljbGlzdC5jb20gUElDL1NYIEZBUSAmIGxpc3QgYXJjaGl2ZQpWaWV3L2NoYW5nZSB5b3VyIG1l bWJlcnNoaXAgb3B0aW9ucyBhdApodHRwOi8vbWFpbG1hbi5taXQuZWR1L21haWxtYW4vbGlzdGlu Zm8vcGljbGlzdAo= .